1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
|
#ifndef BaseMainWindow_h
#define BaseMainWindow_h
/******************************************************************************
*
* Copyright (C) 2002 Hugo PEREIRA <mailto: hugo.pereira@free.fr>
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
*
* This software 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 General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*
*******************************************************************************/
#include "CustomToolButton.h"
#include "Debug.h"
#include "IconSize.h"
#include "WidgetMonitor.h"
#include "XmlOptions.h"
#include <QAction>
#include <QActionGroup>
#include <QMainWindow>
#include <QMenu>
#include <QStatusBar>
#include <QStyle>
class ToolBarMenu;
/**
\class BaseMainWindow
\brief customized QDialog
*/
class BaseMainWindow: public QMainWindow
{
Q_OBJECT
public:
//* constructor
explicit BaseMainWindow( QWidget*, Qt::WindowFlags = 0);
//* restore window size
QSize minimumSizeHint() const override;
//* restore window size
QSize sizeHint() const override;
//* center widget on argument widget
void centerOnDesktop();
//* center on parent widget
void centerOnParent()
{ centerOnWidget( parentWidget() ); }
//* center widget on argument widget
void centerOnWidget( QWidget* );
//* window title
virtual void setWindowTitle( const QString& );
//* set menu bar (overloaded)
void setMenuBar( QMenuBar* );
//* set menu bar (overloaded)
void setStatusBar( QStatusBar* );
//* lock toolbars
QAction& lockToolBarsAction() const
{ return *lockToolBarsAction_; }
//* lock panels
QAction& lockPanelsAction() const
{ return *lockPanelsAction_; }
//* show menubar
QAction& showMenuBarAction() const
{ return *showMenuBarAction_; }
//* show status bar
QAction& showStatusBarAction() const
{ return *showStatusBarAction_; }
//* create context menu (overloaded)
QMenu* createPopupMenu() override;
//* toolbar menu
ToolBarMenu& toolBarMenu( QWidget* = nullptr );
//* option name
void setOptionName( const QString& name );
//* menu option name
bool hasOptionName() const
{ return !lockToolBarsOptionName().isEmpty(); }
//* lock toolbar option name
const QString& lockToolBarsOptionName() const
{ return lockToolBarsOptionName_; }
//* lock panels option name
const QString& lockPanelsOptionName() const
{ return lockPanelsOptionName_; }
//* menu option name
const QString& showMenuBarOptionName() const
{ return showMenuBarOptionName_; }
//* status bar option name
const QString& showStatusBarOptionName() const
{ return showStatusBarOptionName_; }
Q_SIGNALS:
//* toolbar configuration changed
void toolbarConfigurationChanged();
public Q_SLOTS:
//* uniconify
void uniconify();
protected:
//* generic event
bool event( QEvent* ) override;
//* true if main window has menu
bool _hasMenuBar() const;
//* true if main window has menu
bool _hasStatusBar() const;
//* true if main window has toolbars
bool _hasToolBars() const;
//* returns true if lockable toolbars are found
bool _hasLockableToolBars() const;
//* true if main window has dock widgets
bool _hasPanels() const;
//* action list
using ActionList = QVector<QAction*>;
//* toolbar actions list
ActionList _toolBarsActions( QMenu* );
//* maximize state prior to minimization
bool _wasMaximized() const
{ return wasMaximized_; }
//* maximize state prior to minimization
void _setWasMaximized( bool value )
{ wasMaximized_ = value; }
private Q_SLOTS:
//* update configuration
void _updateConfiguration();
//* toolbar text position
void _updateToolButtonStyle( int );
//* toolbar text position
void _updateToolButtonIconSize( IconSize::Size );
//* lock toolbars
void _lockToolBars( bool );
//* lock panels
void _lockPanels( bool );
//* toggle menu
void _toggleMenuBar( bool );
//* toggle status bar
void _toggleStatusBar( bool );
private:
//* option name
QString lockToolBarsOptionName_;
//* option name
QString lockPanelsOptionName_;
//* option name
QString showMenuBarOptionName_;
//* option name
QString showStatusBarOptionName_;
//* size watcher
WidgetMonitor monitor_;
//* lock toolbars
QAction* lockToolBarsAction_ = nullptr;
//* lock docks
QAction* lockPanelsAction_ = nullptr;
//* toggle menu
QAction* showMenuBarAction_ = nullptr;
//* toggle statusBar
QAction* showStatusBarAction_ = nullptr;
//* window state prior to minimization
bool wasMaximized_ = false;
};
#endif
|