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; }
137
138 static void saveWidgetState( QWidget * _w, QDomElement & _de );
139 static void restoreWidgetState( QWidget * _w, const QDomElement & _de );
140 void setAllSubWindowsDetached(bool detached);
141
142 bool eventFilter(QObject* watched, QEvent* event) override;
143
144signals:
145 void detachAllSubWindows(bool detached);
146
147public slots:
148 void resetWindowTitle();
149
150 void emptySlot();
151 void createNewProject();
152 void openProject();
153 bool saveProject();
154 bool saveProjectAs();
157 void showSettingsDialog();
158 void aboutLMMS();
159 void help();
161 void togglePatternEditorWin(bool forceShow = false);
162 void toggleSongEditorWin();
164 void toggleMicrotunerWin();
165 void toggleMixerWin();
166 void togglePianoRollWin();
168 void toggleFullscreen();
169
171
173 void undo();
174 void redo();
175
176 void autoSave();
177
178private slots:
179 void onExportProjectMidi();
180
181protected:
182 void closeEvent( QCloseEvent * _ce ) override;
183 void keyPressEvent( QKeyEvent * _ke ) override;
184 void keyReleaseEvent( QKeyEvent * _ke ) override;
185 void timerEvent( QTimerEvent * _ev ) override;
186
187
188private:
189 MainWindow();
191 ~MainWindow() override;
192
193 void finalize();
194
195 void toggleWindow( QWidget *window, bool forceShow = false );
196
197 void exportProject(bool multiExport = false);
198 void handleSaveResult(QString const & filename, bool songSavedSuccessfully);
199 bool guiSaveProject();
200 bool guiSaveProjectAs( const QString & filename );
201
202 class WorkspaceScrollBar : public QScrollBar
203 {
204 public:
205 WorkspaceScrollBar(Qt::Orientation orientation, QWidget *parent = nullptr);
207
208 protected:
209 void wheelEvent(QWheelEvent *event) override;
210 };
211
212 class MovableQMdiArea : public QMdiArea
213 {
214 public:
215 MovableQMdiArea(QWidget* parent, MainWindow* mainWindow, QScrollBar* scrollBarV, QScrollBar* scrollBarH);
218
219 protected:
220 void mousePressEvent(QMouseEvent* event) override;
221 void mouseMoveEvent(QMouseEvent* event) override;
222 void mouseReleaseEvent(QMouseEvent* event) override;
223 void resizeEvent(QResizeEvent* event) override;
224 bool eventFilter(QObject* watched, QEvent* event) override;
225 void sliderMoved(QScrollBar* scrollBar);
226
227 private:
228 void mousePanStart();
229 void mousePanMove(int globalX, int globalY);
230 void mousePanEnd();
231 void scroll(int scrollX, int scrollY);
232 void updateScrollBars();
233 bool hasActiveMaxWindow();
234
235 static constexpr int Margin = 100;
236
238 std::tuple<int, int, int, int> getActiveWorkspaceArea();
239
246 QScrollBar* m_scrollBarV;
247 QScrollBar* m_scrollBarH;
250 };
254
255 QWidget * m_toolBar;
256 QGridLayout * m_toolBarLayout;
257
259 {
261 m_ctrl( false ),
262 m_shift( false ),
263 m_alt( false )
264 {
265 }
266 bool m_ctrl;
268 bool m_alt;
270
271 QMenu * m_toolsMenu;
272 QAction * m_undoAction;
273 QAction * m_redoAction;
274 QList<PluginView *> m_tools;
275
276 QBasicTimer m_updateTimer;
279
280 friend class GuiApplication;
281
282 QMenu * m_viewMenu;
283
285
287
289
290private slots:
291 void browseHelp();
292 void showTool( QAction * _idx );
293 void updateViewMenu();
294 void updateConfig( QAction * _who );
295 void onToggleMetronome();
296 void onExportProject();
298 void onImportProject();
299 void onSongModified();
301
302signals:
304 void initProgress(const QString &msg);
305
306} ;
307
308} // namespace gui
309
310} // namespace lmms
311
312#endif // LMMS_GUI_MAIN_WINDOW_H
static ConfigManager * inst()
Definition ConfigManager.h:62
Definition MainWindow.h:213
int m_scrollBarLastY
Definition MainWindow.h:248
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:1781
static constexpr int Margin
Margin used along with the active workspace area.
Definition MainWindow.h:235
void mousePressEvent(QMouseEvent *event) override
Definition MainWindow.cpp:1868
bool universalPanClick
Whether clicking is needed to initiate universal panning.
Definition MainWindow.h:217
~MovableQMdiArea()
Definition MainWindow.h:216
QScrollBar * m_scrollBarV
Definition MainWindow.h:246
bool m_canUniversalPan
Whether universal panning can be started (for when ).
Definition MainWindow.h:242
void mousePanMove(int globalX, int globalY)
Definition MainWindow.cpp:1850
bool hasActiveMaxWindow()
Definition MainWindow.cpp:1897
void scroll(int scrollX, int scrollY)
Definition MainWindow.cpp:1816
void mouseReleaseEvent(QMouseEvent *event) override
Definition MainWindow.cpp:1885
MovableQMdiArea(QWidget *parent, MainWindow *mainWindow, QScrollBar *scrollBarV, QScrollBar *scrollBarH)
Definition MainWindow.cpp:1695
void updateScrollBars()
Definition MainWindow.cpp:1742
void mousePanStart()
Previous position must have been already fed to m_lastX and m_lastY.
Definition MainWindow.cpp:1775
void sliderMoved(QScrollBar *scrollBar)
Definition MainWindow.cpp:1717
void mousePanEnd()
Definition MainWindow.cpp:1861
int m_lastX
Definition MainWindow.h:243
bool eventFilter(QObject *watched, QEvent *event) override
Definition MainWindow.cpp:1910
void mouseMoveEvent(QMouseEvent *event) override
Definition MainWindow.cpp:1877
MainWindow * m_mainWindow
Definition MainWindow.h:245
int m_lastY
Definition MainWindow.h:244
bool m_isUniversalPan
Whether the current panning is universal.
Definition MainWindow.h:241
void resizeEvent(QResizeEvent *event) override
Definition MainWindow.cpp:1891
int m_scrollBarLastX
Definition MainWindow.h:249
bool m_isPanning
Whether the workspace is being panned.
Definition MainWindow.h:240
QScrollBar * m_scrollBarH
Definition MainWindow.h:247
void wheelEvent(QWheelEvent *event) override
Definition MainWindow.cpp:1689
WorkspaceScrollBar(Qt::Orientation orientation, QWidget *parent=nullptr)
Definition MainWindow.cpp:1678
~WorkspaceScrollBar()
Definition MainWindow.h:206
void toggleControllerRack()
Definition MainWindow.cpp:1217
MainWindow(const MainWindow &)
void handleSaveResult(QString const &filename, bool songSavedSuccessfully)
Definition MainWindow.cpp:1592
void finalize()
Definition MainWindow.cpp:283
bool guiSaveProject()
Definition MainWindow.cpp:1608
void createNewProject()
Definition MainWindow.cpp:767
void timerEvent(QTimerEvent *_ev) override
Definition MainWindow.cpp:1413
void toggleAutomationEditorWin()
Definition MainWindow.cpp:1064
QBasicTimer m_updateTimer
Definition MainWindow.h:276
QWidget * m_toolBar
Definition MainWindow.h:255
void toggleWindow(QWidget *window, bool forceShow=false)
Definition MainWindow.cpp:952
int addWidgetToToolBar(QWidget *_w, int _row=-1, int _col=-1)
Definition MainWindow.cpp:534
QScrollBar * m_workspaceScrollBarV
Definition MainWindow.h:253
void browseHelp()
Definition MainWindow.cpp:1433
void undo()
Definition MainWindow.cpp:1269
void toggleSongEditorWin()
Definition MainWindow.cpp:1040
bool eventFilter(QObject *watched, QEvent *event) override
Definition MainWindow.cpp:1316
void addSpacingToToolBar(int _size)
Definition MainWindow.cpp:551
bool maximized
Definition MainWindow.h:288
void onExportProjectTracks()
Definition MainWindow.cpp:1631
void onImportProject()
Definition MainWindow.cpp:1636
void refocus()
Definition MainWindow.cpp:996
void redo()
Definition MainWindow.cpp:1277
MainWindow()
Definition MainWindow.cpp:82
void toggleFullscreen()
Definition MainWindow.cpp:976
void togglePianoRollWin()
Definition MainWindow.cpp:1056
void onToggleMetronome()
Definition MainWindow.cpp:1209
SessionState getSession()
Definition MainWindow.h:127
void onExportProject()
Definition MainWindow.cpp:1626
void autoSave()
Definition MainWindow.cpp:1444
void onExportProjectMidi()
Definition MainWindow.cpp:1467
void updateUndoRedoButtons()
Definition MainWindow.cpp:1259
void onSongModified()
Definition MainWindow.cpp:1661
~MainWindow() override
Definition MainWindow.cpp:263
bool guiSaveProjectAs(const QString &filename)
Definition MainWindow.cpp:1617
struct lmms::gui::MainWindow::keyModifiers m_keyMods
void onProjectFileNameChanged()
Definition MainWindow.cpp:1673
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:802
void showSettingsDialog()
Definition MainWindow.cpp:920
void updatePlayPauseIcons()
Definition MainWindow.cpp:1225
void resetWindowTitle()
Definition MainWindow.cpp:593
bool saveProjectAsNewVersion()
Definition MainWindow.cpp:878
void aboutLMMS()
Definition MainWindow.cpp:930
QMdiArea * workspace()
Definition MainWindow.h:56
void emptySlot()
Definition MainWindow.cpp:761
LMMS_EXPORT SubWindow * addWindowedWidget(QWidget *w, Qt::WindowFlags windowFlags=QFlag(0))
Definition MainWindow.cpp:560
void initProgress(const QString &msg)
static void saveWidgetState(QWidget *_w, QDomElement &_de)
Definition MainWindow.cpp:687
QGridLayout * m_toolBarLayout
Definition MainWindow.h:256
void updateConfig(QAction *_who)
Definition MainWindow.cpp:1176
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:278
void clearKeyModifiers()
Definition MainWindow.cpp:677
QMenu * m_toolsMenu
Definition MainWindow.h:271
void togglePatternEditorWin(bool forceShow=false)
Definition MainWindow.cpp:1032
void exportProject(bool multiExport=false)
Definition MainWindow.cpp:1506
ToolButton * m_metronomeToggle
Definition MainWindow.h:284
MovableQMdiArea * m_workspace
Definition MainWindow.h:251
static const int m_autoSaveShortTime
Definition MainWindow.h:98
QScrollBar * m_workspaceScrollBarH
Definition MainWindow.h:252
void sessionCleanup()
Definition MainWindow.cpp:1306
void detachAllSubWindows(bool detached)
void saveProjectAsDefaultTemplate()
Definition MainWindow.cpp:897
static const int DEFAULT_AUTO_SAVE_INTERVAL
Definition MainWindow.h:96
void keyPressEvent(QKeyEvent *_ke) override
Definition MainWindow.cpp:1355
void showTool(QAction *_idx)
Definition MainWindow.cpp:1422
bool isShiftPressed() const
Definition MainWindow.h:136
void openProject()
Definition MainWindow.cpp:778
void toggleMicrotunerWin()
Definition MainWindow.cpp:1079
QAction * m_undoAction
Definition MainWindow.h:272
void help()
Definition MainWindow.cpp:938
int getAutoSaveTimerInterval()
Definition MainWindow.h:111
void keyReleaseEvent(QKeyEvent *_ke) override
Definition MainWindow.cpp:1390
static void restoreWidgetState(QWidget *_w, const QDomElement &_de)
Definition MainWindow.cpp:715
QMenu * m_viewMenu
Definition MainWindow.h:282
QWidget * toolBar()
Definition MainWindow.h:61
void closeEvent(QCloseEvent *_ce) override
Definition MainWindow.cpp:1285
friend class GuiApplication
Definition MainWindow.h:280
void toggleProjectNotesWin()
Definition MainWindow.cpp:1048
void updateViewMenu()
Definition MainWindow.cpp:1087
SessionState m_session
Definition MainWindow.h:286
void toggleMixerWin()
Definition MainWindow.cpp:1072
void setAllSubWindowsDetached(bool detached)
Definition MainWindow.cpp:587
QList< PluginView * > m_tools
Definition MainWindow.h:274
QAction * m_redoAction
Definition MainWindow.h:273
bool mayChangeProject(bool stopPlayback)
Asks whether changes made to the project are to be saved.
Definition MainWindow.cpp:619
QTimer m_autoSaveTimer
Definition MainWindow.h:277
bool saveProjectAs()
Definition MainWindow.cpp:822
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:268
bool m_ctrl
Definition MainWindow.h:266
keyModifiers()
Definition MainWindow.h:260
bool m_shift
Definition MainWindow.h:267