1 /* 2 * Copyright (C) 2002 - David W. Durham 3 * 4 * This file is part of ReZound, an audio editing application. 5 * 6 * ReZound is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published 8 * by the Free Software Foundation; either version 2 of the License, 9 * or (at your option) any later version. 10 * 11 * ReZound is distributed in the hope that it will be useful, but 12 * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 19 */ 20 21 #ifndef __CMainWindow_H__ 22 #define __CMainWindow_H__ 23 24 #include "../../config/common.h" 25 #include "fox_compat.h" 26 27 #include <map> 28 #include <vector> 29 #include <string> 30 31 class CSoundWindow; 32 class CMetersWindow; 33 class CActionMenuCommand; 34 class CNestedDataFile; 35 class AActionFactory; 36 37 class CMainWindow : public FXMainWindow 38 { 39 FXDECLARE(CMainWindow) 40 public: 41 42 CMainWindow(FXApp* a); 43 virtual ~CMainWindow(); 44 45 virtual void show(); 46 virtual void hide(); 47 48 void createMenus(); 49 50 long onQuit(FXObject *sender,FXSelector sel,void *ptr); 51 52 long onSetupKeyBindings(FXObject *sender,FXSelector sel,void *ptr); 53 54 long onFollowPlayPositionButton(FXObject *sender,FXSelector sel,void *ptr); 55 56 long onRenderClippingWarningButton(FXObject *sender,FXSelector sel,void *ptr); 57 58 long onDrawVerticalCuePositionsButton(FXObject *sender,FXSelector sel,void *ptr); 59 60 long onCrossfadeEdgesComboBox(FXObject *sender,FXSelector sel,void *ptr); 61 long onCrossfadeEdgesSettings(FXObject *sender,FXSelector sel,void *ptr); 62 63 long onClipboardComboBox(FXObject *sender,FXSelector sel,void *ptr); 64 65 // file action events 66 long onFileAction(FXObject *sender,FXSelector sel,void *ptr); 67 long onRecordingMacroTimer(FXObject *sender,FXSelector sel,void *ptr); 68 69 // play/record/transport/misc control events 70 long onControlAction(FXObject *sender,FXSelector sel,void *ptr); 71 72 long onShuttleReturn(FXObject *sender,FXSelector sel,void *ptr); 73 long onShuttleChange(FXObject *sender,FXSelector sel,void *ptr); 74 void positionShuttleGivenSpeed(double seekSpeed,const string shuttleControlScalar,bool springBack); 75 long onShuttleDialSpringButton(FXObject *sender,FXSelector sel,void *ptr); 76 long onShuttleDialScaleButton(FXObject *sender,FXSelector sel,void *ptr); 77 78 long onSoundListChange(FXObject *sender,FXSelector sel,void *ptr); 79 long onSoundListHotKey(FXObject *sender,FXSelector sel,void *ptr); 80 81 long onHotKeyFocusFixup(FXObject *sender,FXSelector sel,void *ptr); 82 83 // used to control the shuttle control with the keyboard 84 long onKeyboardShuttle(FXObject *sender,FXSelector sel,void *ptr); 85 86 long onViewKey(FXObject *sender,FXSelector sel,void *ptr); // main window gets view-change key presses because the sound window changes and we can't bind a key to any particualar object pointer 87 88 long onKeyPress(FXObject *sender,FXSelector sel,void *ptr); 89 long onKeyRelease(FXObject *sender,FXSelector sel,void *ptr); 90 long onMouseEnter(FXObject *sender,FXSelector sel,void *ptr); 91 92 long onDebugButton(FXObject *sender,FXSelector sel,void *ptr); 93 94 95 enum 96 { 97 ID_REOPEN_FILE=FXMainWindow::ID_LAST, 98 ID_CLOSE_FILE, 99 ID_REVERT_FILE, 100 101 ID_RECORD_MACRO, 102 ID_RECORDING_MACRO_TIMER, 103 104 ID_EDIT_USERNOTES, 105 106 ID_RECENT_ACTION, 107 108 ID_SHOW_ABOUT, 109 110 ID_SETUP_KEY_BINDINGS, 111 112 ID_QUIT, 113 114 ID_RECORD, 115 116 ID_PLAY_ALL_ONCE, 117 ID_PLAY_ALL_LOOPED, 118 ID_PLAY_SELECTION_ONCE, 119 ID_PLAY_SELECTION_LOOPED, 120 ID_PLAY_SELECTION_LOOPED_SKIP_MOST, 121 ID_PLAY_SELECTION_LOOPED_GAP_BEFORE_REPEAT, 122 ID_PLAY_SELECTION_START_TO_END, 123 ID_PLAY_LEFT_EDGE_OF_SCREEN_TO_END, 124 125 ID_STOP, 126 ID_PAUSE, 127 128 ID_JUMP_TO_BEGINNING, 129 ID_JUMP_TO_SELECTION_START, 130 131 ID_JUMP_TO_PREV_CUE, 132 ID_JUMP_TO_NEXT_CUE, 133 134 ID_SHUTTLE_DIAL, 135 ID_SHUTTLE_DIAL_SPRING_BUTTON, 136 ID_SHUTTLE_DIAL_SCALE_BUTTON, 137 138 // used for key bindings 139 ID_SHUTTLE_RETURN, 140 ID_SHUTTLE_BACKWARD, 141 ID_SHUTTLE_INCREASE_RATE, 142 ID_SHUTTLE_FORWARD, 143 144 145 ID_FIND_SELECTION_START, 146 ID_FIND_SELECTION_STOP, 147 148 ID_ZOOM_IN, 149 ID_ZOOM_FIT_SELECTION, 150 ID_ZOOM_OUT, 151 ID_ZOOM_OUT_FULL, 152 153 ID_TOGGLE_LEVEL_METERS, 154 ID_TOGGLE_STEREO_PHASE_METERS, 155 ID_TOGGLE_FREQUENCY_ANALYZER, 156 157 ID_UNDO_EDIT, 158 ID_CLEAR_UNDO_HISTORY, 159 160 ID_REDRAW, 161 162 ID_DEFRAG_MENUITEM, 163 ID_PRINT_SAT_MENUITEM, 164 ID_VERIFY_SAT_MENUITEM, 165 166 ID_FOLLOW_PLAY_POSITION_TOGGLE, 167 168 ID_RENDER_CLIPPING_WARNING_TOGGLE, 169 170 ID_DRAW_VERTICAL_CUE_POSITIONS_TOGGLE, 171 172 ID_CROSSFADE_EDGES_COMBOBOX, 173 ID_CROSSFADE_EDGES_SETTINGS_BUTTON, 174 175 ID_CLIPBOARD_COMBOBOX, 176 177 ID_SOUND_LIST, 178 179 ID_SOUND_LIST_HOTKEY_PREV, 180 ID_SOUND_LIST_HOTKEY1, 181 ID_SOUND_LIST_HOTKEY2, 182 ID_SOUND_LIST_HOTKEY3, 183 ID_SOUND_LIST_HOTKEY4, 184 ID_SOUND_LIST_HOTKEY5, 185 ID_SOUND_LIST_HOTKEY6, 186 ID_SOUND_LIST_HOTKEY7, 187 ID_SOUND_LIST_HOTKEY8, 188 ID_SOUND_LIST_HOTKEY9, 189 ID_SOUND_LIST_HOTKEY10, 190 191 ID_LAST 192 }; 193 194 void rebuildSoundWindowList(); getParentOfSoundWindows()195 FXComposite *getParentOfSoundWindows() { return soundWindowFrame; } 196 getMetersWindow()197 CMetersWindow *getMetersWindow() { return metersWindow; } 198 199 void actionMenuCommandTriggered(CActionMenuCommand *actionMenuCommand); 200 201 void setWhichClipboard(size_t whichClipboard); 202 203 protected: 204 CMainWindow()205 CMainWindow() {} 206 207 208 private: 209 map<const string,FXMenuCaption *> menuItemRegistry; 210 void buildActionMap(); 211 void buildMenu(FXMenuPane *menu,const CNestedDataFile *menuLayoutFile,const string menuKey,const string itemName); 212 213 FXMenuBar *menubar; 214 FXMenuPane *dummymenu; 215 FXPacker *contents; // top horizontal main frame which contains play controls and action controls 216 FXPacker *soundWindowFrame; // parent of all sound windows (only one is visible though) 217 CMetersWindow *metersWindow; 218 219 FXFont *shuttleFont; 220 FXFont *soundListFont; 221 FXFont *soundListHeaderFont; 222 223 FXDial *shuttleDial; 224 FXLabel *shuttleLabel; 225 FXToggleButton *shuttleDialSpringButton; 226 FXButton *shuttleDialScaleButton; 227 228 FXCheckButton *followPlayPositionButton; 229 FXCheckButton *renderClippingWarningButton; 230 FXCheckButton *drawVerticalCuePositionsButton; 231 FXComboBox *crossfadeEdgesComboBox; 232 FXComboBox *clipboardComboBox; 233 FXButton *recordMacroButton; 234 235 FXIconList *soundList; 236 237 FXCursor *playMouseCursor; 238 FXCursor *addCueMouseCursor; 239 240 FXMenuCommand *toggleLevelMetersMenuItem; 241 FXMenuCommand *toggleStereoPhaseMetersMenuItem; 242 FXMenuCommand *toggleFrequencyAnalyzerMenuItem; 243 244 FXMenuPane *recentActionsMenu; 245 246 friend class CRecentActionsPopup; 247 vector<CActionMenuCommand *> recentActions; 248 249 AActionFactory *reopenActionFactory; 250 251 void addActionToKeyBindingRegistery(const string name,FXMenuCommand *mc); 252 void setupKeyBindings(); 253 254 void buildLADSPAMenus(); 255 }; 256 257 258 259 #endif 260