LMMS
Loading...
Searching...
No Matches
MainWindow.h
Go to the documentation of this file.
1/*
2 * MainWindow.h - declaration of class MainWindow, the main window of LMMS
3 *
4 * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
5 *
6 * This file is part of LMMS - https://lmms.io
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program (see COPYING); if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301 USA.
22 *
23 */
24
25#ifndef LMMS_GUI_MAIN_WINDOW_H
26#define LMMS_GUI_MAIN_WINDOW_H
27
28#include <QBasicTimer>
29#include <QTimer>
30#include <QList>
31#include <QMainWindow>
32#include <QMdiArea>
33#include <QScrollBar>
34
35#include "ConfigManager.h"
36
37class QAction;
38class QDomElement;
39class QGridLayout;
40
41namespace lmms
42{
43
44namespace gui
45{
46
47class PluginView;
48class SubWindow;
49class ToolButton;
50
51
52class MainWindow : public QMainWindow
53{
54 Q_OBJECT
55public:
56 QMdiArea* workspace()
57 {
58 return static_cast<QMdiArea*>(m_workspace);
59 }
60
61 QWidget* toolBar()
62 {
63 return m_toolBar;
64 }
65
66 int addWidgetToToolBar( QWidget * _w, int _row = -1, int _col = -1 );
67 void addSpacingToToolBar( int _size );
68
69 // wrap the widget with a window decoration and add it to the workspace
70 LMMS_EXPORT SubWindow* addWindowedWidget(QWidget *w, Qt::WindowFlags windowFlags = QFlag(0));
71
72
73 void refocus();
74
91 bool mayChangeProject(bool stopPlayback);
92
93 // Auto save timer intervals. The slider in SetupDialog.cpp wants
94 // minutes and the rest milliseconds.
95 static const int DEFAULT_SAVE_INTERVAL_MINUTES = 2;
97
98 static const int m_autoSaveShortTime = 10 * 1000; // 10s short loop
99
101 value( "ui", "saveinterval" ).toInt()
102 * 60 * 1000 )
103 {
104 if( msec < m_autoSaveShortTime ) // No 'saveinterval' in .lmmsrc.xml
105 {
107 }
108 m_autoSaveTimer.start( msec );
109 }
110
112 {
113 return m_autoSaveTimer.interval();
114 }
115
116 enum class SessionState
117 {
120 };
121
122 void setSession( SessionState session )
123 {
124 m_session = session;
125 }
126
128 {
129 return m_session;
130 }
131
132 void sessionCleanup();
133
134 void clearKeyModifiers();
135
136 bool isShiftPressed() const { return m_keyMods.m_shift; }
138
139 static void saveWidgetState( QWidget * _w, QDomElement & _de );
140 static void restoreWidgetState( QWidget * _w, const QDomElement & _de );
141 void setAllSubWindowsDetached(bool detached);
142
143 bool eventFilter(QObject* watched, QEvent* event) override;
144
145signals:
146 void detachAllSubWindows(bool detached);
147
148public slots:
149 void resetWindowTitle();
150
151 void emptySlot();
152 void createNewProject();
153 void openProject();
154 bool saveProject();
155 bool saveProjectAs();
158 void showSettingsDialog();
159 void aboutLMMS();
160 void help();
162 void togglePatternEditorWin(bool forceShow = false);
163 void toggleSongEditorWin();
165 void toggleMicrotunerWin();
166 void toggleMixerWin();
167 void togglePianoRollWin();
169 void toggleFullscreen();
170
172
174 void undo();
175 void redo();
176
177 void autoSave();
178
179private slots:
180 void onExportProjectMidi();
181
182protected:
183 void closeEvent( QCloseEvent * _ce ) override;
184 void keyPressEvent( QKeyEvent * _ke ) override;
185 void keyReleaseEvent( QKeyEvent * _ke ) override;
186 void timerEvent( QTimerEvent * _ev ) override;
187
188
189private:
190 MainWindow();
192 ~MainWindow() override;
193
194 void finalize();
195
196 void toggleWindow( QWidget *window, bool forceShow = false );
197
198 void exportProject(bool multiExport = false);
199 void handleSaveResult(QString const & filename, bool songSavedSuccessfully);
200 bool guiSaveProject();
201 bool guiSaveProjectAs( const QString & filename );
202
203 class WorkspaceScrollBar : public QScrollBar
204 {
205 public:
206 WorkspaceScrollBar(Qt::Orientation orientation, QWidget *parent = nullptr);
208
209 protected:
210 void wheelEvent(QWheelEvent *event) override;
211 };
212
213 class MovableQMdiArea : public QMdiArea
214 {
215 public:
216 MovableQMdiArea(QWidget* parent, MainWindow* mainWindow, QScrollBar* scrollBarV, QScrollBar* scrollBarH);
219
220 protected:
221 void mousePressEvent(QMouseEvent* event) override;
222 void mouseMoveEvent(QMouseEvent* event) override;
223 void mouseReleaseEvent(QMouseEvent* event) override;
224 void resizeEvent(QResizeEvent* event) override;
225 bool eventFilter(QObject* watched, QEvent* event) override;
226 void sliderMoved(QScrollBar* scrollBar);
227
228 private:
229 void mousePanStart();
230 void mousePanMove(int globalX, int globalY);
231 void mousePanEnd();
232 void scroll(int scrollX, int scrollY);
233 void updateScrollBars();
234 bool hasActiveMaxWindow();
235
236 static constexpr int Margin = 100;
237
239 std::tuple<int, int, int, int> getActiveWorkspaceArea();
240
247 QScrollBar* m_scrollBarV;
248 QScrollBar* m_scrollBarH;
251 };
255
256 QWidget * m_toolBar;
257 QGridLayout * m_toolBarLayout;
258
260 {
262 m_ctrl( false ),
263 m_shift( false ),
264 m_alt( false )
265 {
266 }
267 bool m_ctrl;
269 bool m_alt;
271
272 QMenu * m_toolsMenu;
273 QAction * m_undoAction;
274 QAction * m_redoAction;
275 QList<PluginView *> m_tools;
276
277 QBasicTimer m_updateTimer;
280
281 friend class GuiApplication;
282
283 QMenu * m_viewMenu;
284
286
288
290
291private slots:
292 void browseHelp();
293 void showTool( QAction * _idx );
294 void updateViewMenu();
295 void updateConfig( QAction * _who );
296 void onToggleMetronome();
297 void onExportProject();
299 void onImportProject();
300 void onSongModified();
302
303signals:
305 void initProgress(const QString &msg);
306
307} ;
308
309} // namespace gui
310
311} // namespace lmms
312
313#endif // LMMS_GUI_MAIN_WINDOW_H
static ConfigManager * inst()
Definition ConfigManager.h:62
Definition MainWindow.h:214
int m_scrollBarLastY
Definition MainWindow.h:249
std::tuple< int, int, int, int > getActiveWorkspaceArea()
Get the workspace area where there are windows as a [minX, maxX, minY, maxY] tuple.
Definition MainWindow.cpp:1773
static constexpr int Margin
Margin used along with the active workspace area.
Definition MainWindow.h:236
void mousePressEvent(QMouseEvent *event) override
Definition MainWindow.cpp:1860
bool universalPanClick
Whether clicking is needed to initiate universal panning.
Definition MainWindow.h:218
~MovableQMdiArea()
Definition MainWindow.h:217
QScrollBar * m_scrollBarV
Definition MainWindow.h:247
bool m_canUniversalPan
Whether universal panning can be started (for when ).
Definition MainWindow.h:243
void mousePanMove(int globalX, int globalY)
Definition MainWindow.cpp:1842
bool hasActiveMaxWindow()
Definition MainWindow.cpp:1889
void scroll(int scrollX, int scrollY)
Definition MainWindow.cpp:1808
void mouseReleaseEvent(QMouseEvent *event) override
Definition MainWindow.cpp:1877
MovableQMdiArea(QWidget *parent, MainWindow *mainWindow, QScrollBar *scrollBarV, QScrollBar *scrollBarH)
Definition MainWindow.cpp:1687
void updateScrollBars()
Definition MainWindow.cpp:1734
void mousePanStart()
Previous position must have been already fed to m_lastX and m_lastY.
Definition MainWindow.cpp:1767
void sliderMoved(QScrollBar *scrollBar)
Definition MainWindow.cpp:1709
void mousePanEnd()
Definition MainWindow.cpp:1853
int m_lastX
Definition MainWindow.h:244
bool eventFilter(QObject *watched, QEvent *event) override
Definition MainWindow.cpp:1902
void mouseMoveEvent(QMouseEvent *event) override
Definition MainWindow.cpp:1869
MainWindow * m_mainWindow
Definition MainWindow.h:246
int m_lastY
Definition MainWindow.h:245
bool m_isUniversalPan
Whether the current panning is universal.
Definition MainWindow.h:242
void resizeEvent(QResizeEvent *event) override
Definition MainWindow.cpp:1883
int m_scrollBarLastX
Definition MainWindow.h:250
bool m_isPanning
Whether the workspace is being panned.
Definition MainWindow.h:241
QScrollBar * m_scrollBarH
Definition MainWindow.h:248
void wheelEvent(QWheelEvent *event) override
Definition MainWindow.cpp:1681
WorkspaceScrollBar(Qt::Orientation orientation, QWidget *parent=nullptr)
Definition MainWindow.cpp:1670
~WorkspaceScrollBar()
Definition MainWindow.h:207
void toggleControllerRack()
Definition MainWindow.cpp:1207
MainWindow(const MainWindow &)
void handleSaveResult(QString const &filename, bool songSavedSuccessfully)
Definition MainWindow.cpp:1584
void finalize()
Definition MainWindow.cpp:284
bool guiSaveProject()
Definition MainWindow.cpp:1600
void createNewProject()
Definition MainWindow.cpp:757
void timerEvent(QTimerEvent *_ev) override
Definition MainWindow.cpp:1405
void toggleAutomationEditorWin()
Definition MainWindow.cpp:1054
QBasicTimer m_updateTimer
Definition MainWindow.h:277
QWidget * m_toolBar
Definition MainWindow.h:256
void toggleWindow(QWidget *window, bool forceShow=false)
Definition MainWindow.cpp:942
int addWidgetToToolBar(QWidget *_w, int _row=-1, int _col=-1)
Definition MainWindow.cpp:535
QScrollBar * m_workspaceScrollBarV
Definition MainWindow.h:254
void browseHelp()
Definition MainWindow.cpp:1425
void undo()
Definition MainWindow.cpp:1259
void toggleSongEditorWin()
Definition MainWindow.cpp:1030
bool eventFilter(QObject *watched, QEvent *event) override
Definition MainWindow.cpp:1306
void addSpacingToToolBar(int _size)
Definition MainWindow.cpp:552
bool maximized
Definition MainWindow.h:289
void onExportProjectTracks()
Definition MainWindow.cpp:1623
void onImportProject()
Definition MainWindow.cpp:1628
void refocus()
Definition MainWindow.cpp:986
void redo()
Definition MainWindow.cpp:1267
MainWindow()
Definition MainWindow.cpp:82
void toggleFullscreen()
Definition MainWindow.cpp:966
void togglePianoRollWin()
Definition MainWindow.cpp:1046
void onToggleMetronome()
Definition MainWindow.cpp:1199
SessionState getSession()
Definition MainWindow.h:127
void onExportProject()
Definition MainWindow.cpp:1618
void autoSave()
Definition MainWindow.cpp:1436
void onExportProjectMidi()
Definition MainWindow.cpp:1459
void updateUndoRedoButtons()
Definition MainWindow.cpp:1249
void onSongModified()
Definition MainWindow.cpp:1653
~MainWindow() override
Definition MainWindow.cpp:264
bool guiSaveProjectAs(const QString &filename)
Definition MainWindow.cpp:1609
struct lmms::gui::MainWindow::keyModifiers m_keyMods
void onProjectFileNameChanged()
Definition MainWindow.cpp:1665
void autoSaveTimerReset(int msec=ConfigManager::inst() -> value("ui", "saveinterval").toInt() *60 *1000)
Definition MainWindow.h:100
static const int DEFAULT_SAVE_INTERVAL_MINUTES
Definition MainWindow.h:95
bool saveProject()
Definition MainWindow.cpp:792
void showSettingsDialog()
Definition MainWindow.cpp:910
void updatePlayPauseIcons()
Definition MainWindow.cpp:1215
void resetWindowTitle()
Definition MainWindow.cpp:594
bool saveProjectAsNewVersion()
Definition MainWindow.cpp:868
void aboutLMMS()
Definition MainWindow.cpp:920
QMdiArea * workspace()
Definition MainWindow.h:56
void emptySlot()
Definition MainWindow.cpp:751
LMMS_EXPORT SubWindow * addWindowedWidget(QWidget *w, Qt::WindowFlags windowFlags=QFlag(0))
Definition MainWindow.cpp:561
void initProgress(const QString &msg)
static void saveWidgetState(QWidget *_w, QDomElement &_de)
Definition MainWindow.cpp:688
QGridLayout * m_toolBarLayout
Definition MainWindow.h:257
void updateConfig(QAction *_who)
Definition MainWindow.cpp:1166
SessionState
Definition MainWindow.h:117
@ Recover
Definition MainWindow.h:119
@ Normal
Definition MainWindow.h:118
void setSession(SessionState session)
Definition MainWindow.h:122
int m_autoSaveInterval
Definition MainWindow.h:279
void clearKeyModifiers()
Definition MainWindow.cpp:678
QMenu * m_toolsMenu
Definition MainWindow.h:272
void togglePatternEditorWin(bool forceShow=false)
Definition MainWindow.cpp:1022
void exportProject(bool multiExport=false)
Definition MainWindow.cpp:1498
ToolButton * m_metronomeToggle
Definition MainWindow.h:285
MovableQMdiArea * m_workspace
Definition MainWindow.h:252
static const int m_autoSaveShortTime
Definition MainWindow.h:98
QScrollBar * m_workspaceScrollBarH
Definition MainWindow.h:253
void sessionCleanup()
Definition MainWindow.cpp:1296
void detachAllSubWindows(bool detached)
void saveProjectAsDefaultTemplate()
Definition MainWindow.cpp:887
static const int DEFAULT_AUTO_SAVE_INTERVAL
Definition MainWindow.h:96
void keyPressEvent(QKeyEvent *_ke) override
Definition MainWindow.cpp:1345
void showTool(QAction *_idx)
Definition MainWindow.cpp:1414
bool isShiftPressed() const
Definition MainWindow.h:136
void openProject()
Definition MainWindow.cpp:768
bool isKeyDPressed
Definition MainWindow.h:137
void toggleMicrotunerWin()
Definition MainWindow.cpp:1069
QAction * m_undoAction
Definition MainWindow.h:273
void help()
Definition MainWindow.cpp:928
int getAutoSaveTimerInterval()
Definition MainWindow.h:111
void keyReleaseEvent(QKeyEvent *_ke) override
Definition MainWindow.cpp:1381
static void restoreWidgetState(QWidget *_w, const QDomElement &_de)
Definition MainWindow.cpp:713
QMenu * m_viewMenu
Definition MainWindow.h:283
QWidget * toolBar()
Definition MainWindow.h:61
void closeEvent(QCloseEvent *_ce) override
Definition MainWindow.cpp:1275
friend class GuiApplication
Definition MainWindow.h:281
void toggleProjectNotesWin()
Definition MainWindow.cpp:1038
void updateViewMenu()
Definition MainWindow.cpp:1077
SessionState m_session
Definition MainWindow.h:287
void toggleMixerWin()
Definition MainWindow.cpp:1062
void setAllSubWindowsDetached(bool detached)
Definition MainWindow.cpp:588
QList< PluginView * > m_tools
Definition MainWindow.h:275
QAction * m_redoAction
Definition MainWindow.h:274
bool mayChangeProject(bool stopPlayback)
Asks whether changes made to the project are to be saved.
Definition MainWindow.cpp:620
QTimer m_autoSaveTimer
Definition MainWindow.h:278
bool saveProjectAs()
Definition MainWindow.cpp:812
Definition PluginView.h:36
The SubWindow class.
Definition SubWindow.h:53
Definition ToolButton.h:34
UINT_D64 w
Definition inflate.c:942
static PuglViewHint int value
Definition pugl.h:1708
static uintptr_t parent
Definition pugl.h:1644
const char * msg
Definition missing_descriptor.c:20
Definition AudioPortAudio.cpp:209
Definition AudioAlsa.cpp:35
QString filename
Definition HydrogenImport.cpp:42
#define false
Definition ordinals.h:83
bool m_alt
Definition MainWindow.h:269
bool m_ctrl
Definition MainWindow.h:267
keyModifiers()
Definition MainWindow.h:261
bool m_shift
Definition MainWindow.h:268