2644
|
1 #include "gui.h"
|
|
2 #include "bluetooth.h"
|
|
3 #include <gtk/gtk.h>
|
|
4 #include <glib.h>
|
|
5
|
|
6 static GtkWidget *window = NULL;
|
|
7 static GtkTreeModel *model;
|
|
8 GtkWidget *mainbox;
|
|
9 GtkWidget *hbox_top;
|
|
10 GtkWidget *hbox_bottom;
|
|
11 GtkWidget *box_about;
|
|
12 GtkWidget *box_about_left;
|
|
13 GtkWidget *box_about_right;
|
|
14 GtkWidget *headset_frame;
|
|
15 GtkWidget *about_frame;
|
|
16 GtkWidget *refresh;
|
|
17 GtkWidget *connect_button;
|
|
18 GtkWidget *close_button;
|
|
19 GtkWidget *treeview;
|
|
20 GtkWidget *label_p;
|
|
21 GtkWidget *label_m;
|
|
22 GtkWidget *label_a;
|
|
23 GtkWidget *label_prod;
|
|
24 GtkWidget *label_model;
|
|
25 GtkWidget *label_address;
|
|
26
|
|
27
|
|
28 typedef struct
|
|
29 {
|
|
30 gchar *producer;
|
|
31 gchar *model;
|
|
32 }Headset;
|
|
33
|
|
34 enum{
|
|
35 COLUMN_PRODUCER,
|
|
36 COLUMN_MODEL,
|
|
37 NUM_COLUMNS
|
|
38 };
|
|
39
|
|
40 static Headset test_data[]=
|
|
41 {
|
|
42 {"Motorola", "S9"},
|
|
43 {"Nokia", "BH-503"},
|
|
44 {"Blueant","Stereo X5"}
|
|
45 };
|
|
46
|
|
47 static GtkTreeModel * create_model(void)
|
|
48 {
|
|
49 gint i = 0;
|
|
50 GtkListStore *store;
|
|
51 GtkTreeIter iter;
|
|
52 /* create list store */
|
|
53 store = gtk_list_store_new(NUM_COLUMNS,
|
|
54 G_TYPE_STRING,
|
|
55 G_TYPE_STRING);
|
|
56 /* add data to the list store */
|
|
57 for(i = 0;i<G_N_ELEMENTS(test_data);i++)
|
|
58 {
|
|
59 gtk_list_store_append(store,&iter);
|
|
60 gtk_list_store_set(store,&iter,
|
|
61 COLUMN_PRODUCER, test_data[i].producer,
|
|
62 COLUMN_MODEL, test_data[i].model,
|
|
63 -1);
|
|
64 }
|
|
65 return GTK_TREE_MODEL(store);
|
|
66 }
|
|
67
|
|
68 static void add_columns(GtkTreeView *treeview)
|
|
69 {
|
|
70 GtkCellRenderer *renderer;
|
|
71 GtkTreeViewColumn *column;
|
|
72 // GtkTreeModel *model = gtk_tree_view_get_model (treeview);
|
|
73
|
|
74 /* column for producer */
|
|
75 renderer = gtk_cell_renderer_text_new ();
|
|
76 column = gtk_tree_view_column_new_with_attributes ("Producer",
|
|
77 renderer,
|
|
78 "text",
|
|
79 COLUMN_PRODUCER,
|
|
80 NULL);
|
|
81 gtk_tree_view_column_set_sort_column_id (column,COLUMN_PRODUCER);
|
|
82 gtk_tree_view_append_column (treeview, column);
|
|
83
|
|
84 /* column for model */
|
|
85 renderer = gtk_cell_renderer_text_new ();
|
|
86 column = gtk_tree_view_column_new_with_attributes ("Model",
|
|
87 renderer,
|
|
88 "text",
|
|
89 COLUMN_MODEL,
|
|
90 NULL);
|
|
91 gtk_tree_view_column_set_sort_column_id (column,COLUMN_MODEL);
|
|
92 gtk_tree_view_append_column (treeview, column);
|
|
93
|
|
94 }
|
|
95
|
|
96 void close_call(void){
|
|
97 printf("close callback \n");
|
|
98 gtk_widget_destroy (window);
|
|
99 window = NULL;
|
|
100 }
|
|
101 void select_row(GtkWidget *treeview){
|
|
102
|
|
103 GtkTreeIter iter;
|
|
104 gint sel;
|
|
105 printf("select\n");
|
|
106 GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(treeview));
|
|
107 if(gtk_tree_selection_get_selected (selection, NULL,&iter)){
|
|
108 GtkTreePath *path;
|
|
109 path = gtk_tree_model_get_path (model, &iter);
|
|
110 sel = gtk_tree_path_get_indices (path)[0];
|
|
111 printf("i=%d\n",sel);
|
|
112 gtk_label_set_text(GTK_LABEL(label_prod),test_data[sel].producer);
|
|
113 gtk_label_set_text(GTK_LABEL(label_model),test_data[sel].model);
|
|
114 gtk_label_set_text(GTK_LABEL(label_address),"00:01:02:03:04:05");
|
|
115
|
|
116 gtk_tree_path_free (path);
|
|
117
|
|
118 }
|
|
119
|
|
120
|
|
121
|
|
122 }
|
|
123 void bt_cfg()
|
|
124 {
|
|
125
|
|
126 if (!window)
|
|
127 {
|
|
128 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
129 g_signal_connect (window, "destroy",G_CALLBACK (gtk_widget_destroyed), &window);
|
|
130
|
|
131 mainbox = gtk_vbox_new(FALSE,4);
|
|
132 gtk_container_set_border_width (GTK_CONTAINER (mainbox), 4);
|
|
133 gtk_container_add (GTK_CONTAINER (window), mainbox);
|
|
134
|
|
135 hbox_top = gtk_hbox_new(FALSE,4);
|
|
136 gtk_container_set_border_width (GTK_CONTAINER(hbox_top), 4);
|
|
137 gtk_container_add (GTK_CONTAINER (mainbox), hbox_top);
|
|
138
|
|
139 hbox_bottom = gtk_hbox_new(FALSE,4);
|
|
140 gtk_container_set_border_width (GTK_CONTAINER (hbox_bottom), 4);
|
|
141 gtk_container_add (GTK_CONTAINER (mainbox), hbox_bottom);
|
|
142
|
|
143 headset_frame = gtk_frame_new("Available Headsets");
|
|
144 gtk_container_add (GTK_CONTAINER (hbox_top), headset_frame);
|
|
145
|
|
146 about_frame = gtk_frame_new("Current Headset");
|
|
147 gtk_container_add(GTK_CONTAINER(hbox_top),about_frame);
|
|
148
|
|
149 refresh = gtk_button_new_with_mnemonic ("_Refresh");
|
|
150 g_signal_connect (refresh, "clicked",G_CALLBACK (refresh_call), NULL);
|
|
151 gtk_container_add(GTK_CONTAINER(hbox_bottom),refresh);
|
|
152
|
|
153 connect_button = gtk_button_new_with_mnemonic("_Connect");
|
|
154 g_signal_connect(connect_button,"clicked",G_CALLBACK (connect_call), NULL);
|
|
155 gtk_container_add(GTK_CONTAINER(hbox_bottom),connect_button);
|
|
156
|
|
157 close_button = gtk_button_new_with_mnemonic("_Close");
|
|
158 g_signal_connect(close_button,"clicked",G_CALLBACK (close_call),NULL);
|
|
159 gtk_container_add(GTK_CONTAINER(hbox_bottom),close_button);
|
|
160 /* create tree model */
|
|
161 model = create_model ();
|
|
162
|
|
163 /* create tree view */
|
|
164 treeview = gtk_tree_view_new_with_model (model);
|
|
165 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
|
|
166 gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)),GTK_SELECTION_SINGLE);
|
|
167 g_object_unref (model);
|
|
168 gtk_container_add (GTK_CONTAINER (headset_frame), treeview);
|
|
169 /* add columns to the tree view */
|
|
170 add_columns (GTK_TREE_VIEW (treeview));
|
|
171 g_signal_connect(treeview,"cursor-changed",G_CALLBACK(select_row),treeview);
|
|
172
|
|
173
|
|
174 box_about = gtk_hbox_new(FALSE,4);
|
|
175 gtk_container_set_border_width (GTK_CONTAINER (box_about), 4);
|
|
176 gtk_container_add (GTK_CONTAINER (about_frame), box_about);
|
|
177
|
|
178 /*about box left - vbox */
|
|
179
|
|
180 box_about_left = gtk_vbox_new(FALSE,4);
|
|
181 gtk_container_set_border_width (GTK_CONTAINER (box_about_left), 4);
|
|
182 gtk_container_add (GTK_CONTAINER (box_about), box_about_left);
|
|
183
|
|
184 /*about box right - vbox */
|
|
185 box_about_right = gtk_vbox_new(TRUE,4);
|
|
186 gtk_container_set_border_width (GTK_CONTAINER (box_about_right), 4);
|
|
187 gtk_container_add (GTK_CONTAINER (box_about), box_about_right);
|
|
188
|
|
189 /* Left labels */
|
|
190 label_p = gtk_label_new("Producer:");
|
|
191 gtk_container_add(GTK_CONTAINER(box_about_left),label_p);
|
|
192
|
|
193 label_m = gtk_label_new("Model:");
|
|
194 gtk_container_add(GTK_CONTAINER(box_about_left),label_m);
|
|
195
|
|
196
|
|
197 label_a = gtk_label_new("Address:");
|
|
198 gtk_container_add(GTK_CONTAINER(box_about_left),label_a);
|
|
199
|
|
200
|
|
201 /*right labels */
|
|
202 label_prod = gtk_label_new("Producer:");
|
|
203 gtk_container_add(GTK_CONTAINER(box_about_right),label_prod);
|
|
204
|
|
205 label_model = gtk_label_new("Model:");
|
|
206 gtk_container_add(GTK_CONTAINER(box_about_right),label_model);
|
|
207
|
|
208
|
|
209 label_address = gtk_label_new("Address:");
|
|
210 gtk_container_add(GTK_CONTAINER(box_about_right),label_address);
|
|
211
|
|
212 gtk_window_set_default_size (GTK_WINDOW (window), 480, 180);
|
|
213 if (!GTK_WIDGET_VISIBLE (window))
|
|
214 gtk_widget_show_all (window);
|
|
215 else
|
|
216 {
|
|
217 gtk_widget_destroy (window);
|
|
218 window = NULL;
|
|
219 }
|
|
220 // return window;
|
|
221 }
|
|
222 // return window;
|
|
223 }
|
|
224
|