lots of tricks & tweaks related to the monitor section and All That It Uses
git-svn-id: svn://localhost/ardour2/branches/3.0@6777 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
587021ac0b
commit
d163021950
|
@ -1132,7 +1132,7 @@ style "flashing_alert" = "very_small_text"
|
|||
{
|
||||
fg[NORMAL] = { 0.80, 0.80, 0.80 }
|
||||
bg[NORMAL] = { 0.26, 0.26, 0.31 }
|
||||
|
||||
|
||||
fg[ACTIVE] = { 0.80, 0.80, 0.80 }
|
||||
bg[ACTIVE] = { 1.0, 0, 0}
|
||||
}
|
||||
|
@ -1585,6 +1585,8 @@ widget "*BypassButton" style:highest "red_when_active"
|
|||
widget "*BypassButton*" style:highest "red_when_active"
|
||||
widget "*TransportSoloAlert" style:highest "flashing_alert"
|
||||
widget "*TransportSoloAlert.*" style:highest "flashing_alert"
|
||||
widget "*TransportSoloAlert-active" style:highest "flashing_alert"
|
||||
widget "*TransportSoloAlert-alternate" style:highest "flashing_alert"
|
||||
widget "*SendAlert" style:highest "green_flashing_alert"
|
||||
widget "*SendAlert.*" style:highest "green_flashing_alert"
|
||||
widget "*TransportAuditioningAlert" style:highest "flashing_alert"
|
||||
|
|
|
@ -184,6 +184,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
|
|||
XMLNode* editor_settings() const;
|
||||
XMLNode* mixer_settings () const;
|
||||
XMLNode* keyboard_settings () const;
|
||||
XMLNode* tearoff_settings (const char*) const;
|
||||
|
||||
void save_ardour_state ();
|
||||
gboolean configure_handler (GdkEventConfigure* conf);
|
||||
|
@ -455,8 +456,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
|
|||
void auditioning_changed (bool);
|
||||
void _auditioning_changed (bool);
|
||||
|
||||
void solo_alert_toggle ();
|
||||
void audition_alert_toggle ();
|
||||
bool solo_alert_press (GdkEventButton* ev);
|
||||
bool audition_alert_press (GdkEventButton* ev);
|
||||
|
||||
void big_clock_value_changed ();
|
||||
void primary_clock_value_changed ();
|
||||
|
|
|
@ -72,10 +72,6 @@ ARDOUR_UI::setup_windows ()
|
|||
|
||||
we_have_dependents ();
|
||||
|
||||
setup_clock ();
|
||||
setup_transport();
|
||||
build_menu_bar ();
|
||||
|
||||
theme_manager->signal_unmap().connect (sigc::bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleThemeManager")));
|
||||
|
||||
#ifdef TOP_MENUBAR
|
||||
|
@ -97,6 +93,10 @@ ARDOUR_UI::setup_windows ()
|
|||
|
||||
editor->add_toplevel_controls (top_packer);
|
||||
|
||||
setup_clock ();
|
||||
setup_transport();
|
||||
build_menu_bar ();
|
||||
|
||||
setup_tooltips ();
|
||||
|
||||
return 0;
|
||||
|
@ -174,6 +174,22 @@ block_prelight (Gtk::Widget& w)
|
|||
}
|
||||
#endif
|
||||
|
||||
XMLNode*
|
||||
ARDOUR_UI::tearoff_settings (const char* name) const
|
||||
{
|
||||
XMLNode* ui_node = Config->extra_xml(X_("UI"));
|
||||
|
||||
if (ui_node) {
|
||||
XMLNode* tearoff_node = ui_node->child (X_("Tearoffs"));
|
||||
if (tearoff_node) {
|
||||
XMLNode* mnode = tearoff_node->child (name);
|
||||
return mnode;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::setup_transport ()
|
||||
{
|
||||
|
@ -319,9 +335,9 @@ ARDOUR_UI::setup_transport ()
|
|||
/* CANNOT sigc::bind these to clicked or toggled, must use pressed or released */
|
||||
|
||||
solo_alert_button.set_name ("TransportSoloAlert");
|
||||
solo_alert_button.signal_pressed().connect (sigc::mem_fun(*this,&ARDOUR_UI::solo_alert_toggle));
|
||||
solo_alert_button.signal_button_press_event().connect (sigc::mem_fun(*this,&ARDOUR_UI::solo_alert_press), false);
|
||||
auditioning_alert_button.set_name ("TransportAuditioningAlert");
|
||||
auditioning_alert_button.signal_pressed().connect (sigc::mem_fun(*this,&ARDOUR_UI::audition_alert_toggle));
|
||||
auditioning_alert_button.signal_button_press_event().connect (sigc::mem_fun(*this,&ARDOUR_UI::audition_alert_press), false);
|
||||
|
||||
alert_box.pack_start (solo_alert_button, false, false);
|
||||
alert_box.pack_start (auditioning_alert_button, false, false);
|
||||
|
@ -435,6 +451,11 @@ ARDOUR_UI::setup_transport ()
|
|||
Image* img = manage (new Image ((::get_icon (X_("sae")))));
|
||||
transport_tearoff_hbox.pack_end (*img, false, false, 6);
|
||||
}
|
||||
|
||||
XMLNode* tnode = tearoff_settings ("transport");
|
||||
if (tnode) {
|
||||
transport_tearoff->set_state (*tnode);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -482,20 +503,26 @@ ARDOUR_UI::auditioning_changed (bool onoff)
|
|||
UI::instance()->call_slot (boost::bind (&ARDOUR_UI::_auditioning_changed, this, onoff));
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::audition_alert_toggle ()
|
||||
bool
|
||||
ARDOUR_UI::audition_alert_press (GdkEventButton* ev)
|
||||
{
|
||||
if (_session) {
|
||||
_session->cancel_audition();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::solo_alert_toggle ()
|
||||
bool
|
||||
ARDOUR_UI::solo_alert_press (GdkEventButton* ev)
|
||||
{
|
||||
if (_session) {
|
||||
_session->set_solo (_session->get_routes(), !_session->soloing());
|
||||
}
|
||||
if (_session) {
|
||||
if (_session->soloing()) {
|
||||
_session->set_solo (_session->get_routes(), false);
|
||||
} else if (_session->listening()) {
|
||||
_session->set_listen (_session->get_routes(), false);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -505,7 +532,7 @@ ARDOUR_UI::solo_blink (bool onoff)
|
|||
return;
|
||||
}
|
||||
|
||||
if (_session->soloing()) {
|
||||
if (_session->soloing() || _session->listening()) {
|
||||
if (onoff) {
|
||||
solo_alert_button.set_state (STATE_ACTIVE);
|
||||
} else {
|
||||
|
|
|
@ -722,19 +722,19 @@ ARDOUR_UI::save_ardour_state ()
|
|||
|
||||
if (transport_tearoff) {
|
||||
XMLNode* t = new XMLNode (X_("transport"));
|
||||
transport_tearoff->add_tornoff_state (*t);
|
||||
transport_tearoff->add_state (*t);
|
||||
tearoff_node->add_child_nocopy (*t);
|
||||
}
|
||||
|
||||
if (mixer && mixer->monitor_section()) {
|
||||
XMLNode* t = new XMLNode (X_("monitor-section"));
|
||||
mixer->monitor_section()->tearoff()->add_tornoff_state (*t);
|
||||
mixer->monitor_section()->tearoff().add_state (*t);
|
||||
tearoff_node->add_child_nocopy (*t);
|
||||
}
|
||||
|
||||
if (editor && editor->mouse_mode_tearoff()) {
|
||||
XMLNode* t = new XMLNode (X_("mouse-mode"));
|
||||
editor->mouse_mode_tearoff ()->add_tornoff_state (*t);
|
||||
editor->mouse_mode_tearoff ()->add_state (*t);
|
||||
tearoff_node->add_child_nocopy (*t);
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
|
@ -193,7 +193,7 @@ MixerStrip::init ()
|
|||
middle_button_table.set_homogeneous (true);
|
||||
middle_button_table.set_spacings (0);
|
||||
middle_button_table.attach (*mute_button, 0, 1, 0, 1);
|
||||
middle_button_table.attach (*solo_button, 1, 2, 0, 1);
|
||||
middle_button_table.attach (*solo_button, 1, 2, 0, 1);
|
||||
|
||||
bottom_button_table.set_col_spacings (0);
|
||||
bottom_button_table.set_homogeneous (true);
|
||||
|
@ -338,6 +338,12 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
|
|||
set_color (unique_random_color());
|
||||
}
|
||||
|
||||
if (route()->is_master()) {
|
||||
solo_button->hide ();
|
||||
} else {
|
||||
solo_button->show ();
|
||||
}
|
||||
|
||||
if (_mixer_owned && (route()->is_master() || route()->is_control())) {
|
||||
|
||||
if (scrollbar_height == 0) {
|
||||
|
|
|
@ -324,26 +324,16 @@ Mixer_UI::add_strip (RouteList& routes)
|
|||
if (route->is_control()) {
|
||||
if (!_monitor_section) {
|
||||
_monitor_section = new MonitorSection (_session);
|
||||
out_packer.pack_end (_monitor_section->pack_widget(), false, false);
|
||||
out_packer.pack_end (_monitor_section->tearoff(), false, false);
|
||||
} else {
|
||||
_monitor_section->set_session (_session);
|
||||
}
|
||||
|
||||
_monitor_section->pack_widget().show_all ();
|
||||
_monitor_section->tearoff().show_all ();
|
||||
|
||||
XMLNode* ui_node = Config->extra_xml(X_("UI"));
|
||||
|
||||
if (ui_node) {
|
||||
cerr << "Got UI node\n";
|
||||
XMLNode* tearoff_node = ui_node->child (X_("Tearoffs"));
|
||||
if (tearoff_node) {
|
||||
cerr << "Got tearoff node\n";
|
||||
XMLNode* mnode = tearoff_node->child (X_("monitor-section"));
|
||||
if (mnode) {
|
||||
cerr << "got mndeo\n";
|
||||
_monitor_section->tearoff()->set_tornoff_state (*mnode);
|
||||
}
|
||||
}
|
||||
XMLNode* mnode = ARDOUR_UI::instance()->tearoff_settings (X_("monitor-section"));
|
||||
if (mnode) {
|
||||
_monitor_section->tearoff().set_state (*mnode);
|
||||
}
|
||||
|
||||
/* no regular strip shown for control out */
|
||||
|
@ -548,7 +538,7 @@ Mixer_UI::session_going_away ()
|
|||
delete (*i);
|
||||
}
|
||||
|
||||
_monitor_section->pack_widget().hide ();
|
||||
_monitor_section->tearoff().hide_visible ();
|
||||
|
||||
strips.clear ();
|
||||
|
||||
|
@ -614,10 +604,6 @@ Mixer_UI::fast_update_strips ()
|
|||
for (list<MixerStrip *>::iterator i = strips.begin(); i != strips.end(); ++i) {
|
||||
(*i)->fast_update ();
|
||||
}
|
||||
|
||||
if (_monitor_section) {
|
||||
_monitor_section->fast_update ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -30,11 +30,31 @@ Glib::RefPtr<ActionGroup> MonitorSection::monitor_actions;
|
|||
Glib::RefPtr<Gdk::Pixbuf> MonitorSection::big_knob_pixbuf;
|
||||
Glib::RefPtr<Gdk::Pixbuf> MonitorSection::little_knob_pixbuf;
|
||||
|
||||
static bool
|
||||
fixup_prelight (GdkEventCrossing* /* ignored */, GtkWidget* widget)
|
||||
{
|
||||
GtkRcStyle* style = gtk_rc_style_copy (gtk_widget_get_modifier_style (widget));
|
||||
int current = gtk_widget_get_state (widget);
|
||||
|
||||
style->fg[GTK_STATE_PRELIGHT] = style->fg[current];
|
||||
style->bg[GTK_STATE_PRELIGHT] = style->bg[current];
|
||||
|
||||
gtk_widget_modify_style(widget, style);
|
||||
g_object_unref(style);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void
|
||||
block_prelight (Gtk::Widget& w)
|
||||
{
|
||||
w.signal_enter_notify_event().connect (sigc::bind (sigc::ptr_fun (fixup_prelight), w.gobj()), false);
|
||||
}
|
||||
|
||||
MonitorSection::MonitorSection (Session* s)
|
||||
: AxisView (s)
|
||||
, RouteUI (s)
|
||||
, main_table (2, 3)
|
||||
, meter (s)
|
||||
, _tearoff (0)
|
||||
, gain_adjustment (1.0, 0.0, 1.0, 0.01, 0.1)
|
||||
, gain_control (0)
|
||||
|
@ -42,6 +62,8 @@ MonitorSection::MonitorSection (Session* s)
|
|||
, dim_control (0)
|
||||
, solo_boost_adjustment (1.0, 1.0, 2.0, 0.01, 0.1)
|
||||
, solo_boost_control (0)
|
||||
, solo_cut_adjustment (0.0, 0.0, 1.0, 0.01, 0.1)
|
||||
, solo_cut_control (0)
|
||||
, solo_in_place_button (solo_model_group, _("SiP"))
|
||||
, afl_button (solo_model_group, _("AFL"))
|
||||
, pfl_button (solo_model_group, _("PFL"))
|
||||
|
@ -63,35 +85,18 @@ MonitorSection::MonitorSection (Session* s)
|
|||
|
||||
set_session (s);
|
||||
|
||||
VBox* sub_knob_packer = manage (new VBox);
|
||||
sub_knob_packer->set_spacing (12);
|
||||
|
||||
VBox* spin_packer;
|
||||
Label* spin_label;
|
||||
|
||||
gain_control = new VolumeController (big_knob_pixbuf, &gain_adjustment, true);
|
||||
gain_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MonitorSection::gain_value_changed));
|
||||
gain_control->spinner().signal_output().connect (sigc::bind (sigc::mem_fun (*this, &MonitorSection::nonlinear_gain_printer),
|
||||
&gain_control->spinner()));
|
||||
/* Dim */
|
||||
|
||||
spin_label = manage (new Label (_("Gain (dB)")));
|
||||
spin_packer = manage (new VBox);
|
||||
spin_packer->show ();
|
||||
spin_packer->set_spacing (6);
|
||||
spin_packer->pack_start (*gain_control, false, false);
|
||||
spin_packer->pack_start (*spin_label, false, false);
|
||||
|
||||
sub_knob_packer->pack_start (*spin_packer, false, false);
|
||||
|
||||
dim_control = new VolumeController (little_knob_pixbuf, &dim_adjustment, true, 30, 30);
|
||||
dim_control = new VolumeController (little_knob_pixbuf, &dim_adjustment, false, 30, 30);
|
||||
dim_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MonitorSection::dim_level_changed));
|
||||
dim_control->spinner().signal_output().connect (sigc::bind (sigc::mem_fun (*this, &MonitorSection::linear_gain_printer),
|
||||
&dim_control->spinner()));
|
||||
|
||||
HBox* dim_packer = manage (new HBox);
|
||||
dim_packer->show ();
|
||||
|
||||
spin_label = manage (new Label (_("Dim Cut (dB)")));
|
||||
spin_label = manage (new Label (_("Dim Cut")));
|
||||
spin_packer = manage (new VBox);
|
||||
spin_packer->show ();
|
||||
spin_packer->set_spacing (6);
|
||||
|
@ -99,64 +104,18 @@ MonitorSection::MonitorSection (Session* s)
|
|||
spin_packer->pack_start (*spin_label, false, false);
|
||||
|
||||
dim_packer->set_spacing (12);
|
||||
dim_packer->pack_start (*spin_packer, false, false);
|
||||
dim_packer->pack_start (*spin_packer, true, true);
|
||||
|
||||
VBox* keep_dim_under_vertical_size_control = manage (new VBox);
|
||||
keep_dim_under_vertical_size_control->pack_start (dim_all_button, true, false);
|
||||
keep_dim_under_vertical_size_control->show ();
|
||||
dim_all_button.set_size_request (40,40);
|
||||
dim_all_button.show ();
|
||||
|
||||
dim_packer->pack_start (*keep_dim_under_vertical_size_control, false, false);
|
||||
sub_knob_packer->pack_start (*dim_packer, false, true);
|
||||
|
||||
solo_boost_control = new VolumeController (little_knob_pixbuf, &solo_boost_adjustment, true, 30, 30);
|
||||
solo_boost_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MonitorSection::solo_boost_changed));
|
||||
solo_boost_control->spinner().signal_output().connect (sigc::bind (sigc::mem_fun (*this, &MonitorSection::linear_gain_printer),
|
||||
&solo_boost_control->spinner()));
|
||||
|
||||
HBox* solo_packer = manage (new HBox);
|
||||
solo_packer->show ();
|
||||
|
||||
spin_label = manage (new Label (_("Solo Boost (dB)")));
|
||||
spin_packer = manage (new VBox);
|
||||
spin_packer->show ();
|
||||
spin_packer->set_spacing (6);
|
||||
spin_packer->pack_start (*solo_boost_control, false, false);
|
||||
spin_packer->pack_start (*spin_label, false, false);
|
||||
|
||||
VBox* keep_rude_solo_under_vertical_size_control = manage (new VBox);
|
||||
keep_rude_solo_under_vertical_size_control->show ();
|
||||
keep_rude_solo_under_vertical_size_control->pack_start (rude_solo_button, true, false);
|
||||
|
||||
solo_packer->set_spacing (12);
|
||||
solo_packer->pack_start (*spin_packer, false, false);
|
||||
solo_packer->pack_start (*keep_rude_solo_under_vertical_size_control, true, false);
|
||||
/* Rude Solo */
|
||||
|
||||
rude_solo_button.set_name ("TransportSoloAlert");
|
||||
rude_solo_button.show ();
|
||||
block_prelight (rude_solo_button);
|
||||
|
||||
ARDOUR_UI::Blink.connect (sigc::mem_fun (*this, &MonitorSection::solo_blink));
|
||||
rude_solo_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::cancel_solo));
|
||||
rude_solo_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::cancel_solo), false);
|
||||
UI::instance()->set_tip (rude_solo_button, _("When active, something is soloed.\nClick to de-solo everything"));
|
||||
|
||||
sub_knob_packer->pack_start (*solo_packer, false, true);
|
||||
|
||||
knob_packer.pack_start (*sub_knob_packer, false, true);
|
||||
|
||||
sub_knob_packer->show ();
|
||||
knob_packer.show ();
|
||||
gain_control->show_all ();
|
||||
dim_control->show_all ();
|
||||
solo_boost_control->show_all ();
|
||||
|
||||
meter.set_meter (&_route->peak_meter());
|
||||
meter.setup_meters (300, 5);
|
||||
|
||||
table_knob_packer.pack_start (main_table, true, true);
|
||||
table_knob_packer.pack_start (knob_packer, false, false);
|
||||
|
||||
table_knob_packer.show ();
|
||||
|
||||
solo_model_box.set_spacing (6);
|
||||
solo_model_box.pack_start (solo_in_place_button, false, false);
|
||||
|
@ -183,7 +142,43 @@ MonitorSection::MonitorSection (Session* s)
|
|||
act->connect_proxy (pfl_button);
|
||||
}
|
||||
|
||||
|
||||
/* Solo Boost */
|
||||
|
||||
solo_boost_control = new VolumeController (little_knob_pixbuf, &solo_boost_adjustment, false, 30, 30);
|
||||
solo_boost_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MonitorSection::solo_boost_changed));
|
||||
|
||||
HBox* solo_packer = manage (new HBox);
|
||||
solo_packer->set_spacing (12);
|
||||
solo_packer->show ();
|
||||
|
||||
spin_label = manage (new Label (_("Solo Boost")));
|
||||
spin_packer = manage (new VBox);
|
||||
spin_packer->show ();
|
||||
spin_packer->set_spacing (6);
|
||||
spin_packer->pack_start (*solo_boost_control, false, false);
|
||||
spin_packer->pack_start (*spin_label, false, false);
|
||||
|
||||
solo_packer->pack_start (*spin_packer, true, true);
|
||||
|
||||
/* Solo (SiP) cut */
|
||||
|
||||
solo_cut_control = new VolumeController (little_knob_pixbuf, &solo_cut_adjustment, false, 30, 30);
|
||||
// solo_cut_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MonitorSection::solo_cut_changed));
|
||||
|
||||
spin_label = manage (new Label (_("SiP Cut")));
|
||||
spin_packer = manage (new VBox);
|
||||
spin_packer->show ();
|
||||
spin_packer->set_spacing (6);
|
||||
spin_packer->pack_start (*solo_cut_control, false, false);
|
||||
spin_packer->pack_start (*spin_label, false, false);
|
||||
|
||||
solo_packer->pack_start (*spin_packer, true, true);
|
||||
|
||||
upper_packer.set_spacing (12);
|
||||
upper_packer.pack_start (rude_solo_button, false, false);
|
||||
upper_packer.pack_start (solo_model_box, false, false);
|
||||
upper_packer.pack_start (*solo_packer, false, false);
|
||||
|
||||
act = ActionManager::get_action (X_("Monitor"), X_("monitor-cut-all"));
|
||||
if (act) {
|
||||
|
@ -203,31 +198,50 @@ MonitorSection::MonitorSection (Session* s)
|
|||
cut_all_button.set_size_request (50,50);
|
||||
cut_all_button.show ();
|
||||
|
||||
HBox* bbox = manage (new HBox);
|
||||
|
||||
bbox->set_spacing (12);
|
||||
bbox->pack_start (mono_button, true, true);
|
||||
bbox->pack_start (dim_all_button, true, true);
|
||||
|
||||
lower_packer.set_spacing (12);
|
||||
lower_packer.pack_start (mono_button, false, false);
|
||||
lower_packer.pack_start (*bbox, false, false);
|
||||
lower_packer.pack_start (cut_all_button, false, false);
|
||||
|
||||
/* Gain */
|
||||
|
||||
gain_control = new VolumeController (big_knob_pixbuf, &gain_adjustment, false, 80, 80);
|
||||
gain_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MonitorSection::gain_value_changed));
|
||||
|
||||
spin_label = manage (new Label (_("Gain")));
|
||||
spin_packer = manage (new VBox);
|
||||
spin_packer->show ();
|
||||
spin_packer->set_spacing (6);
|
||||
spin_packer->pack_start (*gain_control, false, false);
|
||||
spin_packer->pack_start (*spin_label, false, false);
|
||||
|
||||
lower_packer.pack_start (*spin_packer, true, true);
|
||||
|
||||
vpacker.set_border_width (12);
|
||||
vpacker.set_spacing (12);
|
||||
vpacker.pack_start (upper_packer, false, false);
|
||||
vpacker.pack_start (table_knob_packer, false, false);
|
||||
vpacker.pack_start (*dim_packer, false, false);
|
||||
vpacker.pack_start (main_table, false, false);
|
||||
vpacker.pack_start (lower_packer, false, false);
|
||||
|
||||
VBox* keep_meter_under_control = manage (new VBox);
|
||||
keep_meter_under_control->pack_start (meter, false, false);
|
||||
keep_meter_under_control->show ();
|
||||
|
||||
hpacker.set_border_width (12);
|
||||
hpacker.set_spacing (12);
|
||||
hpacker.pack_start (*keep_meter_under_control, false, false);
|
||||
hpacker.pack_start (vpacker, true, true);
|
||||
|
||||
gain_control->show_all ();
|
||||
dim_control->show_all ();
|
||||
solo_boost_control->show_all ();
|
||||
|
||||
main_table.show ();
|
||||
hpacker.show ();
|
||||
upper_packer.show ();
|
||||
lower_packer.show ();
|
||||
vpacker.show ();
|
||||
meter.show_all ();
|
||||
|
||||
populate_buttons ();
|
||||
map_state ();
|
||||
|
@ -266,19 +280,16 @@ MonitorSection::set_session (Session* s)
|
|||
if (_route) {
|
||||
/* session with control outs */
|
||||
_monitor = _route->monitor_control ();
|
||||
meter.set_meter (&_route->peak_meter());
|
||||
} else {
|
||||
/* session with no control outs */
|
||||
_monitor.reset ();
|
||||
_route.reset ();
|
||||
meter.set_meter (0);
|
||||
}
|
||||
|
||||
} else {
|
||||
/* no session */
|
||||
_monitor.reset ();
|
||||
_route.reset ();
|
||||
meter.set_meter (0);
|
||||
}
|
||||
|
||||
/* both might be null */
|
||||
|
@ -298,6 +309,11 @@ MonitorSection::ChannelButtonSet::ChannelButtonSet ()
|
|||
gtk_activatable_set_use_action_appearance (GTK_ACTIVATABLE (dim.gobj()), false);
|
||||
gtk_activatable_set_use_action_appearance (GTK_ACTIVATABLE (invert.gobj()), false);
|
||||
gtk_activatable_set_use_action_appearance (GTK_ACTIVATABLE (solo.gobj()), false);
|
||||
|
||||
block_prelight (cut);
|
||||
block_prelight (dim);
|
||||
block_prelight (solo);
|
||||
block_prelight (invert);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -393,12 +409,6 @@ MonitorSection::set_button_names ()
|
|||
solo_button_label.set_text ("rec");
|
||||
}
|
||||
|
||||
Widget&
|
||||
MonitorSection::pack_widget () const
|
||||
{
|
||||
return *_tearoff;
|
||||
}
|
||||
|
||||
void
|
||||
MonitorSection::dim_all ()
|
||||
{
|
||||
|
@ -640,18 +650,12 @@ MonitorSection::solo_use_pfl ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
MonitorSection::fast_update ()
|
||||
{
|
||||
meter.update_meters ();
|
||||
}
|
||||
|
||||
void
|
||||
MonitorSection::setup_knob_images ()
|
||||
{
|
||||
try {
|
||||
|
||||
big_knob_pixbuf = ::get_icon ("knob");
|
||||
big_knob_pixbuf = ::get_icon ("bigknob");
|
||||
|
||||
} catch (...) {
|
||||
|
||||
|
@ -843,7 +847,7 @@ MonitorSection::solo_blink (bool onoff)
|
|||
rude_solo_button.set_state (STATE_NORMAL);
|
||||
}
|
||||
} else {
|
||||
rude_solo_button.set_active (false);
|
||||
// rude_solo_button.set_active (false);
|
||||
rude_solo_button.set_state (STATE_NORMAL);
|
||||
}
|
||||
}
|
||||
|
@ -851,8 +855,12 @@ MonitorSection::solo_blink (bool onoff)
|
|||
bool
|
||||
MonitorSection::cancel_solo (GdkEventButton* ev)
|
||||
{
|
||||
if (_session && _session->soloing()) {
|
||||
_session->set_solo (_session->get_routes(), false);
|
||||
if (_session) {
|
||||
if (_session->soloing()) {
|
||||
_session->set_solo (_session->get_routes(), false);
|
||||
} else if (_session->listening()) {
|
||||
_session->set_listen (_session->get_routes(), false);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -39,12 +39,9 @@ class MonitorSection : public RouteUI
|
|||
~MonitorSection ();
|
||||
|
||||
void set_session (ARDOUR::Session*);
|
||||
|
||||
Gtk::Widget& pack_widget () const;
|
||||
void fast_update ();
|
||||
static void setup_knob_images ();
|
||||
|
||||
Gtkmm2ext::TearOff* tearoff() const { return _tearoff; }
|
||||
Gtkmm2ext::TearOff& tearoff() const { return *_tearoff; }
|
||||
|
||||
private:
|
||||
Gtk::VBox vpacker;
|
||||
|
@ -52,9 +49,6 @@ class MonitorSection : public RouteUI
|
|||
Gtk::Table main_table;
|
||||
Gtk::VBox upper_packer;
|
||||
Gtk::VBox lower_packer;
|
||||
Gtk::VBox table_knob_packer;
|
||||
Gtk::HBox knob_packer;
|
||||
LevelMeter meter;
|
||||
Gtkmm2ext::TearOff* _tearoff;
|
||||
|
||||
struct ChannelButtonSet {
|
||||
|
@ -75,6 +69,8 @@ class MonitorSection : public RouteUI
|
|||
VolumeController* dim_control;
|
||||
Gtk::Adjustment solo_boost_adjustment;
|
||||
VolumeController* solo_boost_control;
|
||||
Gtk::Adjustment solo_cut_adjustment;
|
||||
VolumeController* solo_cut_control;
|
||||
|
||||
void populate_buttons ();
|
||||
void set_button_names ();
|
||||
|
|
|
@ -4104,11 +4104,11 @@ Session::solo_control_mode_changed ()
|
|||
{
|
||||
/* cancel all solo or all listen when solo control mode changes */
|
||||
|
||||
if (Config->get_solo_control_is_listen_control()) {
|
||||
set_solo (routes.reader(), false);
|
||||
} else {
|
||||
set_listen (routes.reader(), false);
|
||||
}
|
||||
if (soloing()) {
|
||||
set_solo (get_routes(), false);
|
||||
} else if (listening()) {
|
||||
set_listen (get_routes(), false);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -48,9 +48,10 @@ class TearOff : public Gtk::HBox
|
|||
bool torn_off() const;
|
||||
void tear_it_off ();
|
||||
void put_it_back ();
|
||||
void hide_visible ();
|
||||
|
||||
void set_tornoff_state (const XMLNode&);
|
||||
void add_tornoff_state (XMLNode&) const;
|
||||
void set_state (const XMLNode&);
|
||||
void add_state (XMLNode&) const;
|
||||
|
||||
private:
|
||||
Gtk::Widget& contents;
|
||||
|
|
|
@ -54,7 +54,10 @@ MotionFeedback::MotionFeedback (Glib::RefPtr<Gdk::Pixbuf> pix,
|
|||
set_adjustment (adj);
|
||||
}
|
||||
|
||||
pack_start (pixwin, false, false);
|
||||
HBox* hpacker = manage (new HBox);
|
||||
hpacker->pack_start (pixwin, true, false);
|
||||
hpacker->show ();
|
||||
pack_start (*hpacker, false, false);
|
||||
pixwin.show ();
|
||||
|
||||
if (with_numeric_display) {
|
||||
|
|
|
@ -22,8 +22,6 @@
|
|||
|
||||
#include <gtkmm/main.h>
|
||||
|
||||
#include "pbd/stacktrace.h"
|
||||
|
||||
#include <gtkmm2ext/stateful_button.h>
|
||||
|
||||
using namespace Gtk;
|
||||
|
@ -65,6 +63,7 @@ StateButton::set_visual_state (int n)
|
|||
}
|
||||
|
||||
set_widget_name (name);
|
||||
|
||||
visual_state = n;
|
||||
}
|
||||
|
||||
|
@ -110,10 +109,7 @@ StatefulToggleButton::set_widget_name (const std::string& name)
|
|||
|
||||
if (w) {
|
||||
w->set_name (name);
|
||||
} else {
|
||||
cerr << "Statefull TOggle button - no child\n";
|
||||
PBD::stacktrace (cerr, 20);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -124,8 +120,5 @@ StatefulButton::set_widget_name (const std::string& name)
|
|||
|
||||
if (w) {
|
||||
w->set_name (name);
|
||||
} else {
|
||||
cerr << "Stateful button - no child\n";
|
||||
PBD::stacktrace (cerr, 20);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,24 +56,25 @@ TearOff::TearOff (Widget& c, bool allow_resize)
|
|||
close_event_box.set_events (BUTTON_PRESS_MASK|BUTTON_RELEASE_MASK);
|
||||
close_event_box.signal_button_release_event().connect (mem_fun (*this, &TearOff::close_click));
|
||||
|
||||
own_window.add_events (KEY_PRESS_MASK|KEY_RELEASE_MASK|BUTTON_PRESS_MASK|BUTTON_RELEASE_MASK|POINTER_MOTION_MASK|POINTER_MOTION_HINT_MASK);
|
||||
own_window.set_resizable (allow_resize);
|
||||
own_window.set_type_hint (WINDOW_TYPE_HINT_TOOLBAR);
|
||||
own_window.signal_realize().connect (sigc::mem_fun (*this, &TearOff::own_window_realized));
|
||||
own_window.signal_configure_event().connect (sigc::mem_fun (*this, &TearOff::own_window_configured), false);
|
||||
|
||||
VBox* box1;
|
||||
box1 = manage (new VBox);
|
||||
box1->pack_start (close_event_box, false, false, 2);
|
||||
|
||||
window_box.pack_end (*box1, false, false, 2);
|
||||
|
||||
own_window.add_events (KEY_PRESS_MASK|KEY_RELEASE_MASK|BUTTON_PRESS_MASK|BUTTON_RELEASE_MASK|POINTER_MOTION_MASK|POINTER_MOTION_HINT_MASK);
|
||||
own_window.set_resizable (allow_resize);
|
||||
own_window.set_type_hint (WINDOW_TYPE_HINT_TOOLBAR);
|
||||
|
||||
own_window.add (window_box);
|
||||
|
||||
own_window.signal_button_press_event().connect (mem_fun (*this, &TearOff::window_button_press));
|
||||
own_window.signal_button_release_event().connect (mem_fun (*this, &TearOff::window_button_release));
|
||||
own_window.signal_motion_notify_event().connect (mem_fun (*this, &TearOff::window_motion));
|
||||
own_window.signal_delete_event().connect (mem_fun (*this, &TearOff::window_delete_event));
|
||||
own_window.signal_realize().connect (bind (sigc::ptr_fun (Gtkmm2ext::set_decoration), &own_window, WMDecoration (DECOR_BORDER|DECOR_RESIZEH)));
|
||||
own_window.signal_realize().connect (sigc::mem_fun (*this, &TearOff::own_window_realized));
|
||||
own_window.signal_configure_event().connect (sigc::mem_fun (*this, &TearOff::own_window_configured), false);
|
||||
|
||||
tearoff_arrow.set_name ("TearOffArrow");
|
||||
close_arrow.set_name ("TearOffArrow");
|
||||
|
@ -249,7 +250,7 @@ TearOff::torn_off() const
|
|||
}
|
||||
|
||||
void
|
||||
TearOff::add_tornoff_state (XMLNode& node) const
|
||||
TearOff::add_state (XMLNode& node) const
|
||||
{
|
||||
node.add_property ("tornoff", (own_window.is_visible() ? "yes" : "no"));
|
||||
|
||||
|
@ -268,7 +269,7 @@ TearOff::add_tornoff_state (XMLNode& node) const
|
|||
}
|
||||
|
||||
void
|
||||
TearOff::set_tornoff_state (const XMLNode& node)
|
||||
TearOff::set_state (const XMLNode& node)
|
||||
{
|
||||
Glib::RefPtr<Gdk::Window> win;
|
||||
const XMLProperty* prop;
|
||||
|
@ -278,8 +279,10 @@ TearOff::set_tornoff_state (const XMLNode& node)
|
|||
}
|
||||
|
||||
if (prop->value() == "yes") {
|
||||
cerr << "Tearing off " << node.name() << endl;
|
||||
tear_it_off ();
|
||||
} else {
|
||||
cerr << "Putting back " << node.name() << endl;
|
||||
put_it_back ();
|
||||
}
|
||||
|
||||
|
@ -296,13 +299,20 @@ TearOff::set_tornoff_state (const XMLNode& node)
|
|||
sscanf (prop->value().c_str(), "%d", &own_window_ypos);
|
||||
}
|
||||
|
||||
own_window.set_default_size (own_window_width, own_window_height);
|
||||
own_window.move (own_window_xpos, own_window_ypos);
|
||||
if (own_window.is_realized()) {
|
||||
own_window.set_default_size (own_window_width, own_window_height);
|
||||
own_window.move (own_window_xpos, own_window_ypos);
|
||||
}
|
||||
/* otherwise do it once the window is realized, see below */
|
||||
}
|
||||
|
||||
void
|
||||
TearOff::own_window_realized ()
|
||||
{
|
||||
cerr << "tearoff realized\n";
|
||||
|
||||
own_window.get_window()->set_decorations (WMDecoration (DECOR_BORDER|DECOR_RESIZEH));
|
||||
|
||||
if (own_window_width > 0) {
|
||||
own_window.set_default_size (own_window_width, own_window_height);
|
||||
own_window.move (own_window_xpos, own_window_ypos);
|
||||
|
@ -323,3 +333,15 @@ TearOff::own_window_configured (GdkEventConfigure*)
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
TearOff::hide_visible ()
|
||||
{
|
||||
if (torn_off()) {
|
||||
own_window.hide ();
|
||||
}
|
||||
|
||||
hide ();
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue