--- gigedit/trunk/src/gigedit/mainwindow.h 2007/08/26 09:29:52 1303 +++ gigedit/trunk/src/gigedit/mainwindow.h 2014/05/18 18:55:29 2560 @@ -1,5 +1,5 @@ /* -*- c++ -*- - * Copyright (C) 2006, 2007 Andreas Persson + * Copyright (C) 2006 - 2014 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 @@ -26,41 +26,84 @@ #include #include #include +#include #include #include +#include #include #include #include #include +#include +#include #include #include "regionchooser.h" #include "dimregionchooser.h" #include "dimregionedit.h" +#include "midirules.h" +#ifndef OLD_THREADS +#include +#endif class MainWindow; -class PropDialog : public Gtk::Window { +class PropDialog : public Gtk::Window, + public PropEditor { public: PropDialog(); void set_info(DLS::Info* info); + void set_file(gig::File* file); protected: - Gtk::Table table; - Gtk::Label label[16]; - Gtk::Entry entry[16]; + ChoiceEntry eFileFormat; + StringEntry eName; + StringEntry eCreationDate; + StringEntryMultiLine eComments; + StringEntry eProduct; + StringEntry eCopyright; + StringEntry eArtists; + StringEntry eGenre; + StringEntry eKeywords; + StringEntry eEngineer; + StringEntry eTechnician; + StringEntry eSoftware; + StringEntry eMedium; + StringEntry eSource; + StringEntry eSourceForm; + StringEntry eCommissioned; + StringEntry eSubject; + Gtk::VBox vbox; + Gtk::HButtonBox buttonBox; + Gtk::Button quitButton; + Table table; + + gig::File* m_file; + + void onFileFormatChanged(); }; -class InstrumentProps : public Gtk::Window { +class InstrumentProps : public Gtk::Window, + public PropEditor { public: InstrumentProps(); void set_instrument(gig::Instrument* instrument); - sigc::signal signal_instrument_changed(); + gig::Instrument* get_instrument() { return m; } + void update_name(); + sigc::signal& signal_name_changed() { + return sig_name_changed; + } protected: + void set_Name(const gig::String& name); + void set_IsDrum(bool value); + void set_MIDIBank(uint16_t value); + void set_MIDIProgram(uint32_t value); + + sigc::signal sig_name_changed; Gtk::VBox vbox; Gtk::HButtonBox buttonBox; Gtk::Button quitButton; - Gtk::Table table; + Table table; StringEntry eName; BoolEntry eIsDrum; NumEntryTemp eMIDIBank; @@ -73,13 +116,6 @@ BoolEntry ePianoReleaseMode; NoteEntry eDimensionKeyRangeLow; NoteEntry eDimensionKeyRangeHigh; - int rowno; - 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; }; class LoadDialog : public Gtk::Dialog { @@ -102,11 +138,11 @@ gig::File* gig; private: - Glib::Thread* thread; + Glib::Threads::Thread* thread; void thread_function(); Glib::Dispatcher finished_dispatcher; Glib::Dispatcher progress_dispatcher; - Glib::Mutex progressMutex; + Glib::Threads::Mutex progressMutex; float progress; }; @@ -117,23 +153,62 @@ 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_changed(); + sigc::signal& signal_sample_ref_changed(); + + sigc::signal& signal_note_on(); + sigc::signal& signal_note_off(); + + sigc::signal& signal_keyboard_key_hit(); + sigc::signal& signal_keyboard_key_released(); 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; + MidiRules midiRules; + + 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_changed_signal; + sigc::signal sample_ref_changed_signal; + + sigc::signal note_on_signal; + sigc::signal note_off_signal; - void on_instrument_selection_change(int index); + void on_instrument_selection_change(Gtk::RadioMenuItem* item); void on_sel_change(); void region_changed(); void dimreg_changed(); void on_loader_progress(); void on_loader_finished(); + void dimreg_all_dimregs_toggled(); + gig::Instrument* get_instrument(); + void add_region_to_dimregs(gig::Region* region, bool stereo, bool all_dimregs); + void update_dimregs(); class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: @@ -154,6 +229,8 @@ Gtk::TreeView m_TreeView; Glib::RefPtr m_refTreeModel; + Gtk::Menu* instrument_menu; + class SamplesModel : public Gtk::TreeModel::ColumnRecord { public: SamplesModel() { @@ -180,9 +257,14 @@ Gtk::TreeView m_TreeViewSamples; Glib::RefPtr m_refSamplesTreeModel; + Gtk::VBox dimreg_vbox; + Gtk::HBox dimreg_hbox; + Gtk::Label dimreg_label; + Gtk::CheckButton dimreg_all_regions; + Gtk::CheckButton dimreg_all_dimregs; + Gtk::CheckButton dimreg_stereo; DimRegionEdit dimreg_edit; - Gtk::Notebook m_Notebook; Gtk::Notebook m_TreeViewNotebook; struct SampleImportItem { @@ -202,6 +284,10 @@ void on_action_file_properties(); void on_action_quit(); void show_instr_props(); + bool instr_props_set_instrument(); + void show_midi_rules(); + void on_action_view_status_bar(); + void on_action_warn_user_on_extensions(); void on_action_help_about(); // sample right-click popup actions @@ -209,20 +295,31 @@ void on_action_sample_properties(); void on_action_add_group(); void on_action_add_sample(); + void on_action_replace_all_samples_in_all_groups(); void on_action_remove_sample(); void on_action_add_instrument(); + void on_action_duplicate_instrument(); void on_action_remove_instrument(); + void add_instrument(gig::Instrument* instrument); + Gtk::RadioMenuItem* add_instrument_to_menu(const Glib::ustring& name, + int position = -1); + void remove_instrument_from_menu(int index); + 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; + std::string current_gig_dir; + std::string current_sample_dir; + + void set_file_is_shared(bool); bool file_save(); bool file_save_as(); @@ -241,17 +338,29 @@ const Gtk::TreeModel::iterator& iter); void instrument_name_changed(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter); + void instr_name_changed_by_instr_props(Gtk::TreeModel::iterator& it); + sigc::connection instrument_name_connection; + + void on_action_combine_instruments(); + void on_action_merge_files(); + void mergeFiles(const std::vector& filenames); void __import_queued_samples(); void __clear(); + void __refreshEntireGUI(); bool close_confirmation_dialog(); + bool leaving_shared_mode_dialog(); Gtk::Menu* popup_menu; bool on_delete_event(GdkEventAny* event); bool first_call_to_drag_data_get; + + bool is_copy_samples_unity_note_enabled() const; + bool is_copy_samples_fine_tune_enabled() const; + bool is_copy_samples_loop_enabled() const; }; #endif