--- gigedit/trunk/src/gigedit/mainwindow.h 2014/06/11 20:26:26 2624 +++ gigedit/trunk/src/gigedit/mainwindow.h 2015/01/12 23:28:04 2701 @@ -1,5 +1,5 @@ /* -*- c++ -*- - * Copyright (C) 2006 - 2014 Andreas Persson + * Copyright (C) 2006 - 2015 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 @@ -118,9 +118,9 @@ NoteEntry eDimensionKeyRangeHigh; }; -class LoadDialog : public Gtk::Dialog { +class ProgressDialog : public Gtk::Dialog { public: - LoadDialog(const Glib::ustring& title, Gtk::Window& parent); + ProgressDialog(const Glib::ustring& title, Gtk::Window& parent); void set_fraction(float fraction) { progressBar.set_fraction(fraction); } protected: Gtk::ProgressBar progressBar; @@ -131,10 +131,12 @@ Loader(const char* filename); void launch(); Glib::Dispatcher& signal_progress(); - Glib::Dispatcher& signal_finished(); + Glib::Dispatcher& signal_finished(); ///< Finished successfully, without error. + Glib::Dispatcher& signal_error(); void progress_callback(float fraction); float get_progress(); - const char* filename; + const Glib::ustring filename; + Glib::ustring error_message; gig::File* gig; private: @@ -142,6 +144,30 @@ void thread_function(); Glib::Dispatcher finished_dispatcher; Glib::Dispatcher progress_dispatcher; + Glib::Dispatcher error_dispatcher; + Glib::Threads::Mutex progressMutex; + float progress; +}; + +class Saver : public sigc::trackable { +public: + Saver(gig::File* file, Glib::ustring filename = ""); ///< one argument means "save", two arguments means "save as" + void launch(); + Glib::Dispatcher& signal_progress(); + Glib::Dispatcher& signal_finished(); ///< Finished successfully, without error. + Glib::Dispatcher& signal_error(); + void progress_callback(float fraction); + float get_progress(); + gig::File* gig; + const Glib::ustring filename; + Glib::ustring error_message; + +private: + Glib::Threads::Thread* thread; + void thread_function(); + Glib::Dispatcher finished_dispatcher; + Glib::Dispatcher progress_dispatcher; + Glib::Dispatcher error_dispatcher; Glib::Threads::Mutex progressMutex; float progress; }; @@ -170,6 +196,8 @@ sigc::signal& signal_keyboard_key_hit(); sigc::signal& signal_keyboard_key_released(); + sigc::signal& signal_switch_sampler_instrument(); + protected: Glib::RefPtr actionGroup; Glib::RefPtr uiManager; @@ -199,12 +227,22 @@ sigc::signal note_on_signal; sigc::signal note_off_signal; + sigc::signal switch_sampler_instrument_signal; + void on_instrument_selection_change(Gtk::RadioMenuItem* item); void on_sel_change(); void region_changed(); void dimreg_changed(); + void select_instrument(gig::Instrument* instrument); + bool select_dimension_region(gig::DimensionRegion* dimRgn); + void select_sample(gig::Sample* sample); void on_loader_progress(); void on_loader_finished(); + void on_loader_error(); + void on_saver_progress(); + void on_saver_error(); + void on_saver_finished(); + void dimreg_all_dimregs_toggled(); gig::Instrument* get_instrument(); void add_region_to_dimregs(gig::Region* region, bool stereo, bool all_dimregs); @@ -321,6 +359,7 @@ void show_script_slots(); void on_action_view_status_bar(); void on_action_warn_user_on_extensions(); + void on_action_sync_sampler_instrument_selection(); void on_action_help_about(); // sample right-click popup actions @@ -342,13 +381,18 @@ void on_action_duplicate_instrument(); void on_action_remove_instrument(); + void show_samples_tab(); + void show_intruments_tab(); + void show_scripts_tab(); + 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; + ProgressDialog* progress_dialog; Loader* loader; + Saver* saver; void load_gig(gig::File* gig, const char* filename, bool isSharedInstrument = false); void updateSampleRefCountMap(gig::File* gig); @@ -367,6 +411,13 @@ bool check_if_savable(); void on_button_release(GdkEventButton* button); + void on_instruments_treeview_drag_begin(const Glib::RefPtr& context); + void on_instruments_treeview_drag_data_get(const Glib::RefPtr&, + Gtk::SelectionData& selection_data, guint, guint); + void on_instruments_treeview_drop_drag_data_received( + const Glib::RefPtr& context, int, int, + const Gtk::SelectionData& selection_data, guint, guint time + ); void on_scripts_treeview_drag_begin(const Glib::RefPtr& context); void on_scripts_treeview_drag_data_get(const Glib::RefPtr&, Gtk::SelectionData& selection_data, guint, guint); @@ -380,6 +431,7 @@ void script_name_changed(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter); + void script_double_clicked(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column); void sample_name_changed(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter); void instrument_name_changed(const Gtk::TreeModel::Path& path,