1 /*
2 Copyright (C) 2005-2007 Remon Sijrier
3 
4 This file is part of Traverso
5 
6 Traverso is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
19 
20 
21 */
22 
23 #ifndef INTERFACE_H
24 #define INTERFACE_H
25 
26 #include <QMainWindow>
27 #include <QHash>
28 
29 class Sheet;
30 class Track;
31 class Project;
32 class BusMonitor;
33 class InfoBox;
34 class ViewPort;
35 class ContextItem;
36 class Command;
37 
38 class QLabel;
39 class ExportDialog;
40 class CDWritingDialog;
41 class QStackedWidget;
42 class QHBoxLayout;
43 class QVBoxLayout;
44 class QUndoView;
45 class QDockWidget;
46 class QToolBar;
47 class QToolButton;
48 class ResourcesWidget;
49 class ResourcesInfoWidget;
50 class SheetWidget;
51 class CorrelationMeterWidget;
52 class SpectralMeterWidget;
53 class TransportConsoleWidget;
54 class SettingsDialog;
55 class ProjectManagerDialog;
56 class OpenProjectDialog;
57 class InfoToolBar;
58 class SysInfoToolBar;
59 class InsertSilenceDialog;
60 class MarkerDialog;
61 class BusSelectorDialog;
62 class NewSheetDialog;
63 class NewTrackDialog;
64 class NewProjectDialog;
65 class Ui_QuickStartDialog;
66 class RestoreProjectBackupDialog;
67 class ProgressToolBar;
68 struct MenuData;
69 
70 class Interface : public QMainWindow
71 {
72 	Q_OBJECT
73 	Q_CLASSINFO("show_export_widget", tr("Show Export Dialog"))
74 	Q_CLASSINFO("show_context_menu", tr("Show Context Menu"))
75 	Q_CLASSINFO("about_traverso", tr("About Traverso"))
76 	Q_CLASSINFO("show_project_manager_dialog", tr("Show Project Management Dialog"))
77 	Q_CLASSINFO("full_screen", tr("Full Screen"))
78 	Q_CLASSINFO("export_keymap", tr("Export keymap"))
79 	Q_CLASSINFO("start_transport", tr("Play"))
80 	Q_CLASSINFO("set_recordable_and_start_transport", tr("Record"));
81 
82 
83 public :
84 	Interface();
85 	~Interface();
86 
87 	static Interface* instance();
88 
89 	void select_fade_in_shape();
90 	void select_fade_out_shape();
91 	void show_busselector(Track* track);
92 	void set_insertsilence_track(Track* track);
93 
94 protected:
95 	void keyPressEvent ( QKeyEvent* e);
96 	void keyReleaseEvent ( QKeyEvent* e);
97 	void closeEvent ( QCloseEvent * event );
98 	QSize sizeHint () const;
99 	void changeEvent(QEvent *event);
100 	bool eventFilter(QObject *obj, QEvent *ev);
101 
102 private:
103 	QStackedWidget* 	centerAreaWidget;
104 	QHash<Sheet*, SheetWidget* > m_sheetWidgets;
105 	SheetWidget*		currentSheetWidget;
106 	QList<ViewPort* > 	currentProjectViewPortList;
107 	QHash<QString, QMenu*>	m_contextMenus;
108 	ExportDialog*		m_exportDialog;
109 	CDWritingDialog*	m_cdWritingDialog;
110 	QUndoView*		historyWidget;
111 	QDockWidget* 		historyDW;
112 	QDockWidget*		busMonitorDW;
113 	QDockWidget*		AudioSourcesDW;
114 	ResourcesWidget* 	audiosourcesview;
115 	QDockWidget*		correlationMeterDW;
116 	CorrelationMeterWidget*	correlationMeter;
117 	TransportConsoleWidget*	transportConsole;
118 	QDockWidget*		spectralMeterDW;
119 	SpectralMeterWidget*	spectralMeter;
120 	SettingsDialog*		m_settingsdialog;
121 	ProjectManagerDialog*	m_projectManagerDialog;
122 	OpenProjectDialog*	m_openProjectDialog;
123 	InsertSilenceDialog*	m_insertSilenceDialog;
124 	SysInfoToolBar* 	m_sysinfo;
125 	ProgressToolBar*	m_progressBar;
126 	BusSelectorDialog*	m_busSelector;
127 	NewSheetDialog*		m_newSheetDialog;
128 	NewTrackDialog*		m_newTrackDialog;
129 	NewProjectDialog*	m_newProjectDialog;
130 	QDialog*		m_quickStart;
131 	RestoreProjectBackupDialog* m_restoreProjectBackupDialog;
132 	Project*		m_project;
133 	bool			m_isFollowing;
134 
135 	BusMonitor* 		busMonitor;
136 	QToolBar* 		mainToolBar;
137 	QToolBar*		m_projectToolBar;
138 	QToolBar*		m_editToolBar;
139 	QToolButton*		openGlButton;
140 	QAction*		m_projectSaveAction;
141 	QAction*		m_projectSheetManagerAction;
142 	QAction*		m_projectExportAction;
143 	QAction*		m_sheetMenuAction;
144 	QAction*		m_snapAction;
145 	QAction*		m_followAction;
146 	QAction*		m_effectAction;
147 	QMenu*			m_encodingMenu;
148 	QMenu*			m_resampleQualityMenu;
149 	QMenu*			m_projectMenu;
150 	QMenu*			m_sheetMenu;
151 	QMenu*			m_editMenu;
152 	QMenu*			m_viewMenu;
153 	QMenu*			m_settingsMenu;
154 	QMenu*			m_helpMenu;
155 	QList<QAction*>		m_currentSheetActions;
156 
157 	void create_menus();
158 	void save_config_and_emit_message(const QString& message);
159 
160 	static Interface* m_instance;
161 
162 	QMenu* create_context_menu(QObject* item, QList<MenuData >* list = 0);
163 	QMenu* create_fade_selector_menu(const QString& fadeTypeName);
164 
165 public slots :
166 	void set_project(Project* project);
167 	void show_sheet(Sheet* sheet);
168 	void show_settings_dialog();
169 	void show_settings_dialog_sound_system_page();
170 	void open_help_browser();
171 	void process_context_menu_action(QAction* action);
172 	void set_fade_in_shape(QAction* action);
173 	void set_fade_out_shape(QAction* action);
174 	void config_changed();
175 	void import_audio();
176 	void show_restore_project_backup_dialog();
177 	void change_recording_format_to_wav();
178 	void change_recording_format_to_wav64();
179 	void change_recording_format_to_wavpack();
180 	void change_resample_quality_to_best();
181 	void change_resample_quality_to_high();
182 	void change_resample_quality_to_medium();
183 	void change_resample_quality_to_fast();
184 
185 	Command* full_screen();
186 	Command* about_traverso();
187 	Command* quick_start();
188 	Command* export_keymap();
189 	Command* get_keymap(QString &);
190 	Command* show_export_widget();
191 	Command* show_cd_writing_dialog();
192 	Command* show_context_menu();
193 	Command* show_open_project_dialog();
194 	Command* show_project_manager_dialog();
195 	Command* show_restore_project_backup_dialog(QString projectdir);
196 	Command* show_insertsilence_dialog();
197 	Command* show_marker_dialog();
198 	Command* show_newsheet_dialog();
199 	Command* show_newtrack_dialog();
200 	Command* show_newproject_dialog();
201 	Command* start_transport();
202 	Command* set_recordable_and_start_transport();
203 
204 
205 private slots:
206 	void delete_sheetwidget(Sheet*);
207 	void project_dir_change_detected();
208 	void project_load_failed(QString project, QString reason);
209 	void project_file_mismatch(QString rootdir, QString projectname);
210 	void snap_state_changed(bool state);
211 	void update_snap_state();
212 	void effect_state_changed(bool state);
213 	void update_effects_state();
214 	void follow_state_changed(bool state);
215 	void update_follow_state();
216 	void update_temp_follow_state(bool state);
217 	void sheet_selector_update_sheets();
218 	void sheet_selected();
219 	void sheet_selector_sheet_added(Sheet*);
220 	void sheet_selector_sheet_removed(Sheet*);
221 };
222 
223 
224 #include <QLCDNumber>
225 
226 class DigitalClock : public QLCDNumber
227 {
228 	Q_OBJECT
229 
230 	public:
231 		DigitalClock(QWidget *parent = 0);
232 
233 	private slots:
234 		void showTime();
235 };
236 
237 #endif
238 
239 // eof
240