diff libgui/src/octave-dock-widget.h @ 16798:d749c9b588e5

make stand-alone windows from dock widgets when floating (bug #38785) * octave-dock-widget.cc: new file, (constructor): moved from octave-dock-widget.h, disable floating and closing by qt, add custom title bar with buttons for closing and floating, (destructor): saving state and geometry depending on state, (set_title): new function for setting the title of the custom title bar, (make_window): make dock widget a stand-alone window by reparenting to 0 and restore last geometry, (make_widget): readd the widget to the main window, the last position and size can not be restored due to previous reparenting (change_floating): slot for dock button in title bar (change_visibility): slot for hiding the widget * octave-dock-widget.h: removed signal connection and slot for floating by qt, moved constructor to *.cc, declaration of new functions and slots (main_win): new function returning the main window * main-window.cc(notice-settings): when updating icons, use a list of all dock widgets instead of searching childrens that may have set their parent to 0 (set_window_layout): use make_window instead of setWindowsFlag for floating, do not use grouping in settings because of possibly nested groups (write_settings): saving the state and geometry of the dock-widgets is moved into the dock widget's destructors main-window.n(dock_widget_list): function returning a list of all dock widgets * documentation-dock-widget.cc, files-dock-widget.cc, history-dock-widget.cc, file-editor.cc, terminal-dock-widget.cc, workspace-view.cc: use new function set_title instead of setWindowTitle * files-dock-widget.cc, file-editor.cc, : replace parent () by main_win () * widget-dock.png, widget-undock.png, widget-close.png: new icons * resource.qrc: new icons widget-dock.png, widget-undock.png, widget-close.png * module-mk: new icons widget-dock.png, widget-undock.png, widget-close.png and new file octave-dock-widget.cc
author Torsten <ttl@justmail.de>
date Fri, 21 Jun 2013 22:40:53 +0200
parents 999400bebe5e
children 84505f200e05
line wrap: on
line diff
--- a/libgui/src/octave-dock-widget.h	Fri Jun 21 20:50:55 2013 +0200
+++ b/libgui/src/octave-dock-widget.h	Fri Jun 21 22:40:53 2013 +0200
@@ -25,6 +25,9 @@
 
 #include <QDockWidget>
 #include <QSettings>
+#include <QIcon>
+#include <QMainWindow>
+#include <QMouseEvent>
 
 class octave_dock_widget : public QDockWidget
 {
@@ -32,20 +35,8 @@
 
 public:
 
-  octave_dock_widget (QWidget *p)
-    : QDockWidget (p)
-  {
-    connect (this, SIGNAL (visibilityChanged (bool)),
-             this, SLOT (handle_visibility_changed (bool)));
-
-    connect (this, SIGNAL (topLevelChanged (bool)),
-             this, SLOT (top_level_changed (bool)));
-
-    connect (p, SIGNAL (settings_changed (const QSettings*)),
-             this, SLOT (notice_settings (const QSettings*)));
-  }
-
-  virtual ~octave_dock_widget () { }
+  octave_dock_widget (QWidget *p = 0);
+  virtual ~octave_dock_widget ();
 
   virtual void connect_visibility_changed (void)
   {
@@ -53,6 +44,9 @@
              this, SLOT (handle_visibility (bool)));
   }
 
+  void make_window (bool visible);
+  void make_widget (bool visible);
+  void set_title (const QString&);
 
 signals:
 
@@ -69,6 +63,7 @@
     QDockWidget::closeEvent (e);
   }
 
+
 public slots:
 
   virtual void focus (void)
@@ -91,6 +86,8 @@
   {
   }
 
+  QMainWindow *main_win () { return _parent; }
+
 protected slots:
 
   /** Slot to steer changing visibility from outside. */
@@ -100,17 +97,16 @@
       emit active_changed (true);
   }
 
-  /** Slot when floating property changes */
-  virtual void top_level_changed (bool floating)
-  {
-    if (floating)
-      {
-        // Make a window from the widget when floating and make it
-        // visible again since setWindowFlags hides it.
-        setWindowFlags (Qt::Window);
-        show();
-      }
-  }
+private slots:
+
+  void change_floating (bool);
+  void change_visibility (bool);
+
+private:
+
+  QMainWindow *_parent;  // store the parent since we are reparenting to 0
+  QAction *_dock_action;
+
 };
 
 #endif