diff src/bluetooth/gui.c @ 2646:7fbff3287a56

added device discovery in the plugin's prefs window
author Paula Stanciu <paula.stanciu@gmail.com>
date Sun, 25 May 2008 21:29:07 +0300
parents 6fd8ca4b7b17
children d891ba4be5a5
line wrap: on
line diff
--- a/src/bluetooth/gui.c	Wed May 21 16:04:24 2008 +0300
+++ b/src/bluetooth/gui.c	Sun May 25 21:29:07 2008 +0300
@@ -1,7 +1,5 @@
 #include "gui.h"
 #include "bluetooth.h"
-#include <gtk/gtk.h>
-#include <glib.h>
 
 static GtkWidget *window = NULL;
 static GtkTreeModel *model;
@@ -18,53 +16,97 @@
 GtkWidget *close_button;   
 GtkWidget *treeview;
 GtkWidget *label_p;
-GtkWidget *label_m;
+GtkWidget *label_c;
 GtkWidget *label_a;
 GtkWidget *label_prod;
-GtkWidget *label_model;
+GtkWidget *label_class;
 GtkWidget *label_address;
-
-
-typedef struct 
-{
-    gchar *producer;
-    gchar *model;
-}Headset;
-
+GList * dev = NULL;
 enum{
     COLUMN_PRODUCER,
-    COLUMN_MODEL,
     NUM_COLUMNS
 };
+static DeviceData test_data[]=
+{
+    {0,"00:00:00:00:00","Scanning"}
+};
 
-static Headset test_data[]=
-{
-    {"Motorola", "S9"},
-    {"Nokia", "BH-503"},
-    {"Blueant","Stereo X5"}
-};
 
 static GtkTreeModel * create_model(void)
 {
-    gint i = 0;
     GtkListStore *store;
     GtkTreeIter iter;
-    /* create list store */
+    gint i=0;
+   /* create list store */
     store = gtk_list_store_new(NUM_COLUMNS,
-            G_TYPE_STRING,
             G_TYPE_STRING);
+         
     /* add data to the list store */
     for(i = 0;i<G_N_ELEMENTS(test_data);i++)
     {
         gtk_list_store_append(store,&iter);
         gtk_list_store_set(store,&iter,
-                COLUMN_PRODUCER, test_data[i].producer,
-                COLUMN_MODEL, test_data[i].model,
-                -1);
+                COLUMN_PRODUCER, test_data[i].name,-1);
+    }
+
+        return GTK_TREE_MODEL(store);                       
+}
+static GtkTreeModel * rebuild_model(void)
+{
+
+    GtkListStore *store;
+    GtkTreeIter iter;
+    gint i=0;
+    gint dev_no=0;
+    GList *dev;
+    gchar *temp;
+   /* create list store */
+    store = gtk_list_store_new(NUM_COLUMNS,
+            G_TYPE_STRING);
+         
+    /*add inf to test_data from audio_devices */
+    dev_no = g_list_length(audio_devices);
+    dev = audio_devices;
+    while(dev != NULL)
+    {
+        test_data[i].name = ((DeviceData*)(dev->data))-> name;
+        test_data[i].class = ((DeviceData*)(dev->data))-> class;
+        test_data[i].address = ((DeviceData*)(dev->data))-> address;
+        i++;
+        dev=g_list_next(dev);
     }
-    return GTK_TREE_MODEL(store);                       
+    if (dev_no == 0) 
+    {
+        test_data[0].name = "No devices found!";
+        test_data[0].class = 0;
+        test_data[0].address = "00:00:00:00:00";
+    }
+
+    /* add data to the list store */
+    for(i = 0;i<G_N_ELEMENTS(test_data);i++)
+    {
+        gtk_list_store_append(store,&iter);
+        gtk_list_store_set(store,&iter,
+        COLUMN_PRODUCER, test_data[i].name,-1);
+    }
+        //set the labels
+         temp = g_strdup_printf("0x%x",test_data[0].class);
+         gtk_label_set_text(GTK_LABEL(label_prod),test_data[0].name);
+         gtk_label_set_text(GTK_LABEL(label_class),temp);
+         gtk_label_set_text(GTK_LABEL(label_address),test_data[0].address);
+
+        return GTK_TREE_MODEL(store);          
+
 }
 
+
+void refresh_tree()
+{
+     model = rebuild_model();
+     gtk_tree_view_set_model(GTK_TREE_VIEW(treeview),GTK_TREE_MODEL(model));
+}
+
+
 static void add_columns(GtkTreeView *treeview)
 {
     GtkCellRenderer *renderer;
@@ -81,16 +123,6 @@
     gtk_tree_view_column_set_sort_column_id (column,COLUMN_PRODUCER);
     gtk_tree_view_append_column (treeview, column);
 
-    /* column for model */
-    renderer = gtk_cell_renderer_text_new ();
-    column = gtk_tree_view_column_new_with_attributes ("Model",
-            renderer,
-            "text",
-            COLUMN_MODEL,
-            NULL);
-    gtk_tree_view_column_set_sort_column_id (column,COLUMN_MODEL);
-    gtk_tree_view_append_column (treeview, column);
-
 }
 
 void close_call(void){
@@ -102,18 +134,20 @@
 
     GtkTreeIter iter;
     gint sel;
+    gchar *temp;
     printf("select\n");
     GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(treeview)); 
     if(gtk_tree_selection_get_selected (selection, NULL,&iter)){
-      GtkTreePath *path;
-      path = gtk_tree_model_get_path (model, &iter);
-      sel = gtk_tree_path_get_indices (path)[0];
-      printf("i=%d\n",sel);
-      gtk_label_set_text(GTK_LABEL(label_prod),test_data[sel].producer);
-      gtk_label_set_text(GTK_LABEL(label_model),test_data[sel].model);
-      gtk_label_set_text(GTK_LABEL(label_address),"00:01:02:03:04:05");
-
-      gtk_tree_path_free (path);
+        GtkTreePath *path;
+        path = gtk_tree_model_get_path (model, &iter);
+        sel = gtk_tree_path_get_indices (path)[0];
+        printf("i=%d\n",sel);
+        temp = g_strdup_printf("0x%x",test_data[sel].class);
+        gtk_label_set_text(GTK_LABEL(label_prod),test_data[sel].name);
+        gtk_label_set_text(GTK_LABEL(label_class),temp);
+        gtk_label_set_text(GTK_LABEL(label_address),test_data[sel].address);
+        gtk_tree_path_free (path);
+        g_free(temp);
 
     }
 
@@ -122,7 +156,7 @@
 }
 void bt_cfg()
 {
-    
+
     if (!window)
     {
         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
@@ -168,30 +202,31 @@
         gtk_container_add (GTK_CONTAINER (headset_frame), treeview);
         /* add columns to the tree view */
         add_columns (GTK_TREE_VIEW (treeview));
+        
         g_signal_connect(treeview,"cursor-changed",G_CALLBACK(select_row),treeview);
 
 
         box_about = gtk_hbox_new(FALSE,4);
         gtk_container_set_border_width (GTK_CONTAINER (box_about), 4); 
         gtk_container_add (GTK_CONTAINER (about_frame), box_about);
-        
+
         /*about box left - vbox */
 
         box_about_left = gtk_vbox_new(FALSE,4);
         gtk_container_set_border_width (GTK_CONTAINER (box_about_left), 4); 
         gtk_container_add (GTK_CONTAINER (box_about), box_about_left);
-        
+
         /*about box right - vbox */
         box_about_right = gtk_vbox_new(TRUE,4);
         gtk_container_set_border_width (GTK_CONTAINER (box_about_right), 4); 
         gtk_container_add (GTK_CONTAINER (box_about), box_about_right);
 
         /* Left labels  */
-        label_p = gtk_label_new("Producer:");
+        label_p = gtk_label_new("Name:");
         gtk_container_add(GTK_CONTAINER(box_about_left),label_p);
 
-        label_m = gtk_label_new("Model:");
-        gtk_container_add(GTK_CONTAINER(box_about_left),label_m);
+        label_c = gtk_label_new("Class");
+        gtk_container_add(GTK_CONTAINER(box_about_left),label_c);
 
 
         label_a = gtk_label_new("Address:");
@@ -199,16 +234,16 @@
 
 
         /*right labels */
-        label_prod = gtk_label_new("Producer:");
+        label_prod = gtk_label_new("Scanning");
         gtk_container_add(GTK_CONTAINER(box_about_right),label_prod);
 
-        label_model = gtk_label_new("Model:");
-        gtk_container_add(GTK_CONTAINER(box_about_right),label_model);
+        label_class = gtk_label_new("  ");
+        gtk_container_add(GTK_CONTAINER(box_about_right),label_class);
 
 
-        label_address = gtk_label_new("Address:");
+        label_address = gtk_label_new("   ");
         gtk_container_add(GTK_CONTAINER(box_about_right),label_address);
-        
+
         gtk_window_set_default_size (GTK_WINDOW (window), 480, 180);
         if (!GTK_WIDGET_VISIBLE (window))
             gtk_widget_show_all (window);