pack_end (plugin_analysis_expander, false, false);
}
- pack_end (cpuload_expander, false, false);
+ if (insert->provides_stats ()) {
+ pack_end (cpuload_expander, false, false);
+ }
if (!plugin->get_docs().empty()) {
pack_end (description_expander, false, false);
main_contents.pack_start (scroller, true, true);
- prefheight = 0;
+ prefheight = -1;
build ();
if (insert->plugin()->has_midnam() && insert->plugin()->knows_bank_patch()) {
scroller.set_name ("PluginEditor");
} else {
scroller.signal_size_request().connect (sigc::mem_fun(*this, &GenericPluginUI::scroller_size_request));
+ scroller.signal_realize().connect (sigc::mem_fun(scroller, &Widget::queue_resize));
scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_NEVER);
}
{
GtkRequisition request = hpacker.size_request();
- Glib::RefPtr<Gdk::Window> window (get_window());
+ Glib::RefPtr<Gdk::Window> window (scroller.get_window());
Glib::RefPtr<Gdk::Screen> screen;
if (window) {
- screen = get_screen();
+ screen = window->get_screen();
}
if (!screen) {
- a->width = request.width;
+ a->width = min(1024, request.width);
return;
}
GenericPluginUI::build ()
{
std::vector<ControlUI *> control_uis;
- bool grid = plugin->parameter_count() > 0;
+ bool grid_avail = false;
+ bool grid_veto = false;
// Build a ControlUI for each control port
for (size_t i = 0; i < plugin->parameter_count(); ++i) {
ControlUI* cui;
Plugin::UILayoutHint hint;
- if (!plugin->get_layout(i, hint)) {
- grid = false;
+ if (plugin->get_layout(i, hint)) {
+ grid_avail = true;
+ } else {
+ grid_veto = true;
}
boost::shared_ptr<ARDOUR::AutomationControl> c
continue;
}
- if (grid) {
+ if (grid_avail && !grid_veto) {
cui->x0 = hint.x0;
cui->x1 = hint.x1;
cui->y0 = hint.y0;
}
}
+ bool grid = grid_avail && !grid_veto;
+
// Build a ControlUI for each property
const Plugin::PropertyDescriptors& descs = plugin->get_supported_properties();
for (Plugin::PropertyDescriptors::const_iterator d = descs.begin(); d != descs.end(); ++d) {
Gtk::Table* button_table = manage (new Gtk::Table (initial_button_rows, initial_button_cols));
Gtk::Table* output_table = manage (new Gtk::Table (initial_output_rows, initial_output_cols));
- Frame* sample;
- Frame* bt_sample;
+ Frame* frame;
+ Frame* bt_frame;
VBox* box;
int output_row, output_col;
int button_row, button_col;
output_table->set_border_width (5);
- bt_sample = manage (new Frame);
- bt_sample->set_name ("BaseFrame");
- bt_sample->set_label (_("Switches"));
- bt_sample->add (*button_table);
- hpacker.pack_start(*bt_sample, true, true);
+ bt_frame = manage (new Frame);
+ bt_frame->set_name ("BaseFrame");
+ bt_frame->set_label (_("Switches"));
+ bt_frame->add (*button_table);
+ hpacker.pack_start(*bt_frame, true, true);
box = manage (new VBox);
box->set_border_width (5);
box->set_spacing (1);
- sample = manage (new Frame);
- sample->set_name ("BaseFrame");
- sample->set_label (_("Controls"));
- sample->add (*box);
- hpacker.pack_start(*sample, true, true);
+ frame = manage (new Frame);
+ frame->set_name ("BaseFrame");
+ frame->set_label (_("Controls"));
+ frame->add (*box);
+ hpacker.pack_start(*frame, true, true);
// Add special controls to UI, and build list of normal controls to be layed out later
std::vector<ControlUI *> cui_controls_list;
if (x > max_controls_per_column || similarity_scores[i] <= similarity_threshold) {
if (x > min_controls_per_column) {
- sample = manage (new Frame);
- sample->set_name ("BaseFrame");
- sample->set_label (_("Controls"));
+ frame = manage (new Frame);
+ frame->set_name ("BaseFrame");
+ frame->set_label (_("Controls"));
box = manage (new VBox);
box->set_border_width (5);
box->set_spacing (1);
- sample->add (*box);
- hpacker.pack_start(*sample, true, true);
+ frame->add (*box);
+ hpacker.pack_start(*frame, true, true);
x = 0;
} else {
HSeparator *split = new HSeparator();
box->pack_start (*cui, false, false);
}
- if (is_scrollable) {
+ if (is_scrollable && i > 0) {
prefheight = 30 * i;
}
if (box->children().empty()) {
- hpacker.remove (*sample);
+ hpacker.remove (*frame);
}
if (button_table->children().empty()) {
- hpacker.remove (*bt_sample);
+ hpacker.remove (*bt_frame);
delete button_table;
} else {
button_table->show_all ();
}
if (!output_table->children().empty()) {
- sample = manage (new Frame);
- sample->set_name ("BaseFrame");
- sample->set_label(_("Meters"));
- sample->add (*output_table);
- hpacker.pack_end (*sample, true, true);
+ frame = manage (new Frame);
+ frame->set_name ("BaseFrame");
+ frame->set_label(_("Meters"));
+ frame->add (*output_table);
+ hpacker.pack_end (*frame, true, true);
output_table->show_all ();
} else {
delete output_table;
pgm_table->set_border_width (5);
pgm_table->set_col_spacing (2, 10);
- Frame* sample = manage (new Frame);
- sample->set_name ("BaseFrame");
+ Frame* frame = manage (new Frame);
+ frame->set_name ("BaseFrame");
if (dynamic_cast<MidiTrack*> (insert->owner())) {
- sample->set_label (_("MIDI Programs (sent to track)"));
+ frame->set_label (_("MIDI Programs (sent to track)"));
} else {
- sample->set_label (_("MIDI Programs (volatile)"));
+ frame->set_label (_("MIDI Programs (volatile)"));
}
- sample->add (*pgm_table);
- hpacker.pack_start (*sample, false, false);
+ frame->add (*pgm_table);
+ hpacker.pack_start (*frame, false, false);
for (uint8_t chn = 0; chn < 16; ++chn) {
int col = 3 * (chn / 8);
for (MIDI::Name::PatchNameList::const_iterator j = patches.begin(); j != patches.end(); ++j) {
const std::string pgm = (*j)->name ();
MIDI::Name::PatchPrimaryKey const& key = (*j)->patch_primary_key ();
- assert ((*i)->number () == key.bank());
const uint32_t bp = (key.bank() << 7) | key.program();
midi_pgmsel[chn]->AddMenuElem (MenuElemNoMnemonic (pgm, sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::midi_bank_patch_select), chn, bp)));
pgm_names[bp] = pgm;