/*
- Copyright (C) 2001 Paul Davis
+ Copyright (C) 2001-2006 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
#include <pbd/whitespace.h>
+#include <ardour/audio_library.h>
#include <ardour/session.h>
#include <ardour/audioengine.h>
#include <ardour/configuration.h>
#include <ardour/auditioner.h>
+#include <ardour/destructive_filesource.h>
#include <ardour/crossfade.h>
#include <midi++/manager.h>
#include <gtkmm2ext/stop_signal.h>
#include "i18n.h"
using namespace ARDOUR;
+using namespace PBD;
using namespace Gtk;
using namespace Editing;
using namespace Gtkmm2ext;
/* Paths */
path_table (11, 2),
- sfdb_path_columns(),
- sfdb_paths(ListStore::create(sfdb_path_columns)),
- sfdb_path_view(sfdb_paths),
+ sfdb_path_view(),
/* Fades */
short_xfade_adjustment (0, 1.0, 500.0, 5.0, 100.0),
short_xfade_slider (short_xfade_adjustment),
- destructo_xfade_adjustment (0, 1.0, 500.0, 5.0, 100.0),
+ destructo_xfade_adjustment (1.0, 1.0, 500.0, 1.0, 100.0),
destructo_xfade_slider (destructo_xfade_adjustment),
/* Sync */
click_io_selector = 0;
auditioner_io_selector = 0;
+ session = 0;
set_default_size (300, 300);
set_title (_("ardour: options editor"));
click_emphasis_path_entry.set_sensitive (false);
session_raid_entry.set_sensitive (false);
- smpte_fps_combo.set_sensitive (false);
short_xfade_slider.set_sensitive (false);
smpte_offset_negative_button.set_sensitive (false);
return;
}
-
click_path_entry.set_sensitive (true);
click_emphasis_path_entry.set_sensitive (true);
session_raid_entry.set_sensitive (true);
- smpte_fps_combo.set_sensitive (true);
short_xfade_slider.set_sensitive (true);
smpte_offset_negative_button.set_sensitive (true);
- if (!s->smpte_drop_frames) {
- // non-drop frames
- if (s->smpte_frames_per_second == 24.0)
- smpte_fps_combo.set_active_text (_("24 FPS"));
- else if (s->smpte_frames_per_second == 25.0)
- smpte_fps_combo.set_active_text (_("25 FPS"));
- else if (s->smpte_frames_per_second == 30.0)
- smpte_fps_combo.set_active_text (_("30 FPS"));
- else
- smpte_fps_combo.set_active_text (_("???"));
- } else {
- // drop frames
- if (floor(s->smpte_frames_per_second) == 29.0)
- smpte_fps_combo.set_active_text (_("30 FPS drop"));
- else
- smpte_fps_combo.set_active_text (_("???"));
- }
-
smpte_offset_clock.set_session (s);
smpte_offset_clock.set (s->smpte_offset (), true);
{
}
-static const gchar *native_format_strings[] = {
- N_("Broadcast WAVE/floating point"),
- N_("WAVE/floating point"),
- 0
-};
-
void
OptionEditor::setup_path_options()
{
path_table.attach (*label, 0, 1, 0, 1, FILL|EXPAND, FILL);
path_table.attach (session_raid_entry, 1, 3, 0, 1, Gtk::FILL|Gtk::EXPAND, FILL);
- label = manage(new Label(_("Native Format")));
- label->set_name ("OptionsLabel");
- path_table.attach (*label, 0, 1, 1, 2, FILL|EXPAND, FILL);
- path_table.attach (native_format_combo, 1, 3, 1, 2, Gtk::FILL|Gtk::EXPAND, FILL);
-
label = manage(new Label(_("Soundfile Search Paths")));
label->set_name("OptionsLabel");
path_table.attach(*label, 0, 1, 2, 3, FILL|EXPAND, FILL);
path_table.attach(sfdb_path_view, 1, 3, 2, 3, Gtk::FILL|Gtk::EXPAND, FILL);
- sfdb_path_view.append_column(_("Paths"), sfdb_path_columns.paths);
- sfdb_path_view.set_size_request(-1, 100);
+ sfdb_path_view.set_paths(Library->get_paths());
+ sfdb_path_view.PathsUpdated.connect (mem_fun(*this, &OptionEditor::sfdb_paths_changed));
- vector<string> nfstrings = internationalize (native_format_strings);
-
- set_popdown_strings (native_format_combo, nfstrings);
- native_format_combo.signal_changed().connect (mem_fun(*this, &OptionEditor::native_format_chosen));
-
- fixup_combo_size (native_format_combo, nfstrings);
-
- if (Config->get_native_format_is_bwf()) {
- native_format_combo.set_active_text (native_format_strings[0]);
- } else {
- native_format_combo.set_active_text (native_format_strings[1]);
- }
-
path_table.show_all();
}
+void
+OptionEditor::sfdb_paths_changed ()
+{
+ Library->set_paths (sfdb_path_view.get_paths());
+}
+
void
OptionEditor::add_session_paths ()
{
click_emphasis_path_entry.set_sensitive (true);
session_raid_entry.set_sensitive (true);
- if (session->click_sound.length() == 0) {
+ if (Config->get_click_sound().empty()) {
click_path_entry.set_text (_("internal"));
} else {
- click_path_entry.set_text (session->click_sound);
+ click_path_entry.set_text (Config->get_click_sound());
}
- if (session->click_emphasis_sound.length() == 0) {
+ if (Config->get_click_emphasis_sound().empty()) {
click_emphasis_path_entry.set_text (_("internal"));
} else {
- click_emphasis_path_entry.set_text (session->click_emphasis_sound);
+ click_emphasis_path_entry.set_text (Config->get_click_emphasis_sound());
}
session_raid_entry.set_text(session->raid_path());
destructo_xfade_adjustment.signal_value_changed().connect (mem_fun(*this, &OptionEditor::destructo_xfade_adjustment_changed));
+ short_xfade_slider.set_update_policy (UPDATE_DISCONTINUOUS);
+ destructo_xfade_slider.set_update_policy (UPDATE_DISCONTINUOUS);
+
+ destructo_xfade_adjustment.set_value (Config->get_destructive_xfade_msecs());
+
fade_packer.show_all ();
}
/* val is in msecs */
- Crossfade::set_short_xfade_length ((jack_nframes_t) floor (session->frame_rate() * (val / 1000.0)));
+ Crossfade::set_short_xfade_length ((nframes_t) floor (session->frame_rate() * (val / 1000.0)));
}
}
float val = destructo_xfade_adjustment.get_value();
/* val is in msecs */
+
+ Config->set_destructive_xfade_msecs ((uint32_t) floor (val));
+
if (session) {
- Config->set_destructive_xfade_msecs ((uint32_t) floor (val), session->frame_rate());
- } else {
- Config->set_destructive_xfade_msecs ((uint32_t) floor (val), 0);
- }
+ SndFileSource::setup_standard_crossfades (session->frame_rate());
+ }
}
void
HBox* hbox;
vector<string> dumb;
- dumb.clear ();
- dumb.push_back (X_("24 FPS"));
- dumb.push_back (X_("25 FPS"));
- dumb.push_back (X_("30 FPS drop"));
- dumb.push_back (X_("30 FPS non-drop"));
-
- set_popdown_strings (smpte_fps_combo, dumb);
- smpte_fps_combo.signal_changed().connect (mem_fun(*this, &OptionEditor::smpte_fps_chosen));
-
smpte_offset_clock.set_mode (AudioClock::SMPTE);
smpte_offset_clock.ValueChanged.connect (mem_fun(*this, &OptionEditor::smpte_offset_chosen));
smpte_offset_negative_button.unset_flags (Gtk::CAN_FOCUS);
- Label *smpte_fps_label = manage (new Label (_("SMPTE Frames/second")));
Label *smpte_offset_label = manage (new Label (_("SMPTE Offset")));
- smpte_fps_label->set_name("OptionsLabel");
smpte_offset_label->set_name("OptionsLabel");
- hbox = manage (new HBox);
- hbox->set_border_width (5);
- hbox->set_spacing (10);
- hbox->pack_start (*smpte_fps_label, false, false);
- hbox->pack_start (smpte_fps_combo, false, false);
-
- sync_packer.pack_start (*hbox, false, false);
-
hbox = manage (new HBox);
hbox->set_border_width (5);
hbox->set_spacing (10);
}
}
-void
-OptionEditor::smpte_fps_chosen ()
-{
- if (session) {
- string str = smpte_fps_combo.get_active_text();
-
- if (str == X_("24 FPS")) {
- session->set_smpte_type (24.0, false);
- } else if (str == X_("25 FPS")) {
- session->set_smpte_type (25.0, false);
- } else if (str == X_("30 FPS drop")) {
- session->set_smpte_type (29.97, true);
- } else if (str == X_("30 FPS non-drop")) {
- session->set_smpte_type (30.0, false);
- }
- }
-}
-
void
OptionEditor::smpte_offset_chosen()
{
if (session) {
- jack_nframes_t frames = smpte_offset_clock.current_duration();
+ nframes_t frames = smpte_offset_clock.current_duration();
session->set_smpte_offset (frames);
}
}
}
tb->set_active (!(*i).second->input()->offline());
- tb->signal_button_press_event().connect (bind (mem_fun(*this, &OptionEditor::port_online_toggled), (*i).second, tb));
+ tb->signal_toggled().connect (bind (mem_fun(*this, &OptionEditor::port_online_toggled), (*i).second, tb));
(*i).second->input()->OfflineStatusChanged.connect (bind (mem_fun(*this, &OptionEditor::map_port_online), (*i).second, tb));
table->attach (*tb, 1, 2, n+2, n+3, FILL|EXPAND, FILL);
tb = manage (new ToggleButton ());
tb->set_name ("OptionEditorToggleButton");
- tb->signal_button_press_event().connect (bind (mem_fun(*this, &OptionEditor::port_trace_in_toggled), (*i).second, tb));
+ tb->signal_toggled().connect (bind (mem_fun(*this, &OptionEditor::port_trace_in_toggled), (*i).second, tb));
tb->set_size_request (10, 10);
table->attach (*tb, 2, 3, n+2, n+3, FILL|EXPAND, FILL);
tb = manage (new ToggleButton ());
tb->set_name ("OptionEditorToggleButton");
- tb->signal_button_press_event().connect (bind (mem_fun(*this, &OptionEditor::port_trace_out_toggled), (*i).second, tb));
+ tb->signal_toggled().connect (bind (mem_fun(*this, &OptionEditor::port_trace_out_toggled), (*i).second, tb));
tb->set_size_request (10, 10);
table->attach (*tb, 3, 4, n+2, n+3, FILL|EXPAND, FILL);
}
}
-gint
-OptionEditor::port_online_toggled (GdkEventButton* ev, MIDI::Port* port, ToggleButton* tb)
+void
+OptionEditor::port_online_toggled (MIDI::Port* port, ToggleButton* tb)
{
- bool wanted = tb->get_active(); /* it hasn't changed at this point */
-
+ bool wanted = tb->get_active();
+
if (wanted != port->input()->offline()) {
port->input()->set_offline (wanted);
}
- return stop_signal (*tb, "button_press_event");
}
void
OptionEditor::map_port_online (MIDI::Port* port, ToggleButton* tb)
{
if (port->input()->offline()) {
- static_cast<Label*>(tb->get_child())->set_text (_("offline"));
+ tb->set_label (_("offline"));
tb->set_active (false);
} else {
- static_cast<Label*>(tb->get_child())->set_text (_("online"));
+ tb->set_label (_("online"));
tb->set_active (true);
}
}
-gint
-OptionEditor::port_trace_in_toggled (GdkEventButton* ev, MIDI::Port* port, ToggleButton* tb)
+void
+OptionEditor::port_trace_in_toggled (MIDI::Port* port, ToggleButton* tb)
{
- /* XXX not very good MVC style here */
+ bool trace = tb->get_active();
- port->input()->trace (!tb->get_active(), &cerr, string (port->name()) + string (" input: "));
- tb->set_active (!tb->get_active());
- return stop_signal (*tb, "button_press_event");
+ if (port->input()->tracing() != trace) {
+ port->output()->trace (trace, &cerr, string (port->name()) + string (" input: "));
+ }
}
-gint
-OptionEditor::port_trace_out_toggled (GdkEventButton* ev,MIDI::Port* port, ToggleButton* tb)
+void
+OptionEditor::port_trace_out_toggled (MIDI::Port* port, ToggleButton* tb)
{
- /* XXX not very good MVC style here */
+ bool trace = tb->get_active();
- port->output()->trace (!tb->get_active(), &cerr, string (port->name()) + string (" output: "));
- tb->set_active (!tb->get_active());
- return stop_signal (*tb, "button_press_event");
+ if (port->output()->tracing() != trace) {
+ port->output()->trace (trace, &cerr, string (port->name()) + string (" output: "));
+ }
}
void
OptionEditor::raid_path_changed ()
{
if (session) {
- session->set_raid_path (session_raid_entry.get_text());
+ Config->set_raid_path (session_raid_entry.get_text());
}
}
void
OptionEditor::click_browse_clicked ()
{
- SoundFileChooser sfdb (_("Choose Click"));
+ SoundFileChooser sfdb (_("Choose Click"), session);
int result = sfdb.run ();
void
OptionEditor::click_emphasis_browse_clicked ()
{
- SoundFileChooser sfdb (_("Choose Click Emphasis"));
+ SoundFileChooser sfdb (_("Choose Click Emphasis"), session);
int result = sfdb.run ();
if (session) {
string path = click_path_entry.get_text();
- if (path == session->click_sound) {
+ if (path == Config->get_click_sound()) {
return;
}
- if (path.length() == 0) {
+ if (path.empty()) {
- session->set_click_sound ("");
+ Config->set_click_sound ("");
} else {
strip_whitespace_edges (path);
if (path == _("internal")) {
- session->set_click_sound ("");
+ Config->set_click_sound ("");
} else {
- session->set_click_sound (path);
+ Config->set_click_sound (path);
}
}
}
if (session) {
string path = click_emphasis_path_entry.get_text();
- if (path == session->click_emphasis_sound) {
+ if (path == Config->get_click_emphasis_sound()) {
return;
}
- if (path.length() == 0) {
+ if (path.empty()) {
- session->set_click_emphasis_sound ("");
+ Config->set_click_emphasis_sound ("");
} else {
strip_whitespace_edges (path);
if (path == _("internal")) {
- session->set_click_emphasis_sound ("");
+ Config->set_click_emphasis_sound ("");
} else {
- session->set_click_emphasis_sound (path);
+ Config->set_click_emphasis_sound (path);
}
}
}
}
-void
-OptionEditor::native_format_chosen ()
-{
- string which;
-
- if (session == 0) {
- return;
- }
-
- bool use_bwf = (native_format_combo.get_active_text() == native_format_strings[0]);
-
- if (use_bwf != Config->get_native_format_is_bwf()) {
- Config->set_native_format_is_bwf (use_bwf);
- session->reset_native_file_format ();
- }
-}
-
void
OptionEditor::clear_click_editor ()
{