1 #pragma once 2 3 #include <QObject> 4 5 #include "control/controlencoder.h" 6 #include "control/controlproxy.h" 7 #include "util/memory.h" 8 9 class ControlObject; 10 class ControlPushButton; 11 class Library; 12 class LibraryControl; 13 class WLibrary; 14 class WLibrarySidebar; 15 class WSearchLineEdit; 16 class KeyboardEventFilter; 17 18 class LoadToGroupController : public QObject { 19 Q_OBJECT 20 public: 21 LoadToGroupController(LibraryControl* pParent, const QString& group); 22 virtual ~LoadToGroupController(); 23 24 signals: 25 void loadToGroup(const QString& group, bool); 26 27 public slots: 28 void slotLoadToGroup(double v); 29 void slotLoadToGroupAndPlay(double v); 30 31 private: 32 const QString m_group; 33 std::unique_ptr<ControlObject> m_pLoadControl; 34 std::unique_ptr<ControlObject> m_pLoadAndPlayControl; 35 }; 36 37 class LibraryControl : public QObject { 38 Q_OBJECT 39 public: 40 LibraryControl(Library* pLibrary); 41 virtual ~LibraryControl(); 42 43 void bindLibraryWidget(WLibrary* pLibrary, KeyboardEventFilter* pKeyboard); 44 void bindSidebarWidget(WLibrarySidebar* pLibrarySidebar); 45 void bindSearchboxWidget(WSearchLineEdit* pSearchbox); 46 47 signals: 48 void clearSearchIfClearButtonHasFocus(); 49 50 public slots: 51 // Deprecated navigation slots 52 void slotLoadSelectedTrackToGroup(const QString& group, bool play); 53 54 private slots: 55 void libraryWidgetDeleted(); 56 void sidebarWidgetDeleted(); 57 void searchboxWidgetDeleted(); 58 59 void slotMoveUp(double); 60 void slotMoveDown(double); 61 void slotMoveVertical(double); 62 void slotScrollUp(double); 63 void slotScrollDown(double); 64 void slotScrollVertical(double); 65 void slotMoveLeft(double); 66 void slotMoveRight(double); 67 void slotMoveHorizontal(double); 68 void slotMoveFocusForward(double); 69 void slotMoveFocusBackward(double); 70 void slotMoveFocus(double); 71 void slotGoToItem(double v); 72 73 void slotTrackColorPrev(double v); 74 void slotTrackColorNext(double v); 75 76 // Deprecated navigation slots 77 void slotSelectNextTrack(double v); 78 void slotSelectPrevTrack(double v); 79 void slotSelectTrack(double v); 80 void slotSelectSidebarItem(double v); 81 void slotSelectNextSidebarItem(double v); 82 void slotSelectPrevSidebarItem(double v); 83 void slotToggleSelectedSidebarItem(double v); 84 void slotLoadSelectedIntoFirstStopped(double v); 85 void slotAutoDjAddTop(double v); 86 void slotAutoDjAddBottom(double v); 87 void slotAutoDjAddReplace(double v); 88 89 void maybeCreateGroupController(const QString& group); 90 void slotNumDecksChanged(double v); 91 void slotNumSamplersChanged(double v); 92 void slotNumPreviewDecksChanged(double v); 93 94 void slotSortColumn(double v); 95 void slotSortColumnToggle(double v); 96 97 void slotFontSize(double v); 98 void slotIncrementFontSize(double v); 99 void slotDecrementFontSize(double v); 100 101 private: 102 Library* m_pLibrary; 103 104 // Simulate pressing a key on the keyboard 105 void emitKeyEvent(QKeyEvent&& event); 106 // Give the keyboard focus to the main library pane 107 void setLibraryFocus(); 108 109 // Controls to navigate vertically within currently focused widget (up/down buttons) 110 std::unique_ptr<ControlPushButton> m_pMoveUp; 111 std::unique_ptr<ControlPushButton> m_pMoveDown; 112 std::unique_ptr<ControlEncoder> m_pMoveVertical; 113 114 // Controls to QUICKLY navigate vertically within currently focused widget (pageup/pagedown buttons) 115 std::unique_ptr<ControlPushButton> m_pScrollUp; 116 std::unique_ptr<ControlPushButton> m_pScrollDown; 117 std::unique_ptr<ControlEncoder> m_pScrollVertical; 118 119 // Controls to navigate horizontally within currently selected item (left/right buttons) 120 std::unique_ptr<ControlPushButton> m_pMoveLeft; 121 std::unique_ptr<ControlPushButton> m_pMoveRight; 122 std::unique_ptr<ControlEncoder> m_pMoveHorizontal; 123 124 // Controls to navigate between widgets (tab/shit+tab button) 125 std::unique_ptr<ControlPushButton> m_pMoveFocusForward; 126 std::unique_ptr<ControlPushButton> m_pMoveFocusBackward; 127 std::unique_ptr<ControlEncoder> m_pMoveFocus; 128 129 // Control to choose the currently selected item in focused widget (double click) 130 std::unique_ptr<ControlObject> m_pGoToItem; 131 132 // Add to Auto-Dj Queue 133 std::unique_ptr<ControlObject> m_pAutoDjAddTop; 134 std::unique_ptr<ControlObject> m_pAutoDjAddBottom; 135 std::unique_ptr<ControlObject> m_pAutoDjAddReplace; 136 137 // Controls to sort the track view 138 std::unique_ptr<ControlEncoder> m_pSortColumn; 139 std::unique_ptr<ControlEncoder> m_pSortColumnToggle; 140 std::unique_ptr<ControlPushButton> m_pSortOrder; 141 142 // Controls to change track color 143 std::unique_ptr<ControlPushButton> m_pTrackColorPrev; 144 std::unique_ptr<ControlPushButton> m_pTrackColorNext; 145 146 // Font sizes 147 std::unique_ptr<ControlPushButton> m_pFontSizeIncrement; 148 std::unique_ptr<ControlPushButton> m_pFontSizeDecrement; 149 std::unique_ptr<ControlObject> m_pFontSizeKnob; 150 151 // Direct navigation controls for specific widgets (deprecated) 152 std::unique_ptr<ControlObject> m_pSelectNextTrack; 153 std::unique_ptr<ControlObject> m_pSelectPrevTrack; 154 std::unique_ptr<ControlObject> m_pSelectTrack; 155 std::unique_ptr<ControlObject> m_pSelectSidebarItem; 156 std::unique_ptr<ControlObject> m_pSelectPrevSidebarItem; 157 std::unique_ptr<ControlObject> m_pSelectNextSidebarItem; 158 std::unique_ptr<ControlObject> m_pToggleSidebarItem; 159 std::unique_ptr<ControlObject> m_pLoadSelectedIntoFirstStopped; 160 161 // Library widgets 162 WLibrary* m_pLibraryWidget; 163 WLibrarySidebar* m_pSidebarWidget; 164 WSearchLineEdit* m_pSearchbox; 165 166 // Other variables 167 ControlProxy m_numDecks; 168 ControlProxy m_numSamplers; 169 ControlProxy m_numPreviewDecks; 170 std::map<QString, std::unique_ptr<LoadToGroupController>> m_loadToGroupControllers; 171 }; 172