/[svn]/gigedit/trunk/src/gigedit/mainwindow.cpp
ViewVC logotype

Diff of /gigedit/trunk/src/gigedit/mainwindow.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1382 by schoenebeck, Thu Oct 4 23:29:22 2007 UTC revision 1656 by schoenebeck, Sat Feb 2 08:18:19 2008 UTC
# Line 1  Line 1 
1  /*  /*
2   * Copyright (C) 2006, 2007 Andreas Persson   * Copyright (C) 2006 - 2008 Andreas Persson
3   *   *
4   * This program is free software; you can redistribute it and/or   * This program is free software; you can redistribute it and/or
5   * modify it under the terms of the GNU General Public License as   * modify it under the terms of the GNU General Public License as
# Line 17  Line 17 
17   * 02110-1301 USA.   * 02110-1301 USA.
18   */   */
19    
 #include <libintl.h>  
20  #include <iostream>  #include <iostream>
21    
22  #include <gtkmm/filechooserdialog.h>  #include <gtkmm/filechooserdialog.h>
# Line 25  Line 24 
24  #include <gtkmm/stock.h>  #include <gtkmm/stock.h>
25  #include <gtkmm/targetentry.h>  #include <gtkmm/targetentry.h>
26  #include <gtkmm/main.h>  #include <gtkmm/main.h>
27    #include <gtkmm/toggleaction.h>
28    
29    #include "global.h"
30    
31  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION >= 6) || GTKMM_MAJOR_VERSION > 2  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION >= 6) || GTKMM_MAJOR_VERSION > 2
32  #define ABOUT_DIALOG  #define ABOUT_DIALOG
# Line 48  Glib::ustring filename_display_basename( Line 50  Glib::ustring filename_display_basename(
50    
51  #include "mainwindow.h"  #include "mainwindow.h"
52    
53  #define _(String) gettext(String)  #include "../../gfx/status_attached.xpm"
54    #include "../../gfx/status_detached.xpm"
55    
56  template<class T> inline std::string ToString(T o) {  template<class T> inline std::string ToString(T o) {
57      std::stringstream ss;      std::stringstream ss;
# Line 56  template<class T> inline std::string ToS Line 59  template<class T> inline std::string ToS
59      return ss.str();      return ss.str();
60  }  }
61    
62  MainWindow::MainWindow()  Table::Table(int x, int y) : Gtk::Table(x, y), rowno(0) {  }
63    
64    void Table::add(BoolEntry& boolentry)
65    {
66        attach(boolentry.widget, 0, 2, rowno, rowno + 1,
67               Gtk::FILL, Gtk::SHRINK);
68        rowno++;
69    }
70    
71    void Table::add(BoolEntryPlus6& boolentry)
72    {
73        attach(boolentry.widget, 0, 2, rowno, rowno + 1,
74               Gtk::FILL, Gtk::SHRINK);
75        rowno++;
76    }
77    
78    void Table::add(LabelWidget& prop)
79    {
80        attach(prop.label, 1, 2, rowno, rowno + 1,
81               Gtk::FILL, Gtk::SHRINK);
82        attach(prop.widget, 2, 3, rowno, rowno + 1,
83               Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK);
84        rowno++;
85    }
86    
87    MainWindow::MainWindow() :
88        dimreg_label(_("Changes apply to:")),
89        dimreg_all_regions(_("all regions")),
90        dimreg_all_dimregs(_("all dimension splits")),
91        dimreg_stereo(_("both channels"))
92  {  {
93  //    set_border_width(5);  //    set_border_width(5);
94  //    set_default_size(400, 200);  //    set_default_size(400, 200);
# Line 86  MainWindow::MainWindow() Line 118  MainWindow::MainWindow()
118      m_TreeViewNotebook.set_size_request(300);      m_TreeViewNotebook.set_size_request(300);
119    
120      m_HPaned.add1(m_TreeViewNotebook);      m_HPaned.add1(m_TreeViewNotebook);
121      m_HPaned.add2(dimreg_edit);      dimreg_hbox.add(dimreg_label);
122        dimreg_hbox.add(dimreg_all_regions);
123        dimreg_hbox.add(dimreg_all_dimregs);
124        dimreg_stereo.set_active();
125        dimreg_hbox.add(dimreg_stereo);
126        dimreg_vbox.add(dimreg_edit);
127        dimreg_vbox.pack_start(dimreg_hbox, Gtk::PACK_SHRINK);
128        m_HPaned.add2(dimreg_vbox);
129    
130    
131      m_TreeViewNotebook.append_page(m_ScrolledWindowSamples, "Samples");      m_TreeViewNotebook.append_page(m_ScrolledWindowSamples, "Samples");
# Line 127  MainWindow::MainWindow() Line 166  MainWindow::MainWindow()
166                           *this, &MainWindow::on_action_quit));                           *this, &MainWindow::on_action_quit));
167      actionGroup->add(Gtk::Action::create("MenuInstrument", _("_Instrument")));      actionGroup->add(Gtk::Action::create("MenuInstrument", _("_Instrument")));
168    
169        actionGroup->add(Gtk::Action::create("MenuView", _("_View")));
170        Glib::RefPtr<Gtk::ToggleAction> toggle_action =
171            Gtk::ToggleAction::create("Statusbar", _("_Statusbar"));
172        toggle_action->set_active(true);
173        actionGroup->add(toggle_action,
174                         sigc::mem_fun(
175                             *this, &MainWindow::on_action_view_status_bar));
176    
177      action = Gtk::Action::create("MenuHelp", Gtk::Stock::HELP);      action = Gtk::Action::create("MenuHelp", Gtk::Stock::HELP);
178      actionGroup->add(Gtk::Action::create("MenuHelp",      actionGroup->add(Gtk::Action::create("MenuHelp",
179                                           action->property_label()));                                           action->property_label()));
# Line 182  MainWindow::MainWindow() Line 229  MainWindow::MainWindow()
229          "    </menu>"          "    </menu>"
230          "    <menu action='MenuInstrument'>"          "    <menu action='MenuInstrument'>"
231          "    </menu>"          "    </menu>"
232            "    <menu action='MenuView'>"
233            "      <menuitem action='Statusbar'/>"
234            "    </menu>"
235  #ifdef ABOUT_DIALOG  #ifdef ABOUT_DIALOG
236          "    <menu action='MenuHelp'>"          "    <menu action='MenuHelp'>"
237          "      <menuitem action='About'/>"          "      <menuitem action='About'/>"
# Line 211  MainWindow::MainWindow() Line 261  MainWindow::MainWindow()
261      m_VBox.pack_start(m_HPaned);      m_VBox.pack_start(m_HPaned);
262      m_VBox.pack_start(m_RegionChooser, Gtk::PACK_SHRINK);      m_VBox.pack_start(m_RegionChooser, Gtk::PACK_SHRINK);
263      m_VBox.pack_start(m_DimRegionChooser, Gtk::PACK_SHRINK);      m_VBox.pack_start(m_DimRegionChooser, Gtk::PACK_SHRINK);
264        m_VBox.pack_start(m_StatusBar, Gtk::PACK_SHRINK);
265    
266        // Status Bar:
267        m_StatusBar.pack_start(m_AttachedStateLabel, Gtk::PACK_SHRINK);
268        m_StatusBar.pack_start(m_AttachedStateImage, Gtk::PACK_SHRINK);
269        m_StatusBar.show();
270    
271      m_RegionChooser.signal_region_selected().connect(      m_RegionChooser.signal_region_selected().connect(
272          sigc::mem_fun(*this, &MainWindow::region_changed) );          sigc::mem_fun(*this, &MainWindow::region_changed) );
# Line 264  MainWindow::MainWindow() Line 320  MainWindow::MainWindow()
320          sigc::mem_fun(*this, &MainWindow::file_changed));          sigc::mem_fun(*this, &MainWindow::file_changed));
321      instrumentProps.signal_instrument_changed().connect(      instrumentProps.signal_instrument_changed().connect(
322          sigc::mem_fun(*this, &MainWindow::file_changed));          sigc::mem_fun(*this, &MainWindow::file_changed));
323        propDialog.signal_info_changed().connect(
324            sigc::mem_fun(*this, &MainWindow::file_changed));
325    
326      dimreg_edit.signal_dimreg_to_be_changed().connect(      dimreg_edit.signal_dimreg_to_be_changed().connect(
327          dimreg_to_be_changed_signal.make_slot());          dimreg_to_be_changed_signal.make_slot());
# Line 293  MainWindow::MainWindow() Line 351  MainWindow::MainWindow()
351      m_RegionChooser.signal_region_changed_signal().connect(      m_RegionChooser.signal_region_changed_signal().connect(
352          region_changed_signal.make_slot());          region_changed_signal.make_slot());
353    
354        note_on_signal.connect(
355            sigc::mem_fun(m_RegionChooser, &RegionChooser::on_note_on_event));
356        note_off_signal.connect(
357            sigc::mem_fun(m_RegionChooser, &RegionChooser::on_note_off_event));
358    
359        dimreg_all_regions.signal_toggled().connect(
360            sigc::mem_fun(*this, &MainWindow::update_dimregs));
361        dimreg_all_dimregs.signal_toggled().connect(
362            sigc::mem_fun(*this, &MainWindow::dimreg_all_dimregs_toggled));
363        dimreg_stereo.signal_toggled().connect(
364            sigc::mem_fun(*this, &MainWindow::update_dimregs));
365    
366      file = 0;      file = 0;
367      file_is_changed = false;      file_is_changed = false;
368      file_is_shared  = false;      set_file_is_shared(false);
369    
370      show_all_children();      show_all_children();
371    
# Line 323  void MainWindow::region_changed() Line 393  void MainWindow::region_changed()
393      m_DimRegionChooser.set_region(m_RegionChooser.get_region());      m_DimRegionChooser.set_region(m_RegionChooser.get_region());
394  }  }
395    
396  void MainWindow::dimreg_changed()  gig::Instrument* MainWindow::get_instrument()
 {  
     dimreg_edit.set_dim_region(m_DimRegionChooser.get_dimregion());  
 }  
   
 void MainWindow::on_sel_change()  
397  {  {
398        gig::Instrument* instrument = 0;
399      Glib::RefPtr<Gtk::TreeSelection> tree_sel_ref = m_TreeView.get_selection();      Glib::RefPtr<Gtk::TreeSelection> tree_sel_ref = m_TreeView.get_selection();
400    
401      Gtk::TreeModel::iterator it = tree_sel_ref->get_selected();      Gtk::TreeModel::iterator it = tree_sel_ref->get_selected();
402      if (it) {      if (it) {
403          Gtk::TreeModel::Row row = *it;          Gtk::TreeModel::Row row = *it;
404          std::cout << row[m_Columns.m_col_name] << std::endl;          instrument = row[m_Columns.m_col_instr];
405        }
406        return instrument;
407    }
408    
409          m_RegionChooser.set_instrument(row[m_Columns.m_col_instr]);  void MainWindow::add_region_to_dimregs(gig::Region* region, bool stereo, bool all_dimregs)
410    {
411        if (all_dimregs) {
412            for (int i = 0 ; i < region->DimensionRegions ; i++) {
413                if (region->pDimensionRegions[i]) {
414                    dimreg_edit.dimregs.insert(region->pDimensionRegions[i]);
415                }
416            }
417        } else {
418            m_DimRegionChooser.get_dimregions(region, stereo, dimreg_edit.dimregs);
419        }
420    }
421    
422    void MainWindow::update_dimregs()
423    {
424        dimreg_edit.dimregs.clear();
425        bool all_regions = dimreg_all_regions.get_active();
426        bool stereo = dimreg_stereo.get_active();
427        bool all_dimregs = dimreg_all_dimregs.get_active();
428    
429        if (all_regions) {
430            gig::Instrument* instrument = get_instrument();
431            if (instrument) {
432                for (gig::Region* region = instrument->GetFirstRegion() ;
433                     region ;
434                     region = instrument->GetNextRegion()) {
435                    add_region_to_dimregs(region, stereo, all_dimregs);
436                }
437            }
438      } else {      } else {
439          m_RegionChooser.set_instrument(0);          gig::Region* region = m_RegionChooser.get_region();
440            if (region) {
441                add_region_to_dimregs(region, stereo, all_dimregs);
442            }
443      }      }
444  }  }
445    
446    void MainWindow::dimreg_all_dimregs_toggled()
447    {
448        dimreg_stereo.set_sensitive(!dimreg_all_dimregs.get_active());
449        update_dimregs();
450    }
451    
452    void MainWindow::dimreg_changed()
453    {
454        update_dimregs();
455        dimreg_edit.set_dim_region(m_DimRegionChooser.get_dimregion());
456    }
457    
458    void MainWindow::on_sel_change()
459    {
460        m_RegionChooser.set_instrument(get_instrument());
461    }
462    
463  void loader_progress_callback(gig::progress_t* progress)  void loader_progress_callback(gig::progress_t* progress)
464  {  {
465      Loader* loader = static_cast<Loader*>(progress->custom);      Loader* loader = static_cast<Loader*>(progress->custom);
# Line 430  void MainWindow::__clear() { Line 547  void MainWindow::__clear() {
547      // free libgig's gig::File instance      // free libgig's gig::File instance
548      if (file && !file_is_shared) delete file;      if (file && !file_is_shared) delete file;
549      file = NULL;      file = NULL;
550      file_is_shared = false;      set_file_is_shared(false);
551  }  }
552    
553  void MainWindow::on_action_file_new()  void MainWindow::on_action_file_new()
# Line 766  void MainWindow::on_action_help_about() Line 883  void MainWindow::on_action_help_about()
883  #ifdef ABOUT_DIALOG  #ifdef ABOUT_DIALOG
884      Gtk::AboutDialog dialog;      Gtk::AboutDialog dialog;
885      dialog.set_version(VERSION);      dialog.set_version(VERSION);
886        dialog.set_copyright("Copyright (C) 2006,2007 Andreas Persson");
887        dialog.set_comments(
888            "Released under the GNU General Public License.\n"
889            "\n"
890            "Please notice that this is still a very young instrument editor. "
891            "So better backup your Gigasampler files before editing them with "
892            "this application.\n"
893            "\n"
894            "Please report bugs to: http://bugs.linuxsampler.org"
895        );
896        dialog.set_website("http://www.linuxsampler.org");
897        dialog.set_website_label("http://www.linuxsampler.org");
898      dialog.run();      dialog.run();
899  #endif  #endif
900  }  }
901    
902  PropDialog::PropDialog()  PropDialog::PropDialog()
903      : table(2,1)      : table(2,1),
904          eName("Name"),
905          eCreationDate("Creation date"),
906          eComments("Comments"),
907          eProduct("Product"),
908          eCopyright("Copyright"),
909          eArtists("Artists"),
910          eGenre("Genre"),
911          eKeywords("Keywords"),
912          eEngineer("Engineer"),
913          eTechnician("Technician"),
914          eSoftware("Software"),
915          eMedium("Medium"),
916          eSource("Source"),
917          eSourceForm("Source form"),
918          eCommissioned("Commissioned"),
919          eSubject("Subject"),
920          quitButton(Gtk::Stock::CLOSE),
921          update_model(0)
922  {  {
923        set_title("File Properties");
924        eName.set_width_chars(50);
925    
926        connect(eName, &DLS::Info::Name);
927        connect(eCreationDate, &DLS::Info::CreationDate);
928        connect(eComments, &DLS::Info::Comments);
929        connect(eProduct, &DLS::Info::Product);
930        connect(eCopyright, &DLS::Info::Copyright);
931        connect(eArtists, &DLS::Info::Artists);
932        connect(eGenre, &DLS::Info::Genre);
933        connect(eKeywords, &DLS::Info::Keywords);
934        connect(eEngineer, &DLS::Info::Engineer);
935        connect(eTechnician, &DLS::Info::Technician);
936        connect(eSoftware, &DLS::Info::Software);
937        connect(eMedium, &DLS::Info::Medium);
938        connect(eSource, &DLS::Info::Source);
939        connect(eSourceForm, &DLS::Info::SourceForm);
940        connect(eCommissioned, &DLS::Info::Commissioned);
941        connect(eSubject, &DLS::Info::Subject);
942    
943        table.add(eName);
944        table.add(eCreationDate);
945        table.add(eComments);
946        table.add(eProduct);
947        table.add(eCopyright);
948        table.add(eArtists);
949        table.add(eGenre);
950        table.add(eKeywords);
951        table.add(eEngineer);
952        table.add(eTechnician);
953        table.add(eSoftware);
954        table.add(eMedium);
955        table.add(eSource);
956        table.add(eSourceForm);
957        table.add(eCommissioned);
958        table.add(eSubject);
959    
960      table.set_col_spacings(5);      table.set_col_spacings(5);
961      const char* propLabels[] = {      add(vbox);
962          "Name:",      table.set_border_width(5);
963          "CreationDate:",      vbox.add(table);
964          "Comments:", // TODO: multiline      vbox.pack_start(buttonBox, Gtk::PACK_SHRINK);
965          "Product:",      buttonBox.set_layout(Gtk::BUTTONBOX_END);
966          "Copyright:",      buttonBox.set_border_width(5);
967          "Artists:",      buttonBox.show();
968          "Genre:",      buttonBox.pack_start(quitButton);
969          "Keywords:",      quitButton.set_flags(Gtk::CAN_DEFAULT);
970          "Engineer:",      quitButton.grab_focus();
971          "Technician:",      quitButton.signal_clicked().connect(
972          "Software:", // TODO: readonly          sigc::mem_fun(*this, &PropDialog::hide));
         "Medium:",  
         "Source:",  
         "SourceForm:",  
         "Commissioned:",  
         "Subject:"  
     };  
     for (int i = 0 ; i < sizeof(propLabels) / sizeof(char*) ; i++) {  
         label[i].set_text(propLabels[i]);  
         label[i].set_alignment(Gtk::ALIGN_LEFT);  
         table.attach(label[i], 0, 1, i, i + 1, Gtk::FILL, Gtk::SHRINK);  
         table.attach(entry[i], 1, 2, i, i + 1, Gtk::FILL | Gtk::EXPAND,  
                      Gtk::SHRINK);  
     }  
973    
974      add(table);      quitButton.show();
975      // add_button(Gtk::Stock::CANCEL, 0);      vbox.show();
     // add_button(Gtk::Stock::OK, 1);  
976      show_all_children();      show_all_children();
977  }  }
978    
979  void PropDialog::set_info(DLS::Info* info)  void PropDialog::set_info(DLS::Info* info)
980  {  {
981      entry[0].set_text(info->Name);      this->info = info;
982      entry[1].set_text(info->CreationDate);      update_model++;
983      entry[2].set_text(Glib::convert(info->Comments, "UTF-8", "ISO-8859-1"));      eName.set_value(info->Name);
984      entry[3].set_text(info->Product);      eCreationDate.set_value(info->CreationDate);
985      entry[4].set_text(info->Copyright);      eComments.set_value(info->Comments);
986      entry[5].set_text(info->Artists);      eProduct.set_value(info->Product);
987      entry[6].set_text(info->Genre);      eCopyright.set_value(info->Copyright);
988      entry[7].set_text(info->Keywords);      eArtists.set_value(info->Artists);
989      entry[8].set_text(info->Engineer);      eGenre.set_value(info->Genre);
990      entry[9].set_text(info->Technician);      eKeywords.set_value(info->Keywords);
991      entry[10].set_text(info->Software);      eEngineer.set_value(info->Engineer);
992      entry[11].set_text(info->Medium);      eTechnician.set_value(info->Technician);
993      entry[12].set_text(info->Source);      eSoftware.set_value(info->Software);
994      entry[13].set_text(info->SourceForm);      eMedium.set_value(info->Medium);
995      entry[14].set_text(info->Commissioned);      eSource.set_value(info->Source);
996      entry[15].set_text(info->Subject);      eSourceForm.set_value(info->SourceForm);
997        eCommissioned.set_value(info->Commissioned);
998        eSubject.set_value(info->Subject);
999        update_model--;
1000  }  }
1001    
1002  void InstrumentProps::add_prop(BoolEntry& boolentry)  sigc::signal<void>& PropDialog::signal_info_changed()
1003  {  {
1004      table.attach(boolentry.widget, 0, 2, rowno, rowno + 1,      return info_changed;
                  Gtk::FILL, Gtk::SHRINK);  
     rowno++;  
     boolentry.signal_changed_by_user().connect(instrument_changed.make_slot());  
1005  }  }
1006    
1007  void InstrumentProps::add_prop(BoolEntryPlus6& boolentry)  void InstrumentProps::set_IsDrum(bool value)
1008  {  {
1009      table.attach(boolentry.widget, 0, 2, rowno, rowno + 1,      instrument->IsDrum = value;
                  Gtk::FILL, Gtk::SHRINK);  
     rowno++;  
     boolentry.signal_changed_by_user().connect(instrument_changed.make_slot());  
1010  }  }
1011    
1012  void InstrumentProps::add_prop(LabelWidget& prop)  void InstrumentProps::set_MIDIBank(uint16_t value)
1013  {  {
1014      table.attach(prop.label, 0, 1, rowno, rowno + 1,      instrument->MIDIBank = value;
1015                   Gtk::FILL, Gtk::SHRINK);  }
1016      table.attach(prop.widget, 1, 2, rowno, rowno + 1,  
1017                   Gtk::FILL | Gtk::EXPAND, Gtk::SHRINK);  void InstrumentProps::set_MIDIProgram(uint32_t value)
1018      rowno++;  {
1019      prop.signal_changed_by_user().connect(instrument_changed.make_slot());      instrument->MIDIProgram = value;
1020    }
1021    
1022    void InstrumentProps::set_DimensionKeyRange_low(uint8_t value)
1023    {
1024        instrument->DimensionKeyRange.low = value;
1025        if (value > instrument->DimensionKeyRange.high) {
1026            eDimensionKeyRangeHigh.set_value(value);
1027        }
1028    }
1029    
1030    void InstrumentProps::set_DimensionKeyRange_high(uint8_t value)
1031    {
1032        instrument->DimensionKeyRange.high = value;
1033        if (value < instrument->DimensionKeyRange.low) {
1034            eDimensionKeyRangeLow.set_value(value);
1035        }
1036  }  }
1037    
1038  InstrumentProps::InstrumentProps()  InstrumentProps::InstrumentProps()
# Line 865  InstrumentProps::InstrumentProps() Line 1048  InstrumentProps::InstrumentProps()
1048        eFineTune("Fine tune", -8400, 8400),        eFineTune("Fine tune", -8400, 8400),
1049        ePitchbendRange("Pitchbend range", 0, 12),        ePitchbendRange("Pitchbend range", 0, 12),
1050        ePianoReleaseMode("Piano release mode"),        ePianoReleaseMode("Piano release mode"),
1051        eDimensionKeyRangeLow("Dimension key range low"),        eDimensionKeyRangeLow("Keyswitching range low"),
1052        eDimensionKeyRangeHigh("Dimension key range high")        eDimensionKeyRangeHigh("Keyswitching range high"),
1053  {        update_model(0)
1054      set_title("Instrument properties");  {
1055        set_title("Instrument Properties");
1056    
1057        eDimensionKeyRangeLow.set_tip(
1058            _("start of the keyboard area which should switch the "
1059              "\"keyswitching\" dimension")
1060        );
1061        eDimensionKeyRangeHigh.set_tip(
1062            _("end of the keyboard area which should switch the "
1063              "\"keyswitching\" dimension")
1064        );
1065    
1066        connect(eIsDrum, &InstrumentProps::set_IsDrum);
1067        connect(eMIDIBank, &InstrumentProps::set_MIDIBank);
1068        connect(eMIDIProgram, &InstrumentProps::set_MIDIProgram);
1069        connect(eAttenuation, &gig::Instrument::Attenuation);
1070        connect(eGainPlus6, &gig::Instrument::Attenuation);
1071        connect(eEffectSend, &gig::Instrument::EffectSend);
1072        connect(eFineTune, &gig::Instrument::FineTune);
1073        connect(ePitchbendRange, &gig::Instrument::PitchbendRange);
1074        connect(ePianoReleaseMode, &gig::Instrument::PianoReleaseMode);
1075        connect(eDimensionKeyRangeLow,
1076                &InstrumentProps::set_DimensionKeyRange_low);
1077        connect(eDimensionKeyRangeHigh,
1078                &InstrumentProps::set_DimensionKeyRange_high);
1079    
     rowno = 0;  
1080      table.set_col_spacings(5);      table.set_col_spacings(5);
1081    
1082      add_prop(eName);      table.add(eName);
1083      add_prop(eIsDrum);      table.add(eIsDrum);
1084      add_prop(eMIDIBank);      table.add(eMIDIBank);
1085      add_prop(eMIDIProgram);      table.add(eMIDIProgram);
1086      add_prop(eAttenuation);      table.add(eAttenuation);
1087      add_prop(eGainPlus6);      table.add(eGainPlus6);
1088      add_prop(eEffectSend);      table.add(eEffectSend);
1089      add_prop(eFineTune);      table.add(eFineTune);
1090      add_prop(ePitchbendRange);      table.add(ePitchbendRange);
1091      add_prop(ePianoReleaseMode);      table.add(ePianoReleaseMode);
1092      add_prop(eDimensionKeyRangeLow);      table.add(eDimensionKeyRangeLow);
1093      add_prop(eDimensionKeyRangeHigh);      table.add(eDimensionKeyRangeHigh);
   
     eDimensionKeyRangeLow.signal_changed_by_user().connect(  
         sigc::mem_fun(*this, &InstrumentProps::key_range_low_changed));  
     eDimensionKeyRangeHigh.signal_changed_by_user().connect(  
         sigc::mem_fun(*this, &InstrumentProps::key_range_high_changed));  
1094    
1095      add(vbox);      add(vbox);
1096      table.set_border_width(5);      table.set_border_width(5);
# Line 913  InstrumentProps::InstrumentProps() Line 1114  InstrumentProps::InstrumentProps()
1114    
1115  void InstrumentProps::set_instrument(gig::Instrument* instrument)  void InstrumentProps::set_instrument(gig::Instrument* instrument)
1116  {  {
1117      eName.set_ptr(&instrument->pInfo->Name);      this->instrument = instrument;
1118      eIsDrum.set_ptr(&instrument->IsDrum);  
1119      eMIDIBank.set_ptr(&instrument->MIDIBank);      update_model++;
1120      eMIDIProgram.set_ptr(&instrument->MIDIProgram);      eName.set_value(instrument->pInfo->Name);
1121      eAttenuation.set_ptr(&instrument->Attenuation);      eIsDrum.set_value(instrument->IsDrum);
1122      eGainPlus6.set_ptr(&instrument->Attenuation);      eMIDIBank.set_value(instrument->MIDIBank);
1123      eEffectSend.set_ptr(&instrument->EffectSend);      eMIDIProgram.set_value(instrument->MIDIProgram);
1124      eFineTune.set_ptr(&instrument->FineTune);      eAttenuation.set_value(instrument->Attenuation);
1125      ePitchbendRange.set_ptr(&instrument->PitchbendRange);      eGainPlus6.set_value(instrument->Attenuation);
1126      ePianoReleaseMode.set_ptr(&instrument->PianoReleaseMode);      eEffectSend.set_value(instrument->EffectSend);
1127      eDimensionKeyRangeLow.set_ptr(0);      eFineTune.set_value(instrument->FineTune);
1128      eDimensionKeyRangeHigh.set_ptr(0);      ePitchbendRange.set_value(instrument->PitchbendRange);
1129      eDimensionKeyRangeLow.set_ptr(&instrument->DimensionKeyRange.low);      ePianoReleaseMode.set_value(instrument->PianoReleaseMode);
1130      eDimensionKeyRangeHigh.set_ptr(&instrument->DimensionKeyRange.high);      eDimensionKeyRangeLow.set_value(instrument->DimensionKeyRange.low);
1131  }      eDimensionKeyRangeHigh.set_value(instrument->DimensionKeyRange.high);
1132        update_model--;
 void InstrumentProps::key_range_low_changed()  
 {  
     double l = eDimensionKeyRangeLow.get_value();  
     double h = eDimensionKeyRangeHigh.get_value();  
     if (h < l) eDimensionKeyRangeHigh.set_value(l);  
 }  
   
 void InstrumentProps::key_range_high_changed()  
 {  
     double l = eDimensionKeyRangeLow.get_value();  
     double h = eDimensionKeyRangeHigh.get_value();  
     if (h < l) eDimensionKeyRangeLow.set_value(h);  
1133  }  }
1134    
1135  sigc::signal<void>& InstrumentProps::signal_instrument_changed()  sigc::signal<void>& InstrumentProps::signal_instrument_changed()
# Line 959  void MainWindow::file_changed() Line 1148  void MainWindow::file_changed()
1148  void MainWindow::load_gig(gig::File* gig, const char* filename, bool isSharedInstrument)  void MainWindow::load_gig(gig::File* gig, const char* filename, bool isSharedInstrument)
1149  {  {
1150      file = 0;      file = 0;
1151      file_is_shared = isSharedInstrument;      set_file_is_shared(isSharedInstrument);
1152    
1153      this->filename = filename ? filename : _("Unsaved Gig File");      this->filename = filename ? filename : _("Unsaved Gig File");
1154      set_title(Glib::filename_display_basename(this->filename));      set_title(Glib::filename_display_basename(this->filename));
# Line 1022  void MainWindow::load_gig(gig::File* gig Line 1211  void MainWindow::load_gig(gig::File* gig
1211    
1212  void MainWindow::show_instr_props()  void MainWindow::show_instr_props()
1213  {  {
1214      Glib::RefPtr<Gtk::TreeSelection> tree_sel_ref = m_TreeView.get_selection();      gig::Instrument* instrument = get_instrument();
1215      Gtk::TreeModel::iterator it = tree_sel_ref->get_selected();      if (instrument)
     if (it)  
1216      {      {
1217          Gtk::TreeModel::Row row = *it;          instrumentProps.set_instrument(instrument);
1218          if (row[m_Columns.m_col_instr])          instrumentProps.show();
1219          {          instrumentProps.deiconify();
1220              instrumentProps.set_instrument(row[m_Columns.m_col_instr]);      }
1221              instrumentProps.show();  }
1222              instrumentProps.deiconify();  
1223          }  void MainWindow::on_action_view_status_bar() {
1224        Gtk::CheckMenuItem* item =
1225            dynamic_cast<Gtk::CheckMenuItem*>(uiManager->get_widget("/MenuBar/MenuView/Statusbar"));
1226        if (!item) {
1227            std::cerr << "/MenuBar/MenuView/Statusbar == NULL\n";
1228            return;
1229      }      }
1230        if (item->get_active()) m_StatusBar.show();
1231        else                    m_StatusBar.hide();
1232  }  }
1233    
1234  void MainWindow::on_button_release(GdkEventButton* button)  void MainWindow::on_button_release(GdkEventButton* button)
# Line 1463  void MainWindow::on_sample_label_drop_dr Line 1658  void MainWindow::on_sample_label_drop_dr
1658          // notify we're done with altering          // notify we're done with altering
1659          region_changed_signal.emit(region);          region_changed_signal.emit(region);
1660    
1661            file_changed();
1662    
1663          return;          return;
1664      }      }
1665      // drop failed      // drop failed
# Line 1503  void MainWindow::instrument_name_changed Line 1700  void MainWindow::instrument_name_changed
1700      }      }
1701  }  }
1702    
1703    void MainWindow::set_file_is_shared(bool b) {
1704        this->file_is_shared = b;
1705    
1706        if (file_is_shared) {
1707            m_AttachedStateLabel.set_label(_("live-mode"));
1708            m_AttachedStateImage.set(
1709                Gdk::Pixbuf::create_from_xpm_data(status_attached_xpm)
1710            );
1711        } else {
1712            m_AttachedStateLabel.set_label(_("stand-alone"));
1713            m_AttachedStateImage.set(
1714                Gdk::Pixbuf::create_from_xpm_data(status_detached_xpm)
1715            );
1716        }
1717    }
1718    
1719  sigc::signal<void, gig::File*>& MainWindow::signal_file_structure_to_be_changed() {  sigc::signal<void, gig::File*>& MainWindow::signal_file_structure_to_be_changed() {
1720      return file_structure_to_be_changed_signal;      return file_structure_to_be_changed_signal;
1721  }  }
# Line 1538  sigc::signal<void, gig::DimensionRegion* Line 1751  sigc::signal<void, gig::DimensionRegion*
1751  sigc::signal<void, gig::DimensionRegion*>& MainWindow::signal_dimreg_changed() {  sigc::signal<void, gig::DimensionRegion*>& MainWindow::signal_dimreg_changed() {
1752      return dimreg_changed_signal;      return dimreg_changed_signal;
1753  }  }
1754    
1755    sigc::signal<void, int/*key*/, int/*velocity*/>& MainWindow::signal_note_on() {
1756        return note_on_signal;
1757    }
1758    
1759    sigc::signal<void, int/*key*/, int/*velocity*/>& MainWindow::signal_note_off() {
1760        return note_off_signal;
1761    }

Legend:
Removed from v.1382  
changed lines
  Added in v.1656

  ViewVC Help
Powered by ViewVC