Guest User

Untitled

a guest
Nov 22nd, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.13 KB | None | 0 0
  1. #include <gtk/gtk.h>
  2. #include <glib.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7. #include <sys/socket.h>
  8. #include <bluetooth/bluetooth.h>
  9. #include <bluetooth/hci.h>
  10. #include <bluetooth/hci_lib.h>
  11. GtkWidget *scrolledwindow;
  12. GtkWidget *backbutton;
  13. struct param
  14. {
  15. GtkWidget* backbutton;
  16. GtkWidget* Okbutton;
  17. GtkWidget* scrolledwindow;
  18. GtkWidget*newChild;
  19. GtkWidget*oldChild;
  20. };
  21.  
  22.  
  23. struct BTDeviceDetails
  24. {
  25. char*addr;
  26. char*name;
  27. };
  28. struct node
  29. {
  30. struct node* next;
  31. struct BTDeviceDetails * data;
  32. };
  33.  
  34. void insertNode(struct node ** start,struct BTDeviceDetails* resultData)
  35. {
  36. struct node * temp = *start;
  37. printf("insert noden");
  38. if(*start==0)
  39. {
  40. *start = (struct node*)malloc(sizeof(struct node));
  41. (*start)->next = 0;
  42. (*start)->data = resultData;
  43. return;
  44. }
  45. for(;temp->next!=0;temp=temp->next);
  46. printf("inserted %s",resultData->name);
  47. temp->next = (struct node*)malloc(sizeof(struct node));
  48. temp->next->next = 0;
  49. temp->next->data = resultData;
  50. }
  51.  
  52. void emptyList(struct node * start)
  53. {
  54. if(start == 0)
  55. {
  56. return;
  57. }
  58. struct node * temp = start->next;
  59. for(;temp!=0;temp = temp->next)
  60. {
  61. free(start->data->addr);
  62. free(start->data->name);
  63. free(start->data);
  64. free(start);
  65. start = temp;
  66. }
  67. free(start->data->addr);
  68. free(start->data->name);
  69. free(start->data);
  70. free(start);
  71. start = 0;
  72. }
  73.  
  74.  
  75. GtkWidget * init_tree();
  76. GtkWidget * init_tree2(struct node ** start);
  77. static void destroy(GtkWidget *widget, gpointer data)
  78. {
  79. gtk_main_quit();
  80. }
  81.  
  82.  
  83. void deviceDiscovery(struct node** start)
  84. {
  85. inquiry_info *ii = NULL;
  86. int max_rsp, num_rsp;
  87. int dev_id, sock, len, flags;
  88. int i;
  89. char addr[19] = { 0 };
  90. char name[248] = { 0 };
  91.  
  92. dev_id = hci_get_route(NULL);
  93. sock = hci_open_dev( dev_id );
  94. if (dev_id < 0 || sock < 0) {
  95. perror("opening socket");
  96. exit(1);
  97. }
  98.  
  99. len = 8;
  100. max_rsp = 255;
  101. flags = IREQ_CACHE_FLUSH;
  102. ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));
  103.  
  104. num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags);
  105. if( num_rsp < 0 ) perror("hci_inquiry");
  106.  
  107. for (i = 0; i < num_rsp; i++) {
  108. ba2str(&(ii+i)->bdaddr, addr);
  109. memset(name, 0, sizeof(name));
  110. if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name),
  111. name, 0) < 0)
  112. strcpy(name, "[unknown]");
  113. struct BTDeviceDetails* resultData = (struct BTDeviceDetails *)malloc(sizeof(struct BTDeviceDetails));
  114. resultData->addr = (char*)malloc((strlen(addr)+1)*sizeof(char));
  115. resultData-> name = (char*)malloc((strlen(name)+1)*sizeof(char));
  116. strcpy(resultData->addr,addr);
  117. strcpy(resultData-> name,name);
  118. insertNode(start,resultData);
  119. printf("%s %sn", addr, name);
  120. }
  121.  
  122. free( ii );
  123. close( sock );
  124. // return 0;
  125. }
  126.  
  127.  
  128. static void Back (GtkButton *button, gpointer user_data)
  129. {
  130. printf("inside back handlen");
  131. struct param* parameters = (struct param*)user_data;
  132. gtk_widget_hide(GTK_WIDGET(parameters->scrolledwindow));
  133. gtk_container_remove(GTK_CONTAINER(parameters->scrolledwindow), GTK_WIDGET(parameters->newChild));
  134. gtk_container_add(GTK_CONTAINER(parameters->scrolledwindow), parameters->oldChild);
  135. gtk_widget_hide (GTK_WIDGET(parameters->backbutton));
  136. gtk_widget_show_all (GTK_WIDGET(parameters->scrolledwindow));
  137. }
  138.  
  139. static void Ok (GtkButton *button, gpointer user_data)
  140. {
  141.  
  142. }
  143.  
  144. static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
  145. {
  146. struct param* parameters = (struct param*)user_data;
  147. gchar *string;
  148. GtkTreeIter iter;
  149. GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
  150. gtk_tree_model_get_iter(model, &iter, path);
  151. gtk_tree_model_get (model, &iter, 0, &string, -1);
  152. g_print ("activated: %sn", string);
  153. if(!strcmp(string,"Register"))
  154. {
  155. struct node * start = 0;
  156. deviceDiscovery(&start);
  157. parameters->newChild = init_tree2(&start);
  158. g_signal_connect(backbutton, "clicked", G_CALLBACK(Back), (gpointer) parameters);
  159. //GtkWidget* liststore = GTK_WIDGET(gtk_tree_view_get_model(tree_view));
  160. gtk_widget_hide(GTK_WIDGET(parameters->scrolledwindow));
  161. gtk_container_remove(GTK_CONTAINER(parameters->scrolledwindow), GTK_WIDGET(tree_view));
  162. gtk_container_add(GTK_CONTAINER(parameters->scrolledwindow), parameters->newChild);
  163. gtk_widget_show (GTK_WIDGET(parameters->backbutton));
  164. //gtk_widget_show (GTK_WIDGET(parameters->Okbutton));
  165. gtk_widget_show_all (GTK_WIDGET(parameters->scrolledwindow));
  166.  
  167. }
  168. else if(!strcmp(string,"New Configuration"))
  169. {
  170.  
  171. }
  172. else if(!strcmp(string,"Edit Configuration"))
  173. {
  174.  
  175. }
  176. else if(!strcmp(string,"Delete Configuration"))
  177. {
  178.  
  179. }
  180. else if(!strcmp(string,"Add location to turn-off place list"))
  181. {
  182.  
  183. }
  184. else if(!strcmp(string,"Disable Turn-off Places"))
  185. {
  186.  
  187. }
  188. else if(!strcmp(string,"Enable Turn-off Places"))
  189. {
  190.  
  191. }
  192. else if(!strcmp(string,"Disable Distance"))
  193. {
  194.  
  195. }
  196.  
  197. else if(!strcmp(string,"Enable Distance"))
  198. {
  199.  
  200. }
  201. else if(!strcmp(string,"Factory Reset"))
  202. {
  203.  
  204. }
  205. }
  206.  
  207. GtkWidget * init_tree()
  208. {
  209.  
  210. GtkListStore *liststore = gtk_list_store_new(1, G_TYPE_STRING);
  211. GtkTreeIter treeiter;
  212.  
  213. gtk_list_store_append(liststore, &treeiter);
  214. gtk_list_store_set(liststore, &treeiter, 0, "Register", -1);
  215. gtk_list_store_append(liststore, &treeiter);
  216. gtk_list_store_set(liststore, &treeiter, 0, "New Configuration", -1);
  217. gtk_list_store_append(liststore, &treeiter);
  218. gtk_list_store_set(liststore, &treeiter, 0, "Edit Configuration", -1);
  219. gtk_list_store_append(liststore, &treeiter);
  220. gtk_list_store_set(liststore, &treeiter, 0, "Delete Configuration", -1);
  221. gtk_list_store_append(liststore, &treeiter);
  222. gtk_list_store_set(liststore, &treeiter, 0, "Add location to turn-off place list", -1);
  223. gtk_list_store_append(liststore, &treeiter);
  224. gtk_list_store_set(liststore, &treeiter, 0, "Disable Turn-off Places", -1);
  225. gtk_list_store_append(liststore, &treeiter);
  226. gtk_list_store_set(liststore, &treeiter, 0, "Enable Turn-off Places", -1);
  227. gtk_list_store_append(liststore, &treeiter);
  228. gtk_list_store_set(liststore, &treeiter, 0, "Disable Distance", -1);
  229. gtk_list_store_append(liststore, &treeiter);
  230. gtk_list_store_set(liststore, &treeiter, 0, "Enable Distance", -1);
  231. gtk_list_store_append(liststore, &treeiter);
  232. gtk_list_store_set(liststore, &treeiter, 0, "Factory Reset", -1);
  233. gtk_list_store_append(liststore, &treeiter);
  234. GtkWidget *treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));
  235.  
  236. GtkCellRenderer *cellrenderertext = gtk_cell_renderer_text_new();
  237.  
  238. GtkTreeViewColumn *treeviewcolumn = gtk_tree_view_column_new_with_attributes("Settings",
  239. cellrenderertext,
  240. "text", 0,
  241. NULL);
  242. gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treeviewcolumn);
  243.  
  244. return treeview;
  245. }
  246.  
  247. GtkWidget * init_tree2(struct node** start)
  248. {
  249.  
  250. GtkListStore *liststore = gtk_list_store_new(1, G_TYPE_STRING);
  251. GtkTreeIter treeiter;
  252. if(*start ==0) printf("nfailuren");
  253. struct node * temp = *start;
  254. for(;temp!=0; temp = temp->next)
  255. {
  256. gtk_list_store_append(liststore, &treeiter);
  257. gtk_list_store_set(liststore, &treeiter, 0, temp->data->name, -1);
  258. }
  259. gtk_list_store_append(liststore, &treeiter);
  260. gtk_list_store_set(liststore, &treeiter, 0, "b", -1);
  261. gtk_list_store_append(liststore, &treeiter);
  262. gtk_list_store_set(liststore, &treeiter, 0, "c", -1);
  263. gtk_list_store_append(liststore, &treeiter);
  264. gtk_list_store_set(liststore, &treeiter, 0, "d", -1);
  265. gtk_list_store_append(liststore, &treeiter);
  266. gtk_list_store_set(liststore, &treeiter, 0, "e", -1);
  267. gtk_list_store_append(liststore, &treeiter);
  268. gtk_list_store_set(liststore, &treeiter, 0, "f", -1);
  269. gtk_list_store_append(liststore, &treeiter);
  270. gtk_list_store_set(liststore, &treeiter, 0, "Aptosid", -1);
  271. gtk_list_store_append(liststore, &treeiter);
  272. gtk_list_store_set(liststore, &treeiter, 0, "OpenSuSE", -1);
  273. gtk_list_store_append(liststore, &treeiter);
  274. gtk_list_store_set(liststore, &treeiter, 0, "Linux Mint", -1);
  275.  
  276. gtk_list_store_append(liststore, &treeiter);
  277. gtk_list_store_set(liststore, &treeiter, 0, "Arch Linux", -1);
  278.  
  279. GtkWidget *treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));
  280.  
  281. GtkCellRenderer *cellrenderertext = gtk_cell_renderer_text_new();
  282.  
  283. GtkTreeViewColumn *treeviewcolumn = gtk_tree_view_column_new_with_attributes("BTDevices",
  284. cellrenderertext,
  285. "text", 0,
  286. NULL);
  287. gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treeviewcolumn);
  288.  
  289. return treeview;
  290. }
  291.  
  292. int main(int argc, char *argv[])
  293. {
  294. gtk_init(&argc, &argv);
  295.  
  296. GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  297. gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
  298. g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL);
  299.  
  300. GtkWidget *notebook = gtk_notebook_new();
  301. gtk_container_add(GTK_CONTAINER(window), notebook);
  302.  
  303.  
  304. int count;
  305. gchar *text;
  306.  
  307. for (count = 1; count <= 5; count++)
  308. {
  309. text = g_strdup_printf("Page %d", count);
  310. GtkWidget *label = gtk_label_new(text);
  311.  
  312. GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
  313. GtkWidget *scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
  314.  
  315. backbutton = gtk_button_new_with_label ("Back");
  316. gtk_widget_set_no_show_all (backbutton, TRUE);
  317.  
  318. //GtkWidget *Okbutton = gtk_button_new_with_label ("Ok");
  319. //gtk_widget_set_no_show_all (Okbutton, TRUE);
  320.  
  321. gtk_box_pack_start (GTK_BOX(vbox), scrolledwindow, TRUE, TRUE, 0);
  322. gtk_box_pack_end (GTK_BOX(vbox), backbutton, FALSE, FALSE, 0);
  323. //gtk_box_pack_end (GTK_BOX(vbox), Okbutton, FALSE, FALSE, 0);
  324.  
  325.  
  326. GtkWidget* treeview = init_tree();
  327. //GtkWidget* treeview2 = init_tree2();
  328. struct param* parameters = malloc(sizeof(struct param));
  329. parameters->backbutton = backbutton;
  330. //parameters->Okbutton = Okbutton;
  331. parameters->scrolledwindow = scrolledwindow;
  332. parameters->oldChild= treeview;
  333. //parameters->newChild= treeview2;
  334.  
  335. g_signal_connect(treeview, "row-activated", G_CALLBACK(replace_tab), (gpointer) parameters);
  336. //g_signal_connect(Okbutton, "clicked", G_CALLBACK(Ok), (gpointer) parameters);
  337.  
  338. gtk_container_add(GTK_CONTAINER(scrolledwindow), treeview);
  339. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label);
  340. }
  341.  
  342. gtk_widget_show_all(window);
  343.  
  344. gtk_main();
  345.  
  346. return 0;
  347. }
Add Comment
Please, Sign In to add comment