Mercurial > hg > octave-lyh
annotate 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 |
rev | line source |
---|---|
16057
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
1 /* |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
2 |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
3 Copyright (C) 2012-2013 Richard Crozier |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
4 |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
5 This file is part of Octave. |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
6 |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
7 Octave is free software; you can redistribute it and/or modify it |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
8 under the terms of the GNU General Public License as published by the |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
9 Free Software Foundation; either version 3 of the License, or (at your |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
10 option) any later version. |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
11 |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
12 Octave is distributed in the hope that it will be useful, but WITHOUT |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
15 for more details. |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
16 |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
18 along with Octave; see the file COPYING. If not, see |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
19 <http://www.gnu.org/licenses/>. |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
20 |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
21 */ |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
22 |
16461
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
23 #if !defined (octave_dock_widget_h) |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
24 #define octave_dock_widget_h 1 |
16057
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
25 |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
26 #include <QDockWidget> |
16611
999400bebe5e
move more common code from dock widgets into octave-dock-widget.h
Torsten <ttl@justmail.de>
parents:
16461
diff
changeset
|
27 #include <QSettings> |
16798
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
28 #include <QIcon> |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
29 #include <QMainWindow> |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
30 #include <QMouseEvent> |
16057
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
31 |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
32 class octave_dock_widget : public QDockWidget |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
33 { |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
34 Q_OBJECT |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
35 |
16461
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
36 public: |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
37 |
16798
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
38 octave_dock_widget (QWidget *p = 0); |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
39 virtual ~octave_dock_widget (); |
16057
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
40 |
16461
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
41 virtual void connect_visibility_changed (void) |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
42 { |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
43 connect (this, SIGNAL (visibilityChanged (bool)), |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
44 this, SLOT (handle_visibility (bool))); |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
45 } |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
46 |
16798
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
47 void make_window (bool visible); |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
48 void make_widget (bool visible); |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
49 void set_title (const QString&); |
16611
999400bebe5e
move more common code from dock widgets into octave-dock-widget.h
Torsten <ttl@justmail.de>
parents:
16461
diff
changeset
|
50 |
16057
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
51 signals: |
16461
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
52 |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
53 /** Custom signal that tells whether a user has clicked away |
16057
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
54 * that dock widget, i.e the active dock widget has |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
55 * changed. */ |
16340
045ce3896e3f
Stop compilation warning about signal function declared virtual.
Rik <rik@octave.org>
parents:
16057
diff
changeset
|
56 void active_changed (bool active); |
16057
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
57 |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
58 protected: |
16461
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
59 |
16057
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
60 virtual void closeEvent (QCloseEvent *e) |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
61 { |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
62 emit active_changed (false); |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
63 QDockWidget::closeEvent (e); |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
64 } |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
65 |
16798
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
66 |
16461
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
67 public slots: |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
68 |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
69 virtual void focus (void) |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
70 { |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
71 if (! isVisible ()) |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
72 setVisible (true); |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
73 |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
74 setFocus (); |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
75 activateWindow (); |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
76 raise (); |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
77 } |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
78 |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
79 virtual void handle_visibility (bool visible) |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
80 { |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
81 if (visible && ! isFloating ()) |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
82 focus (); |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
83 } |
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
84 |
16611
999400bebe5e
move more common code from dock widgets into octave-dock-widget.h
Torsten <ttl@justmail.de>
parents:
16461
diff
changeset
|
85 virtual void notice_settings (const QSettings*) |
999400bebe5e
move more common code from dock widgets into octave-dock-widget.h
Torsten <ttl@justmail.de>
parents:
16461
diff
changeset
|
86 { |
999400bebe5e
move more common code from dock widgets into octave-dock-widget.h
Torsten <ttl@justmail.de>
parents:
16461
diff
changeset
|
87 } |
999400bebe5e
move more common code from dock widgets into octave-dock-widget.h
Torsten <ttl@justmail.de>
parents:
16461
diff
changeset
|
88 |
16798
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
89 QMainWindow *main_win () { return _parent; } |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
90 |
16057
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
91 protected slots: |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
92 |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
93 /** Slot to steer changing visibility from outside. */ |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
94 virtual void handle_visibility_changed (bool visible) |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
95 { |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
96 if (visible) |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
97 emit active_changed (true); |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
98 } |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
99 |
16798
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
100 private slots: |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
101 |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
102 void change_floating (bool); |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
103 void change_visibility (bool); |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
104 |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
105 private: |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
106 |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
107 QMainWindow *_parent; // store the parent since we are reparenting to 0 |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
108 QAction *_dock_action; |
d749c9b588e5
make stand-alone windows from dock widgets when floating (bug #38785)
Torsten <ttl@justmail.de>
parents:
16611
diff
changeset
|
109 |
16057
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
110 }; |
c3057d80cf91
Created common octave_dock_widget class
Richard Crozier <richard.crozier@yahoo.co.uk>
parents:
diff
changeset
|
111 |
16461
094bd3627ead
move common functionality to octave_dock_widget base class
John W. Eaton <jwe@octave.org>
parents:
16340
diff
changeset
|
112 #endif |