--- gigedit/trunk/src/gigedit/gigedit.cpp 2007/06/10 10:56:11 1225 +++ gigedit/trunk/src/gigedit/gigedit.cpp 2007/09/09 16:53:29 1333 @@ -29,28 +29,70 @@ int argc = 1; const char* argv_c[] = { "gigedit" }; char** argv = const_cast(argv_c); +//FIXME: Gtk only allows to instantiate one Gtk::Main object per process, so this might crash other Gtk applications, i.e. launched as plugins by LinuxSampler +Gtk::Main kit(argc, argv); static void __init_app() { - setlocale(LC_ALL, ""); - bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); - bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); - textdomain(GETTEXT_PACKAGE); + static bool process_initialized = false; + if (!process_initialized) { + std::cout << "Initializing 3rd party services needed by gigedit.\n" + << std::flush; + setlocale(LC_ALL, ""); + bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); + bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); + textdomain(GETTEXT_PACKAGE); + // make sure thread_init() is called once and ONLY once per process + if (!Glib::thread_supported()) Glib::thread_init(); - Glib::thread_init(); + process_initialized = true; + } +} + +static void __connect_signals(GigEdit* gigedit, MainWindow* mainwindow) { + // the signals of the "GigEdit" class are actually just proxies, that + // is they simply forward the signals of the internal classes to the + // outer world + mainwindow->signal_file_structure_to_be_changed().connect( + gigedit->signal_file_structure_to_be_changed().make_slot() + ); + mainwindow->signal_file_structure_changed().connect( + gigedit->signal_file_structure_changed().make_slot() + ); + mainwindow->signal_samples_to_be_removed().connect( + gigedit->signal_samples_to_be_removed().make_slot() + ); + mainwindow->signal_samples_removed().connect( + gigedit->signal_samples_removed().make_slot() + ); + mainwindow->signal_region_to_be_changed().connect( + gigedit->signal_region_to_be_changed().make_slot() + ); + mainwindow->signal_region_changed().connect( + gigedit->signal_region_changed().make_slot() + ); + mainwindow->signal_dimreg_to_be_changed().connect( + gigedit->signal_dimreg_to_be_changed().make_slot() + ); + mainwindow->signal_dimreg_changed().connect( + gigedit->signal_dimreg_changed().make_slot() + ); + mainwindow->signal_sample_ref_changed().connect( + gigedit->signal_sample_ref_changed().make_slot() + ); } int GigEdit::run() { __init_app(); - Gtk::Main kit(argc, argv); MainWindow window; + __connect_signals(this, &window); kit.run(window); return 0; } int GigEdit::run(const char* pFileName) { __init_app(); - Gtk::Main kit(argc, argv); MainWindow window; + __connect_signals(this, &window); if (pFileName) window.load_file(pFileName); kit.run(window); return 0; @@ -58,9 +100,45 @@ int GigEdit::run(gig::Instrument* pInstrument) { __init_app(); - Gtk::Main kit(argc, argv); MainWindow window; + __connect_signals(this, &window); if (pInstrument) window.load_instrument(pInstrument); kit.run(window); return 0; } + +sigc::signal GigEdit::signal_file_structure_to_be_changed() { + return file_structure_to_be_changed_signal; +} + +sigc::signal GigEdit::signal_file_structure_changed() { + return file_structure_changed_signal; +} + +sigc::signal > GigEdit::signal_samples_to_be_removed() { + return samples_to_be_removed_signal; +} + +sigc::signal GigEdit::signal_samples_removed() { + return samples_removed_signal; +} + +sigc::signal GigEdit::signal_region_to_be_changed() { + return region_to_be_changed_signal; +} + +sigc::signal GigEdit::signal_region_changed() { + return region_changed_signal; +} + +sigc::signal GigEdit::signal_dimreg_to_be_changed() { + return dimreg_to_be_changed_signal; +} + +sigc::signal GigEdit::signal_dimreg_changed() { + return dimreg_changed_signal; +} + +sigc::signal GigEdit::signal_sample_ref_changed() { + return sample_ref_changed_signal; +}