diff options
author | Akshay Deep <akshaydeepiitr@gmail.com> | 2017-06-19 11:34:48 +0530 |
---|---|---|
committer | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2017-07-06 14:36:55 +0200 |
commit | 800ac37021e3f8859a52c5eebca261a5d3bc5a11 (patch) | |
tree | e6c02dd05ce901f839d371e6290b3e78a4aad0ca /sfx2 | |
parent | 47b8034efc33a1c022d4a1f8385e3739aca86442 (diff) |
GSoC: Recent Charaters Toolbar Dropdown Control
Change-Id: Ib04d26fa5556e5c32db6799c16d0bbedc45504ec
Reviewed-on: https://gerrit.libreoffice.org/38944
Reviewed-by: Akshay Deep <akshaydeepiitr@gmail.com>
Tested-by: Akshay Deep <akshaydeepiitr@gmail.com>
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/Library_sfx.mk | 3 | ||||
-rw-r--r-- | sfx2/UIConfig_sfx.mk | 1 | ||||
-rw-r--r-- | sfx2/sdi/sfx.sdi | 18 | ||||
-rw-r--r-- | sfx2/source/control/charmapcontrol.cxx | 192 | ||||
-rw-r--r-- | sfx2/source/control/charwin.cxx | 213 | ||||
-rw-r--r-- | sfx2/source/dialog/charmappopup.cxx | 47 | ||||
-rw-r--r-- | sfx2/uiconfig/ui/charmapcontrol.ui | 236 |
7 files changed, 710 insertions, 0 deletions
diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk index 16f52bab5b57..75755fb7d3bf 100644 --- a/sfx2/Library_sfx.mk +++ b/sfx2/Library_sfx.mk @@ -161,6 +161,8 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\ sfx2/source/control/emojiview \ sfx2/source/control/emojicontrol \ sfx2/source/control/emojipopup \ + sfx2/source/control/charmapcontrol \ + sfx2/source/control/charwin \ sfx2/source/control/unoctitm \ sfx2/source/dialog/alienwarn \ sfx2/source/dialog/backingcomp \ @@ -168,6 +170,7 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\ sfx2/source/dialog/basedlgs \ sfx2/source/dialog/checkin \ sfx2/source/dialog/dialoghelper \ + sfx2/source/dialog/charmappopup \ sfx2/source/dialog/dinfdlg \ sfx2/source/dialog/dockwin \ sfx2/source/dialog/documentfontsdialog \ diff --git a/sfx2/UIConfig_sfx.mk b/sfx2/UIConfig_sfx.mk index c976d89369cd..b62db558fb6b 100644 --- a/sfx2/UIConfig_sfx.mk +++ b/sfx2/UIConfig_sfx.mk @@ -13,6 +13,7 @@ $(eval $(call gb_UIConfig_add_uifiles,sfx,\ sfx2/uiconfig/ui/alienwarndialog \ sfx2/uiconfig/ui/bookmarkdialog \ sfx2/uiconfig/ui/bookmarkmenu \ + sfx2/uiconfig/ui/charmapcontrol \ sfx2/uiconfig/ui/checkin \ sfx2/uiconfig/ui/cmisinfopage \ sfx2/uiconfig/ui/cmisline \ diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi index c69d7699410b..a9d281bd2089 100644 --- a/sfx2/sdi/sfx.sdi +++ b/sfx2/sdi/sfx.sdi @@ -247,6 +247,24 @@ SfxStringItem AddDirect SID_NEWDOCDIRECT ] +SfxVoidItem CharmapControl SID_CHARMAP_CONTROL + +[ + AutoUpdate = FALSE, + FastCall = TRUE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + + AccelConfig = FALSE, + MenuConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_SPECIAL; +] + + SfxVoidItem AddressBookSource SID_TEMPLATE_ADDRESSBOKSOURCE () [ diff --git a/sfx2/source/control/charmapcontrol.cxx b/sfx2/source/control/charmapcontrol.cxx new file mode 100644 index 000000000000..8a2af88d63c0 --- /dev/null +++ b/sfx2/source/control/charmapcontrol.cxx @@ -0,0 +1,192 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <comphelper/propertysequence.hxx> +#include <comphelper/dispatchcommand.hxx> +#include <officecfg/Office/Common.hxx> +#include <sfx2/charmapcontrol.hxx> + +using namespace css; + +SfxCharmapCtrl::SfxCharmapCtrl(sal_uInt16 nId, const css::uno::Reference< css::frame::XFrame >& rFrame) + : SfxPopupWindow(nId, "charmapctrl", "sfx/ui/charmapcontrol.ui", rFrame) +{ + get( m_pRecentCharView[0], "viewchar1" ); + get( m_pRecentCharView[1], "viewchar2" ); + get( m_pRecentCharView[2], "viewchar3" ); + get( m_pRecentCharView[3], "viewchar4" ); + get( m_pRecentCharView[4], "viewchar5" ); + get( m_pRecentCharView[5], "viewchar6" ); + get( m_pRecentCharView[6], "viewchar7" ); + get( m_pRecentCharView[7], "viewchar8" ); + get( m_pRecentCharView[8], "viewchar9" ); + get( m_pRecentCharView[9], "viewchar10" ); + get( m_pRecentCharView[10], "viewchar11" ); + get( m_pRecentCharView[11], "viewchar12" ); + get( m_pRecentCharView[12], "viewchar13" ); + get( m_pRecentCharView[13], "viewchar14" ); + get( m_pRecentCharView[14], "viewchar15" ); + get( m_pRecentCharView[15], "viewchar16" ); + get( maDlgBtn, "specialchardlg"); + + for(int i = 0; i < 16; i++) + { + m_pRecentCharView[i]->setMouseClickHdl(LINK(this,SfxCharmapCtrl, RecentClickHdl)); + m_pRecentCharView[i]->SetLoseFocusHdl(LINK(this,SfxCharmapCtrl, LoseFocusHdl)); + } + + maDlgBtn->SetClickHdl(LINK(this, SfxCharmapCtrl, OpenDlgHdl)); + + getRecentCharacterList(); + updateRecentCharControl(); +} + +SfxCharmapCtrl::~SfxCharmapCtrl() +{ + disposeOnce(); +} + + +void SfxCharmapCtrl::dispose() +{ + for(int i = 0; i < 16; i++) + m_pRecentCharView[i].clear(); + + maRecentCharList.clear(); + maRecentCharFontList.clear(); + maDlgBtn.clear(); + + SfxPopupWindow::dispose(); +} + + +void SfxCharmapCtrl::getRecentCharacterList() +{ + //retrieve recent character list + css::uno::Sequence< OUString > rRecentCharList( officecfg::Office::Common::RecentCharacters::RecentCharacterList::get() ); + for (int i = 0; i < rRecentCharList.getLength(); ++i) + { + maRecentCharList.push_back(rRecentCharList[i]); + } + + //retrieve recent character font list + css::uno::Sequence< OUString > rRecentCharFontList( officecfg::Office::Common::RecentCharacters::RecentCharacterFontList::get() ); + for (int i = 0; i < rRecentCharFontList.getLength(); ++i) + { + maRecentCharFontList.push_back(rRecentCharFontList[i]); + } +} + +void SfxCharmapCtrl::updateRecentCharControl() +{ + int i = 0; + for ( std::deque< OUString >::iterator it = maRecentCharList.begin(), it2 = maRecentCharFontList.begin(); + it != maRecentCharList.end() || it2 != maRecentCharFontList.end(); + ++it, ++it2, i++) + { + m_pRecentCharView[i]->SetText(*it); + vcl::Font rFont = m_pRecentCharView[i]->GetControlFont(); + rFont.SetFamilyName( *it2 ); + m_pRecentCharView[i]->SetFont(rFont); + m_pRecentCharView[i]->Show(); + } + + for(; i < 16 ; i++) + { + m_pRecentCharView[i]->SetText(OUString()); + m_pRecentCharView[i]->Hide(); + } +} + +void SfxCharmapCtrl::updateRecentCharacterList(const OUString& sTitle, const OUString& rFont) +{ + auto itChar = std::find_if(maRecentCharList.begin(), + maRecentCharList.end(), + [sTitle] (const OUString & a) { return a == sTitle; }); + + auto itChar2 = std::find_if(maRecentCharFontList.begin(), + maRecentCharFontList.end(), + [rFont] (const OUString & a) { return a == rFont; }); + + // if recent char to be added is already in list, remove it + if( itChar != maRecentCharList.end() && itChar2 != maRecentCharFontList.end() ) + { + maRecentCharList.erase( itChar ); + maRecentCharFontList.erase( itChar2); + } + + if (maRecentCharList.size() == 16) + { + maRecentCharList.pop_back(); + maRecentCharFontList.pop_back(); + } + + maRecentCharList.push_front(sTitle); + maRecentCharFontList.push_front(rFont); + + css::uno::Sequence< OUString > aRecentCharList(maRecentCharList.size()); + css::uno::Sequence< OUString > aRecentCharFontList(maRecentCharFontList.size()); + + for (size_t i = 0; i < maRecentCharList.size(); ++i) + { + aRecentCharList[i] = maRecentCharList[i]; + aRecentCharFontList[i] = maRecentCharFontList[i]; + } + + std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create(comphelper::getProcessComponentContext())); + officecfg::Office::Common::RecentCharacters::RecentCharacterList::set(aRecentCharList, batch); + officecfg::Office::Common::RecentCharacters::RecentCharacterFontList::set(aRecentCharFontList, batch); + batch->commit(); + + updateRecentCharControl(); +} + + +IMPL_STATIC_LINK(SfxCharmapCtrl, LoseFocusHdl, Control&, pItem, void) +{ + pItem.Invalidate(); +} + + +IMPL_LINK(SfxCharmapCtrl, RecentClickHdl, SvxCharView*, rView, void) +{ + rView->GrabFocus(); + rView->Invalidate(); + rView->InsertCharToDoc(); + + Close(); +} + +IMPL_LINK_NOARG(SfxCharmapCtrl, OpenDlgHdl, Button*, void) +{ + Close(); + + uno::Reference< uno::XComponentContext > xContext( comphelper::getProcessComponentContext() ); + + uno::Sequence<beans::PropertyValue> aArgs(2); + aArgs[0].Name = OUString::fromUtf8("Symbols"); + aArgs[0].Value <<= OUString(); + + aArgs[1].Name = OUString::fromUtf8("FontName"); + aArgs[1].Value <<= OUString(); + //shortcut to launch dialog.. call uno command with empty arguments + comphelper::dispatchCommand(".uno:InsertSymbol", aArgs); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/source/control/charwin.cxx b/sfx2/source/control/charwin.cxx new file mode 100644 index 000000000000..9749543af6da --- /dev/null +++ b/sfx2/source/control/charwin.cxx @@ -0,0 +1,213 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <vcl/settings.hxx> +#include <vcl/builderfactory.hxx> +#include <sfx2/charwin.hxx> +#include <comphelper/propertysequence.hxx> +#include <comphelper/dispatchcommand.hxx> +#include <comphelper/processfactory.hxx> +#include <sfx2/app.hxx> + +using namespace com::sun::star; + + +SvxCharView::SvxCharView(vcl::Window* pParent) + : Control(pParent, WB_TABSTOP | WB_BORDER) + , mnY(0) +{ +} + +VCL_BUILDER_FACTORY(SvxCharView) + +void SvxCharView::MouseButtonDown( const MouseEvent& rMEvt ) +{ + Control::MouseButtonDown(rMEvt); + + if ( rMEvt.IsLeft() ) + { + if ( !(rMEvt.GetClicks() % 2) ) + { + InsertCharToDoc(); + } + + maMouseClickHdl.Call(this); + } +} + +void SvxCharView::KeyInput( const KeyEvent& rKEvt ) +{ + vcl::KeyCode aCode = rKEvt.GetKeyCode(); + + switch (aCode.GetCode()) + { + case KEY_SPACE: + case KEY_RETURN: + InsertCharToDoc(); + break; + } + Control::KeyInput(rKEvt); +} + +void SvxCharView::InsertCharToDoc() +{ + if(GetText().isEmpty()) + return; + + uno::Reference< uno::XComponentContext > xContext( comphelper::getProcessComponentContext() ); + + uno::Sequence<beans::PropertyValue> aArgs(2); + aArgs[0].Name = OUString::fromUtf8("Symbols"); + aArgs[0].Value <<= GetText(); + + aArgs[1].Name = OUString::fromUtf8("FontName"); + aArgs[1].Value <<= maFont.GetFamilyName(); + + comphelper::dispatchCommand(".uno:InsertSymbol", aArgs); +} + +void SvxCharView::Paint(vcl::RenderContext& rRenderContext, const ::tools::Rectangle&) +{ + rRenderContext.SetFont(maFont); + + const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); + const Color aWindowTextColor(rStyleSettings.GetFieldTextColor()); + Color aHighlightColor(rStyleSettings.GetHighlightColor()); + Color aHighlightTextColor(rStyleSettings.GetHighlightTextColor()); + Color aLightColor(rStyleSettings.GetLightColor()); + + const OUString aText = GetText(); + const Size aSize(GetOutputSizePixel()); + + long nAvailWidth = aSize.Width(); + long nWinHeight = GetOutputSizePixel().Height(); + + bool bGotBoundary = true; + bool bShrankFont = false; + vcl::Font aOrigFont(rRenderContext.GetFont()); + Size aFontSize(aOrigFont.GetFontSize()); + ::tools::Rectangle aBoundRect; + + for (long nFontHeight = aFontSize.Height(); nFontHeight > 0; nFontHeight -= 1) + { + if (!rRenderContext.GetTextBoundRect( aBoundRect, aText ) || aBoundRect.IsEmpty()) + { + bGotBoundary = false; + break; + } + + //only shrink in the single glyph large view mode + long nTextWidth = aBoundRect.GetWidth(); + if (nAvailWidth > nTextWidth) + break; + vcl::Font aFont(aOrigFont); + aFontSize.Height() = nFontHeight; + aFont.SetFontSize(aFontSize); + rRenderContext.SetFont(aFont); + mnY = (nWinHeight - GetTextHeight()) / 2; + bShrankFont = true; + } + + Point aPoint(2, mnY); + + if (!bGotBoundary) + aPoint.X() = (aSize.Width() - rRenderContext.GetTextWidth(aText)) / 2; + else + { + // adjust position + aBoundRect += aPoint; + + // vertical adjustment + int nYLDelta = aBoundRect.Top(); + int nYHDelta = aSize.Height() - aBoundRect.Bottom(); + if( nYLDelta <= 0 ) + aPoint.Y() -= nYLDelta - 1; + else if( nYHDelta <= 0 ) + aPoint.Y() += nYHDelta - 1; + + // centrally align glyph + aPoint.X() = -aBoundRect.Left() + (aSize.Width() - aBoundRect.GetWidth()) / 2; + } + + if (HasFocus()) + { + rRenderContext.SetFillColor(aHighlightColor); + rRenderContext.DrawRect(tools::Rectangle(Point(0, 0), Size(GetOutputSizePixel().Width(), GetOutputSizePixel().Height()))); + + rRenderContext.SetTextColor(aHighlightTextColor); + rRenderContext.DrawText(aPoint, aText); + } + else + { + rRenderContext.SetFillColor(aLightColor); + rRenderContext.DrawRect(tools::Rectangle(Point(0, 0), Size(GetOutputSizePixel().Width(), GetOutputSizePixel().Height()))); + + rRenderContext.SetTextColor(aWindowTextColor); + rRenderContext.DrawText(aPoint, aText); + } + + if (bShrankFont) + rRenderContext.SetFont(aOrigFont); +} + +void SvxCharView::setInsertCharHdl(const Link<SvxCharView*,void> &rLink) +{ + maInsertCharHdl = rLink; +} + +void SvxCharView::setMouseClickHdl(const Link<SvxCharView*,void> &rLink) +{ + maMouseClickHdl = rLink; +} + +void SvxCharView::SetFont( const vcl::Font& rFont ) +{ + long nWinHeight = GetOutputSizePixel().Height(); + maFont = vcl::Font(rFont); + maFont.SetWeight(WEIGHT_NORMAL); + maFont.SetAlignment(ALIGN_TOP); + maFont.SetFontSize(PixelToLogic(Size(0, nWinHeight / 2))); + maFont.SetTransparent(true); + Control::SetFont(maFont); + + mnY = (nWinHeight - GetTextHeight()) / 2; + + Invalidate(); +} + +Size SvxCharView::GetOptimalSize() const +{ + const vcl::Font &rFont = GetFont(); + const Size rFontSize = rFont.GetFontSize(); + long nWinHeight = LogicToPixel(rFontSize).Height() * 2; + return Size( GetTextWidth( GetText() ) + 2 * 12, nWinHeight ); +} + +void SvxCharView::Resize() +{ + Control::Resize(); + SetFont(GetFont()); +} + + +void SvxCharView::SetText( const OUString& rText ) +{ + Control::SetText( rText ); + Invalidate(); +} diff --git a/sfx2/source/dialog/charmappopup.cxx b/sfx2/source/dialog/charmappopup.cxx new file mode 100644 index 000000000000..49c047dc7ee5 --- /dev/null +++ b/sfx2/source/dialog/charmappopup.cxx @@ -0,0 +1,47 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#include <sfx2/charmappopup.hxx> +#include <sfx2/charmapcontrol.hxx> +#include <unotools/viewoptions.hxx> +#include <vcl/toolbox.hxx> + +SFX_IMPL_TOOLBOX_CONTROL(CharmapPopup, SfxVoidItem); + +CharmapPopup::CharmapPopup(sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx) + : SfxToolBoxControl(nSlotId, nId, rTbx) +{ + rTbx.SetItemBits(nId, ToolBoxItemBits::DROPDOWNONLY | rTbx.GetItemBits(nId)); +} + +CharmapPopup::~CharmapPopup() +{ +} + +VclPtr<SfxPopupWindow> CharmapPopup::CreatePopupWindow() +{ + VclPtr<SfxCharmapCtrl> pControl = VclPtr<SfxCharmapCtrl>::Create(GetSlotId(), m_xFrame); + + pControl->StartPopupMode(&GetToolBox(), FloatWinPopupFlags::GrabFocus); + + SetPopupWindow(pControl); + + return pControl; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/uiconfig/ui/charmapcontrol.ui b/sfx2/uiconfig/ui/charmapcontrol.ui new file mode 100644 index 000000000000..cc96bdc63837 --- /dev/null +++ b/sfx2/uiconfig/ui/charmapcontrol.ui @@ -0,0 +1,236 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.18.3 --> +<interface> + <requires lib="gtk+" version="3.12"/> + <object class="GtkWindow" id="charmapctrl"> + <property name="can_focus">False</property> + <property name="resizable">False</property> + <property name="destroy_with_parent">True</property> + <property name="type_hint">popup-menu</property> + <property name="skip_pager_hint">True</property> + <property name="deletable">False</property> + <child> + <object class="GtkBox" id="box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="resize_mode">queue</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Recent Characters</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkGrid" id="grid1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="row_homogeneous">True</property> + <property name="column_homogeneous">True</property> + <child> + <object class="cuilo-SvxCharView" id="viewchar1"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar2"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar4"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar3"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar12"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar11"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar10"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar9"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar5"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">4</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar6"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">5</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar7"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">6</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar8"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">7</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar13"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">4</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar14"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">5</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar15"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">6</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="cuilo-SvxCharView" id="viewchar16"> + <property name="width_request">35</property> + <property name="height_request">35</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">7</property> + <property name="top_attach">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="specialchardlg"> + <property name="label" translatable="yes">Launch Dialog</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + </object> + </child> + </object> +</interface> |