From 994731c1f0d2437295171810c699c14f689b949e Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 27 Aug 2020 19:28:27 +0200 Subject: [PATCH] WIP: more consistent editor options --- src/edt/edt/edtEditorOptionsPages.cc | 2 ++ src/edt/edt/edtPlugin.cc | 18 +++++++++++++---- src/edt/edt/edtPlugin.h | 9 ++++++--- src/edt/edt/edtService.cc | 2 ++ src/lay/lay/layMainWindow.cc | 30 +++++++++++++++++++++++----- 5 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/edt/edt/edtEditorOptionsPages.cc b/src/edt/edt/edtEditorOptionsPages.cc index 669ae0503..1856c7d91 100644 --- a/src/edt/edt/edtEditorOptionsPages.cc +++ b/src/edt/edt/edtEditorOptionsPages.cc @@ -153,6 +153,8 @@ EditorOptionsPages::update (edt::EditorOptionsPage *page) index = mp_pages->count () - 1; } mp_pages->setCurrentIndex (index); + + setVisible (mp_pages->count () > 0); } void diff --git a/src/edt/edt/edtPlugin.cc b/src/edt/edt/edtPlugin.cc index 975cf2ccc..68747b3d4 100644 --- a/src/edt/edt/edtPlugin.cc +++ b/src/edt/edt/edtPlugin.cc @@ -424,16 +424,26 @@ show_editor_options_page (lay::LayoutView *view) (*op)->activate (false); } + remove_editor_options_page (view); + + edt::EditorOptionsPages *pages = new edt::EditorOptionsPages (view->editor_options_frame (), prop_dialog_pages, view); + view->editor_options_frame ()->layout ()->addWidget (pages); + view->editor_options_frame ()->setFocusProxy (pages); +} + +void +remove_editor_options_page (lay::LayoutView *view) +{ + if (! view->editor_options_frame ()) { + return; + } + QObjectList children = view->editor_options_frame ()->children (); for (QObjectList::iterator c = children.begin (); c != children.end (); ++c) { if (dynamic_cast (*c)) { delete *c; } } - - edt::EditorOptionsPages *pages = new edt::EditorOptionsPages (view->editor_options_frame (), prop_dialog_pages, view); - view->editor_options_frame ()->layout ()->addWidget (pages); - view->editor_options_frame ()->setFocusProxy (pages); } static diff --git a/src/edt/edt/edtPlugin.h b/src/edt/edt/edtPlugin.h index c0ede8408..745f4c8a7 100644 --- a/src/edt/edt/edtPlugin.h +++ b/src/edt/edt/edtPlugin.h @@ -48,12 +48,15 @@ namespace edt }; /** - * @brief Show the editor options dialog - * - * This dialog is a global resource which is managed by the main plugin declaration + * @brief Creates an editor options page and installs it inside the view */ void show_editor_options_page (lay::LayoutView *view); + /** + * @brief Removes the editor options page from the view + */ + void remove_editor_options_page (lay::LayoutView *view); + /** * @brief Activate or deactivate a certain service * diff --git a/src/edt/edt/edtService.cc b/src/edt/edt/edtService.cc index c035d6698..aa5cf2b53 100644 --- a/src/edt/edt/edtService.cc +++ b/src/edt/edt/edtService.cc @@ -818,6 +818,8 @@ Service::deactivated () edit_cancel (); + remove_editor_options_page (view ()); + m_immediate = false; } diff --git a/src/lay/lay/layMainWindow.cc b/src/lay/lay/layMainWindow.cc index 58cb94d21..70156fe2c 100644 --- a/src/lay/lay/layMainWindow.cc +++ b/src/lay/lay/layMainWindow.cc @@ -165,7 +165,7 @@ class ControlWidgetStack { public: ControlWidgetStack (QWidget *parent = 0, const char *name = 0) - : QFrame (parent) + : QFrame (parent), mp_current_widget (0) { setObjectName (QString::fromUtf8 (name)); @@ -217,6 +217,9 @@ public: void removeWidget (size_t index) { if (index < m_widgets.size ()) { + if (mp_current_widget == m_widgets [index]) { + mp_current_widget = 0; + } m_widgets.erase (m_widgets.begin () + index); } if (m_widgets.size () == 0) { @@ -224,13 +227,20 @@ public: } } + QWidget *currentWidget () const + { + return mp_current_widget; + } + void raiseWidget (size_t index) { + mp_current_widget = 0; bool any_visible = false; for (size_t i = 0; i < m_widgets.size (); ++i) { if (m_widgets [i]) { if (i == index) { m_widgets [i]->show (); + mp_current_widget = m_widgets [i]; any_visible = true; } else { m_widgets [i]->hide (); @@ -259,6 +269,11 @@ public: return mp_bglabel; } + size_t count () const + { + return m_widgets.size (); + } + protected: virtual void resizeEvent (QResizeEvent *) { @@ -277,6 +292,7 @@ protected: } std::vector m_widgets; + QWidget *mp_current_widget; QLabel *mp_bglabel; }; @@ -1990,13 +2006,17 @@ MainWindow::select_mode (int m) } } - bool editable = false; + bool eo_visible = false; if (pd_sel) { - editable = pd_sel->editable_enabled (); + eo_visible = pd_sel->editable_enabled (); + } + if (eo_visible && (!mp_eo_stack->currentWidget () || !mp_eo_stack->currentWidget ()->findChild ())) { + // + eo_visible = false; } - if (editable != m_eo_visible) { - m_eo_visible = editable; + if (eo_visible != m_eo_visible) { + m_eo_visible = eo_visible; show_dock_widget (mp_eo_dock_widget, m_eo_visible); }