/[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 1396 by schoenebeck, Wed Oct 10 15:48:54 2007 UTC revision 1460 by persson, Sat Oct 27 12:28:33 2007 UTC
# Line 24  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"  #include "global.h"
30    
# Line 49  Glib::ustring filename_display_basename( Line 50  Glib::ustring filename_display_basename(
50    
51  #include "mainwindow.h"  #include "mainwindow.h"
52    
53    #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;
58      ss << o;      ss << o;
# Line 126  MainWindow::MainWindow() Line 130  MainWindow::MainWindow()
130                           *this, &MainWindow::on_action_quit));                           *this, &MainWindow::on_action_quit));
131      actionGroup->add(Gtk::Action::create("MenuInstrument", _("_Instrument")));      actionGroup->add(Gtk::Action::create("MenuInstrument", _("_Instrument")));
132    
133        actionGroup->add(Gtk::Action::create("MenuView", _("_View")));
134        Glib::RefPtr<Gtk::ToggleAction> toggle_action =
135            Gtk::ToggleAction::create("Statusbar", _("_Statusbar"));
136        toggle_action->set_active(true);
137        actionGroup->add(toggle_action,
138                         sigc::mem_fun(
139                             *this, &MainWindow::on_action_view_status_bar));
140    
141      action = Gtk::Action::create("MenuHelp", Gtk::Stock::HELP);      action = Gtk::Action::create("MenuHelp", Gtk::Stock::HELP);
142      actionGroup->add(Gtk::Action::create("MenuHelp",      actionGroup->add(Gtk::Action::create("MenuHelp",
143                                           action->property_label()));                                           action->property_label()));
# Line 181  MainWindow::MainWindow() Line 193  MainWindow::MainWindow()
193          "    </menu>"          "    </menu>"
194          "    <menu action='MenuInstrument'>"          "    <menu action='MenuInstrument'>"
195          "    </menu>"          "    </menu>"
196            "    <menu action='MenuView'>"
197            "      <menuitem action='Statusbar'/>"
198            "    </menu>"
199  #ifdef ABOUT_DIALOG  #ifdef ABOUT_DIALOG
200          "    <menu action='MenuHelp'>"          "    <menu action='MenuHelp'>"
201          "      <menuitem action='About'/>"          "      <menuitem action='About'/>"
# Line 210  MainWindow::MainWindow() Line 225  MainWindow::MainWindow()
225      m_VBox.pack_start(m_HPaned);      m_VBox.pack_start(m_HPaned);
226      m_VBox.pack_start(m_RegionChooser, Gtk::PACK_SHRINK);      m_VBox.pack_start(m_RegionChooser, Gtk::PACK_SHRINK);
227      m_VBox.pack_start(m_DimRegionChooser, Gtk::PACK_SHRINK);      m_VBox.pack_start(m_DimRegionChooser, Gtk::PACK_SHRINK);
228        m_VBox.pack_start(m_StatusBar, Gtk::PACK_SHRINK);
229    
230        // Status Bar:
231        m_StatusBar.pack_start(m_AttachedStateLabel, Gtk::PACK_SHRINK);
232        m_StatusBar.pack_start(m_AttachedStateImage, Gtk::PACK_SHRINK);
233        m_StatusBar.show();
234    
235      m_RegionChooser.signal_region_selected().connect(      m_RegionChooser.signal_region_selected().connect(
236          sigc::mem_fun(*this, &MainWindow::region_changed) );          sigc::mem_fun(*this, &MainWindow::region_changed) );
# Line 294  MainWindow::MainWindow() Line 315  MainWindow::MainWindow()
315    
316      file = 0;      file = 0;
317      file_is_changed = false;      file_is_changed = false;
318      file_is_shared  = false;      set_file_is_shared(false);
319    
320      show_all_children();      show_all_children();
321    
# Line 429  void MainWindow::__clear() { Line 450  void MainWindow::__clear() {
450      // free libgig's gig::File instance      // free libgig's gig::File instance
451      if (file && !file_is_shared) delete file;      if (file && !file_is_shared) delete file;
452      file = NULL;      file = NULL;
453      file_is_shared = false;      set_file_is_shared(false);
454  }  }
455    
456  void MainWindow::on_action_file_new()  void MainWindow::on_action_file_new()
# Line 765  void MainWindow::on_action_help_about() Line 786  void MainWindow::on_action_help_about()
786  #ifdef ABOUT_DIALOG  #ifdef ABOUT_DIALOG
787      Gtk::AboutDialog dialog;      Gtk::AboutDialog dialog;
788      dialog.set_version(VERSION);      dialog.set_version(VERSION);
789        dialog.set_copyright("Copyright (C) 2006,2007 Andreas Persson");
790        dialog.set_comments(
791            "Released under the GNU General Public License.\n"
792            "\n"
793            "Please notice that this is still a very young instrument editor. "
794            "So better backup your Gigasampler files before editing them with "
795            "this application.\n"
796            "\n"
797            "Please report bugs to: http://bugs.linuxsampler.org"
798        );
799        dialog.set_website("http://www.linuxsampler.org");
800        dialog.set_website_label("http://www.linuxsampler.org");
801      dialog.run();      dialog.run();
802  #endif  #endif
803  }  }
# Line 825  void PropDialog::set_info(DLS::Info* inf Line 858  void PropDialog::set_info(DLS::Info* inf
858      entry[15].set_text(info->Subject);      entry[15].set_text(info->Subject);
859  }  }
860    
861    void InstrumentProps::set_IsDrum(bool value)
862    {
863        instrument->IsDrum = value;
864    }
865    
866    void InstrumentProps::set_MIDIBank(uint16_t value)
867    {
868        instrument->MIDIBank = value;
869    }
870    
871    void InstrumentProps::set_MIDIProgram(uint32_t value)
872    {
873        instrument->MIDIProgram = value;
874    }
875    
876    void InstrumentProps::set_DimensionKeyRange_low(uint8_t value)
877    {
878        instrument->DimensionKeyRange.low = value;
879        if (value > instrument->DimensionKeyRange.high) {
880            eDimensionKeyRangeHigh.set_value(value);
881        }
882    }
883    
884    void InstrumentProps::set_DimensionKeyRange_high(uint8_t value)
885    {
886        instrument->DimensionKeyRange.high = value;
887        if (value < instrument->DimensionKeyRange.low) {
888            eDimensionKeyRangeLow.set_value(value);
889        }
890    }
891    
892  void InstrumentProps::add_prop(BoolEntry& boolentry)  void InstrumentProps::add_prop(BoolEntry& boolentry)
893  {  {
894      table.attach(boolentry.widget, 0, 2, rowno, rowno + 1,      table.attach(boolentry.widget, 0, 2, rowno, rowno + 1,
895                   Gtk::FILL, Gtk::SHRINK);                   Gtk::FILL, Gtk::SHRINK);
896      rowno++;      rowno++;
     boolentry.signal_changed_by_user().connect(instrument_changed.make_slot());  
897  }  }
898    
899  void InstrumentProps::add_prop(BoolEntryPlus6& boolentry)  void InstrumentProps::add_prop(BoolEntryPlus6& boolentry)
# Line 838  void InstrumentProps::add_prop(BoolEntry Line 901  void InstrumentProps::add_prop(BoolEntry
901      table.attach(boolentry.widget, 0, 2, rowno, rowno + 1,      table.attach(boolentry.widget, 0, 2, rowno, rowno + 1,
902                   Gtk::FILL, Gtk::SHRINK);                   Gtk::FILL, Gtk::SHRINK);
903      rowno++;      rowno++;
     boolentry.signal_changed_by_user().connect(instrument_changed.make_slot());  
904  }  }
905    
906  void InstrumentProps::add_prop(LabelWidget& prop)  void InstrumentProps::add_prop(LabelWidget& prop)
# Line 848  void InstrumentProps::add_prop(LabelWidg Line 910  void InstrumentProps::add_prop(LabelWidg
910      table.attach(prop.widget, 1, 2, rowno, rowno + 1,      table.attach(prop.widget, 1, 2, rowno, rowno + 1,
911                   Gtk::FILL | Gtk::EXPAND, Gtk::SHRINK);                   Gtk::FILL | Gtk::EXPAND, Gtk::SHRINK);
912      rowno++;      rowno++;
     prop.signal_changed_by_user().connect(instrument_changed.make_slot());  
913  }  }
914    
915  InstrumentProps::InstrumentProps()  InstrumentProps::InstrumentProps()
# Line 865  InstrumentProps::InstrumentProps() Line 926  InstrumentProps::InstrumentProps()
926        ePitchbendRange("Pitchbend range", 0, 12),        ePitchbendRange("Pitchbend range", 0, 12),
927        ePianoReleaseMode("Piano release mode"),        ePianoReleaseMode("Piano release mode"),
928        eDimensionKeyRangeLow("Dimension key range low"),        eDimensionKeyRangeLow("Dimension key range low"),
929        eDimensionKeyRangeHigh("Dimension key range high")        eDimensionKeyRangeHigh("Dimension key range high"),
930          update_model(0)
931  {  {
932      set_title("Instrument properties");      set_title("Instrument properties");
933    
934        connect(eIsDrum, &InstrumentProps::set_IsDrum);
935        connect(eMIDIBank, &InstrumentProps::set_MIDIBank);
936        connect(eMIDIProgram, &InstrumentProps::set_MIDIProgram);
937        connect(eAttenuation, &gig::Instrument::Attenuation);
938        connect(eGainPlus6, &gig::Instrument::Attenuation);
939        connect(eEffectSend, &gig::Instrument::EffectSend);
940        connect(eFineTune, &gig::Instrument::FineTune);
941        connect(ePitchbendRange, &gig::Instrument::PitchbendRange);
942        connect(ePianoReleaseMode, &gig::Instrument::PianoReleaseMode);
943        connect(eDimensionKeyRangeLow,
944                &InstrumentProps::set_DimensionKeyRange_low);
945        connect(eDimensionKeyRangeHigh,
946                &InstrumentProps::set_DimensionKeyRange_high);
947    
948      rowno = 0;      rowno = 0;
949      table.set_col_spacings(5);      table.set_col_spacings(5);
950    
# Line 885  InstrumentProps::InstrumentProps() Line 961  InstrumentProps::InstrumentProps()
961      add_prop(eDimensionKeyRangeLow);      add_prop(eDimensionKeyRangeLow);
962      add_prop(eDimensionKeyRangeHigh);      add_prop(eDimensionKeyRangeHigh);
963    
     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));  
   
964      add(vbox);      add(vbox);
965      table.set_border_width(5);      table.set_border_width(5);
966      vbox.pack_start(table);      vbox.pack_start(table);
# Line 912  InstrumentProps::InstrumentProps() Line 983  InstrumentProps::InstrumentProps()
983    
984  void InstrumentProps::set_instrument(gig::Instrument* instrument)  void InstrumentProps::set_instrument(gig::Instrument* instrument)
985  {  {
986        this->instrument = instrument;
987    
988        update_model++;
989      eName.set_ptr(&instrument->pInfo->Name);      eName.set_ptr(&instrument->pInfo->Name);
990      eIsDrum.set_ptr(&instrument->IsDrum);      eIsDrum.set_value(instrument->IsDrum);
991      eMIDIBank.set_ptr(&instrument->MIDIBank);      eMIDIBank.set_value(instrument->MIDIBank);
992      eMIDIProgram.set_ptr(&instrument->MIDIProgram);      eMIDIProgram.set_value(instrument->MIDIProgram);
993      eAttenuation.set_ptr(&instrument->Attenuation);      eAttenuation.set_value(instrument->Attenuation);
994      eGainPlus6.set_ptr(&instrument->Attenuation);      eGainPlus6.set_value(instrument->Attenuation);
995      eEffectSend.set_ptr(&instrument->EffectSend);      eEffectSend.set_value(instrument->EffectSend);
996      eFineTune.set_ptr(&instrument->FineTune);      eFineTune.set_value(instrument->FineTune);
997      ePitchbendRange.set_ptr(&instrument->PitchbendRange);      ePitchbendRange.set_value(instrument->PitchbendRange);
998      ePianoReleaseMode.set_ptr(&instrument->PianoReleaseMode);      ePianoReleaseMode.set_value(instrument->PianoReleaseMode);
999      eDimensionKeyRangeLow.set_ptr(0);      eDimensionKeyRangeLow.set_value(instrument->DimensionKeyRange.low);
1000      eDimensionKeyRangeHigh.set_ptr(0);      eDimensionKeyRangeHigh.set_value(instrument->DimensionKeyRange.high);
1001      eDimensionKeyRangeLow.set_ptr(&instrument->DimensionKeyRange.low);      update_model--;
     eDimensionKeyRangeHigh.set_ptr(&instrument->DimensionKeyRange.high);  
 }  
   
 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);  
1002  }  }
1003    
1004  sigc::signal<void>& InstrumentProps::signal_instrument_changed()  sigc::signal<void>& InstrumentProps::signal_instrument_changed()
# Line 958  void MainWindow::file_changed() Line 1017  void MainWindow::file_changed()
1017  void MainWindow::load_gig(gig::File* gig, const char* filename, bool isSharedInstrument)  void MainWindow::load_gig(gig::File* gig, const char* filename, bool isSharedInstrument)
1018  {  {
1019      file = 0;      file = 0;
1020      file_is_shared = isSharedInstrument;      set_file_is_shared(isSharedInstrument);
1021    
1022      this->filename = filename ? filename : _("Unsaved Gig File");      this->filename = filename ? filename : _("Unsaved Gig File");
1023      set_title(Glib::filename_display_basename(this->filename));      set_title(Glib::filename_display_basename(this->filename));
# Line 1035  void MainWindow::show_instr_props() Line 1094  void MainWindow::show_instr_props()
1094      }      }
1095  }  }
1096    
1097    void MainWindow::on_action_view_status_bar() {
1098        Gtk::CheckMenuItem* item =
1099            dynamic_cast<Gtk::CheckMenuItem*>(uiManager->get_widget("/MenuBar/MenuView/Statusbar"));
1100        if (!item) {
1101            std::cerr << "/MenuBar/MenuView/Statusbar == NULL\n";
1102            return;
1103        }
1104        if (item->get_active()) m_StatusBar.show();
1105        else                    m_StatusBar.hide();
1106    }
1107    
1108  void MainWindow::on_button_release(GdkEventButton* button)  void MainWindow::on_button_release(GdkEventButton* button)
1109  {  {
1110      if (button->type == GDK_2BUTTON_PRESS) {      if (button->type == GDK_2BUTTON_PRESS) {
# Line 1462  void MainWindow::on_sample_label_drop_dr Line 1532  void MainWindow::on_sample_label_drop_dr
1532          // notify we're done with altering          // notify we're done with altering
1533          region_changed_signal.emit(region);          region_changed_signal.emit(region);
1534    
1535            file_changed();
1536    
1537          return;          return;
1538      }      }
1539      // drop failed      // drop failed
# Line 1502  void MainWindow::instrument_name_changed Line 1574  void MainWindow::instrument_name_changed
1574      }      }
1575  }  }
1576    
1577    void MainWindow::set_file_is_shared(bool b) {
1578        this->file_is_shared = b;
1579    
1580        if (file_is_shared) {
1581            m_AttachedStateLabel.set_label(_("live-mode"));
1582            m_AttachedStateImage.set(
1583                Gdk::Pixbuf::create_from_xpm_data(status_attached_xpm)
1584            );
1585        } else {
1586            m_AttachedStateLabel.set_label(_("stand-alone"));
1587            m_AttachedStateImage.set(
1588                Gdk::Pixbuf::create_from_xpm_data(status_detached_xpm)
1589            );
1590        }
1591    }
1592    
1593  sigc::signal<void, gig::File*>& MainWindow::signal_file_structure_to_be_changed() {  sigc::signal<void, gig::File*>& MainWindow::signal_file_structure_to_be_changed() {
1594      return file_structure_to_be_changed_signal;      return file_structure_to_be_changed_signal;
1595  }  }

Legend:
Removed from v.1396  
changed lines
  Added in v.1460

  ViewVC Help
Powered by ViewVC