make multi-duplicate dialog less ugly, ditto with tempo dialogs. fix broken adding of tempomap meters. fix indenting and remove some unused stuff in tempo_dialog.h.

git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2973 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Nick Mainsbridge 2008-01-29 14:32:34 +00:00
parent c0185b419e
commit 1b483c2ba2
5 changed files with 183 additions and 176 deletions

View file

@ -3077,26 +3077,32 @@ Editor::duplicate_dialog (bool with_dialog)
if (with_dialog) {
ArdourDialog win ("duplicate dialog");
Label label (_("Duplicate how many times?"));
ArdourDialog win ("Duplication Dialog");
Label label (_("Number of Duplications:"));
Adjustment adjustment (1.0, 1.0, 1000000.0, 1.0, 5.0);
SpinButton spinner (adjustment);
SpinButton spinner (adjustment, 0.0, 1);
HBox hbox;
win.get_vbox()->set_spacing (12);
win.get_vbox()->pack_start (label);
win.get_vbox()->pack_start (hbox);
hbox.set_border_width (6);
hbox.pack_start (label, PACK_EXPAND_PADDING, 12);
/* dialogs have ::add_action_widget() but that puts the spinner in the wrong
place, visually. so do this by hand.
*/
win.get_vbox()->pack_start (spinner);
hbox.pack_start (spinner, PACK_EXPAND_PADDING, 12);
spinner.signal_activate().connect (sigc::bind (mem_fun (win, &ArdourDialog::response), RESPONSE_ACCEPT));
spinner.grab_focus();
hbox.show ();
label.show ();
spinner.show ();
win.add_button (Stock::OK, RESPONSE_ACCEPT);
win.add_button (Stock::CANCEL, RESPONSE_CANCEL);
win.add_button (_("Duplicate"), RESPONSE_ACCEPT);
win.set_default_response (RESPONSE_ACCEPT);
win.set_position (WIN_POS_MOUSE);

View file

@ -293,7 +293,8 @@ Editor::mouse_add_new_tempo_event (nframes_t frame)
TempoDialog tempo_dialog (map, frame, _("add"));
tempo_dialog.set_position (Gtk::WIN_POS_MOUSE);
tempo_dialog.signal_realize().connect (bind (sigc::ptr_fun (set_decoration), &tempo_dialog, Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
//this causes compiz to display no border.
//tempo_dialog.signal_realize().connect (bind (sigc::ptr_fun (set_decoration), &tempo_dialog, Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
ensure_float (tempo_dialog);
@ -335,7 +336,9 @@ Editor::mouse_add_new_meter_event (nframes_t frame)
MeterDialog meter_dialog (map, frame, _("add"));
meter_dialog.set_position (Gtk::WIN_POS_MOUSE);
meter_dialog.signal_realize().connect (bind (sigc::ptr_fun (set_decoration), &meter_dialog, Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
//this causes compiz to display no border..
//meter_dialog.signal_realize().connect (bind (sigc::ptr_fun (set_decoration), &meter_dialog, Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
ensure_float (meter_dialog);
@ -351,9 +354,11 @@ Editor::mouse_add_new_meter_event (nframes_t frame)
double note_type = meter_dialog.get_note_type ();
BBT_Time requested;
meter_dialog.get_bbt_time (requested);
cerr << "after requested bar: " << requested.bars << " beat " << requested.beats << endl;
begin_reversible_command (_("add meter mark"));
XMLNode &before = map.get_state();
map.add_meter (Meter (bpb, note_type), requested);

View file

@ -36,12 +36,11 @@ 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),
bpm_spinner (bpm_adjustment),
bpm_frame (_("Beats per minute")),
note_frame (_("BPM denominator")),
bpm_frame (_("Tempo")),
ok_button (action),
cancel_button (_("Cancel")),
when_bar_label (_("Bar")),
when_beat_label (_("Beat")),
when_bar_label (_("Bar"), ALIGN_LEFT, ALIGN_CENTER),
when_beat_label (_("Beat"), ALIGN_LEFT, ALIGN_CENTER),
when_table (2, 2),
when_frame (_("Location"))
{
@ -56,11 +55,11 @@ TempoDialog::TempoDialog (TempoSection& section, const string & action)
: ArdourDialog ("tempo dialog"),
bpm_adjustment (60.0, 1.0, 999.9, 0.1, 1.0, 1.0),
bpm_spinner (bpm_adjustment),
bpm_frame (_("Beats per minute")),
bpm_frame (_("Tempo")),
ok_button (action),
cancel_button (_("Cancel")),
when_bar_label (_("Bar")),
when_beat_label (_("Beat")),
when_bar_label (_("Bar"), ALIGN_LEFT, ALIGN_CENTER),
when_beat_label (_("Beat"), ALIGN_LEFT, ALIGN_CENTER),
when_table (2, 2),
when_frame (_("Location"))
{
@ -108,18 +107,18 @@ TempoDialog::init (const BBT_Time& when, double bpm, double note_type, bool mova
else
note_types.set_active_text (_("quarter (4)"));
hspacer1.set_border_width (5);
hspacer1.pack_start (bpm_spinner, false, false);
vspacer1.set_border_width (5);
vspacer1.pack_start (hspacer1, false, false);
Label* bpm_label = manage(new Label(_("Beats Per Minute:"), ALIGN_LEFT, ALIGN_CENTER));
hspacer2.set_border_width (5);
hspacer2.pack_start (note_types, false, false);
vspacer2.set_border_width (5);
vspacer2.pack_start (hspacer2, false, false);
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);
bpm_frame.add (vspacer1);
note_frame.add (vspacer2);
if (movable) {
snprintf (buf, sizeof (buf), "%" PRIu32, when.bars);
@ -139,35 +138,40 @@ TempoDialog::init (const BBT_Time& when, double bpm, double note_type, bool mova
when_table.set_homogeneous (true);
when_table.set_row_spacings (2);
when_table.set_col_spacings (2);
when_table.set_border_width (5);
when_table.set_border_width (6);
when_table.attach (when_bar_label, 0, 1, 0, 1, Gtk::AttachOptions(0), Gtk::FILL|Gtk::EXPAND);
when_table.attach (when_bar_entry, 0, 1, 1, 2, Gtk::AttachOptions(0), Gtk::FILL|Gtk::EXPAND);
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, 1, 2, 0, 1, Gtk::AttachOptions(0), Gtk::AttachOptions(0));
when_table.attach (when_beat_entry, 1, 2, 1, 2, Gtk::AttachOptions(0), Gtk::AttachOptions(0));
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));
when_frame.set_name ("MetricDialogFrame");
when_frame.add (when_table);
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();
get_vbox()->pack_start (when_frame, false, false);
}
bpm_frame.set_name ("MetricDialogFrame");
bpm_spinner.set_name ("MetricEntry");
note_frame.set_name ("MetricDialogFrame");
get_vbox()->set_border_width (12);
get_vbox()->pack_start (bpm_frame, false, false);
get_vbox()->pack_start (note_frame, false, false);
get_vbox()->pack_end (bpm_frame, false, false);
add_button (Stock::CANCEL, RESPONSE_CANCEL);
add_button (Stock::APPLY, RESPONSE_ACCEPT);
set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
set_response_sensitive (RESPONSE_ACCEPT, false);
set_default_response (RESPONSE_ACCEPT);
get_vbox()->show_all();
bpm_spinner.show();
bpm_frame.show_all ();
bpm_spinner.show ();
set_name ("MetricDialog");
@ -188,7 +192,7 @@ TempoDialog::bpm_button_release (GdkEventButton* ev)
{
/* the value has been modified, accept should work now */
set_response_sensitive (Gtk::RESPONSE_ACCEPT, true);
set_response_sensitive (RESPONSE_ACCEPT, true);
return false;
}
@ -209,6 +213,8 @@ TempoDialog::get_bbt_time (BBT_Time& requested)
return false;
}
requested.ticks = 0;
return true;
}
@ -244,18 +250,17 @@ TempoDialog::get_note_type ()
void
TempoDialog::note_types_change ()
{
set_response_sensitive (Gtk::RESPONSE_ACCEPT, true);
set_response_sensitive (RESPONSE_ACCEPT, true);
}
MeterDialog::MeterDialog (TempoMap& map, nframes_t frame, const string & action)
: ArdourDialog ("meter dialog"),
note_frame (_("Meter denominator")),
bpb_frame (_("Beats per bar")),
bpb_frame (_("Meter")),
ok_button (action),
cancel_button (_("Cancel")),
when_bar_label (_("Bar")),
when_beat_label (_("Beat")),
when_bar_label (_("Bar"), ALIGN_LEFT, ALIGN_CENTER),
when_beat_label (_("Beat"), ALIGN_LEFT, ALIGN_CENTER),
when_frame (_("Location"))
{
BBT_Time when;
@ -268,12 +273,11 @@ MeterDialog::MeterDialog (TempoMap& map, nframes_t frame, const string & action)
MeterDialog::MeterDialog (MeterSection& section, const string & action)
: ArdourDialog ("meter dialog"),
note_frame (_("Meter denominator")),
bpb_frame (_("Beats per bar")),
bpb_frame (_("Meter")),
ok_button (action),
cancel_button (_("Cancel")),
when_bar_label (_("Bar")),
when_beat_label (_("Beat")),
when_bar_label (_("Bar"), ALIGN_LEFT, ALIGN_CENTER),
when_beat_label (_("Beat"), ALIGN_LEFT, ALIGN_CENTER),
when_frame (_("Location"))
{
init (section.start(), section.beats_per_bar(), section.note_divisor(), section.movable());
@ -320,19 +324,16 @@ MeterDialog::init (const BBT_Time& when, double bpb, double note_type, bool mova
note_types.set_active_text (_("thirty-second (32)"));
else
note_types.set_active_text (_("quarter (4)"));
hspacer1.set_border_width (5);
hspacer1.pack_start (note_types, false, false);
vspacer1.set_border_width (5);
vspacer1.pack_start (hspacer1, false, false);
hspacer2.set_border_width (5);
hspacer2.pack_start (bpb_entry, false, false);
vspacer2.set_border_width (5);
vspacer2.pack_start (hspacer2, false, false);
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));
note_frame.add (vspacer1);
bpb_frame.add (vspacer2);
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);
if (movable) {
snprintf (buf, sizeof (buf), "%" PRIu32, when.bars);
@ -352,26 +353,29 @@ MeterDialog::init (const BBT_Time& when, double bpb, double note_type, bool mova
when_table.set_homogeneous (true);
when_table.set_row_spacings (2);
when_table.set_col_spacings (2);
when_table.set_border_width (5);
when_table.set_border_width (6);
when_table.attach (when_bar_label, 0, 1, 0, 1, Gtk::AttachOptions(0), Gtk::FILL|Gtk::EXPAND);
when_table.attach (when_bar_entry, 0, 1, 1, 2, Gtk::AttachOptions(0), Gtk::FILL|Gtk::EXPAND);
when_table.attach (when_beat_label, 1, 2, 0, 1, Gtk::AttachOptions(0), Gtk::AttachOptions(0));
when_table.attach (when_beat_entry, 1, 2, 1, 2, Gtk::AttachOptions(0), Gtk::AttachOptions(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(_("Meter 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_table);
when_frame.add (*when_hbox);
get_vbox()->pack_start (when_frame, false, false);
get_vbox()->pack_end (when_frame, false, false);
}
get_vbox()->set_border_width (12);
get_vbox()->pack_start (bpb_frame, false, false);
get_vbox()->pack_start (note_frame, false, false);
bpb_frame.set_name ("MetricDialogFrame");
note_frame.set_name ("MetricDialogFrame");
bpb_entry.set_name ("MetricEntry");
add_button (Stock::CANCEL, RESPONSE_CANCEL);
@ -380,7 +384,6 @@ MeterDialog::init (const BBT_Time& when, double bpb, double note_type, bool mova
set_default_response (RESPONSE_ACCEPT);
get_vbox()->show_all ();
bpb_entry.show ();
set_name ("MetricDialog");
bpb_entry.signal_activate().connect (bind (mem_fun (*this, &MeterDialog::response), RESPONSE_ACCEPT));
@ -393,48 +396,48 @@ bool
MeterDialog::bpb_key_press (GdkEventKey* ev)
{
switch (ev->keyval) {
switch (ev->keyval) {
case GDK_0:
case GDK_1:
case GDK_2:
case GDK_3:
case GDK_4:
case GDK_5:
case GDK_6:
case GDK_7:
case GDK_8:
case GDK_9:
case GDK_KP_0:
case GDK_KP_1:
case GDK_KP_2:
case GDK_KP_3:
case GDK_KP_4:
case GDK_KP_5:
case GDK_KP_6:
case GDK_KP_7:
case GDK_KP_8:
case GDK_KP_9:
case GDK_period:
case GDK_comma:
case GDK_KP_Delete:
case GDK_KP_Enter:
case GDK_Delete:
case GDK_BackSpace:
case GDK_Escape:
case GDK_Return:
case GDK_Home:
case GDK_End:
case GDK_Left:
case GDK_Right:
case GDK_Num_Lock:
case GDK_Tab:
return FALSE;
default:
break;
}
case GDK_0:
case GDK_1:
case GDK_2:
case GDK_3:
case GDK_4:
case GDK_5:
case GDK_6:
case GDK_7:
case GDK_8:
case GDK_9:
case GDK_KP_0:
case GDK_KP_1:
case GDK_KP_2:
case GDK_KP_3:
case GDK_KP_4:
case GDK_KP_5:
case GDK_KP_6:
case GDK_KP_7:
case GDK_KP_8:
case GDK_KP_9:
case GDK_period:
case GDK_comma:
case GDK_KP_Delete:
case GDK_KP_Enter:
case GDK_Delete:
case GDK_BackSpace:
case GDK_Escape:
case GDK_Return:
case GDK_Home:
case GDK_End:
case GDK_Left:
case GDK_Right:
case GDK_Num_Lock:
case GDK_Tab:
return FALSE;
default:
break;
}
return TRUE;
return TRUE;
}
bool
@ -451,7 +454,7 @@ MeterDialog::bpb_key_release (GdkEventKey* ev)
void
MeterDialog::note_types_change ()
{
set_response_sensitive (Gtk::RESPONSE_ACCEPT, true);
set_response_sensitive (RESPONSE_ACCEPT, true);
}
double
@ -497,7 +500,6 @@ MeterDialog::get_note_type ()
bool
MeterDialog::get_bbt_time (BBT_Time& requested)
{
requested.ticks = 0;
if (sscanf (when_bar_entry.get_text().c_str(), "%" PRIu32, &requested.bars) != 1) {
return false;
@ -507,5 +509,7 @@ MeterDialog::get_bbt_time (BBT_Time& requested)
return false;
}
requested.ticks = 0;
return true;
}

View file

@ -37,74 +37,66 @@
struct TempoDialog : public ArdourDialog
{
Gtk::ComboBoxText note_types;
vector<string> strings;
Gtk::Adjustment bpm_adjustment;
Gtk::SpinButton bpm_spinner;
Gtk::Frame bpm_frame;
Gtk::Frame note_frame;
Gtk::VBox vpacker;
Gtk::Button ok_button;
Gtk::Button cancel_button;
Gtk::HBox button_box;
Gtk::HBox hspacer1, hspacer2;
Gtk::VBox vspacer1, vspacer2;
Gtk::Entry when_bar_entry;
Gtk::Entry when_beat_entry;
Gtk::Label when_bar_label;
Gtk::Label when_beat_label;
Gtk::Table when_table;
Gtk::Frame when_frame;
char buf[64];
Gtk::ComboBoxText note_types;
vector<string> strings;
Gtk::Adjustment bpm_adjustment;
Gtk::SpinButton bpm_spinner;
Gtk::Frame bpm_frame;
Gtk::Button ok_button;
Gtk::Button cancel_button;
Gtk::HBox hspacer1, hspacer2;
Gtk::VBox vspacer1;
Gtk::Entry when_bar_entry;
Gtk::Entry when_beat_entry;
Gtk::Label when_bar_label;
Gtk::Label when_beat_label;
Gtk::Table when_table;
Gtk::Frame when_frame;
char buf[64];
TempoDialog (ARDOUR::TempoMap&, nframes_t, const string & action);
TempoDialog (ARDOUR::TempoSection&, const string & action);
TempoDialog (ARDOUR::TempoMap&, nframes_t, const string & action);
TempoDialog (ARDOUR::TempoSection&, const string & action);
double get_bpm ();
double get_note_type ();
bool get_bbt_time (ARDOUR::BBT_Time&);
double get_bpm ();
double get_note_type ();
bool get_bbt_time (ARDOUR::BBT_Time&);
private:
void init (const ARDOUR::BBT_Time& start, double, double, bool);
void bpm_changed ();
bool bpm_button_press (GdkEventButton* );
bool bpm_button_release (GdkEventButton* );
void note_types_change ();
private:
void init (const ARDOUR::BBT_Time& start, double, double, bool);
void bpm_changed ();
bool bpm_button_press (GdkEventButton* );
bool bpm_button_release (GdkEventButton* );
void note_types_change ();
};
struct MeterDialog : public ArdourDialog
{
Gtk::Entry bpb_entry;
Gtk::ComboBoxText note_types;
vector<string> strings;
Gtk::Frame note_frame;
Gtk::Frame bpb_frame;
Gtk::VBox vpacker;
Gtk::Button ok_button;
Gtk::Button cancel_button;
Gtk::HBox button_box;
Gtk::HBox hspacer1, hspacer2;
Gtk::VBox vspacer1, vspacer2;
Gtk::Entry when_bar_entry;
Gtk::Entry when_beat_entry;
Gtk::Label when_bar_label;
Gtk::Label when_beat_label;
Gtk::Table when_table;
Gtk::Frame when_frame;
char buf[64];
Gtk::Entry bpb_entry;
Gtk::ComboBoxText note_types;
vector<string> strings;
Gtk::Frame bpb_frame;
Gtk::Button ok_button;
Gtk::Button cancel_button;
Gtk::Entry when_bar_entry;
Gtk::Entry when_beat_entry;
Gtk::Label when_bar_label;
Gtk::Label when_beat_label;
Gtk::Table when_table;
Gtk::Frame when_frame;
char buf[64];
MeterDialog (ARDOUR::TempoMap&, nframes_t, const string & action);
MeterDialog (ARDOUR::MeterSection&, const string & action);
MeterDialog (ARDOUR::TempoMap&, nframes_t, const string & action);
MeterDialog (ARDOUR::MeterSection&, const string & action);
double get_bpb ();
double get_note_type ();
bool get_bbt_time (ARDOUR::BBT_Time&);
double get_bpb ();
double get_note_type ();
bool get_bbt_time (ARDOUR::BBT_Time&);
private:
void init (const ARDOUR::BBT_Time&, double, double, bool);
bool bpb_key_press (GdkEventKey* );
bool bpb_key_release (GdkEventKey* );
void note_types_change ();
private:
void init (const ARDOUR::BBT_Time&, double, double, bool);
bool bpb_key_press (GdkEventKey* );
bool bpb_key_release (GdkEventKey* );
void note_types_change ();
};
#endif /* __ardour_gtk_tempo_dialog_h__ */

View file

@ -449,7 +449,7 @@ TempoMap::add_meter (const Meter& meter, BBT_Time where)
where.ticks = 0;
do_insert (new MeterSection (where, meter.beats_per_bar(), meter.note_divisor()), false);
do_insert (new MeterSection (where, meter.beats_per_bar(), meter.note_divisor()), true);
}
StateChanged (Change (0));
@ -460,7 +460,7 @@ TempoMap::add_meter (const Meter& meter, nframes_t where)
{
{
Glib::RWLock::WriterLock lm (lock);
do_insert (new MeterSection (where, meter.beats_per_bar(), meter.note_divisor()), true);
do_insert (new MeterSection (where, meter.beats_per_bar(), meter.note_divisor()), false);
}
StateChanged (Change (0));