void mainwnd::file_import_dialog( void ) { FileSelection dialog( "Import..." ); HBox *abox = dialog.get_action_area(); HBox hbox( false, 2 ); m_adjust_load_offset = manage( new Adjustment( 0, -(c_max_sets - 1) , c_max_sets - 1, 1 )); m_spinbutton_load_offset = manage( new SpinButton( *m_adjust_load_offset )); m_spinbutton_load_offset->set_editable( false ); m_spinbutton_load_offset->set_wrap( true ); hbox.pack_end(*m_spinbutton_load_offset, false, false ); hbox.pack_end(*(manage( new Label( "Screen Set Offset" ))), false, false, 4); abox->pack_end(hbox, false, false ); dialog.show_all_children(); int result = dialog.run(); //Handle the response: switch(result) { case(Gtk::RESPONSE_OK): { try{ midifile f( dialog.get_filename() ); f.parse( m_mainperf, (int) m_adjust_load_offset->get_value() ); } catch(...){ Gtk::MessageDialog errdialog(*this, "Error reading file.", false, Gtk::MESSAGE_ERROR, (Gtk::ButtonsType)(Gtk::BUTTONS_OK), true); errdialog.run(); } global_filename = std::string(dialog.get_filename()); set_window_title_filename( global_filename ); m_main_wid->reset(); m_entry_notes->set_text( * m_mainperf->get_screen_set_notepad( m_mainperf->get_screenset() )); m_adjust_bpm->set_value( m_mainperf->get_bpm() ); break; } case(Gtk::RESPONSE_CANCEL): { break; } default: { break; } } }
AnalogueGUI(const std::string& URI) { std::cout << "starting GUI" <<std::endl; int control_ports = p_n_ports - 3; //initialize sliders for (int i = 0; i < control_ports; i++) { if (isOSCType(i)) { scales[i] = manage(new OSCTypeComboBox()); } else if (isFilterType(i)) { scales[i] = manage(new FilterTypeComboBox()); } else if (isPower(i)) { scales[i] = manage(new Toggle()); } else if (isBypass(i)) { scales[i] = manage(new Toggle(true)); } else { Knob* knob = new Knob(p_port_meta[i].min, p_port_meta[i].max, p_port_meta[i].step); if (isEnvControl(i)) { // small knob->set_size(30); knob->set_radius(10); } else if (isModControl(i) || isEffect(i)) { // medium knob->set_radius(12.0); } scales[i] = manage(knob); } } //connect widgets to control ports (change control values when sliders are moved) for (int i = 0; i < control_ports; i++) { slot<void> slot1 = compose(bind<0>(mem_fun(*this, &AnalogueGUI::write_control), i + 3), mem_fun(*scales[i], &Changeable::get_value)); slot<void> slot2 = compose(bind<0>(mem_fun(*this, &AnalogueGUI::change_status_bar), i + 3), mem_fun(*scales[i], &Changeable::get_value)); scales[i]->connect(slot1); if (!isOSCType(i) && !isFilterType(i) && !isToggle(i)) { scales[i]->connect(slot2); } } //connect all faders to the 'notify' function to inform the plugin to recalculate /*for (int i = 0; i < control_ports; i++) { scales[i]->signal_value_changed().connect( mem_fun(*this, &AnalogueGUI::notify_param_change)); }*/ Table* block1 = manage(new Table(2,4)); block1->attach(*createOSC1(), 0, 1, 1, 2); block1->attach(*createFilter1(), 1, 2, 1, 2); block1->attach(*createAmp1(), 2, 3, 1, 2); block1->attach(*createLFO1(), 3, 4, 1, 2); block1->attach(*createLFO2(), 0, 1, 2, 3); block1->attach(*createOSC2(), 1, 2, 2, 3); block1->attach(*createFilter2(), 2, 3, 2, 3); block1->attach(*createAmp2(), 3, 4, 2, 3); mainBox.pack_start(*align(block1)); HBox* block3 = manage(new HBox()); block3->pack_start(*createFilter1Env()); block3->pack_start(*createFilter2Env()); block3->pack_start(*createAmp1Env()); block3->pack_start(*createAmp2Env()); mainBox.pack_start(*align(block3)); HBox* block4 = manage(new HBox()); block4->pack_start(*createNoise()); block4->pack_start(*createFlanger()); block4->pack_start(*createDelay()); block4->pack_start(*createReverb()); mainBox.pack_start(*align(block4)); HBox* header = manage(new HBox()); header->pack_start(*manage(new Image("analogue.png"))); header->pack_end(*scales[p_amp_output - 3]->get_widget()); header->set_border_width(5); mainBox.pack_start(*align(header)); mainBox.pack_end(statusbar); add(*align(&mainBox)); std::cout << "GUI ready" <<std::endl; }
mainwnd::mainwnd(perform *a_p) { /* set the performance */ m_mainperf = a_p; /* main window */ set_window_title_filename( global_filename ); m_main_wid = manage( new mainwid( m_mainperf )); m_main_time = manage( new maintime( )); m_menubar = manage(new MenuBar()); m_menu_file = manage(new Menu()); m_menu_control = manage( new Menu()); m_menu_help = manage( new Menu()); /* fill with items */ m_menu_file->items().push_back(MenuElem("New", mem_fun(*this,&mainwnd::file_new_dialog))); m_menu_file->items().push_back(SeparatorElem()); m_menu_file->items().push_back(MenuElem("Open...", mem_fun(*this,&mainwnd::file_open_dialog))); m_menu_file->items().push_back(MenuElem("Import...", mem_fun(*this,&mainwnd::file_import_dialog))); m_menu_file->items().push_back(SeparatorElem()); m_menu_file->items().push_back(MenuElem("Save", mem_fun(*this,&mainwnd::file_save_dialog))); m_menu_file->items().push_back(MenuElem("Save As...", mem_fun(*this,&mainwnd::file_saveas_dialog))); m_menu_file->items().push_back(SeparatorElem()); m_menu_file->items().push_back(MenuElem("Options...", mem_fun(*this,&mainwnd::options_dialog))); m_menu_file->items().push_back(SeparatorElem()); m_menu_file->items().push_back(MenuElem("Exit", mem_fun(*this,&mainwnd::file_exit_dialog))); m_menu_help->items().push_back(MenuElem("About", mem_fun(*this,&mainwnd::about_dialog))); m_menubar->items().push_front(MenuElem("File", *m_menu_file)); m_menubar->items().push_back(MenuElem("Help", *m_menu_help)); HBox *hbox = manage( new HBox( false, 2 ) ); m_button_stop = manage( new Button( )); m_button_stop->add( *manage( new Image(Gdk::Pixbuf::create_from_xpm_data( stop_xpm )))); m_button_stop->signal_clicked().connect( mem_fun(*this,&mainwnd::stop_playing)); hbox->pack_start(*m_button_stop, false, false); m_button_play = manage( new Button() ); m_button_play->add( *manage( new Image(Gdk::Pixbuf::create_from_xpm_data( play2_xpm )))); m_button_play->signal_clicked().connect( mem_fun( *this, &mainwnd::start_playing)); hbox->pack_start(*m_button_play, false, false); //m_button_test = manage( new Button("test") ); //m_button_test->signal_clicked().connect( mem_fun( *this, &mainwnd::test)); //hbox->pack_start(*m_button_test, false, false); m_button_perfedit = manage( new Button( )); m_button_perfedit->add( *manage( new Image(Gdk::Pixbuf::create_from_xpm_data( perfedit_xpm )))); m_button_perfedit->signal_clicked().connect( mem_fun( *this, &mainwnd::open_performance_edit )); hbox->pack_end(*m_button_perfedit, false, false, 4); m_adjust_bpm = manage( new Adjustment( m_mainperf->get_bpm(), 20, 500, 1 )); m_spinbutton_bpm = manage( new SpinButton( *m_adjust_bpm )); m_spinbutton_bpm->set_editable( false ); hbox->pack_start(*(manage( new Label( " bpm " ))), false, false, 4); hbox->pack_start(*m_spinbutton_bpm, false, false ); m_adjust_ss = manage( new Adjustment( 0, 0, c_max_sets - 1, 1 )); m_spinbutton_ss = manage( new SpinButton( *m_adjust_ss )); m_spinbutton_ss->set_editable( false ); m_spinbutton_ss->set_wrap( true ); hbox->pack_end(*m_spinbutton_ss, false, false ); hbox->pack_end(*(manage( new Label( " set " ))), false, false, 4); m_adjust_bpm->signal_value_changed().connect( mem_fun(*this,&mainwnd::adj_callback_bpm )); m_adjust_ss->signal_value_changed().connect( mem_fun(*this,&mainwnd::adj_callback_ss )); m_entry_notes = manage( new Entry()); m_entry_notes->signal_changed().connect( mem_fun(*this,&mainwnd::edit_callback_notepad )); hbox->pack_start( *m_entry_notes, true, true ); /* 2nd hbox */ HBox *hbox2 = manage( new HBox( false, 0 ) ); hbox2->pack_start( *manage( new Image(Gdk::Pixbuf::create_from_xpm_data( seq24_xpm ))), false, false ); hbox2->pack_end( *m_main_time, false, false ); /* set up a vbox, put the menu in it, and add it */ VBox *vbox = new VBox(); vbox->set_border_width( 10 ); vbox->pack_start(*hbox2, false, false ); vbox->pack_start(*m_main_wid, true, true, 10 ); vbox->pack_start(*hbox, false, false ); VBox *ovbox = new VBox(); ovbox->pack_start(*m_menubar, false, false ); ovbox->pack_start( *vbox ); /* add box */ this->add (*ovbox); /* show everything */ show_all(); add_events( Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK ); m_entry_notes->set_text( * m_mainperf->get_screen_set_notepad( m_mainperf->get_screenset() )); m_timeout_connect = Glib::signal_timeout().connect(mem_fun(*this,&mainwnd::timer_callback), 25); m_quit = false; m_perf_edit = new perfedit( m_mainperf ); m_options = NULL; }
mainwnd::mainwnd(perform *a_p): m_mainperf(a_p), m_modified(false), m_options(NULL) { set_icon(Gdk::Pixbuf::create_from_xpm_data(seq24_32_xpm)); /*sjh stuff...*/ set_wsetlist_mode(m_mainperf->get_setlist_mode()); /*............*/ /* register for notification */ m_mainperf->m_notify.push_back( this ); /* main window */ update_window_title(); #if GTK_MINOR_VERSION < 12 m_tooltips = manage( new Tooltips() ); #endif m_main_wid = manage( new mainwid( m_mainperf )); m_main_time = manage( new maintime( )); m_menubar = manage(new MenuBar()); m_menu_file = manage(new Menu()); m_menubar->items().push_front(MenuElem("_File", *m_menu_file)); m_menu_view = manage( new Menu()); m_menubar->items().push_back(MenuElem("_View", *m_menu_view)); m_menu_help = manage( new Menu()); m_menubar->items().push_back(MenuElem("_Help", *m_menu_help)); /* file menu items */ m_menu_file->items().push_back(MenuElem("_New", Gtk::AccelKey("<control>N"), mem_fun(*this, &mainwnd::file_new))); m_menu_file->items().push_back(MenuElem("_Open...", Gtk::AccelKey("<control>O"), mem_fun(*this, &mainwnd::file_open))); m_menu_file->items().push_back(MenuElem("_Save", Gtk::AccelKey("<control>S"), mem_fun(*this, &mainwnd::file_save))); m_menu_file->items().push_back(MenuElem("Save _as...", mem_fun(*this, &mainwnd::file_save_as))); m_menu_file->items().push_back(MenuElem("Open _setlist...", mem_fun(*this, &mainwnd::file_open_setlist))); m_menu_file->items().push_back(SeparatorElem()); m_menu_file->items().push_back(MenuElem("_Import...", mem_fun(*this, &mainwnd::file_import_dialog))); m_menu_file->items().push_back(MenuElem("O_ptions...", mem_fun(*this,&mainwnd::options_dialog))); m_menu_file->items().push_back(SeparatorElem()); m_menu_file->items().push_back(MenuElem("E_xit", Gtk::AccelKey("<control>Q"), mem_fun(*this, &mainwnd::file_exit))); /* view menu items */ m_menu_view->items().push_back(MenuElem("_Song Editor...", Gtk::AccelKey("<control>E"), mem_fun(*this, &mainwnd::open_performance_edit))); /* help menu items */ m_menu_help->items().push_back(MenuElem("_About...", mem_fun(*this, &mainwnd::about_dialog))); /* top line items */ HBox *tophbox = manage( new HBox( false, 0 ) ); tophbox->pack_start( *m_s24_pic, // *manage(new Image(Gdk::Pixbuf::create_from_xpm_data(seq24_xpm))), false, false); // adjust placement... VBox *vbox_b = manage( new VBox() ); HBox *hbox3 = manage( new HBox( false, 0 ) ); vbox_b->pack_start( *hbox3, false, false ); tophbox->pack_end( *vbox_b, false, false ); hbox3->set_spacing( 10 ); /* timeline */ hbox3->pack_start( *m_main_time, false, false ); /* group learn button */ m_button_learn = manage( new Button( )); m_button_learn->set_focus_on_click( false ); m_button_learn->set_flags( m_button_learn->get_flags() & ~Gtk::CAN_FOCUS ); m_button_learn->set_image(*manage(new Image( Gdk::Pixbuf::create_from_xpm_data( learn_xpm )))); m_button_learn->signal_clicked().connect( mem_fun(*this, &mainwnd::learn_toggle)); add_tooltip( m_button_learn, "Mute Group Learn\n\n" "Click 'L' then press a mutegroup key to store the mute state of " "the sequences in that key.\n\n" "(see File/Options/Keyboard for available mutegroup keys " "and the corresponding hotkey for the 'L' button)" ); hbox3->pack_end( *m_button_learn, false, false ); /*this seems to be a dirty hack:*/ Button w; hbox3->set_focus_child( w ); // clear the focus not to trigger L via keys /* bottom line items */ HBox *bottomhbox = manage( new HBox(false, 10)); /* container for start+stop buttons */ HBox *startstophbox = manage(new HBox(false, 4)); bottomhbox->pack_start(*startstophbox, Gtk::PACK_SHRINK); /* stop button */ m_button_stop = manage( new Button()); m_button_stop->add(*manage(new Image( Gdk::Pixbuf::create_from_xpm_data( stop_xpm )))); m_button_stop->signal_clicked().connect( mem_fun(*this, &mainwnd::stop_playing));/*sjh - can't pass anything into the stop_playing function because of this. */ add_tooltip( m_button_stop, "Stop playing MIDI sequence" ); m_button_stop->set_can_focus(false); startstophbox->pack_start(*m_button_stop, Gtk::PACK_SHRINK); /* play button */ m_button_play = manage(new Button() ); m_button_play->add(*manage(new Image( Gdk::Pixbuf::create_from_xpm_data( play2_xpm )))); m_button_play->signal_clicked().connect( mem_fun( *this, &mainwnd::start_playing)); add_tooltip( m_button_play, "Play MIDI sequence" ); startstophbox->pack_start(*m_button_play, Gtk::PACK_SHRINK); /* bpm spin button with label*/ HBox *bpmhbox = manage(new HBox(false, 4)); bottomhbox->pack_start(*bpmhbox, Gtk::PACK_SHRINK); m_adjust_bpm = manage(new Adjustment(m_mainperf->get_bpm(), 20, 500, 1)); m_spinbutton_bpm = manage( new SpinButton( *m_adjust_bpm )); m_spinbutton_bpm->set_editable( false ); m_adjust_bpm->signal_value_changed().connect( mem_fun(*this, &mainwnd::adj_callback_bpm)); add_tooltip( m_spinbutton_bpm, "Adjust beats per minute (BPM) value"); Label* bpmlabel = manage(new Label("_bpm", true)); bpmlabel->set_mnemonic_widget(*m_spinbutton_bpm); bpmhbox->pack_start(*bpmlabel, Gtk::PACK_SHRINK); bpmhbox->pack_start(*m_spinbutton_bpm, Gtk::PACK_SHRINK); /* screen set name edit line */ HBox *notebox = manage(new HBox(false, 4)); bottomhbox->pack_start(*notebox, Gtk::PACK_EXPAND_WIDGET); m_entry_notes = manage( new Entry()); m_entry_notes->signal_changed().connect( mem_fun(*this, &mainwnd::edit_callback_notepad)); m_entry_notes->set_text(*m_mainperf->get_screen_set_notepad( m_mainperf->get_screenset())); add_tooltip( m_entry_notes, "Enter screen set name" ); Label* notelabel = manage(new Label("_Name", true)); notelabel->set_mnemonic_widget(*m_entry_notes); notebox->pack_start(*notelabel, Gtk::PACK_SHRINK); notebox->pack_start(*m_entry_notes, Gtk::PACK_EXPAND_WIDGET); /* sequence set spin button */ HBox *sethbox = manage(new HBox(false, 4)); bottomhbox->pack_start(*sethbox, Gtk::PACK_SHRINK); m_adjust_ss = manage( new Adjustment( 0, 0, c_max_sets - 1, 1 )); m_spinbutton_ss = manage( new SpinButton( *m_adjust_ss )); m_spinbutton_ss->set_editable( false ); m_spinbutton_ss->set_wrap( true ); m_adjust_ss->signal_value_changed().connect( mem_fun(*this, &mainwnd::adj_callback_ss )); add_tooltip( m_spinbutton_ss, "Select screen set" ); Label* setlabel = manage(new Label("_Set", true)); setlabel->set_mnemonic_widget(*m_spinbutton_ss); sethbox->pack_start(*setlabel, Gtk::PACK_SHRINK); sethbox->pack_start(*m_spinbutton_ss, Gtk::PACK_SHRINK); /* song edit button */ m_button_songedit = manage( new Button( )); m_button_songedit->add( *manage( new Image( Gdk::Pixbuf::create_from_xpm_data( perfedit_xpm )))); m_button_songedit->signal_clicked().connect( mem_fun( *this, &mainwnd::open_performance_edit )); add_tooltip( m_button_songedit, "Show or hide song editor window" ); bottomhbox->pack_end(*m_button_songedit, Gtk::PACK_SHRINK); /* vertical layout container for window content*/ VBox *contentvbox = new VBox(); contentvbox->set_spacing(10); contentvbox->set_border_width(10); contentvbox->pack_start(*tophbox, Gtk::PACK_SHRINK); contentvbox->pack_start(*m_main_wid, Gtk::PACK_SHRINK); contentvbox->pack_start(*bottomhbox, Gtk::PACK_SHRINK); /*main container for menu and window content */ VBox *mainvbox = new VBox(); mainvbox->pack_start(*m_menubar, false, false ); mainvbox->pack_start( *contentvbox ); /* add main layout box */ this->add (*mainvbox); /* show everything */ show_all(); add_events( Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK ); m_timeout_connect = Glib::signal_timeout().connect( mem_fun(*this, &mainwnd::timer_callback), 25); m_perf_edit = new perfedit( m_mainperf ); // m_playlist_wnd = new playlist_wnd( m_mainperf); m_playplay = new playlist_player(); m_sigpipe[0] = -1; m_sigpipe[1] = -1; install_signal_handlers(); }