]> sigrok.org Git - sigrok-gtk.git/blobdiff - toolbar.c
Update .gitignore file.
[sigrok-gtk.git] / toolbar.c
index 368d4bafed861421f4ee87acf9ab9b066758bc60..84e1823535f698bae6c46015d64cfb343156626d 100644 (file)
--- a/toolbar.c
+++ b/toolbar.c
@@ -19,7 +19,7 @@
 
 #include <stdlib.h>
 
-#include <sigrok.h>
+#include <libsigrok/libsigrok.h>
 
 #include <gtk/gtk.h>
 
@@ -43,7 +43,7 @@ static void prop_edited(GtkCellRendererText *cel, gchar *path, gchar *text,
 {
        (void)cel;
 
-       struct sr_dev *dev = g_object_get_data(G_OBJECT(props), "dev");
+       struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(props), "sdi");
        GtkTreeIter iter;
        int type, cap;
        guint64 tmp_u64;
@@ -59,11 +59,10 @@ static void prop_edited(GtkCellRendererText *cel, gchar *path, gchar *text,
                if (sr_parse_sizestring(text, &tmp_u64) != SR_OK)
                        return;
 
-               ret = dev->driver->dev_config_set(dev->driver_index,
-                                                 cap, &tmp_u64);
+               ret = sr_dev_config_set(sdi, cap, &tmp_u64);
                break;
        case SR_T_CHAR:
-               ret = dev->driver->dev_config_set(dev->driver_index, cap, text);
+               ret = sr_dev_config_set(sdi, cap, text);
                break;
        /* SR_T_BOOL will be handled by prop_toggled */
        }
@@ -75,7 +74,7 @@ static void prop_edited(GtkCellRendererText *cel, gchar *path, gchar *text,
 static void prop_toggled(GtkCellRendererToggle *cel, gchar *path,
                        GtkListStore *props)
 {
-       struct sr_dev *dev = g_object_get_data(G_OBJECT(props), "dev");
+       struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(props), "sdi");
        GtkTreeIter iter;
        int type, cap;
        int ret;
@@ -86,8 +85,7 @@ static void prop_toggled(GtkCellRendererToggle *cel, gchar *path,
                                        DEV_PROP_TYPE, &type, -1);
 
        val = !gtk_cell_renderer_toggle_get_active(cel);
-       ret = dev->driver->dev_config_set(dev->driver_index, cap, 
-                                         GINT_TO_POINTER(val));
+       ret = sr_dev_config_set(sdi, cap, GINT_TO_POINTER(val));
 
        if (!ret)
                gtk_list_store_set(props, &iter, DEV_PROP_BOOLVALUE, val, -1);
@@ -113,8 +111,8 @@ static void dev_set_options(GtkAction *action, GtkWindow *parent)
 {
        (void)action;
 
-       struct sr_dev *dev = g_object_get_data(G_OBJECT(parent), "dev");
-       if (!dev)
+       struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(parent), "sdi");
+       if (!sdi)
                return;
 
        GtkWidget *dialog = gtk_dialog_new_with_buttons("Device Properties",
@@ -137,12 +135,16 @@ static void dev_set_options(GtkAction *action, GtkWindow *parent)
                                        G_TYPE_BOOLEAN, G_TYPE_STRING,
                                        G_TYPE_BOOLEAN);
        gtk_tree_view_set_model(GTK_TREE_VIEW(tv), GTK_TREE_MODEL(props));
-       int *hwcaps = dev->driver->hwcap_get_all();
+       const int *hwcaps;
        int cap;
+
+       /* TODO: Error handling. */
+       sr_info_get(sdi->driver, SR_DI_HWCAPS, (const void **)&hwcaps, sdi);
+
        GtkTreeIter iter;
        for (cap = 0; hwcaps[cap]; cap++) {
-               struct sr_hwcap_option *hwo;
-               if (!(hwo = sr_hw_hwcap_get(hwcaps[cap])))
+               const struct sr_hwcap_option *hwo;
+               if (!(hwo = sr_devopt_get(hwcaps[cap])))
                        continue;
                gtk_list_store_append(props, &iter);
                gtk_list_store_set(props, &iter, 
@@ -160,7 +162,7 @@ static void dev_set_options(GtkAction *action, GtkWindow *parent)
 
        /* Save device with list so that property can be set by edited
         * handler. */
-       g_object_set_data(G_OBJECT(props), "dev", dev);
+       g_object_set_data(G_OBJECT(props), "sdi", sdi);
 
        /* Add columns to the tree view */
        GtkTreeViewColumn *col;
@@ -202,7 +204,7 @@ enum {
 static void probe_toggled(GtkCellRenderer *cel, gchar *path,
                        GtkTreeModel *probes)
 {
-       struct sr_dev *dev = g_object_get_data(G_OBJECT(probes), "dev");
+       struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(probes), "sdi");
        GtkTreeIter iter;
        struct sr_probe *probe;
        gint i;
@@ -213,8 +215,7 @@ static void probe_toggled(GtkCellRenderer *cel, gchar *path,
        gtk_tree_model_get_iter_from_string(probes, &iter, path);
        gtk_tree_model_get(probes, &iter, PROBE_NUMBER, &i, 
                                        PROBE_ENABLED, &en, -1);
-       probe = sr_dev_probe_find(dev, i);
-       probe->enabled = !en;
+       sr_dev_probe_enable(sdi, i, FALSE);
        gtk_list_store_set(GTK_LIST_STORE(probes), &iter, 
                                        PROBE_ENABLED, probe->enabled, -1);
 }
@@ -222,7 +223,7 @@ static void probe_toggled(GtkCellRenderer *cel, gchar *path,
 static void probe_named(GtkCellRendererText *cel, gchar *path, gchar *text,
                        GtkTreeModel *probes)
 {
-       struct sr_dev *dev = g_object_get_data(G_OBJECT(probes), "dev");
+       struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(probes), "sdi");
        GtkTreeIter iter;
        gint i;
 
@@ -230,14 +231,14 @@ static void probe_named(GtkCellRendererText *cel, gchar *path, gchar *text,
 
        gtk_tree_model_get_iter_from_string(probes, &iter, path);
        gtk_tree_model_get(probes, &iter, PROBE_NUMBER, &i, -1);
-       sr_dev_probe_name_set(dev, i, text);
+       sr_dev_probe_name_set(sdi, i, text);
        gtk_list_store_set(GTK_LIST_STORE(probes), &iter, PROBE_NAME, text, -1);
 }
 
 static void probe_trigger_set(GtkCellRendererText *cel, gchar *path, 
                        gchar *text, GtkTreeModel *probes)
 {
-       struct sr_dev *dev = g_object_get_data(G_OBJECT(probes), "dev");
+       struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(probes), "sdi");
        GtkTreeIter iter;
        gint i;
 
@@ -245,7 +246,7 @@ static void probe_trigger_set(GtkCellRendererText *cel, gchar *path,
 
        gtk_tree_model_get_iter_from_string(probes, &iter, path);
        gtk_tree_model_get(probes, &iter, PROBE_NUMBER, &i, -1);
-       sr_dev_trigger_set(dev, i, text);
+       sr_dev_trigger_set(sdi, i, text);
        gtk_list_store_set(GTK_LIST_STORE(probes), &iter, 
                                        PROBE_TRIGGER, text, -1);
 }
@@ -254,8 +255,8 @@ static void dev_set_probes(GtkAction *action, GtkWindow *parent)
 {
        (void)action;
 
-       struct sr_dev *dev = g_object_get_data(G_OBJECT(parent), "dev");
-       if (!dev)
+       struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(parent), "sdi");
+       if (!sdi)
                return;
 
        GtkWidget *dialog = gtk_dialog_new_with_buttons("Configure Probes",
@@ -279,7 +280,7 @@ static void dev_set_probes(GtkAction *action, GtkWindow *parent)
        GtkTreeIter iter;
        GSList *p;
        int i;
-       for (p = dev->probes, i = 1; p; p = g_slist_next(p), i++) {
+       for (p = sdi->probes, i = 1; p; p = g_slist_next(p), i++) {
                struct sr_probe *probe = p->data;
                gtk_list_store_append(probes, &iter);
                gtk_list_store_set(probes, &iter, PROBE_NUMBER, i,
@@ -291,7 +292,7 @@ static void dev_set_probes(GtkAction *action, GtkWindow *parent)
 
        /* Save device with list so that property can be set by edited
         * handler. */
-       g_object_set_data(G_OBJECT(probes), "dev", dev);
+       g_object_set_data(G_OBJECT(probes), "sdi", sdi);
 
        /* Add columns to the tree view */
        GtkTreeViewColumn *col;
@@ -331,7 +332,7 @@ static void capture_run(GtkAction *action, GObject *parent)
 {
        (void)action;
 
-       struct sr_dev *dev = g_object_get_data(G_OBJECT(parent), "dev");
+       struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(parent), "sdi");
        GtkEntry *timesamples = g_object_get_data(parent, "timesamples");
        GtkComboBox *timeunit = g_object_get_data(parent, "timeunit");
        gint i = gtk_combo_box_get_active(timeunit);
@@ -353,9 +354,8 @@ static void capture_run(GtkAction *action, GObject *parent)
        }
 
        if (time_msec) {
-               if (sr_hw_has_hwcap(dev->driver, SR_HWCAP_LIMIT_MSEC)) {
-                       if (dev->driver->dev_config_set(dev->driver_index,
-                                                       SR_HWCAP_LIMIT_MSEC,
+               if (sr_driver_hwcap_exists(sdi->driver, SR_HWCAP_LIMIT_MSEC)) {
+                       if (sr_dev_config_set(sdi, SR_HWCAP_LIMIT_MSEC,
                                                        &time_msec) != SR_OK) {
                                g_critical("Failed to configure time limit.");
                                sr_session_destroy();
@@ -366,11 +366,10 @@ static void capture_run(GtkAction *action, GObject *parent)
                         * convert to samples based on the samplerate.
                         */
                        limit_samples = 0;
-                       if (sr_dev_has_hwcap(dev, SR_HWCAP_SAMPLERATE)) {
+                       if (sr_dev_has_hwcap(sdi, SR_HWCAP_SAMPLERATE)) {
                                guint64 tmp_u64;
-                               tmp_u64 = *((uint64_t *)dev->driver->dev_info_get(
-                                                       dev->driver_index,
-                                                       SR_DI_CUR_SAMPLERATE));
+                               sr_info_get(sdi->driver, SR_DI_CUR_SAMPLERATE,
+                                           (const void **)&tmp_u64, sdi);
                                limit_samples = tmp_u64 * time_msec / (uint64_t) 1000;
                        }
                        if (limit_samples == 0) {
@@ -378,8 +377,7 @@ static void capture_run(GtkAction *action, GObject *parent)
                                return;
                        }
 
-                       if (dev->driver->dev_config_set(dev->driver_index,
-                                               SR_HWCAP_LIMIT_SAMPLES,
+                       if (sr_dev_config_set(sdi, SR_HWCAP_LIMIT_SAMPLES,
                                                &limit_samples) != SR_OK) {
                                g_critical("Failed to configure time-based sample limit.");
                                return;
@@ -387,20 +385,21 @@ static void capture_run(GtkAction *action, GObject *parent)
                }
        }
        if (limit_samples) {
-               if (dev->driver->dev_config_set(dev->driver_index,
-                                               SR_HWCAP_LIMIT_SAMPLES,
-                                               &limit_samples) != SR_OK) {
+               if (sr_dev_config_set(sdi, SR_HWCAP_LIMIT_SAMPLES,
+                                       &limit_samples) != SR_OK) {
                        g_critical("Failed to configure sample limit.");
                        return;
                }
        }
 
-       if (dev->driver->dev_config_set(dev->driver_index,
-           SR_HWCAP_PROBECONFIG, (char *)dev->probes) != SR_OK) {
+#if 0
+       if (sr_dev_config_set(sdi,
+           SR_HWCAP_PROBECONFIG, (char *)sdi->probes) != SR_OK) {
                printf("Failed to configure probes.\n");
                sr_session_destroy();
                return;
        }
+#endif
 
        if (sr_session_start() != SR_OK) {
                g_critical("Failed to start session.");
@@ -485,15 +484,15 @@ static const GtkActionEntry action_items[] = {
                "Exit the program", G_CALLBACK(gtk_main_quit) },
 
        {"ViewMenu", NULL, "_View", NULL, NULL, NULL},
-       {"ViewZoomIn", GTK_STOCK_ZOOM_IN, "Zoom _In", "<control>z", NULL,
+       {"ViewZoomIn", GTK_STOCK_ZOOM_IN, "Zoom _In", "plus", NULL,
                G_CALLBACK(zoom_in)},
-       {"ViewZoomOut", GTK_STOCK_ZOOM_OUT, "Zoom _Out", "<control><shift>Z",
+       {"ViewZoomOut", GTK_STOCK_ZOOM_OUT, "Zoom _Out", "minus",
                NULL, G_CALLBACK(zoom_out)},
        {"ViewZoomFit", GTK_STOCK_ZOOM_FIT, NULL, NULL,
                NULL, G_CALLBACK(zoom_fit)},
 
        {"HelpMenu", NULL, "_Help", NULL, NULL, NULL},
-       {"HelpWiki", GTK_STOCK_ABOUT, "Sigrok _Wiki", NULL, NULL,
+       {"HelpWiki", GTK_STOCK_ABOUT, "sigrok _Wiki", NULL, NULL,
                G_CALLBACK(help_wiki)},
        {"HelpAbout", GTK_STOCK_ABOUT, "_About", NULL, NULL,
                G_CALLBACK(help_about)},
@@ -578,17 +577,8 @@ GtkWidget *toolbar_init(GtkWindow *parent)
        toolbar = GTK_TOOLBAR(gtk_ui_manager_get_widget(ui, "/toolbar"));
        gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(toolbar), FALSE, TRUE, 0);
 
-       /* Device selection GtkComboBox */
-       GtkToolItem *toolitem = gtk_tool_item_new();
-       GtkWidget *align = gtk_alignment_new(0.5, 0.5, 2, 0);
-       GtkWidget *dev = dev_select_combo_box_new(parent);
-
-       gtk_container_add(GTK_CONTAINER(align), dev);
-       gtk_container_add(GTK_CONTAINER(toolitem), align);
-       gtk_toolbar_insert(toolbar, toolitem, 0);
-
        /* Time/Samples entry */
-       toolitem = gtk_tool_item_new();
+       GtkToolItem *toolitem = gtk_tool_item_new();
        GtkWidget *timesamples = gtk_entry_new();
        gtk_entry_set_text(GTK_ENTRY(timesamples), "100");
        gtk_entry_set_alignment(GTK_ENTRY(timesamples), 1.0);
@@ -598,7 +588,7 @@ GtkWidget *toolbar_init(GtkWindow *parent)
 
        /* Time unit combo box */
        toolitem = gtk_tool_item_new();
-       align = gtk_alignment_new(0.5, 0.5, 2, 0);
+       GtkWidget *align = gtk_alignment_new(0.5, 0.5, 2, 0);
        GtkWidget *timeunit = gtk_combo_box_new_text();
        gtk_combo_box_append_text(GTK_COMBO_BOX(timeunit), "samples");
        gtk_combo_box_append_text(GTK_COMBO_BOX(timeunit), "ms");
@@ -611,6 +601,16 @@ GtkWidget *toolbar_init(GtkWindow *parent)
        g_object_set_data(G_OBJECT(parent), "timesamples", timesamples);
        g_object_set_data(G_OBJECT(parent), "timeunit", timeunit);
 
+       /* Device selection GtkComboBox */
+       toolitem = gtk_tool_item_new();
+       align = gtk_alignment_new(0.5, 0.5, 2, 0);
+       GtkWidget *dev = dev_select_combo_box_new(parent);
+
+       gtk_container_add(GTK_CONTAINER(align), dev);
+       gtk_container_add(GTK_CONTAINER(toolitem), align);
+       gtk_toolbar_insert(toolbar, toolitem, 0);
+
+
        return GTK_WIDGET(vbox);
 }