X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Ftempo_dialog.cc;h=cca9e6f7c5a3fc6e2602697a272e45bd6f651f94;hb=a41af5ff3bd7bdf09fd2ded500d27b82266b05ec;hp=7a59fe9ab0344b2b1efaf5cfa2267ffa54728f14;hpb=54d9f2f2d83af1f0f44579fe2ebf090e68259938;p=ardour.git diff --git a/gtk2_ardour/tempo_dialog.cc b/gtk2_ardour/tempo_dialog.cc index 7a59fe9ab0..cca9e6f7c5 100644 --- a/gtk2_ardour/tempo_dialog.cc +++ b/gtk2_ardour/tempo_dialog.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2000-2007 Paul Davis + Copyright (C) 2000-2007 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,7 +17,7 @@ */ -#include // for snprintf, grrr +#include // for snprintf, grrr #include #include @@ -27,24 +27,22 @@ #include "i18n.h" +using namespace std; using namespace Gtk; using namespace Gtkmm2ext; using namespace ARDOUR; using namespace PBD; -TempoDialog::TempoDialog (TempoMap& map, nframes_t frame, const string & action) - : ArdourDialog (_("edit tempo")), - bpm_adjustment (60.0, 1.0, 999.9, 0.1, 1.0, 1.0), +TempoDialog::TempoDialog (TempoMap& map, framepos_t frame, const string & action) + : ArdourDialog (_("New Tempo")), + bpm_adjustment (60.0, 1.0, 999.9, 0.1, 1.0), bpm_spinner (bpm_adjustment), - bpm_frame (_("Tempo")), ok_button (action), cancel_button (_("Cancel")), - when_bar_label (_("Bar"), ALIGN_LEFT, ALIGN_CENTER), - when_beat_label (_("Beat"), ALIGN_LEFT, ALIGN_CENTER), - when_table (2, 2), - when_frame (_("Location")) + when_bar_label (_("bar:"), ALIGN_LEFT, ALIGN_CENTER), + when_beat_label (_("beat:"), ALIGN_LEFT, ALIGN_CENTER) { - BBT_Time when; + Timecode::BBT_Time when; Tempo tempo (map.tempo_at (frame)); map.bbt_time (frame, when); @@ -52,22 +50,19 @@ TempoDialog::TempoDialog (TempoMap& map, nframes_t frame, const string & action) } TempoDialog::TempoDialog (TempoSection& section, const string & action) - : ArdourDialog ("tempo dialog"), - bpm_adjustment (60.0, 1.0, 999.9, 0.1, 1.0, 1.0), + : ArdourDialog ("Edit Tempo"), + bpm_adjustment (60.0, 1.0, 999.9, 0.1, 1.0), bpm_spinner (bpm_adjustment), - bpm_frame (_("Tempo")), ok_button (action), cancel_button (_("Cancel")), - when_bar_label (_("Bar"), ALIGN_LEFT, ALIGN_CENTER), - when_beat_label (_("Beat"), ALIGN_LEFT, ALIGN_CENTER), - when_table (2, 2), - when_frame (_("Location")) + when_bar_label (_("bar:"), ALIGN_LEFT, ALIGN_CENTER), + when_beat_label (_("beat:"), ALIGN_LEFT, ALIGN_CENTER) { init (section.start(), section.beats_per_minute(), section.note_type(), section.movable()); } void -TempoDialog::init (const BBT_Time& when, double bpm, double note_type, bool movable) +TempoDialog::init (const Timecode::BBT_Time& when, double bpm, double note_type, bool movable) { bpm_spinner.set_numeric (true); bpm_spinner.set_digits (2); @@ -81,113 +76,95 @@ TempoDialog::init (const BBT_Time& when, double bpm, double note_type, bool mova strings.push_back (_("eighth (8)")); strings.push_back (_("sixteenth (16)")); strings.push_back (_("thirty-second (32)")); - + set_popdown_strings (note_types, strings, true); - if (note_type==1.0f) + if (note_type == 1.0f) { note_types.set_active_text (_("whole (1)")); - else if (note_type==2.0f) + } else if (note_type == 2.0f) { note_types.set_active_text (_("second (2)")); - else if (note_type==3.0f) + } else if (note_type == 3.0f) { note_types.set_active_text (_("third (3)")); - else if (note_type==4.0f) + } else if (note_type == 4.0f) { note_types.set_active_text (_("quarter (4)")); - else if (note_type==8.0f) + } else if (note_type == 8.0f) { note_types.set_active_text (_("eighth (8)")); - else if (note_type==16.0f) + } else if (note_type == 16.0f) { note_types.set_active_text (_("sixteenth (16)")); - else if (note_type==32.0f) + } else if (note_type == 32.0f) { note_types.set_active_text (_("thirty-second (32)")); - else + } else { note_types.set_active_text (_("quarter (4)")); + } - Label* bpm_label = manage(new Label(_("Beats Per Minute:"), ALIGN_LEFT, ALIGN_CENTER)); - - hspacer1.set_border_width (6); - hspacer1.pack_end (bpm_spinner, PACK_EXPAND_PADDING); - hspacer1.pack_start (*bpm_label, PACK_EXPAND_PADDING); - vspacer1.set_border_width (6); - vspacer1.pack_start (hspacer1, PACK_EXPAND_PADDING); - - hspacer2.set_border_width (6); - hspacer2.pack_start (note_types, PACK_EXPAND_PADDING); + Table* table = manage (new Table (3, 3)); + table->set_spacings (6); - bpm_frame.add (vspacer1); + Label* bpm_label = manage (new Label(_("Beats per minute:"), ALIGN_LEFT, ALIGN_CENTER)); + table->attach (*bpm_label, 0, 2, 0, 1); + table->attach (bpm_spinner, 2, 3, 0, 1); if (movable) { snprintf (buf, sizeof (buf), "%" PRIu32, when.bars); when_bar_entry.set_text (buf); snprintf (buf, sizeof (buf), "%" PRIu32, when.beats); when_beat_entry.set_text (buf); - + when_bar_entry.set_name ("MetricEntry"); when_beat_entry.set_name ("MetricEntry"); - + when_bar_label.set_name ("MetricLabel"); when_beat_label.set_name ("MetricLabel"); - - Gtkmm2ext::set_size_request_to_display_given_text (when_bar_entry, "999g", 5, 7); - Gtkmm2ext::set_size_request_to_display_given_text (when_beat_entry, "999g", 5, 7); - - when_table.set_homogeneous (true); - when_table.set_row_spacings (2); - when_table.set_col_spacings (2); - when_table.set_border_width (0); - - when_table.attach (when_bar_label, 0, 1, 0, 1, AttachOptions(0), FILL|EXPAND); - when_table.attach (when_bar_entry, 1, 2, 0, 1, AttachOptions(0), FILL|EXPAND); - - when_table.attach (when_beat_label, 0, 1, 1, 2, AttachOptions(0), AttachOptions(0)); - when_table.attach (when_beat_entry, 1, 2, 1, 2, AttachOptions(0), AttachOptions(0)); - - HBox* when_hbox = manage (new HBox()); - Label* when_label = manage(new Label(_("Tempo Begins at:"), ALIGN_LEFT, ALIGN_TOP)); - when_hbox->pack_end(when_table, PACK_EXPAND_PADDING, 6); - when_hbox->pack_start(*when_label, PACK_EXPAND_PADDING, 6); - - when_frame.set_name ("MetricDialogFrame"); - when_frame.add (*when_hbox); - - get_vbox()->pack_end (when_frame, false, false); - when_frame.show_all(); - } + table->attach (when_bar_label, 1, 2, 2, 3); + table->attach (when_bar_entry, 2, 3, 2, 3); - bpm_frame.set_name ("MetricDialogFrame"); - bpm_spinner.set_name ("MetricEntry"); + table->attach (when_beat_label, 1, 2, 1, 2); + table->attach (when_beat_entry, 2, 3, 1, 2); + + Label* when_label = manage (new Label(_("Tempo begins at"), ALIGN_LEFT, ALIGN_CENTER)); + table->attach (*when_label, 0, 1, 1, 2); + } get_vbox()->set_border_width (12); - get_vbox()->pack_end (bpm_frame, false, false); + get_vbox()->pack_end (*table); + table->show_all (); add_button (Stock::CANCEL, RESPONSE_CANCEL); add_button (Stock::APPLY, RESPONSE_ACCEPT); set_response_sensitive (RESPONSE_ACCEPT, false); set_default_response (RESPONSE_ACCEPT); - bpm_frame.show_all (); bpm_spinner.show (); set_name ("MetricDialog"); - bpm_spinner.signal_activate().connect (bind (mem_fun (*this, &TempoDialog::response), RESPONSE_ACCEPT)); - bpm_spinner.signal_button_press_event().connect (mem_fun (*this, &TempoDialog::bpm_button_press), false); - bpm_spinner.signal_button_release_event().connect (mem_fun (*this, &TempoDialog::bpm_button_release), false); - when_bar_entry.signal_activate().connect (bind (mem_fun (*this, &TempoDialog::response), RESPONSE_ACCEPT)); - when_bar_entry.signal_key_release_event().connect (mem_fun (*this, &TempoDialog::entry_key_release), false); - when_beat_entry.signal_activate().connect (bind (mem_fun (*this, &TempoDialog::response), RESPONSE_ACCEPT)); - when_beat_entry.signal_key_release_event().connect (mem_fun (*this, &TempoDialog::entry_key_release), false); - note_types.signal_changed().connect (mem_fun (*this, &TempoDialog::note_types_change)); + bpm_spinner.signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &TempoDialog::response), RESPONSE_ACCEPT)); + bpm_spinner.signal_button_press_event().connect (sigc::mem_fun (*this, &TempoDialog::bpm_button_press), false); + bpm_spinner.signal_button_release_event().connect (sigc::mem_fun (*this, &TempoDialog::bpm_button_release), false); + bpm_spinner.signal_changed().connect (sigc::mem_fun (*this, &TempoDialog::bpm_changed)); + when_bar_entry.signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &TempoDialog::response), RESPONSE_ACCEPT)); + when_bar_entry.signal_key_release_event().connect (sigc::mem_fun (*this, &TempoDialog::entry_key_release), false); + when_beat_entry.signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &TempoDialog::response), RESPONSE_ACCEPT)); + when_beat_entry.signal_key_release_event().connect (sigc::mem_fun (*this, &TempoDialog::entry_key_release), false); + note_types.signal_changed().connect (sigc::mem_fun (*this, &TempoDialog::note_types_change)); +} + +void +TempoDialog::bpm_changed () +{ + set_response_sensitive (RESPONSE_ACCEPT, true); } bool -TempoDialog::bpm_button_press (GdkEventButton* ev) +TempoDialog::bpm_button_press (GdkEventButton*) { return false; } bool -TempoDialog::bpm_button_release (GdkEventButton* ev) -{ +TempoDialog::bpm_button_release (GdkEventButton*) +{ /* the value has been modified, accept should work now */ set_response_sensitive (RESPONSE_ACCEPT, true); @@ -195,8 +172,8 @@ TempoDialog::bpm_button_release (GdkEventButton* ev) } bool -TempoDialog::entry_key_release (GdkEventKey* ev) -{ +TempoDialog::entry_key_release (GdkEventKey*) +{ if (when_beat_entry.get_text() != "" && when_bar_entry.get_text() != "") { set_response_sensitive (RESPONSE_ACCEPT, true); } else { @@ -205,19 +182,19 @@ TempoDialog::entry_key_release (GdkEventKey* ev) return false; } -double +double TempoDialog::get_bpm () { return bpm_spinner.get_value (); -} +} bool -TempoDialog::get_bbt_time (BBT_Time& requested) +TempoDialog::get_bbt_time (Timecode::BBT_Time& requested) { if (sscanf (when_bar_entry.get_text().c_str(), "%" PRIu32, &requested.bars) != 1) { return false; } - + if (sscanf (when_beat_entry.get_text().c_str(), "%" PRIu32, &requested.beats) != 1) { return false; } @@ -233,7 +210,7 @@ TempoDialog::get_note_type () double note_type = 0; vector::iterator i; string text = note_types.get_active_text(); - + for (i = strings.begin(); i != strings.end(); ++i) { if (text == *i) { if (sscanf (text.c_str(), "%*[^0-9]%lf", ¬e_type) != 1) { @@ -243,8 +220,8 @@ TempoDialog::get_note_type () break; } } - } - + } + if (i == strings.end()) { if (sscanf (text.c_str(), "%lf", ¬e_type) != 1) { error << string_compose(_("incomprehensible note type entry (%1)"), text) << endmsg; @@ -262,15 +239,13 @@ TempoDialog::note_types_change () } -MeterDialog::MeterDialog (TempoMap& map, nframes_t frame, const string & action) - : ArdourDialog ("meter dialog"), - bpb_frame (_("Meter")), +MeterDialog::MeterDialog (TempoMap& map, framepos_t frame, const string & action) + : ArdourDialog ("New Meter"), ok_button (action), - cancel_button (_("Cancel")), - when_frame (_("Location")) + cancel_button (_("Cancel")) { - BBT_Time when; - frame = map.round_to_bar(frame,0); + Timecode::BBT_Time when; + frame = map.round_to_bar(frame,0); Meter meter (map.meter_at(frame)); map.bbt_time (frame, when); @@ -278,22 +253,19 @@ MeterDialog::MeterDialog (TempoMap& map, nframes_t frame, const string & action) } MeterDialog::MeterDialog (MeterSection& section, const string & action) - : ArdourDialog ("meter dialog"), - bpb_frame (_("Meter")), + : ArdourDialog ("Edit Meter"), ok_button (action), - cancel_button (_("Cancel")), - when_frame (_("Location")) + cancel_button (_("Cancel")) { init (section.start(), section.beats_per_bar(), section.note_divisor(), section.movable()); } void -MeterDialog::init (const BBT_Time& when, double bpb, double note_type, bool movable) +MeterDialog::init (const Timecode::BBT_Time& when, double bpb, double note_type, bool movable) { snprintf (buf, sizeof (buf), "%.2f", bpb); bpb_entry.set_text (buf); bpb_entry.select_region (0, -1); - Gtkmm2ext::set_size_request_to_display_given_text (bpb_entry, "999999g", 5, 5); strings.push_back (_("whole (1)")); strings.push_back (_("second (2)")); @@ -302,59 +274,53 @@ MeterDialog::init (const BBT_Time& when, double bpb, double note_type, bool mova strings.push_back (_("eighth (8)")); strings.push_back (_("sixteenth (16)")); strings.push_back (_("thirty-second (32)")); - + set_popdown_strings (note_types, strings, true); - if (note_type==1.0f) + if (note_type == 1.0f) { note_types.set_active_text (_("whole (1)")); - else if (note_type==2.0f) + } else if (note_type == 2.0f) { note_types.set_active_text (_("second (2)")); - else if (note_type==3.0f) + } else if (note_type == 3.0f) { note_types.set_active_text (_("third (3)")); - else if (note_type==4.0f) + } else if (note_type == 4.0f) { note_types.set_active_text (_("quarter (4)")); - else if (note_type==8.0f) + } else if (note_type == 8.0f) { note_types.set_active_text (_("eighth (8)")); - else if (note_type==16.0f) + } else if (note_type == 16.0f) { note_types.set_active_text (_("sixteenth (16)")); - else if (note_type==32.0f) + } else if (note_type == 32.0f) { note_types.set_active_text (_("thirty-second (32)")); - else + } else { note_types.set_active_text (_("quarter (4)")); + } - Label* note_label = manage(new Label(_("Note Value:"), ALIGN_LEFT, ALIGN_CENTER)); - Label* bpb_label = manage(new Label(_("Beats Per Bar:"), ALIGN_LEFT, ALIGN_CENTER)); - Table* bpb_table = manage (new Table(2, 2)); + Label* note_label = manage (new Label (_("Note value:"), ALIGN_LEFT, ALIGN_CENTER)); + Label* bpb_label = manage (new Label (_("Beats per bar:"), ALIGN_LEFT, ALIGN_CENTER)); + Table* table = manage (new Table (3, 2)); + table->set_spacings (6); - bpb_table->attach (*bpb_label, 0, 1, 0, 1, FILL|EXPAND, FILL|EXPAND, 6, 6); - bpb_table->attach (bpb_entry, 1, 2, 0, 1, FILL|EXPAND, FILL|EXPAND, 6, 6); - bpb_table->attach (*note_label, 0, 1, 1, 2, FILL|EXPAND, FILL|EXPAND, 6, 6); - bpb_table->attach (note_types, 1, 2, 1, 2, FILL|EXPAND, SHRINK, 6, 6); - bpb_frame.add (*bpb_table); + table->attach (*bpb_label, 0, 1, 0, 1, FILL|EXPAND, FILL|EXPAND); + table->attach (bpb_entry, 1, 2, 0, 1, FILL|EXPAND, FILL|EXPAND); + table->attach (*note_label, 0, 1, 1, 2, FILL|EXPAND, FILL|EXPAND); + table->attach (note_types, 1, 2, 1, 2, FILL|EXPAND, SHRINK); if (movable) { snprintf (buf, sizeof (buf), "%" PRIu32, when.bars); when_bar_entry.set_text (buf); - when_bar_entry.set_name ("MetricEntry"); - - Gtkmm2ext::set_size_request_to_display_given_text (when_bar_entry, "999g", 5, 7); - - HBox* when_hbox = manage (new HBox()); - Label* when_label = manage(new Label(_("Meter Begins at Bar:"), ALIGN_LEFT, ALIGN_TOP)); - when_hbox->pack_end(when_bar_entry, PACK_EXPAND_PADDING, 6); - when_hbox->pack_start(*when_label, PACK_EXPAND_PADDING, 6); - - when_frame.set_name ("MetricDialogFrame"); - when_frame.add (*when_hbox); - - get_vbox()->pack_end (when_frame, false, false); + + Label* when_label = manage (new Label(_("Meter begins at bar:"), ALIGN_LEFT, ALIGN_CENTER)); + + table->attach (*when_label, 0, 1, 2, 3, FILL | EXPAND, FILL | EXPAND); + table->attach (when_bar_entry, 1, 2, 2, 3, FILL | EXPAND, FILL | EXPAND); + } else { + when_bar_entry.set_text ("0"); } get_vbox()->set_border_width (12); - get_vbox()->pack_start (bpb_frame, false, false); + get_vbox()->pack_start (*table, false, false); - bpb_frame.set_name ("MetricDialogFrame"); bpb_entry.set_name ("MetricEntry"); add_button (Stock::CANCEL, RESPONSE_CANCEL); @@ -365,21 +331,21 @@ MeterDialog::init (const BBT_Time& when, double bpb, double note_type, bool mova get_vbox()->show_all (); set_name ("MetricDialog"); - bpb_entry.signal_activate().connect (bind (mem_fun (*this, &MeterDialog::response), RESPONSE_ACCEPT)); - bpb_entry.signal_key_press_event().connect (mem_fun (*this, &MeterDialog::entry_key_press), false); - bpb_entry.signal_key_release_event().connect (mem_fun (*this, &MeterDialog::entry_key_release)); - when_bar_entry.signal_activate().connect (bind (mem_fun (*this, &MeterDialog::response), RESPONSE_ACCEPT)); - when_bar_entry.signal_key_press_event().connect (mem_fun (*this, &MeterDialog::entry_key_press), false); - when_bar_entry.signal_key_release_event().connect (mem_fun (*this, &MeterDialog::entry_key_release)); - - note_types.signal_changed().connect (mem_fun (*this, &MeterDialog::note_types_change)); + bpb_entry.signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &MeterDialog::response), RESPONSE_ACCEPT)); + bpb_entry.signal_key_press_event().connect (sigc::mem_fun (*this, &MeterDialog::entry_key_press), false); + bpb_entry.signal_key_release_event().connect (sigc::mem_fun (*this, &MeterDialog::entry_key_release)); + when_bar_entry.signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &MeterDialog::response), RESPONSE_ACCEPT)); + when_bar_entry.signal_key_press_event().connect (sigc::mem_fun (*this, &MeterDialog::entry_key_press), false); + when_bar_entry.signal_key_release_event().connect (sigc::mem_fun (*this, &MeterDialog::entry_key_release)); + + note_types.signal_changed().connect (sigc::mem_fun (*this, &MeterDialog::note_types_change)); } bool MeterDialog::entry_key_press (GdkEventKey* ev) { - switch (ev->keyval) { + switch (ev->keyval) { case GDK_0: case GDK_1: @@ -424,7 +390,7 @@ MeterDialog::entry_key_press (GdkEventKey* ev) } bool -MeterDialog::entry_key_release (GdkEventKey* ev) +MeterDialog::entry_key_release (GdkEventKey*) { if (when_bar_entry.get_text() != "" && bpb_entry.get_text() != "") { set_response_sensitive (RESPONSE_ACCEPT, true); @@ -444,21 +410,21 @@ double MeterDialog::get_bpb () { double bpb = 0; - + if (sscanf (bpb_entry.get_text().c_str(), "%lf", &bpb) != 1) { return 0; } return bpb; } - + double MeterDialog::get_note_type () { double note_type = 0; vector::iterator i; string text = note_types.get_active_text(); - + for (i = strings.begin(); i != strings.end(); ++i) { if (text == *i) { if (sscanf (text.c_str(), "%*[^0-9]%lf", ¬e_type) != 1) { @@ -468,8 +434,8 @@ MeterDialog::get_note_type () break; } } - } - + } + if (i == strings.end()) { if (sscanf (text.c_str(), "%lf", ¬e_type) != 1) { error << string_compose(_("incomprehensible note type entry (%1)"), text) << endmsg; @@ -481,13 +447,12 @@ MeterDialog::get_note_type () } bool -MeterDialog::get_bbt_time (BBT_Time& requested) +MeterDialog::get_bbt_time (Timecode::BBT_Time& requested) { - if (sscanf (when_bar_entry.get_text().c_str(), "%" PRIu32, &requested.bars) != 1) { return false; } - + requested.beats = 1; requested.ticks = 0;