Limit max height of PinDialog -- fixes #7177

This commit is contained in:
Robin Gareus 2016-12-20 12:20:15 +01:00
parent 719250ab56
commit 1e2bdeb014
2 changed files with 27 additions and 5 deletions

View File

@ -1970,10 +1970,18 @@ PluginPinDialog::PluginPinDialog (boost::shared_ptr<ARDOUR::PluginInsert> pi)
PluginPinDialog::PluginPinDialog (boost::shared_ptr<ARDOUR::Route> r)
: ArdourWindow (string_compose (_("Pin Configuration: %1"), r->name ()))
, _route (r)
, _height_mapped (false)
{
vbox = manage (new VBox ());
add (*vbox);
vbox->signal_size_allocate().connect (sigc::mem_fun (*this, &PluginPinDialog::map_height));
scroller = manage (new ScrolledWindow);
scroller->set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
scroller->set_shadow_type (Gtk::SHADOW_NONE);
scroller->show ();
vbox->show ();
scroller->add (*vbox);
add (*scroller);
_route->foreach_processor (sigc::mem_fun (*this, &PluginPinDialog::add_processor));
@ -1994,15 +2002,26 @@ PluginPinDialog::set_session (ARDOUR::Session *s)
}
}
void
PluginPinDialog::map_height (Gtk::Allocation&)
{
if (!_height_mapped) {
scroller->set_size_request (-1, std::min (600, 2 + vbox->get_height()));
_height_mapped = true;
}
}
void
PluginPinDialog::route_processors_changed (ARDOUR::RouteProcessorChange)
{
ppw.clear ();
remove ();
_height_mapped = false;
scroller->remove ();
vbox = manage (new VBox ());
add (*vbox);
vbox->show ();
vbox->signal_size_allocate().connect (sigc::mem_fun (*this, &PluginPinDialog::map_height));
scroller->add (*vbox);
_route->foreach_processor (sigc::mem_fun (*this, &PluginPinDialog::add_processor));
vbox->show ();
}
void
@ -2034,7 +2053,7 @@ PluginPinDialog::add_processor (boost::weak_ptr<Processor> p)
hbox->pack_start (*manage (new HSeparator ()));
hbox->pack_start (*manage (new Label (proc->display_name ())));
hbox->pack_start (*manage (new HSeparator ()));
vbox->pack_start (*hbox);
vbox->pack_start (*hbox, false, false);
hbox->show_all ();
}
}

View File

@ -227,6 +227,7 @@ public:
void set_session (ARDOUR::Session *);
private:
Gtk::ScrolledWindow* scroller;
Gtk::VBox *vbox;
typedef boost::shared_ptr<PluginPinWidget> PluginPinWidgetPtr;
typedef std::vector<PluginPinWidgetPtr> PluginPinWidgetList;
@ -234,10 +235,12 @@ private:
void route_going_away ();
void route_processors_changed (ARDOUR::RouteProcessorChange);
void add_processor (boost::weak_ptr<ARDOUR::Processor>);
void map_height (Gtk::Allocation&);
boost::shared_ptr<ARDOUR::Route> _route;
PluginPinWidgetList ppw;
PBD::ScopedConnectionList _route_connections;
bool _height_mapped;
};
#endif