Files
create/src/Gui/DockWindowManager.h
Chris Hennes 98b34779e5 Add loadState() function to DockWindowManager
Just changing the preference for hiding or showing a dock window does
not actually trigger a state change. To enable that, the preferences
pack manager must manually instruct the DockWindowManager to save its
state into the preferences before storing a preference pack, and must
instruct the DockWindowManager to load its new state from the
preferences after loading a pack.
2021-08-23 11:30:13 -05:00

116 lines
4.2 KiB
C++

/***************************************************************************
* Copyright (c) 2007 Werner Mayer <wmayer[at]users.sourceforge.net> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#ifndef GUI_DOCKWINDOWMANAGER_H
#define GUI_DOCKWINDOWMANAGER_H
#include <QStringList>
class QDockWidget;
namespace Gui {
struct DockWindowItem {
QString name;
Qt::DockWidgetArea pos;
bool visibility;
bool tabbed;
};
class GuiExport DockWindowItems
{
public:
DockWindowItems();
~DockWindowItems();
void addDockWidget(const char* name, Qt::DockWidgetArea pos, bool visibility, bool tabbed);
void setDockingArea(const char* name, Qt::DockWidgetArea pos);
void setVisibility(const char* name, bool v);
void setVisibility(bool v);
const QList<DockWindowItem>& dockWidgets() const;
private:
QList<DockWindowItem> _items;
};
/**
* Class that manages the widgets inside a QDockWidget.
* \author Werner Mayer
*/
class GuiExport DockWindowManager : QObject
{
Q_OBJECT
public:
/** Creates the only instance of the DockWindowManager. */
static DockWindowManager* instance();
static void destruct();
bool registerDockWindow(const char* name, QWidget* widget);
QWidget* unregisterDockWindow(const char* name);
void setup(DockWindowItems*);
/// Adds a QDockWidget to the main window and sets \a widget as its widget
QDockWidget* addDockWindow(const char* name, QWidget* widget,
Qt::DockWidgetArea pos = Qt::AllDockWidgetAreas);
/// Removes and destroys the QDockWidget and returns the widget
/// with name \a name added with @ref addDockWindow.
QWidget* removeDockWindow(const char* name);
/// Removes and destroys the QDockWidget that contains \a dock. \a dock
/// does not get destroyed.
void removeDockWindow(QWidget* dock);
/// Returns the widget with name \a name added with @ref addDockWindow.
/// @note The returned widget is not the QDockWidget instance
/// returned from @ref addDockWindow. If you want to access the QDockWidget
/// you get it with parentWidget() of the returned widget.
QWidget* getDockWindow(const char* name) const;
/// Returns a list of all widgets which set to a QDockWidget.
QList<QWidget*> getDockWindows() const;
void saveState();
void loadState();
void retranslate();
private Q_SLOTS:
/**
* \internal
*/
void onDockWidgetDestroyed(QObject*);
/**
* \internal
*/
void onWidgetDestroyed(QObject*);
private:
QDockWidget* findDockWidget(const QList<QDockWidget*>&, const QString&) const;
DockWindowManager();
~DockWindowManager();
static DockWindowManager* _instance;
struct DockWindowManagerP* d;
};
} // namespace Gui
#endif // GUI_DOCKWINDOWMANAGER_H