--- gigedit/trunk/src/gigedit/mainwindow.h 2015/06/12 17:57:52 2773 +++ gigedit/trunk/src/gigedit/mainwindow.h 2017/05/30 20:17:12 3258 @@ -1,5 +1,5 @@ /* -*- c++ -*- - * Copyright (C) 2006 - 2015 Andreas Persson + * Copyright (C) 2006 - 2017 Andreas Persson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -20,8 +20,15 @@ #ifndef GIGEDIT_MAINWINDOW_H #define GIGEDIT_MAINWINDOW_H -#include +#ifdef LIBGIG_HEADER_FILE +# include LIBGIG_HEADER_FILE(gig.h) +# include LIBGIG_HEADER_FILE(Serialization.h) +#else +# include +# include +#endif +#include #include #include #include @@ -46,15 +53,23 @@ #ifndef OLD_THREADS #include #endif +#include "ManagedWindow.h" class MainWindow; -class PropDialog : public Gtk::Window, +class PropDialog : public ManagedWindow, public PropEditor { public: PropDialog(); void set_info(DLS::Info* info); void set_file(gig::File* file); + + // implementation for abstract methods of interface class "ManagedWindow" + virtual Settings::Property* windowSettingX() { return &Settings::singleton()->filePropsWindowX; } + virtual Settings::Property* windowSettingY() { return &Settings::singleton()->filePropsWindowY; } + virtual Settings::Property* windowSettingWidth() { return &Settings::singleton()->filePropsWindowW; } + virtual Settings::Property* windowSettingHeight() { return &Settings::singleton()->filePropsWindowH; } + protected: ChoiceEntry eFileFormat; StringEntry eName; @@ -83,7 +98,7 @@ void onFileFormatChanged(); }; -class InstrumentProps : public Gtk::Window, +class InstrumentProps : public ManagedWindow, public PropEditor { public: InstrumentProps(); @@ -93,6 +108,13 @@ sigc::signal& signal_name_changed() { return sig_name_changed; } + + // implementation for abstract methods of interface class "ManagedWindow" + virtual Settings::Property* windowSettingX() { return &Settings::singleton()->instrPropsWindowX; } + virtual Settings::Property* windowSettingY() { return &Settings::singleton()->instrPropsWindowY; } + virtual Settings::Property* windowSettingWidth() { return &Settings::singleton()->instrPropsWindowW; } + virtual Settings::Property* windowSettingHeight() { return &Settings::singleton()->instrPropsWindowH; } + protected: void set_Name(const gig::String& name); void set_IsDrum(bool value); @@ -172,7 +194,7 @@ float progress; }; -class MainWindow : public Gtk::Window { +class MainWindow : public ManagedWindow { public: MainWindow(); virtual ~MainWindow(); @@ -198,6 +220,15 @@ sigc::signal& signal_switch_sampler_instrument(); + sigc::signal signal_script_to_be_changed; + sigc::signal signal_script_changed; + + // implementation for abstract methods of interface class "ManagedWindow" + virtual Settings::Property* windowSettingX() { return &Settings::singleton()->mainWindowX; } + virtual Settings::Property* windowSettingY() { return &Settings::singleton()->mainWindowY; } + virtual Settings::Property* windowSettingWidth() { return &Settings::singleton()->mainWindowW; } + virtual Settings::Property* windowSettingHeight() { return &Settings::singleton()->mainWindowH; } + protected: Glib::RefPtr actionGroup; Glib::RefPtr uiManager; @@ -213,6 +244,19 @@ InstrumentProps instrumentProps; MidiRules midiRules; + /** + * Ensures that the 2 signals MainWindow::dimreg_to_be_changed_signal and + * MainWindowv::dimreg_changed_signal are always triggered correctly as a + * pair. It behaves similar to a "mutex lock guard" design pattern. + */ + class DimRegionChangeGuard : public SignalGuard { + public: + DimRegionChangeGuard(MainWindow* w, gig::DimensionRegion* pDimReg) : + SignalGuard(w->dimreg_to_be_changed_signal, w->dimreg_changed_signal, pDimReg) + { + } + }; + sigc::signal file_structure_to_be_changed_signal; sigc::signal file_structure_changed_signal; sigc::signal > samples_to_be_removed_signal; @@ -242,6 +286,13 @@ void on_saver_progress(); void on_saver_error(); void on_saver_finished(); + void updateMacroMenu(); + void onMacroSelected(int iMacro); + void setupMacros(); + void onMacrosSetupChanged(const std::vector& macros); + void applyMacro(Serialization::Archive& macro); + void onScriptSlotsModified(gig::Instrument* pInstrument); + void bringToFront(); void dimreg_all_dimregs_toggled(); gig::Instrument* get_instrument(); @@ -251,12 +302,16 @@ class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: ModelColumns() { + add(m_col_nr); add(m_col_name); add(m_col_instr); + add(m_col_scripts); } + Gtk::TreeModelColumn m_col_nr; Gtk::TreeModelColumn m_col_name; Gtk::TreeModelColumn m_col_instr; + Gtk::TreeModelColumn m_col_scripts; } m_Columns; Gtk::VBox m_VBox; @@ -333,6 +388,17 @@ Gtk::CheckButton dimreg_all_regions; Gtk::CheckButton dimreg_all_dimregs; Gtk::CheckButton dimreg_stereo; + + Gtk::HBox legend_hbox; + Gtk::Label labelLegend; + Gtk::Image imageNoSample; + Gtk::Label labelNoSample; + Gtk::Image imageMissingSample; + Gtk::Label labelMissingSample; + Gtk::Image imageLooped; + Gtk::Label labelLooped; + Gtk::Image imageSomeLoops; + Gtk::Label labelSomeLoops; DimRegionEdit dimreg_edit; Gtk::Notebook m_TreeViewNotebook; @@ -344,7 +410,7 @@ Glib::ustring sample_path; // file name of the sample to be // imported }; - std::list m_SampleImportQueue; + std::map m_SampleImportQueue; void on_action_file_new(); @@ -358,6 +424,8 @@ void show_midi_rules(); void show_script_slots(); void on_action_view_status_bar(); + void on_auto_restore_win_dim(); + void on_save_with_temporary_file(); void on_action_refresh_all(); void on_action_warn_user_on_extensions(); void on_action_sync_sampler_instrument_selection(); @@ -389,6 +457,30 @@ void show_intruments_tab(); void show_scripts_tab(); + void select_prev_region(); + void select_next_region(); + + void select_next_dim_rgn_zone(); + void select_prev_dim_rgn_zone(); + void select_add_next_dim_rgn_zone(); + void select_add_prev_dim_rgn_zone(); + void select_prev_dimension(); + void select_next_dimension(); + + Serialization::Archive m_serializationArchive; ///< Clipboard content. + std::vector m_macros; ///< User configured list of macros. + + void copy_selected_dimrgn(); + void paste_copied_dimrgn(); + void adjust_clipboard_content(); + void updateClipboardCopyAvailable(); + void updateClipboardPasteAvailable(); + void on_clipboard_owner_change(GdkEventOwnerChange* event); + void on_clipboard_get(Gtk::SelectionData& selection_data, guint info); + void on_clipboard_clear(); + void on_clipboard_received(const Gtk::SelectionData& selection_data); + void on_clipboard_received_targets(const std::vector& targets); + void add_instrument(gig::Instrument* instrument); Gtk::RadioMenuItem* add_instrument_to_menu(const Glib::ustring& name, int position = -1);