[SCM] calf/master: + GUI, Compressor: new control - radio button with textual label (uses push button form now, may add custom graphics and the ability to use icons later)
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:39:39 UTC 2013
The following commit has been merged in the master branch:
commit 2c468cbad588c8c7b0a396e845fd5868d5d7ffa7
Author: Krzysztof Foltman <wdev at foltman.com>
Date: Tue Oct 13 21:49:51 2009 +0100
+ GUI, Compressor: new control - radio button with textual label (uses push button form now, may add custom graphics and the ability to use icons later)
diff --git a/gui/gui-compressor.xml b/gui/gui-compressor.xml
index c9b040d..df7329c 100644
--- a/gui/gui-compressor.xml
+++ b/gui/gui-compressor.xml
@@ -1,20 +1,32 @@
<table border="10" rows="4" cols="1">
- <hbox attach-x="0" attach-y="0" shrink-y="1" expand-y="0">
- <vbox expand="0">
+ <hbox attach-x="0" attach-y="0" shrink-y="1" expand-y="0" homogeneous="1">
+ <vbox expand="1">
<label param="bypass"/>
- <align><toggle param="bypass" shrink="1"/></align>
+ <align><toggle param="bypass" shrink="1" size="1"/></align>
</vbox>
- <vbox expand="0">
- <label param="detection"/>
- <combo param="detection"/>
+ <vbox expand="1">
+ <label param="detection"/>
+ <align>
+ <hbox expand="0" >
+ <radio param="detection" value="RMS" shrink="1"/>
+ <radio param="detection" value="Peak" shrink="1"/>
+ </hbox>
+ </align>
</vbox>
- <vbox expand="0">
- <label param="stereo_link"/>
- <combo param="stereo_link"/>
+ <vbox expand="1">
+ <label param="stereo_link"/>
+ <align>
+ <hbox expand="0" >
+ <radio param="stereo_link" value="Average" shrink="1"/>
+ <radio param="stereo_link" value="Maximum" shrink="1"/>
+ </hbox>
+ </align>
</vbox>
- <vbox expand="0">
- <label param="aweighting"/>
- <combo param="aweighting"/>
+ <vbox expand="1">
+ <label param="aweighting"/>
+ <align>
+ <combo param="aweighting"/>
+ </align>
</vbox>
</hbox>
<if cond="directlink">
diff --git a/src/calf/gui.h b/src/calf/gui.h
index 0d46efe..162f568 100644
--- a/src/calf/gui.h
+++ b/src/calf/gui.h
@@ -107,6 +107,7 @@ protected:
std::map<std::string, int> param_name_map;
int ignore_stack;
int last_status_serial_no;
+ std::map<int, GSList *> param_radio_groups;
public:
plugin_gui_window *window;
GtkWidget *container;
@@ -129,6 +130,10 @@ public:
/// Called on change of status variable
void send_status(const char *key, const char *value);
void on_idle();
+ /// Get a radio button group (if it exists) for a parameter
+ GSList *get_radio_group(int param);
+ /// Set a radio button group for a parameter
+ void set_radio_group(int param, GSList *group);
~plugin_gui();
static void xml_element_start(void *data, const char *element, const char *attributes[]);
static void xml_element_end(void *data, const char *element);
diff --git a/src/calf/gui_controls.h b/src/calf/gui_controls.h
index 27d3405..667f5b5 100644
--- a/src/calf/gui_controls.h
+++ b/src/calf/gui_controls.h
@@ -156,6 +156,18 @@ struct toggle_param_control: public param_control
static void toggle_value_changed(GtkWidget *widget, gpointer value);
};
+/// Radio button
+struct radio_param_control: public param_control
+{
+ int value;
+
+ virtual GtkWidget *create(plugin_gui *_gui, int _param_no);
+ virtual void get();
+ virtual void set();
+
+ static void radio_clicked(GtkRadioButton *widget, gpointer value);
+};
+
/// Push button
struct button_param_control: public param_control
{
diff --git a/src/gui.cpp b/src/gui.cpp
index 69cc3d0..a6811fb 100644
--- a/src/gui.cpp
+++ b/src/gui.cpp
@@ -165,6 +165,8 @@ param_control *plugin_gui::create_control_from_xml(const char *element, const ch
return new combo_box_param_control;
if (!strcmp(element, "check"))
return new check_param_control;
+ if (!strcmp(element, "radio"))
+ return new radio_param_control;
if (!strcmp(element, "toggle"))
return new toggle_param_control;
if (!strcmp(element, "spin"))
@@ -410,6 +412,23 @@ void plugin_gui::set_param_value(int param_no, float value, param_control *origi
refresh(param_no);
}
+/// Get a radio button group (if it exists) for a parameter
+GSList *plugin_gui::get_radio_group(int param)
+{
+ map<int, GSList *>::const_iterator i = param_radio_groups.find(param);
+ if (i == param_radio_groups.end())
+ return NULL;
+ else
+ return i->second;
+}
+
+/// Set a radio button group for a parameter
+void plugin_gui::set_radio_group(int param, GSList *group)
+{
+ param_radio_groups[param] = group;
+}
+
+
plugin_gui::~plugin_gui()
{
for (std::vector<param_control *>::iterator i = params.begin(); i != params.end(); i++)
diff --git a/src/gui_controls.cpp b/src/gui_controls.cpp
index c77073d..182ebb0 100644
--- a/src/gui_controls.cpp
+++ b/src/gui_controls.cpp
@@ -366,6 +366,61 @@ void check_param_control::set()
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), (int)gui->plugin->get_param_value(param_no) - (int)props.min);
}
+// radio button
+
+GtkWidget *radio_param_control::create(plugin_gui *_gui, int _param_no)
+{
+ gui = _gui;
+ param_no = _param_no;
+ require_attribute("value");
+ int value = -1;
+ string value_name = attribs["value"];
+ const parameter_properties &props = get_props();
+ if (props.choices && (value_name < "0" || value_name > "9"))
+ {
+ for (int i = 0; props.choices[i]; i++)
+ {
+ if (value_name == props.choices[i])
+ {
+ value = i + (int)props.min;
+ break;
+ }
+ }
+ }
+ if (value == -1)
+ value = get_int("value");
+
+ if (attribs.count("label"))
+ widget = gtk_radio_button_new_with_label (gui->get_radio_group(param_no), attribs["label"].c_str());
+ else
+ widget = gtk_radio_button_new_with_label (gui->get_radio_group(param_no), props.choices[value - (int)props.min]);
+ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (widget), FALSE);
+
+ gui->set_radio_group(param_no, gtk_radio_button_get_group (GTK_RADIO_BUTTON (widget)));
+ gtk_signal_connect (GTK_OBJECT (widget), "clicked", G_CALLBACK (radio_clicked), (gpointer)this);
+ return widget;
+}
+
+void radio_param_control::radio_clicked(GtkRadioButton *widget, gpointer value)
+{
+ param_control *jhp = (param_control *)value;
+ jhp->get();
+}
+
+void radio_param_control::get()
+{
+ // const parameter_properties &props = get_props();
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
+ gui->set_param_value(param_no, value, this);
+}
+
+void radio_param_control::set()
+{
+ _GUARD_CHANGE_
+ const parameter_properties &props = get_props();
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value == ((int)gui->plugin->get_param_value(param_no) - (int)props.min));
+}
+
// spin button
GtkWidget *spin_param_control::create(plugin_gui *_gui, int _param_no)
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list