#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct FileInfo { wxString Path; std::string Extension; std::string Filename; }; class MainFrame : public wxFrame { public: MainFrame(); ~MainFrame(); private: // ------------------------------------------------------------------- // Main Panel wxPanel* m_MainPanel; wxBoxSizer* m_MainSizer; private: // ------------------------------------------------------------------- // Splitter windows wxSplitterWindow* m_TopSplitter; wxSplitterWindow* m_BottomSplitter; // ------------------------------------------------------------------- // Top panel controls wxPanel* m_TopPanel; wxBoxSizer* m_TopSizer; wxBoxSizer* m_TopPanelMainSizer; wxBoxSizer* m_WaveformDisplaySizer; wxSVGCtrl* m_WaveformViewer; wxBoxSizer* m_BrowserControlSizer; wxButton* m_PlayButton; wxToggleButton* m_LoopButton; wxButton* m_StopButton; wxButton* m_SettingsButton; wxToggleButton* m_MuteButton; wxStaticText* m_SamplePosition; wxSlider* m_VolumeSlider; wxCheckBox* m_AutoPlayCheck; // ------------------------------------------------------------------- // Left panel controls wxPanel* m_BottomLeftPanel; wxPanel* m_CollectionViewPanel; wxWindow* m_TrashPaneWindow; wxNotebook* m_ViewChoice; wxBoxSizer* m_BottomLeftPanelMainSizer; wxBoxSizer* m_CollectionViewMainSizer; wxBoxSizer* m_CollectionViewFavoritesSizer; wxBoxSizer* m_CollectionViewTrashSizer; wxBoxSizer* m_CollectionViewButtonSizer; wxBoxSizer* m_TrashItemSizer; wxSizerItem *m_CollectionViewTrashSizerItem; wxDirCtrl* m_DirCtrl; wxDataViewTreeCtrl* m_CollectionView; wxDataViewItem root_node; wxTreeItemId trash_root_node; wxCollapsiblePane* m_TrashPane; wxTreeCtrl* m_TrashedItems; wxButton* m_AddTreeItemButton; wxButton* m_RemoveTreeItemButton; wxButton* m_RestoreTrashedItemButton; // ------------------------------------------------------------------- // Right panel controls wxPanel* m_BottomRightPanel; wxBoxSizer* m_BottomRightPanelMainSizer; wxBoxSizer* m_SearchBoxSizer; wxBoxSizer* m_ListCtrlSizer; wxSearchCtrl* m_SearchBox; wxInfoBar* m_InfoBar; wxDataViewListCtrl* m_SampleListView; // ------------------------------------------------------------------- // MediaCtrl wxMediaCtrl* m_MediaCtrl; // ------------------------------------------------------------------- // Timer wxTimer* m_Timer; // ------------------------------------------------------------------- // FileSystemWatcher wxFileSystemWatcher* m_FsWatcher; private: // ------------------------------------------------------------------- bool bAutoplay = false; bool bLoop = false; bool bMuted = false; bool bStopped = false; // ------------------------------------------------------------------- const std::string m_ConfigFilepath; const std::string m_DatabaseFilepath; private: // ------------------------------------------------------------------- // Top panel control handlers void OnClickPlay(wxCommandEvent& event); void OnClickLoop(wxCommandEvent& event); void OnClickStop(wxCommandEvent& event); void OnClickMute(wxCommandEvent& event); void OnMediaFinished(wxMediaEvent& event); void OnCheckAutoplay(wxCommandEvent& event); void OnSlideVolume(wxScrollEvent& event); void OnClickSettings(wxCommandEvent& event); // ------------------------------------------------------------------- // DirCtrl event handlers void OnClickDirCtrl(wxCommandEvent& event); void OnDragFromDirCtrl(wxTreeEvent& event); // ------------------------------------------------------------------- // TrashPane event handlers void OnExpandTrash(wxCollapsiblePaneEvent& event); void OnClickRestoreTrashItem(wxCommandEvent& event); // ------------------------------------------------------------------- // CollectionViewPanel button event handlers // void OnClickCollectionView(wxTreeEvent& event); void OnClickCollectionAdd(wxCommandEvent& event); void OnClickCollectionRemove(wxCommandEvent& event); // ------------------------------------------------------------------- // SearchCtrl event handlers void OnDoSearch(wxCommandEvent& event); void OnCancelSearch(wxCommandEvent& event); // ------------------------------------------------------------------- // SampleListView event handlers void OnCheckFavorite(wxDataViewEvent& event); void OnClickSampleView(wxDataViewEvent& event); void OnDragAndDropToSampleListView(wxDropFilesEvent& event); void OnDragFromSampleView(wxDataViewEvent& event); void OnShowSampleListViewContextMenu(wxDataViewEvent& event); void OnSampleListViewContextMenuSelect(wxCommandEvent& event); // ------------------------------------------------------------------- // Timer update event handler void UpdateElapsedTime(wxTimerEvent& event); // ------------------------------------------------------------------- void AddSamples(wxArrayString& files); void OnAutoImportDir(); // ------------------------------------------------------------------- void LoadDatabase(); void RefreshDatabase(); void LoadConfigFile(); // ------------------------------------------------------------------- // Getters FileInfo GetFileNamePathAndExtension(const wxString& selected, bool checkExtension = true, bool doGetFilename = true) const; // ------------------------------------------------------------------- // Directory watchers bool CreateWatcherIfNecessary(); void CreateWatcher(); // wxString TagLibTowx(const TagLib::String& in); // ------------------------------------------------------------------- friend class App; };