--- gigedit/trunk/src/gigedit/mainwindow.h 2007/08/26 09:29:52 1303 +++ gigedit/trunk/src/gigedit/mainwindow.h 2007/10/27 12:28:33 1460 @@ -32,6 +32,8 @@ #include #include #include +#include +#include #include @@ -55,8 +57,48 @@ public: InstrumentProps(); void set_instrument(gig::Instrument* instrument); - sigc::signal signal_instrument_changed(); + sigc::signal& signal_instrument_changed(); protected: + gig::Instrument* instrument; + int update_model; + + template + void set_value(T value, sigc::slot setter) { + if (update_model == 0) { + setter(this, value); + instrument_changed(); + } + } + + template + void connect(C& widget, T gig::Instrument::* member) { + widget.signal_value_changed().connect( + sigc::compose( + sigc::bind(sigc::mem_fun(*this, &InstrumentProps::set_value), + sigc::bind(sigc::mem_fun(&InstrumentProps::set_member), member)), + sigc::mem_fun(widget, &C::get_value))); + } + + template + void connect(C& widget, void (InstrumentProps::*setter)(T)) { + widget.signal_value_changed().connect( + sigc::compose( + sigc::bind(sigc::mem_fun(*this, &InstrumentProps::set_value), + sigc::mem_fun(setter)), + sigc::mem_fun(widget, &C::get_value))); + } + + template + void set_member(T value, T gig::Instrument::* member) { + instrument->*member = value; + } + + void set_IsDrum(bool value); + void set_MIDIBank(uint16_t value); + void set_MIDIProgram(uint32_t value); + void set_DimensionKeyRange_low(uint8_t value); + void set_DimensionKeyRange_high(uint8_t value); + Gtk::VBox vbox; Gtk::HButtonBox buttonBox; Gtk::Button quitButton; @@ -77,8 +119,6 @@ void add_prop(BoolEntry& prop); void add_prop(BoolEntryPlus6& prop); void add_prop(LabelWidget& prop); - void key_range_low_changed(); - void key_range_high_changed(); sigc::signal instrument_changed; }; @@ -117,17 +157,40 @@ void load_file(const char* name); void load_instrument(gig::Instrument* instr); void file_changed(); + sigc::signal& signal_file_structure_to_be_changed(); + sigc::signal& signal_file_structure_changed(); + sigc::signal >& signal_samples_to_be_removed(); + sigc::signal& signal_samples_removed(); + sigc::signal& signal_region_to_be_changed(); + sigc::signal& signal_region_changed(); + sigc::signal& signal_dimreg_to_be_changed(); + sigc::signal& signal_dimreg_changed(); + sigc::signal& signal_sample_ref_changed(); protected: Glib::RefPtr actionGroup; Glib::RefPtr uiManager; + Gtk::Statusbar m_StatusBar; + Gtk::Label m_AttachedStateLabel; + Gtk::Image m_AttachedStateImage; + RegionChooser m_RegionChooser; DimRegionChooser m_DimRegionChooser; PropDialog propDialog; InstrumentProps instrumentProps; + sigc::signal file_structure_to_be_changed_signal; + sigc::signal file_structure_changed_signal; + sigc::signal > samples_to_be_removed_signal; + sigc::signal samples_removed_signal; + sigc::signal region_to_be_changed_signal; + sigc::signal region_changed_signal; + sigc::signal dimreg_to_be_changed_signal; + sigc::signal dimreg_changed_signal; + sigc::signal sample_ref_changed_signal; + void on_instrument_selection_change(int index); void on_sel_change(); void region_changed(); @@ -202,6 +265,7 @@ void on_action_file_properties(); void on_action_quit(); void show_instr_props(); + void on_action_view_status_bar(); void on_action_help_about(); // sample right-click popup actions @@ -216,14 +280,17 @@ LoadDialog* load_dialog; Loader* loader; - void load_gig(gig::File* gig, const char* filename); + void load_gig(gig::File* gig, const char* filename, bool isSharedInstrument = false); gig::File* file; + bool file_is_shared; bool file_has_name; bool file_is_changed; std::string filename; std::string current_dir; + void set_file_is_shared(bool); + bool file_save(); bool file_save_as(); bool check_if_savable(); @@ -246,6 +313,7 @@ void __clear(); bool close_confirmation_dialog(); + bool leaving_shared_mode_dialog(); Gtk::Menu* popup_menu;