Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <gtk/gtk.h>
- #include <glib.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/socket.h>
- #include <bluetooth/bluetooth.h>
- #include <bluetooth/hci.h>
- #include <bluetooth/hci_lib.h>
- GtkWidget *scrolledwindow;
- GtkWidget *backbutton;
- struct param
- {
- GtkWidget* backbutton;
- GtkWidget* Okbutton;
- GtkWidget* scrolledwindow;
- GtkWidget*newChild;
- GtkWidget*oldChild;
- };
- struct BTDeviceDetails
- {
- char*addr;
- char*name;
- };
- struct node
- {
- struct node* next;
- struct BTDeviceDetails * data;
- };
- void insertNode(struct node ** start,struct BTDeviceDetails* resultData)
- {
- struct node * temp = *start;
- printf("insert noden");
- if(*start==0)
- {
- *start = (struct node*)malloc(sizeof(struct node));
- (*start)->next = 0;
- (*start)->data = resultData;
- return;
- }
- for(;temp->next!=0;temp=temp->next);
- printf("inserted %s",resultData->name);
- temp->next = (struct node*)malloc(sizeof(struct node));
- temp->next->next = 0;
- temp->next->data = resultData;
- }
- void emptyList(struct node * start)
- {
- if(start == 0)
- {
- return;
- }
- struct node * temp = start->next;
- for(;temp!=0;temp = temp->next)
- {
- free(start->data->addr);
- free(start->data->name);
- free(start->data);
- free(start);
- start = temp;
- }
- free(start->data->addr);
- free(start->data->name);
- free(start->data);
- free(start);
- start = 0;
- }
- GtkWidget * init_tree();
- GtkWidget * init_tree2(struct node ** start);
- static void destroy(GtkWidget *widget, gpointer data)
- {
- gtk_main_quit();
- }
- void deviceDiscovery(struct node** start)
- {
- inquiry_info *ii = NULL;
- int max_rsp, num_rsp;
- int dev_id, sock, len, flags;
- int i;
- char addr[19] = { 0 };
- char name[248] = { 0 };
- dev_id = hci_get_route(NULL);
- sock = hci_open_dev( dev_id );
- if (dev_id < 0 || sock < 0) {
- perror("opening socket");
- exit(1);
- }
- len = 8;
- max_rsp = 255;
- flags = IREQ_CACHE_FLUSH;
- ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));
- num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags);
- if( num_rsp < 0 ) perror("hci_inquiry");
- for (i = 0; i < num_rsp; i++) {
- ba2str(&(ii+i)->bdaddr, addr);
- memset(name, 0, sizeof(name));
- if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name),
- name, 0) < 0)
- strcpy(name, "[unknown]");
- struct BTDeviceDetails* resultData = (struct BTDeviceDetails *)malloc(sizeof(struct BTDeviceDetails));
- resultData->addr = (char*)malloc((strlen(addr)+1)*sizeof(char));
- resultData-> name = (char*)malloc((strlen(name)+1)*sizeof(char));
- strcpy(resultData->addr,addr);
- strcpy(resultData-> name,name);
- insertNode(start,resultData);
- printf("%s %sn", addr, name);
- }
- free( ii );
- close( sock );
- // return 0;
- }
- static void Back (GtkButton *button, gpointer user_data)
- {
- printf("inside back handlen");
- struct param* parameters = (struct param*)user_data;
- gtk_widget_hide(GTK_WIDGET(parameters->scrolledwindow));
- gtk_container_remove(GTK_CONTAINER(parameters->scrolledwindow), GTK_WIDGET(parameters->newChild));
- gtk_container_add(GTK_CONTAINER(parameters->scrolledwindow), parameters->oldChild);
- gtk_widget_hide (GTK_WIDGET(parameters->backbutton));
- gtk_widget_show_all (GTK_WIDGET(parameters->scrolledwindow));
- }
- static void Ok (GtkButton *button, gpointer user_data)
- {
- }
- static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
- {
- struct param* parameters = (struct param*)user_data;
- gchar *string;
- GtkTreeIter iter;
- GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
- gtk_tree_model_get_iter(model, &iter, path);
- gtk_tree_model_get (model, &iter, 0, &string, -1);
- g_print ("activated: %sn", string);
- if(!strcmp(string,"Register"))
- {
- struct node * start = 0;
- deviceDiscovery(&start);
- parameters->newChild = init_tree2(&start);
- g_signal_connect(backbutton, "clicked", G_CALLBACK(Back), (gpointer) parameters);
- //GtkWidget* liststore = GTK_WIDGET(gtk_tree_view_get_model(tree_view));
- gtk_widget_hide(GTK_WIDGET(parameters->scrolledwindow));
- gtk_container_remove(GTK_CONTAINER(parameters->scrolledwindow), GTK_WIDGET(tree_view));
- gtk_container_add(GTK_CONTAINER(parameters->scrolledwindow), parameters->newChild);
- gtk_widget_show (GTK_WIDGET(parameters->backbutton));
- //gtk_widget_show (GTK_WIDGET(parameters->Okbutton));
- gtk_widget_show_all (GTK_WIDGET(parameters->scrolledwindow));
- }
- else if(!strcmp(string,"New Configuration"))
- {
- }
- else if(!strcmp(string,"Edit Configuration"))
- {
- }
- else if(!strcmp(string,"Delete Configuration"))
- {
- }
- else if(!strcmp(string,"Add location to turn-off place list"))
- {
- }
- else if(!strcmp(string,"Disable Turn-off Places"))
- {
- }
- else if(!strcmp(string,"Enable Turn-off Places"))
- {
- }
- else if(!strcmp(string,"Disable Distance"))
- {
- }
- else if(!strcmp(string,"Enable Distance"))
- {
- }
- else if(!strcmp(string,"Factory Reset"))
- {
- }
- }
- GtkWidget * init_tree()
- {
- GtkListStore *liststore = gtk_list_store_new(1, G_TYPE_STRING);
- GtkTreeIter treeiter;
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "Register", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "New Configuration", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "Edit Configuration", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "Delete Configuration", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "Add location to turn-off place list", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "Disable Turn-off Places", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "Enable Turn-off Places", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "Disable Distance", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "Enable Distance", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "Factory Reset", -1);
- gtk_list_store_append(liststore, &treeiter);
- GtkWidget *treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));
- GtkCellRenderer *cellrenderertext = gtk_cell_renderer_text_new();
- GtkTreeViewColumn *treeviewcolumn = gtk_tree_view_column_new_with_attributes("Settings",
- cellrenderertext,
- "text", 0,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treeviewcolumn);
- return treeview;
- }
- GtkWidget * init_tree2(struct node** start)
- {
- GtkListStore *liststore = gtk_list_store_new(1, G_TYPE_STRING);
- GtkTreeIter treeiter;
- if(*start ==0) printf("nfailuren");
- struct node * temp = *start;
- for(;temp!=0; temp = temp->next)
- {
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, temp->data->name, -1);
- }
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "b", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "c", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "d", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "e", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "f", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "Aptosid", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "OpenSuSE", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "Linux Mint", -1);
- gtk_list_store_append(liststore, &treeiter);
- gtk_list_store_set(liststore, &treeiter, 0, "Arch Linux", -1);
- GtkWidget *treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));
- GtkCellRenderer *cellrenderertext = gtk_cell_renderer_text_new();
- GtkTreeViewColumn *treeviewcolumn = gtk_tree_view_column_new_with_attributes("BTDevices",
- cellrenderertext,
- "text", 0,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treeviewcolumn);
- return treeview;
- }
- int main(int argc, char *argv[])
- {
- gtk_init(&argc, &argv);
- GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
- g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL);
- GtkWidget *notebook = gtk_notebook_new();
- gtk_container_add(GTK_CONTAINER(window), notebook);
- int count;
- gchar *text;
- for (count = 1; count <= 5; count++)
- {
- text = g_strdup_printf("Page %d", count);
- GtkWidget *label = gtk_label_new(text);
- GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
- GtkWidget *scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
- backbutton = gtk_button_new_with_label ("Back");
- gtk_widget_set_no_show_all (backbutton, TRUE);
- //GtkWidget *Okbutton = gtk_button_new_with_label ("Ok");
- //gtk_widget_set_no_show_all (Okbutton, TRUE);
- gtk_box_pack_start (GTK_BOX(vbox), scrolledwindow, TRUE, TRUE, 0);
- gtk_box_pack_end (GTK_BOX(vbox), backbutton, FALSE, FALSE, 0);
- //gtk_box_pack_end (GTK_BOX(vbox), Okbutton, FALSE, FALSE, 0);
- GtkWidget* treeview = init_tree();
- //GtkWidget* treeview2 = init_tree2();
- struct param* parameters = malloc(sizeof(struct param));
- parameters->backbutton = backbutton;
- //parameters->Okbutton = Okbutton;
- parameters->scrolledwindow = scrolledwindow;
- parameters->oldChild= treeview;
- //parameters->newChild= treeview2;
- g_signal_connect(treeview, "row-activated", G_CALLBACK(replace_tab), (gpointer) parameters);
- //g_signal_connect(Okbutton, "clicked", G_CALLBACK(Ok), (gpointer) parameters);
- gtk_container_add(GTK_CONTAINER(scrolledwindow), treeview);
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label);
- }
- gtk_widget_show_all(window);
- gtk_main();
- return 0;
- }
Add Comment
Please, Sign In to add comment