[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