--- gigedit/trunk/src/gigedit/mainwindow.cpp 2013/09/16 13:20:46 2476 +++ gigedit/trunk/src/gigedit/mainwindow.cpp 2014/04/21 17:49:17 2536 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2013 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 @@ -89,6 +89,10 @@ dimreg_vbox.pack_start(dimreg_hbox, Gtk::PACK_SHRINK); m_HPaned.add2(dimreg_vbox); + dimreg_label.set_tooltip_text(_("To automatically apply your changes above globally to the entire instrument, check all 3 check boxes on the right.")); + dimreg_all_regions.set_tooltip_text(_("If checked: all changes you perform above will automatically be applied to all regions of this instrument as well.")); + dimreg_all_dimregs.set_tooltip_text(_("If checked: all changes you perform above will automatically be applied as well to all dimension splits of the region selected below.")); + dimreg_stereo.set_tooltip_text(_("If checked: all changes you perform above will automatically be applied to both audio channel splits (only if a \"stereo\" dimension is defined below).")); m_TreeViewNotebook.append_page(m_ScrolledWindowSamples, _("Samples")); m_TreeViewNotebook.append_page(m_ScrolledWindow, _("Instruments")); @@ -123,6 +127,10 @@ Gtk::Stock::PROPERTIES), sigc::mem_fun( *this, &MainWindow::show_instr_props)); + actionGroup->add(Gtk::Action::create("MidiRules", + _("_Midi Rules")), + sigc::mem_fun( + *this, &MainWindow::show_midi_rules)); actionGroup->add(Gtk::Action::create("Quit", Gtk::Stock::QUIT), sigc::mem_fun( *this, &MainWindow::on_action_quit)); @@ -132,24 +140,18 @@ actionGroup->add(Gtk::Action::create("MenuEdit", _("_Edit"))); Glib::RefPtr toggle_action = - Gtk::ToggleAction::create("CopySampleUnity", _("Copy Sample's _Unity Note"), "ffaga"); + Gtk::ToggleAction::create("CopySampleUnity", _("Copy Sample's _Unity Note")); toggle_action->set_active(true); - //FIXME: doesn't work, why? - toggle_action->set_tooltip(_("Used when dragging a sample to a region's sample reference field.")); actionGroup->add(toggle_action); toggle_action = Gtk::ToggleAction::create("CopySampleTune", _("Copy Sample's _Fine Tune")); toggle_action->set_active(true); - //FIXME: doesn't work, why? - toggle_action->set_tooltip(_("Used when dragging a sample to a region's sample reference field.")); actionGroup->add(toggle_action); toggle_action = Gtk::ToggleAction::create("CopySampleLoop", _("Copy Sample's _Loop Points")); toggle_action->set_active(true); - //FIXME: doesn't work, why? - toggle_action->set_tooltip(_("Used when dragging a sample to a region's sample reference field.")); actionGroup->add(toggle_action); @@ -237,6 +239,7 @@ " " " " " " + " " " " " " " " @@ -254,6 +257,26 @@ uiManager->add_ui_from_string(ui_info); popup_menu = dynamic_cast(uiManager->get_widget("/PopupMenu")); + + // Set tooltips for menu items (for some reason, setting a tooltip on the + // respective Gtk::Action objects above will simply be ignored, no matter + // if using Gtk::Action::set_tooltip() or passing the tooltip string on + // Gtk::Action::create()). + { + Gtk::MenuItem* item = dynamic_cast( + uiManager->get_widget("/MenuBar/MenuEdit/CopySampleUnity")); + item->set_tooltip_text(_("Used when dragging a sample to a region's sample reference field. You may disable this for example if you want to replace an existing sample in a region with a new sample, but don't want that the region's current unity note setting will be altered by this action.")); + } + { + Gtk::MenuItem* item = dynamic_cast( + uiManager->get_widget("/MenuBar/MenuEdit/CopySampleTune")); + item->set_tooltip_text(_("Used when dragging a sample to a region's sample reference field. You may disable this for example if you want to replace an existing sample in a region with a new sample, but don't want that the region's current sample playback tuning will be altered by this action.")); + } + { + Gtk::MenuItem* item = dynamic_cast( + uiManager->get_widget("/MenuBar/MenuEdit/CopySampleLoop")); + item->set_tooltip_text(_("Used when dragging a sample to a region's sample reference field. You may disable this for example if you want to replace an existing sample in a region with a new sample, but don't want that the region's current loop informations to be altered by this action.")); + } instrument_menu = static_cast( uiManager->get_widget("/MenuBar/MenuInstrument"))->get_submenu(); @@ -282,6 +305,7 @@ // Create the Tree model: m_refTreeModel = Gtk::ListStore::create(m_Columns); m_TreeView.set_model(m_refTreeModel); + m_TreeView.set_tooltip_text(_("Right click here for actions on instruments & MIDI Rules.")); instrument_name_connection = m_refTreeModel->signal_row_changed().connect( sigc::mem_fun(*this, &MainWindow::instrument_name_changed) ); @@ -293,6 +317,7 @@ // create samples treeview (including its data model) m_refSamplesTreeModel = SamplesTreeStore::create(m_SamplesModel); m_TreeViewSamples.set_model(m_refSamplesTreeModel); + m_TreeViewSamples.set_tooltip_text(_("To actually use a sample, drag it from this list view to \"Sample\" -> \"Sample:\" on the region's settings pane on the right.\n\nRight click here for more actions on samples.")); // m_TreeViewSamples.set_reorderable(); m_TreeViewSamples.append_column_editable("Samples", m_SamplesModel.m_col_name); m_TreeViewSamples.set_headers_visible(false); @@ -327,6 +352,8 @@ sigc::mem_fun(*this, &MainWindow::file_changed)); propDialog.signal_changed().connect( sigc::mem_fun(*this, &MainWindow::file_changed)); + midiRules.signal_changed().connect( + sigc::mem_fun(*this, &MainWindow::file_changed)); dimreg_edit.signal_dimreg_to_be_changed().connect( dimreg_to_be_changed_signal.make_slot()); @@ -936,7 +963,7 @@ dialog.set_name("Gigedit"); #endif dialog.set_version(VERSION); - dialog.set_copyright("Copyright (C) 2006-2013 Andreas Persson"); + dialog.set_copyright("Copyright (C) 2006-2014 Andreas Persson"); const std::string sComment = _("Built " __DATE__ "\nUsing ") + ::gig::libraryName() + " " + ::gig::libraryVersion() + "\n\n" + @@ -1215,6 +1242,10 @@ m_TreeView.get_selection()->select(Gtk::TreePath("0")); instr_props_set_instrument(); + gig::Instrument* instrument = get_instrument(); + if (instrument) { + midiRules.set_instrument(instrument); + } } bool MainWindow::instr_props_set_instrument() @@ -1262,6 +1293,16 @@ } } +void MainWindow::show_midi_rules() +{ + if (gig::Instrument* instrument = get_instrument()) + { + midiRules.set_instrument(instrument); + midiRules.show(); + midiRules.deiconify(); + } +} + void MainWindow::on_action_view_status_bar() { Gtk::CheckMenuItem* item = dynamic_cast(uiManager->get_widget("/MenuBar/MenuView/Statusbar")); @@ -1308,6 +1349,10 @@ if (button->type == GDK_2BUTTON_PRESS) { show_instr_props(); } else if (button->type == GDK_BUTTON_PRESS && button->button == 3) { + // gig v2 files have no midi rules + static_cast( + uiManager->get_widget("/PopupMenu/MidiRules"))->set_sensitive( + !(file->pVersion && file->pVersion->major == 2)); popup_menu->popup(button->button, button->time); } } @@ -1480,6 +1525,12 @@ } #endif instr_props_set_instrument(); + instr = get_instrument(); + if (instr) { + midiRules.set_instrument(instr); + } else { + midiRules.hide(); + } } catch (RIFF::Exception e) { Gtk::MessageDialog msg(*this, e.Message.c_str(), false, Gtk::MESSAGE_ERROR); msg.run();