diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-05-16 14:37:20 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-05-17 09:53:50 +0200 |
commit | 52ccd8fabeea247da7077798b50a6db1da31a2eb (patch) | |
tree | cde340a99fd9e35c0cd3944e040b983ffcd8a750 /cui | |
parent | 8da2485f2ac512e68083c793b21a90238b55c1c9 (diff) |
weld SvxMainMenuOrganizerDialog
Change-Id: I157dc8054e3bd0055cc52f7c9a80066026b7033d
Reviewed-on: https://gerrit.libreoffice.org/54424
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'cui')
-rw-r--r-- | cui/source/customize/SvxMenuConfigPage.cxx | 19 | ||||
-rw-r--r-- | cui/source/customize/cfg.cxx | 153 | ||||
-rw-r--r-- | cui/source/inc/cfg.hxx | 29 | ||||
-rw-r--r-- | cui/uiconfig/ui/movemenu.ui | 105 |
4 files changed, 123 insertions, 183 deletions
diff --git a/cui/source/customize/SvxMenuConfigPage.cxx b/cui/source/customize/SvxMenuConfigPage.cxx index 9f4e2328b337..dd9fb7e71fe0 100644 --- a/cui/source/customize/SvxMenuConfigPage.cxx +++ b/cui/source/customize/SvxMenuConfigPage.cxx @@ -320,13 +320,13 @@ IMPL_LINK( SvxMenuConfigPage, GearHdl, MenuButton *, pButton, void ) if (sIdent == "gear_add") { - VclPtrInstance<SvxMainMenuOrganizerDialog> pDialog( - nullptr, GetSaveInData()->GetEntries(), nullptr, true ); + SvxMainMenuOrganizerDialog aDialog(GetFrameWeld(), + GetSaveInData()->GetEntries(), nullptr, true ); - if ( pDialog->Execute() == RET_OK ) + if (aDialog.run() == RET_OK) { - GetSaveInData()->SetEntries( pDialog->ReleaseEntries() ); - ReloadTopLevelListBox( pDialog->GetSelectedEntry() ); + GetSaveInData()->SetEntries(aDialog.ReleaseEntries()); + ReloadTopLevelListBox(aDialog.GetSelectedEntry()); GetSaveInData()->SetModified(); } } @@ -363,12 +363,11 @@ IMPL_LINK( SvxMenuConfigPage, GearHdl, MenuButton *, pButton, void ) { SvxConfigEntry* pMenuData = GetTopLevelSelection(); - VclPtrInstance<SvxMainMenuOrganizerDialog> pDialog( - this, GetSaveInData()->GetEntries(), pMenuData, false ); - - if ( pDialog->Execute() == RET_OK ) + SvxMainMenuOrganizerDialog aDialog(GetFrameWeld(), GetSaveInData()->GetEntries(), + pMenuData, false ); + if (aDialog.run() == RET_OK) { - GetSaveInData()->SetEntries( pDialog->ReleaseEntries() ); + GetSaveInData()->SetEntries(aDialog.ReleaseEntries()); ReloadTopLevelListBox(); diff --git a/cui/source/customize/cfg.cxx b/cui/source/customize/cfg.cxx index 6070a7be05ee..be9d4060d172 100644 --- a/cui/source/customize/cfg.cxx +++ b/cui/source/customize/cfg.cxx @@ -1884,18 +1884,18 @@ bool SvxConfigPage::MoveEntryData( } SvxMainMenuOrganizerDialog::SvxMainMenuOrganizerDialog( - vcl::Window* pParent, SvxEntries* entries, + weld::Window* pParent, SvxEntries* entries, SvxConfigEntry const * selection, bool bCreateMenu ) - : ModalDialog(pParent, "MoveMenuDialog", "cui/ui/movemenu.ui") + : GenericDialogController(pParent, "cui/ui/movemenu.ui", "MoveMenuDialog") , mpEntries(nullptr) , bModified(false) + , m_xMenuBox(m_xBuilder->weld_widget("namebox")) + , m_xMenuNameEdit(m_xBuilder->weld_entry("menuname")) + , m_xMenuListBox(m_xBuilder->weld_tree_view("menulist")) + , m_xMoveUpButton(m_xBuilder->weld_button("up")) + , m_xMoveDownButton(m_xBuilder->weld_button("down")) { - get(m_pMenuBox, "namebox"); - get(m_pMenuNameEdit, "menuname"); - get(m_pMoveUpButton, "up"); - get(m_pMoveDownButton, "down"); - get(m_pMenuListBox, "menulist"); - m_pMenuListBox->set_height_request(m_pMenuListBox->GetTextHeight() * 12); + m_xMenuListBox->set_size_request(-1, m_xMenuListBox->get_height_rows(12)); // Copy the entries list passed in if ( entries != nullptr ) @@ -1903,14 +1903,12 @@ SvxMainMenuOrganizerDialog::SvxMainMenuOrganizerDialog( mpEntries.reset( new SvxEntries ); for (auto const& entry : *entries) { - SvTreeListEntry* pLBEntry = - m_pMenuListBox->InsertEntry( SvxConfigPageHelper::stripHotKey( entry->GetName() ) ); - pLBEntry->SetUserData(entry); + m_xMenuListBox->append(OUString::number(reinterpret_cast<sal_uInt64>(entry)), + SvxConfigPageHelper::stripHotKey(entry->GetName()), ""); mpEntries->push_back(entry); - if (entry == selection) { - m_pMenuListBox->Select( pLBEntry ); + m_xMenuListBox->select(m_xMenuListBox->n_children() - 1); } } } @@ -1929,70 +1927,54 @@ SvxMainMenuOrganizerDialog::SvxMainMenuOrganizerDialog( pNewEntryData->SetUserDefined(); pNewEntryData->SetMain(); - pNewMenuEntry = - m_pMenuListBox->InsertEntry( SvxConfigPageHelper::stripHotKey( pNewEntryData->GetName() ) ); - m_pMenuListBox->Select( pNewMenuEntry ); - - pNewMenuEntry->SetUserData( pNewEntryData ); + m_sNewMenuEntryId = OUString::number(reinterpret_cast<sal_uInt64>(pNewEntryData)); + m_xMenuListBox->append(m_sNewMenuEntryId, + SvxConfigPageHelper::stripHotKey(pNewEntryData->GetName()), ""); + m_xMenuListBox->select(m_xMenuListBox->n_children() - 1); if (mpEntries) mpEntries->push_back(pNewEntryData); - m_pMenuNameEdit->SetText( newname ); - m_pMenuNameEdit->SetModifyHdl( - LINK( this, SvxMainMenuOrganizerDialog, ModifyHdl ) ); + m_xMenuNameEdit->set_text(newname); + m_xMenuNameEdit->connect_changed(LINK(this, SvxMainMenuOrganizerDialog, ModifyHdl)); } else { - pNewMenuEntry = nullptr; - // hide name label and textfield - m_pMenuBox->Hide(); + m_xMenuBox->hide(); // change the title - SetText( CuiResId( RID_SVXSTR_MOVE_MENU ) ); + m_xDialog->set_title(CuiResId(RID_SVXSTR_MOVE_MENU)); } - m_pMenuListBox->SetSelectHdl( - LINK( this, SvxMainMenuOrganizerDialog, SelectHdl ) ); + m_xMenuListBox->connect_changed(LINK(this, SvxMainMenuOrganizerDialog, SelectHdl)); - m_pMoveUpButton->SetClickHdl ( - LINK( this, SvxMainMenuOrganizerDialog, MoveHdl) ); - m_pMoveDownButton->SetClickHdl ( - LINK( this, SvxMainMenuOrganizerDialog, MoveHdl) ); + m_xMoveUpButton->connect_clicked(LINK( this, SvxMainMenuOrganizerDialog, MoveHdl)); + m_xMoveDownButton->connect_clicked(LINK( this, SvxMainMenuOrganizerDialog, MoveHdl)); } SvxMainMenuOrganizerDialog::~SvxMainMenuOrganizerDialog() { - disposeOnce(); } -void SvxMainMenuOrganizerDialog::dispose() -{ - m_pMenuBox.clear(); - m_pMenuNameEdit.clear(); - m_pMenuListBox.clear(); - m_pMoveUpButton.clear(); - m_pMoveDownButton.clear(); - ModalDialog::dispose(); -} - -IMPL_LINK_NOARG(SvxMainMenuOrganizerDialog, ModifyHdl, Edit&, void) +IMPL_LINK_NOARG(SvxMainMenuOrganizerDialog, ModifyHdl, weld::Entry&, void) { // if the Edit control is empty do not change the name - if (m_pMenuNameEdit->GetText().isEmpty()) + if (m_xMenuNameEdit->get_text().isEmpty()) { return; } - SvxConfigEntry* pNewEntryData = - static_cast<SvxConfigEntry*>(pNewMenuEntry->GetUserData()); + SvxConfigEntry* pNewEntryData = reinterpret_cast<SvxConfigEntry*>(m_sNewMenuEntryId.toUInt64()); + pNewEntryData->SetName(m_xMenuNameEdit->get_text()); - pNewEntryData->SetName(m_pMenuNameEdit->GetText()); - - m_pMenuListBox->SetEntryText( pNewMenuEntry, pNewEntryData->GetName() ); + const int nNewMenuPos = m_xMenuListBox->find_id(m_sNewMenuEntryId); + const int nOldSelection = m_xMenuListBox->get_selected_index(); + m_xMenuListBox->remove(nNewMenuPos); + m_xMenuListBox->insert(nNewMenuPos, m_sNewMenuEntryId, pNewEntryData->GetName(), ""); + m_xMenuListBox->select(nOldSelection); } -IMPL_LINK_NOARG( SvxMainMenuOrganizerDialog, SelectHdl, SvTreeListBox*, void ) +IMPL_LINK_NOARG(SvxMainMenuOrganizerDialog, SelectHdl, weld::TreeView&, void) { UpdateButtonStates(); } @@ -2000,71 +1982,46 @@ IMPL_LINK_NOARG( SvxMainMenuOrganizerDialog, SelectHdl, SvTreeListBox*, void ) void SvxMainMenuOrganizerDialog::UpdateButtonStates() { // Disable Up and Down buttons depending on current selection - SvTreeListEntry* selection = m_pMenuListBox->GetCurEntry(); - SvTreeListEntry* first = m_pMenuListBox->First(); - SvTreeListEntry* last = m_pMenuListBox->Last(); - - m_pMoveUpButton->Enable( selection != first ); - m_pMoveDownButton->Enable( selection != last ); + const int nSelected = m_xMenuListBox->get_selected_index(); + m_xMoveUpButton->set_sensitive(nSelected > 0); + m_xMoveDownButton->set_sensitive(nSelected != -1 && nSelected < m_xMenuListBox->n_children() - 1); } -IMPL_LINK( SvxMainMenuOrganizerDialog, MoveHdl, Button *, pButton, void ) +IMPL_LINK( SvxMainMenuOrganizerDialog, MoveHdl, weld::Button&, rButton, void ) { - SvTreeListEntry *pSourceEntry = m_pMenuListBox->FirstSelected(); - SvTreeListEntry *pTargetEntry = nullptr; - - if ( !pSourceEntry ) - { + int nSourceEntry = m_xMenuListBox->get_selected_index(); + if (nSourceEntry == -1) return; - } - if (pButton == m_pMoveDownButton) + int nTargetEntry; + + if (&rButton == m_xMoveDownButton.get()) { - pTargetEntry = SvTreeListBox::NextSibling( pSourceEntry ); + nTargetEntry = nSourceEntry + 1; } - else if (pButton == m_pMoveUpButton) + else { // Move Up is just a Move Down with the source and target reversed - pTargetEntry = pSourceEntry; - pSourceEntry = SvTreeListBox::PrevSibling( pTargetEntry ); + nTargetEntry = nSourceEntry - 1; } - if ( pSourceEntry != nullptr && pTargetEntry != nullptr ) - { - SvxConfigEntry* pSourceData = - static_cast<SvxConfigEntry*>(pSourceEntry->GetUserData()); - SvxConfigEntry* pTargetData = - static_cast<SvxConfigEntry*>(pTargetEntry->GetUserData()); - - SvxEntries::iterator iter1 = mpEntries->begin(); - SvxEntries::iterator iter2 = mpEntries->begin(); - SvxEntries::const_iterator end = mpEntries->end(); + OUString sId = m_xMenuListBox->get_id(nSourceEntry); + OUString sEntry = m_xMenuListBox->get_text(nSourceEntry); + m_xMenuListBox->remove(nSourceEntry); + m_xMenuListBox->insert(nTargetEntry, sId, sEntry, ""); + m_xMenuListBox->select(nTargetEntry); - // Advance the iterators to the positions of the source and target - while (*iter1 != pSourceData && ++iter1 != end) ; - while (*iter2 != pTargetData && ++iter2 != end) ; - - // Now swap the entries in the menu list and in the UI - if ( iter1 != end && iter2 != end ) - { - std::swap( *iter1, *iter2 ); - m_pMenuListBox->GetModel()->Move( pSourceEntry, pTargetEntry ); - m_pMenuListBox->MakeVisible( pSourceEntry ); + bModified = true; - bModified = true; - } - } - - if ( bModified ) - { - UpdateButtonStates(); - } + UpdateButtonStates(); } - SvxConfigEntry* SvxMainMenuOrganizerDialog::GetSelectedEntry() { - return static_cast<SvxConfigEntry*>(m_pMenuListBox->FirstSelected()->GetUserData()); + const int nSelected(m_xMenuListBox->get_selected_index()); + if (nSelected == -1) + return nullptr; + return reinterpret_cast<SvxConfigEntry*>(m_xMenuListBox->get_id(nSelected).toUInt64()); } SvxConfigEntry::SvxConfigEntry( const OUString& rDisplayName, diff --git a/cui/source/inc/cfg.hxx b/cui/source/inc/cfg.hxx index 63f6bf2fc123..6e6e1584685b 100644 --- a/cui/source/inc/cfg.hxx +++ b/cui/source/inc/cfg.hxx @@ -491,30 +491,29 @@ public: OUString GetSelectedDisplayName(); }; -class SvxMainMenuOrganizerDialog : public ModalDialog +class SvxMainMenuOrganizerDialog : public weld::GenericDialogController { - VclPtr<VclContainer> m_pMenuBox; - VclPtr<Edit> m_pMenuNameEdit; - VclPtr<SvTreeListBox> m_pMenuListBox; - VclPtr<PushButton> m_pMoveUpButton; - VclPtr<PushButton> m_pMoveDownButton; - std::unique_ptr<SvxEntries> mpEntries; - SvTreeListEntry* pNewMenuEntry; + OUString m_sNewMenuEntryId; bool bModified; + std::unique_ptr<weld::Widget> m_xMenuBox; + std::unique_ptr<weld::Entry> m_xMenuNameEdit; + std::unique_ptr<weld::TreeView> m_xMenuListBox; + std::unique_ptr<weld::Button> m_xMoveUpButton; + std::unique_ptr<weld::Button> m_xMoveDownButton; + void UpdateButtonStates(); - DECL_LINK( MoveHdl, Button *, void ); - DECL_LINK( ModifyHdl, Edit&, void ); - DECL_LINK( SelectHdl, SvTreeListBox*, void ); + DECL_LINK(MoveHdl, weld::Button&, void); + DECL_LINK(ModifyHdl, weld::Entry&, void); + DECL_LINK(SelectHdl, weld::TreeView&, void); public: - SvxMainMenuOrganizerDialog ( - vcl::Window*, SvxEntries*, - SvxConfigEntry const *, bool bCreateMenu ); + SvxMainMenuOrganizerDialog( + weld::Window*, SvxEntries*, + SvxConfigEntry const *, bool bCreateMenu); virtual ~SvxMainMenuOrganizerDialog() override; - virtual void dispose() override; std::unique_ptr<SvxEntries> ReleaseEntries() { return std::move(mpEntries);} SvxConfigEntry* GetSelectedEntry(); diff --git a/cui/uiconfig/ui/movemenu.ui b/cui/uiconfig/ui/movemenu.ui index 9ac57e7861fd..fdeb1ee117b3 100644 --- a/cui/uiconfig/ui/movemenu.ui +++ b/cui/uiconfig/ui/movemenu.ui @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.16.1 --> +<!-- Generated with glade 3.22.1 --> <interface domain="cui"> <requires lib="gtk+" version="3.18"/> - <!-- interface-requires LibreOffice 1.0 --> <object class="GtkImage" id="image1"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -13,11 +12,22 @@ <property name="can_focus">False</property> <property name="stock">gtk-go-down</property> </object> + <object class="GtkListStore" id="liststore1"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + <!-- column-name id --> + <column type="gchararray"/> + </columns> + </object> <object class="GtkDialog" id="MoveMenuDialog"> <property name="can_focus">False</property> <property name="border_width">6</property> <property name="title" translatable="yes" context="movemenu|MoveMenuDialog">New Menu</property> <property name="type_hint">dialog</property> + <child> + <placeholder/> + </child> <child internal-child="vbox"> <object class="GtkBox" id="dialog-vbox1"> <property name="can_focus">False</property> @@ -99,10 +109,10 @@ <object class="GtkLabel" id="menunameft"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes" context="movemenu|menunameft">Menu name:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">menuname</property> + <property name="xalign">0</property> </object> <packing> <property name="expand">False</property> @@ -111,61 +121,11 @@ </packing> </child> <child> - <object class="GtkBox" id="box6"> + <object class="GtkEntry" id="menuname"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can_focus">True</property> <property name="hexpand">True</property> - <property name="spacing">12</property> - <child> - <object class="GtkEntry" id="menuname"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hexpand">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkBox" id="box7"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="valign">center</property> - <property name="orientation">vertical</property> - <property name="spacing">6</property> - <child> - <object class="GtkImage" id="up1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="stock">gtk-go-up</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkImage" id="down1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="stock">gtk-go-down</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + <property name="activates_default">True</property> </object> <packing> <property name="expand">False</property> @@ -192,9 +152,9 @@ <object class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes" context="movemenu|label1">Menu _position:</property> <property name="use_underline">True</property> + <property name="xalign">0</property> </object> <packing> <property name="expand">False</property> @@ -210,13 +170,36 @@ <property name="vexpand">True</property> <property name="spacing">12</property> <child> - <object class="svtlo-SvTreeListBox" id="menulist:border"> + <object class="GtkScrolledWindow"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hexpand">True</property> <property name="vexpand">True</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="Tree List-selection1"/> + <property name="shadow_type">in</property> + <child> + <object class="GtkTreeView" id="menulist"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="vexpand">True</property> + <property name="model">liststore1</property> + <property name="headers_visible">False</property> + <property name="headers_clickable">False</property> + <property name="search_column">0</property> + <property name="show_expanders">False</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection1"/> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn1"> + <child> + <object class="GtkCellRendererText" id="cellrenderertext1"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + </child> + </object> </child> </object> <packing> @@ -238,6 +221,7 @@ <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="image">image1</property> + <property name="always_show_image">True</property> <child internal-child="accessible"> <object class="AtkObject" id="up-atkobject"> <property name="AtkObject::accessible-name" translatable="yes" context="movemenu|up-atkobject">Up</property> @@ -256,6 +240,7 @@ <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="image">image2</property> + <property name="always_show_image">True</property> <child internal-child="accessible"> <object class="AtkObject" id="down-atkobject"> <property name="AtkObject::accessible-name" translatable="yes" context="movemenu|down-atkobject">Down</property> |