summaryrefslogtreecommitdiff
path: root/muse_qt4_evolution/muse/muse.h
blob: 8a9d4f689549e4eef717f13ebd83d609d05717c4 (plain)
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
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
//=============================================================================
//  MusE
//  Linux Music Editor
//  $Id:$
//
//  Copyright (C) 2002-2006 by Werner Schweer and others
//
//  This program is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License version 2.
//
//  This program 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, write to the Free Software
//  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//=============================================================================

#ifndef __APP_H__
#define __APP_H__

#include "shortcuts.h"
#include "cobject.h"
#include "widgets/tools.h"

namespace AL {
      class Xml;
      class Pos;
      };
using AL::Xml;
using AL::Pos;

class Part;
class PartList;
class Transport;
class BigTime;
class Arranger;
class Track;
class MidiSyncConfig;
class MRConfig;
class MetronomeConfig;
class AudioConf;
class MidiFileConfig;
class MidiFilterConfig;
class MarkerView;
class MidiInputTransformDialog;
class MidiTransformerDialog;
class RhythmGen;
class MidiTrack;
class ShortcutConfig;
class PreferencesDialog;
class EditInstrument;
class Mixer;
class ExportMidiDialog;
class ListEdit;
class Ctrl;

extern void configMidiController();

//---------------------------------------------------------
//   MusE
//---------------------------------------------------------

class MusE : public QMainWindow // , public Ui::MuseBase
      {
      Q_OBJECT

      QAction* fileSaveAction;
      QAction* fileSaveAsAction;
      QAction* fileOpenAction;
      QAction* pianoAction;
      QAction* waveAction;
      QAction* trackerAction;
      QAction* fileNewAction;

      QString appName;

      QToolBar *tools;
      EditToolBar *tools1;
      int _raster;

      Transport* transport;
      QAction* tr_id;
      BigTime* bigtime;
      QAction* bt_id;
      MarkerView* markerView;
      QAction* mk_id;
	Mixer* mixer1;
      QAction* aid1a;
	Mixer* mixer2;
      QAction* aid1b;
      ListEdit* listEditor;

      EditInstrument* editInstrument;

      QMenu *menu_file, *menuView, *menuSettings, *menu_help;
      QMenu *menuEdit, *menuStructure;
      QMenu* menu_audio;
      QMenu* menu_functions;
      QMenu* select, *master, *midiEdit, *addTrack;
      QMenu* follow;
      QMenu* midiInputPlugins;

      QAction* aid2;
      QAction* aid3;
      QAction* fid0;
      QAction* fid1;
      QAction* fid2;
      QAction* cutAction;
      QAction* copyAction;
      QAction* pasteAction;

      QWidget* midiPortConfig;
      QWidget* softSynthesizerConfig;
      MidiSyncConfig* midiSyncConfig;
      MRConfig* midiRemoteConfig;
      RhythmGen* midiRhythmGenerator;
      MetronomeConfig* metronomeConfig;
      AudioConf* audioConfig;
      MidiFileConfig* midiFileConfig;
      MidiFilterConfig* midiFilterConfig;
      MidiInputTransformDialog* midiInputTransform;
      ShortcutConfig* shortcutConfig;
      PreferencesDialog* preferencesDialog;
      ExportMidiDialog* exportMidiDialog;

      MidiTransformerDialog* midiTransformerDialog;
      QMenu* openRecent;
      QSpinBox* globalTempoSpinBox;
      QComboBox* rasterCombo;

      QDialog* projectPropsDialog;

      //------------------------------------------

      bool readMidi(FILE*);
      void processTrack(MidiTrack* track);

      void write(Xml& xml) const;

      void setFollow(FollowMode);
      void readConfigParts(QDomNode);
      void readCtrl(QDomNode, int port, int channel);
      PartList* getMidiPartsToEdit();
      Part* readPart(QDomNode);
      bool checkRegionNotNull();
      void loadProject1(const QString&);
      void writeGlobalConfiguration(Xml&) const;
      void writeConfiguration(Xml&) const;
      void updateConfiguration();

      bool leaveProject();

      virtual void focusInEvent(QFocusEvent*);
      void addMidiFile(const QString name);
      void copyParts(bool);
      void writeSettings();

   signals:
      void configChanged();
      void rasterChanged(int);
      void startLoadSong();

   private slots:
      void beat();
      void loadProject();
      void quitDoc();
      void about();
      void aboutQt();
      void startHelpBrowser();
      void startHomepageBrowser();
      void startBugBrowser();
      void importMidi();
      void importWave();
      bool importWave(const QString&);
      void exportMidi();

      void configMidiSync();
      void configMidiFile();
      void configShortCuts();

      void startMasterEditor();

      void startDrumEditor();
      void startDrumEditor(PartList* pl);
      void startEditor(Part*);
      void startEditor(PartList*, int);
      void startPianoroll();
      void startPianoroll(PartList* pl);
      void startMidiTrackerEditor();
      void startMidiTrackerEditor(PartList* pl);
      void startWaveEditor();
      void startWaveEditor(PartList*);
      void writeGlobalConfiguration() const;
      void startEditInstrument();

      void startListEditor();
      void startListEditor(PartList*);

      void showProjectPropsDialog();

      void openRecentMenu();
      void selectProject(QAction*);
      void cmd(QAction*);
      void clipboardChanged();
      void transpose();
      void modifyGateTime();
      void modifyVelocity();
      void crescendo();
      void thinOut();
      void eraseEvent();
      void noteShift();
      void moveClock();
      void copyMeasure();
      void eraseMeasure();
      void deleteMeasure();
      void createMeasure();
      void mixTrack();
      void globalCut();
      void globalInsert();
      void globalSplit();
      void copyRange();
      void cutEvents();
      void bounceToTrack();
      void resetMidiDevices();
      void initMidiDevices();
      void localOff();
      void bigtimeClosed();
      void transportClosed();
      void markerClosed();
      void mixer1Closed();
      void mixer2Closed();
      void syncChanged();
      void preferences();
      void aboutToShowAddTrack();
      void setRaster(int);
      void playToggle();
      void saveAsTemplate();

   public slots:
      void bounceToFile();
      void closeEvent(QCloseEvent*e);
      void loadProject(const QString&);
      bool seqStart();
      void showTransport(bool flag);
      void showBigtime(bool);
      void showMixer1(bool);
      void showMixer2(bool);
      void showMarker(bool on);
      void importMidi(const QString &file);
      void globalPitchChanged(int val);
      void globalTempoChanged(int val);
      bool seqRestart();
      void setTempo50();
      void setTempo100();
      void setTempo200();
      void setGlobalTempo(int val);
      void setTool(int);
      void setTool(const QString&);
      void startEditor(Part*, int);
      bool save();
      bool saveAs();

   public:
      MusE();
      Arranger* arranger;
      QRect configGeometryMain;
      void kbAccel(int);
      void changeConfig(bool writeFlag);

      void seqStop();
      void setHeartBeat();
      QWidget* transportWindow();
      QWidget* bigtimeWindow();
      QWidget* mixer1Window();
      QWidget* mixer2Window();
      bool importWaveToTrack(const QString& name, Track* track, const Pos&);

      void selectionChanged();

      int version;      // last *.med file version
                        // 0xaabb   aa - major version, bb minor version
	int raster() const { return _raster; }
	void setupTransportToolbar(QToolBar* tb) const;
      void readToplevels(QDomNode);
      void initRaster(int);

      QAction* startAction;
      QAction* rewindAction;
      QAction* forwardAction;
      QAction* stopAction;
      QAction* playAction;

      void showListEditor(const Pos&, Track*, Part*, Ctrl*);
      void readSettings();
      };

//---------------------------------------------------------
//   MuseApplication
//---------------------------------------------------------

class MuseApplication : public QApplication {
      MusE* muse;

   public:
      MuseApplication(int& argc, char** argv);
      void setMuse(MusE* m) { muse = m; }
      static Shortcut sc[];
      };

extern MusE* muse;
extern QStyle* smallStyle;
extern void addProject(const QString& name);

#endif