summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/mixer_ui.cc68
-rw-r--r--gtk2_ardour/mixer_ui.h2
-rw-r--r--gtk2_ardour/vca_master_strip.cc68
-rw-r--r--gtk2_ardour/vca_master_strip.h16
4 files changed, 126 insertions, 28 deletions
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index ab80f2a151..5313bb2ac4 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -243,8 +243,13 @@ Mixer_UI::Mixer_UI ()
list_vpacker.pack_start (rhs_pane2, true, true);
- global_hpacker.pack_start (scroller, true, true);
- global_hpacker.pack_start (vca_packer, false, false);
+ vca_scroller.add (vca_packer);
+ vca_scroller.set_policy (Gtk::POLICY_ALWAYS, Gtk::POLICY_AUTOMATIC);
+
+ inner_pane.pack1 (scroller);
+ inner_pane.pack2 (vca_scroller);
+
+ global_hpacker.pack_start (inner_pane, true, true);
global_hpacker.pack_start (out_packer, false, false);
list_hpane.pack1(list_vpacker, false, true);
@@ -256,6 +261,8 @@ Mixer_UI::Mixer_UI ()
static_cast<Gtk::Paned*> (&rhs_pane2)));
list_hpane.signal_size_allocate().connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::pane_allocation_handler),
static_cast<Gtk::Paned*> (&list_hpane)));
+ inner_pane.signal_size_allocate().connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::pane_allocation_handler),
+ static_cast<Gtk::Paned*> (&inner_pane)));
_content.pack_start (list_hpane, true, true);
@@ -284,6 +291,8 @@ Mixer_UI::Mixer_UI ()
rhs_pane1.show();
rhs_pane2.show();
strip_packer.show();
+ inner_pane.show ();
+ vca_scroller.show();
vca_packer.show();
out_packer.show();
list_hpane.show();
@@ -1858,9 +1867,13 @@ Mixer_UI::get_state ()
node->add_child_nocopy (Tabbable::get_state());
snprintf(buf,sizeof(buf), "%d",gtk_paned_get_position (const_cast<GtkPaned*>(static_cast<const Paned*>(&rhs_pane1)->gobj())));
- node->add_property(X_("mixer_rhs_pane1_pos"), string(buf));
+ node->add_property(X_("mixer-rhs-pane1-pos"), string(buf));
+ snprintf(buf,sizeof(buf), "%d",gtk_paned_get_position (const_cast<GtkPaned*>(static_cast<const Paned*>(&rhs_pane2)->gobj())));
+ node->add_property(X_("mixer-rhs_pane2-pos"), string(buf));
snprintf(buf,sizeof(buf), "%d",gtk_paned_get_position (const_cast<GtkPaned*>(static_cast<const Paned*>(&list_hpane)->gobj())));
- node->add_property(X_("mixer_list_hpane_pos"), string(buf));
+ node->add_property(X_("mixer-list-hpane-pos"), string(buf));
+ snprintf(buf,sizeof(buf), "%d",gtk_paned_get_position (const_cast<GtkPaned*>(static_cast<const Paned*>(&inner_pane)->gobj())));
+ node->add_property(X_("mixer-inner-pane-pos"), string(buf));
node->add_property ("narrow-strips", _strip_width == Narrow ? "yes" : "no");
node->add_property ("show-mixer", _visible ? "yes" : "no");
@@ -1888,23 +1901,10 @@ void
Mixer_UI::pane_allocation_handler (Allocation&, Gtk::Paned* which)
{
int pos;
- XMLProperty const * prop = 0;
- XMLNode* node = ARDOUR_UI::instance()->mixer_settings();
- XMLNode* geometry;
- int height;
- static int32_t done[3] = { 0, 0, 0 };
-
- height = default_height;
-
- if ((geometry = find_named_node (*node, "geometry")) != 0) {
-
- if ((prop = geometry->property ("y_size")) == 0) {
- prop = geometry->property ("y-size");
- }
- if (prop) {
- height = atoi (prop->value());
- }
- }
+ XMLProperty* prop = 0;
+ XMLNode* geometry = ARDOUR_UI::instance()->mixer_settings();
+ int height = default_height;
+ static bool done[4] = { false, false, false, false };
if (which == static_cast<Gtk::Paned*> (&rhs_pane1)) {
@@ -1918,7 +1918,7 @@ Mixer_UI::pane_allocation_handler (Allocation&, Gtk::Paned* which)
pos = atoi (prop->value());
}
- if ((done[0] = GTK_WIDGET(rhs_pane1.gobj())->allocation.height > pos)) {
+ if ((done[0] = (GTK_WIDGET(rhs_pane1.gobj())->allocation.height > pos))) {
rhs_pane1.set_position (pos);
}
@@ -1933,7 +1933,7 @@ Mixer_UI::pane_allocation_handler (Allocation&, Gtk::Paned* which)
pos = atoi (prop->value());
}
- if ((done[1] = GTK_WIDGET(rhs_pane2.gobj())->allocation.height > pos)) {
+ if ((done[1] = (GTK_WIDGET(rhs_pane2.gobj())->allocation.height > pos))) {
rhs_pane2.set_position (pos);
}
} else if (which == static_cast<Gtk::Paned*> (&list_hpane)) {
@@ -1948,11 +1948,31 @@ Mixer_UI::pane_allocation_handler (Allocation&, Gtk::Paned* which)
pos = max (36, atoi (prop->value ()));
}
- if ((done[2] = GTK_WIDGET(list_hpane.gobj())->allocation.width > pos)) {
+ if ((done[2] = (GTK_WIDGET(list_hpane.gobj())->allocation.width > pos))) {
list_hpane.set_position (pos);
}
+ } else if (which == static_cast<Gtk::Paned*> (&inner_pane)) {
+
+ if (done[3]) {
+ return;
+ }
+
+ if (!geometry || (prop = geometry->property("mixer-inner-pane-pos")) == 0) {
+ cerr << "using default value\n";
+ pos = std::max ((float)100, rintf ((float) 125 * UIConfiguration::instance().get_ui_scale()));
+ } else {
+ cerr << "using " << prop->value() << endl;
+ pos = max (36, atoi (prop->value ()));
+ }
+
+ cerr << "Setting inner pane pos to " << pos << endl;
+
+ if ((done[3] = (GTK_WIDGET(inner_pane.gobj())->allocation.width > pos))) {
+ inner_pane.set_position (pos);
+ }
}
}
+
void
Mixer_UI::scroll_left ()
{
diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h
index d48db2edaa..e8e7dc5864 100644
--- a/gtk2_ardour/mixer_ui.h
+++ b/gtk2_ardour/mixer_ui.h
@@ -141,7 +141,9 @@ class Mixer_UI : public Gtkmm2ext::Tabbable, public PBD::ScopedConnectionList, p
Gtk::Frame favorite_plugins_frame;
Gtk::VPaned rhs_pane1;
Gtk::VPaned rhs_pane2;
+ Gtk::HPaned inner_pane;
Gtk::HBox strip_packer;
+ Gtk::ScrolledWindow vca_scroller;
Gtk::HBox vca_packer;
Gtk::HBox out_packer;
Gtk::HPaned list_hpane;
diff --git a/gtk2_ardour/vca_master_strip.cc b/gtk2_ardour/vca_master_strip.cc
index 038d995fb3..bccc1ab68e 100644
--- a/gtk2_ardour/vca_master_strip.cc
+++ b/gtk2_ardour/vca_master_strip.cc
@@ -16,11 +16,18 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "pbd/convert.h"
+
#include "ardour/vca.h"
+#include "tooltips.h"
#include "vca_master_strip.h"
+#include "i18n.h"
+
using namespace ARDOUR;
+using namespace ARDOUR_UI_UTILS;
+using namespace Gtkmm2ext;
using std::string;
VCAMasterStrip::VCAMasterStrip (Session* s, boost::shared_ptr<VCA> v)
@@ -33,13 +40,57 @@ VCAMasterStrip::VCAMasterStrip (Session* s, boost::shared_ptr<VCA> v)
boost::shared_ptr<Amp>(),
_vca->control());
+ hide_button.set_icon (ArdourIcon::CloseCross);
+ set_tooltip (&hide_button, _("Hide this VCA strip"));
+
+ width_button.set_icon (ArdourIcon::StripWidth);
+ set_tooltip (width_button, _("Click to toggle the width of this VCA strip."));
+
+ width_button.signal_button_press_event().connect (sigc::mem_fun(*this, &VCAMasterStrip::width_button_pressed), false);
+ hide_button.signal_clicked.connect (sigc::mem_fun(*this, &VCAMasterStrip::hide_clicked));
+
+ width_hide_box.set_spacing (2);
+ width_hide_box.pack_start (width_button, false, true);
+ width_hide_box.pack_start (number_label, true, true);
+ width_hide_box.pack_end (hide_button, false, true);
+
+ number_label.set_text (PBD::to_string (v->number(), std::dec));
+ number_label.set_elements((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::Text|ArdourButton::Inactive));
+ number_label.set_no_show_all ();
+ number_label.set_name ("tracknumber label");
+ number_label.set_fixed_colors (0x80808080, 0x80808080);
+ number_label.set_alignment (.5, .5);
+ number_label.set_fallthrough_to_parent (true);
+
name_button.set_text (_vca->name());
active_button.set_text ("active");
- pack_start (active_button, false, false);
- pack_start (name_button, false, false);
- pack_start (gain_meter, true, true);
+ top_padding.set_size_request (-1, 16); /* must match height in GroupTabs::set_size_request() */
+ bottom_padding.set_size_request (-1, 50); /* this one is a hack. there's no trivial way to compute it */
+
+ global_vpacker.set_border_width (1);
+ global_vpacker.set_spacing (0);
+
+ global_vpacker.pack_start (top_padding, false, false);
+ global_vpacker.pack_start (width_hide_box, false, false);
+ global_vpacker.pack_start (active_button, false, false);
+ global_vpacker.pack_start (name_button, false, false);
+ global_vpacker.pack_start (vertical_padding, true, true);
+ global_vpacker.pack_start (gain_meter, false, false);
+ global_vpacker.pack_start (bottom_padding, false, false);
+ global_frame.add (global_vpacker);
+ global_frame.set_shadow_type (Gtk::SHADOW_IN);
+ global_frame.set_name ("BaseFrame");
+
+ add (global_frame);
+
+ global_vpacker.show ();
+ global_frame.show ();
+ top_padding.show ();
+ bottom_padding.show ();
+ vertical_padding.show ();
+ width_hide_box.show_all ();
active_button.show_all ();
name_button.show_all ();
gain_meter.show_all ();
@@ -50,3 +101,14 @@ VCAMasterStrip::name() const
{
return _vca->name();
}
+
+void
+VCAMasterStrip::hide_clicked ()
+{
+}
+
+bool
+VCAMasterStrip::width_button_pressed (GdkEventButton* ev)
+{
+ return false;
+}
diff --git a/gtk2_ardour/vca_master_strip.h b/gtk2_ardour/vca_master_strip.h
index 5043c6144e..ba7adc0305 100644
--- a/gtk2_ardour/vca_master_strip.h
+++ b/gtk2_ardour/vca_master_strip.h
@@ -32,7 +32,7 @@ namespace ARDOUR {
class VCA;
}
-class VCAMasterStrip : public AxisView, public Gtk::VBox
+class VCAMasterStrip : public AxisView, public Gtk::EventBox
{
public:
VCAMasterStrip (ARDOUR::Session*, boost::shared_ptr<ARDOUR::VCA>);
@@ -43,9 +43,23 @@ class VCAMasterStrip : public AxisView, public Gtk::VBox
private:
boost::shared_ptr<ARDOUR::VCA> _vca;
+ Gtk::HBox vertical_padding;
ArdourButton name_button;
ArdourButton active_button;
GainMeter gain_meter;
+
+ Gtk::Frame global_frame;
+ Gtk::VBox global_vpacker;
+ Gtk::HBox top_padding;
+ Gtk::HBox bottom_padding;
+ ArdourButton width_button;
+ ArdourButton color_button;
+ ArdourButton hide_button;
+ ArdourButton number_label;
+ Gtk::HBox width_hide_box;
+
+ void hide_clicked();
+ bool width_button_pressed (GdkEventButton *);
};