[Initng-svn] r4335 - initng-gui/initng-conf-gtk/src

svn at initng.thinktux.net svn at initng.thinktux.net
Thu Jun 1 16:09:32 CEST 2006


Author: danne
Date: Thu Jun  1 16:09:29 2006
New Revision: 4335

Modified:
   initng-gui/initng-conf-gtk/src/callbacks.c
   initng-gui/initng-conf-gtk/src/ngehandler.c
   initng-gui/initng-conf-gtk/src/serviceparser.c
   initng-gui/initng-conf-gtk/src/serviceparser.h

Log:
Got the service tree working somewhat. No more time today, I'll continue tomorrow...


Modified: initng-gui/initng-conf-gtk/src/callbacks.c
==============================================================================
--- initng-gui/initng-conf-gtk/src/callbacks.c	(original)
+++ initng-gui/initng-conf-gtk/src/callbacks.c	Thu Jun  1 16:09:29 2006
@@ -105,15 +105,14 @@
   GtkTreeIter serviceiter;
   GtkTreeSelection *selected;
   GtkTreeModel *servicemodel;
-  gchar *servicename;
+  struct s_info *serviceinfo;
 
   service_list = glade_xml_get_widget(xml, "service_list");
   selected = gtk_tree_view_get_selection(GTK_TREE_VIEW(service_list));
   gtk_tree_selection_get_selected(selected, &servicemodel, &serviceiter);
-  gtk_tree_model_get (servicemodel, &serviceiter, 0, &servicename, -1);
+  gtk_tree_model_get (servicemodel, &serviceiter, 4, &serviceinfo, -1);
 
-  add_to_rl(servicename);
-  g_free(servicename);
+  add_to_rl(serviceinfo->fullname);
 }
 
 void on_remove_button_clicked (GtkButton *button, gpointer user_data)
@@ -143,6 +142,7 @@
   gtk_tree_model_get(service_model, &service_iter, 0, &service_name, 4, &serviceinfo, -1);
 
   gtk_widget_set_sensitive(edit_button, TRUE);
+  if(serviceinfo) {
   switch(serviceinfo->status_id) {
   case IS_UP:
     gtk_widget_set_sensitive(start_button, FALSE);
@@ -172,6 +172,7 @@
     gtk_widget_set_sensitive(zap_button, FALSE);
     break;
   }
+  }
 
   runlevel_model = gtk_tree_view_get_model(runlevel_list);
   if(runlevel_model) {

Modified: initng-gui/initng-conf-gtk/src/ngehandler.c
==============================================================================
--- initng-gui/initng-conf-gtk/src/ngehandler.c	(original)
+++ initng-gui/initng-conf-gtk/src/ngehandler.c	Thu Jun  1 16:09:29 2006
@@ -51,8 +51,9 @@
   if(!valid) {
     struct s_info *serviceinfo = malloc(sizeof(struct s_info));
     serviceinfo->startline = NULL;
-    gtk_list_store_append (GTK_LIST_STORE(service_model), &iter);
-    gtk_list_store_set(GTK_LIST_STORE(service_model), &iter, 0, service, 1, _("unknown"), 
+    add_recursive(GTK_TREE_STORE(service_model), NULL, &iter, service, serviceinfo);
+    //gtk_list_store_append (GTK_LIST_STORE(service_model), &iter);
+    gtk_tree_store_set(GTK_TREE_STORE(service_model), &iter, 1, _("unknown"), 
 		       2, NULL, 4, serviceinfo, -1);
     serviceinfo->type = UNKNOWN;
     serviceinfo->file_content = NULL;
@@ -61,25 +62,25 @@
   struct s_info *serviceinfo;
   gtk_tree_model_get(service_model, &iter, 4, &serviceinfo, -1);
   serviceinfo->status_id = is;
-  gtk_list_store_set(GTK_LIST_STORE(service_model), &iter, 2, state, -1);
+  gtk_tree_store_set(GTK_TREE_STORE(service_model), &iter, 2, state, -1);
   switch(is) {
   case IS_UP:
-    gtk_list_store_set(GTK_LIST_STORE(service_model), &iter, 3, "#AAFFAA", -1);
+    gtk_tree_store_set(GTK_TREE_STORE(service_model), &iter, 3, "#AAFFAA", -1);
     break;
   case IS_DOWN:
-    gtk_list_store_set(GTK_LIST_STORE(service_model), &iter, 3, "#AAAAFF", -1);
+    gtk_tree_store_set(GTK_TREE_STORE(service_model), &iter, 3, "#AAAAFF", -1);
     break;
   case IS_FAILED:
-    gtk_list_store_set(GTK_LIST_STORE(service_model), &iter, 3, "#FFAAAA", -1);
+    gtk_tree_store_set(GTK_TREE_STORE(service_model), &iter, 3, "#FFAAAA", -1);
     break;
   case IS_STARTING:
-    gtk_list_store_set(GTK_LIST_STORE(service_model), &iter, 3, "#FFFFAA", -1);
+    gtk_tree_store_set(GTK_TREE_STORE(service_model), &iter, 3, "#FFFFAA", -1);
     break;
   case IS_STOPPING:
-    gtk_list_store_set(GTK_LIST_STORE(service_model), &iter, 3, "#AAFFFF", -1);
+    gtk_tree_store_set(GTK_TREE_STORE(service_model), &iter, 3, "#AAFFFF", -1);
     break;
   case IS_WAITING:
-    gtk_list_store_set(GTK_LIST_STORE(service_model), &iter, 3, "#FFAAFF", -1);
+    gtk_tree_store_set(GTK_TREE_STORE(service_model), &iter, 3, "#FFAAFF", -1);
     break;
   }
 

Modified: initng-gui/initng-conf-gtk/src/serviceparser.c
==============================================================================
--- initng-gui/initng-conf-gtk/src/serviceparser.c	(original)
+++ initng-gui/initng-conf-gtk/src/serviceparser.c	Thu Jun  1 16:09:29 2006
@@ -64,14 +64,14 @@
     break;
   case 2: //Show only runlevels
     gtk_tree_model_get(model, iter, 1, &str_data, -1);
-    if(!strcmp(str_data, "runlevel")) {
+    if(str_data && !strcmp(str_data, "runlevel")) {
       g_free(str_data);
       return TRUE;
     }
-    else {
+    else if(str_data){
       g_free(str_data);
-      return FALSE;
     }
+    return FALSE;
     break;
   default: //Show all (0) or nothing choosen (-1)
     return TRUE;
@@ -90,86 +90,75 @@
   gboolean valid = gtk_tree_model_get_iter_first(model, &iter);
   while(valid) {
     gtk_tree_model_get(model, &iter, 4, &serviceinfo, -1);
-    g_free(serviceinfo->startline);
-    if(serviceinfo->file_content) {
-      serviceinfo->file_content->references--;
-      if(serviceinfo->file_content->references == 0) {
-	if(serviceinfo->file_content->data)
-	  g_free(serviceinfo->file_content->data);
-	if(serviceinfo->file_content->path)
-	  g_free(serviceinfo->file_content->path);
-	g_free(serviceinfo->file_content);
+    if(serviceinfo) {
+      g_free(serviceinfo->startline);
+      if(serviceinfo->file_content) {
+        serviceinfo->file_content->references--;
+        if(serviceinfo->file_content->references == 0) {
+       	  if(serviceinfo->file_content->data)
+	        g_free(serviceinfo->file_content->data);
+	      if(serviceinfo->file_content->path)
+	        g_free(serviceinfo->file_content->path);
+	      g_free(serviceinfo->file_content);
+        }
       }
+      g_free(serviceinfo);
     }
-    g_free(serviceinfo);
     valid = gtk_tree_model_iter_next(model, &iter);
   }
 }
 
-GtkTreeIter *find_service(GtkTreeStore *store, GtkTreeIter *iter, char *name) {
+char *path_tokenizer(char **name) {
+  char *token = *name;
+  char *rest = strchr(*name, '/');
+  if(rest != NULL) {
+    rest[0] = 0;
+    rest++;
+  }
+  *name = rest;
+  return token;
+}
+
+gboolean find_child(GtkTreeStore *store, GtkTreeIter *parent_iter,
+                    GtkTreeIter *match_iter, char *name) {
   gchar *str_data;
-  GtkTreeIter child;
   gboolean valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(store),
-                                                &child, iter);
-  iter = &child;
+                                                match_iter, parent_iter);
 
   while(valid) {
-    gtk_tree_model_get(GTK_TREE_MODEL(store), iter, 0, &str_data, -1);
+    gtk_tree_model_get(GTK_TREE_MODEL(store), match_iter, 0, &str_data, -1);
     if(str_data && !strcmp(str_data, name)) {
       g_free(str_data);
-      return iter;
+      return TRUE;
     }
     g_free(str_data);
-    valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), iter);
+    valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), match_iter);
   }
-
-  return NULL;
+  return FALSE;
 }
 
-char *path_tokenizer(char **name) {
-  char *token = *name;
-  printf("tokenizer: %s\n", token);
-  char *rest = strchr(*name, '/');
-  if(rest == NULL) {
-    return token;
-  }
-  rest[0] = 0;
-  rest++;
-  printf("End of tokenizer: %s, %s\n", token, rest);
-  *name = rest;
-  return token;
-}
+void add_recursive(GtkTreeStore *store, GtkTreeIter *parent_iter,
+                   GtkTreeIter *iter, const char *name, struct s_info *serviceinfo) {
+  printf("add_recursive (%s)\n", name);
+  char *rest = malloc(strlen(name) + 1);
+  strcpy(rest, name);
+  char *tok = path_tokenizer(&rest);
 
-void add_recursive(GtkTreeStore *store, GtkTreeIter *parent_iter, char *name,
-		    	  struct s_info *serviceinfo) {
-  char *tok = path_tokenizer(&name);
-  GtkTreeIter *child_iter = find_service(store, parent_iter, tok);
-
-  if(!child_iter) { //The node has to be created
-    printf("Prepending node for %s\n", tok);
-    if(parent_iter == NULL)
-    	printf("Parent_iter is NULL!\n");
-    gtk_tree_store_prepend(store, child_iter, parent_iter);
-    printf("...\n");
-	//iter = &child;
-    gtk_tree_store_set(store, child_iter, 0, tok, -1);
-  }
-
-  printf("Left to handle: %s\n", name);
-
-  if(strcmp(tok, name))  { //This is not the last part
-    add_recursive(store, child_iter, name, serviceinfo);
-  } else {
-    ;
+  if(!gtk_tree_model_iter_children(GTK_TREE_MODEL(store), iter, parent_iter) ||
+     !find_child(store, parent_iter, iter, tok)) { //The node has to be created
+    gtk_tree_store_prepend(store, iter, parent_iter);
+    printf("Inserted node for %s on depth %i\n", tok, gtk_tree_store_iter_depth(store, iter));
+    gtk_tree_store_set(store, iter, 0, tok, 2, NULL, 4, NULL, -1);
   }
-}
 
-void add_to_tree(GtkTreeStore *store, GtkTreeIter *iter,
-                 char *name, struct s_info *serviceinfo) {
-  printf("Adding %s to tree\n", name);
-  if(gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), iter)) {
-    add_recursive(store, iter, name, serviceinfo);
+  printf("Left to handle: %s\n", rest);
+
+  if(rest)  { //This is not the last part
+    parent_iter = gtk_tree_iter_copy(iter);  
+    add_recursive(store, parent_iter, iter, rest, serviceinfo);
+    gtk_tree_iter_free(parent_iter);
   }
+  free(tok);
 }
 
 void recursive_scan(char* path, GtkTreeStore *store) {
@@ -212,22 +201,25 @@
             strcpy(serviceinfo->startline, buffer);
             char *tok = strtok(buffer, " ");
             tok = strtok(NULL, " ");
-
-			//add_to_tree(store, &iter, tok, serviceinfo);
-
-            gtk_tree_store_prepend (store, &iter, NULL);
-            gtk_tree_store_set (store, &iter, 0, tok, 1, "daemon", 2, NULL, 4, serviceinfo, -1);
+			add_recursive(store, NULL, &iter, tok, serviceinfo);
+            //gtk_tree_store_prepend (store, &iter, NULL);
+            gtk_tree_store_set (store, &iter, 1, "daemon", 2, NULL, 4, serviceinfo, -1);
+            serviceinfo->fullname = malloc(strlen(tok) + 1);
+            strcpy(serviceinfo->fullname, tok);
             serviceinfo->type = DAEMON;
-	    serviceinfo->file_content = file_content;
-	    file_content->references++;
+	        serviceinfo->file_content = file_content;
+	        file_content->references++;
           } else if(strstr(buffer, "service") == buffer) {
             serviceinfo = malloc(sizeof(struct s_info));
             serviceinfo->startline = malloc(strlen(buffer) + 1);
             strcpy(serviceinfo->startline, buffer);
             char *tok = strtok(buffer, " ");
             tok = strtok(NULL, " ");
-            gtk_tree_store_prepend (store, &iter, NULL);
-            gtk_tree_store_set (store, &iter, 0, tok, 1, "service", 2, NULL, 4, serviceinfo, -1);
+            add_recursive(store, NULL, &iter, tok, serviceinfo);
+            //gtk_tree_store_prepend (store, &iter, NULL);
+            gtk_tree_store_set (store, &iter, 1, "service", 2, NULL, 4, serviceinfo, -1);
+            serviceinfo->fullname = malloc(strlen(tok) + 1);
+            strcpy(serviceinfo->fullname, tok);;
             serviceinfo->type = SERVICE;
 	    serviceinfo->file_content = file_content;
 	    file_content->references++;
@@ -237,8 +229,11 @@
             strcpy(serviceinfo->startline, buffer);
             char *tok = strtok(buffer, " ");
             tok = strtok(NULL, " ");
-            gtk_tree_store_prepend (store, &iter, NULL);
-            gtk_tree_store_set (store, &iter, 0, tok, 1, "virtual", 2, NULL, 4, serviceinfo, -1);
+            add_recursive(store, NULL, &iter, tok, serviceinfo);
+            //gtk_tree_store_prepend (store, &iter, NULL);
+            gtk_tree_store_set (store, &iter, 1, "virtual", 2, NULL, 4, serviceinfo, -1);
+            serviceinfo->fullname = malloc(strlen(tok) + 1);
+            strcpy(serviceinfo->fullname, tok);
             serviceinfo->type = VIRTUAL;
 	    serviceinfo->file_content = file_content;
 	    file_content->references++;
@@ -249,7 +244,7 @@
       } else if(!fnmatch("*.runlevel", namelist[n]->d_name, 0)) {
 	file_content = malloc(sizeof(struct s_file_content));
 	file_content->data = malloc(buff.st_size + 1);
-        file = fopen(fullpath, "rt");   /* Open file. */
+        file = fopen(fullpath, "rt");
         if (file == NULL)
           continue;
 	fread(file_content->data, buff.st_size, 1, file);
@@ -259,16 +254,18 @@
 	file_content->references = 1;
         serviceinfo = malloc(sizeof(struct s_info));
         namelist[n]->d_name[strlen(namelist[n]->d_name)-9] = 0;
-        gtk_tree_store_prepend (store, &iter, NULL);
-        gtk_tree_store_set(store, &iter, 0, namelist[n]->d_name, 1, "runlevel", 
-			   2, NULL, 4, serviceinfo, -1);
+        add_recursive(store, NULL, &iter, namelist[n]->d_name, serviceinfo);
+        //gtk_tree_store_prepend (store, &iter, NULL);
+        gtk_tree_store_set(store, &iter, 1, "runlevel", 2, NULL, 4, serviceinfo, -1);
+        serviceinfo->fullname = malloc(strlen(namelist[n]->d_name) + 1);
+        strcpy(serviceinfo->fullname, namelist[n]->d_name);
         serviceinfo->type = RUNLEVEL;
         serviceinfo->startline = NULL;
 	serviceinfo->file_content = file_content;
       } else if(!fnmatch("*.virtual", namelist[n]->d_name, 0)) {
 	file_content = malloc(sizeof(struct s_file_content));
 	file_content->data = malloc(buff.st_size + 1);
-        file = fopen(fullpath, "rt");   /* Open file. */
+        file = fopen(fullpath, "rt");
         if (file == NULL)
           continue;
 	fread(file_content->data, buff.st_size, 1, file);
@@ -278,9 +275,11 @@
 	file_content->references = 1;
         serviceinfo = malloc(sizeof(struct s_info));
         namelist[n]->d_name[strlen(namelist[n]->d_name)-8] = 0;
-        gtk_tree_store_prepend (store, &iter, NULL);
-        gtk_tree_store_set(store, &iter, 0, namelist[n]->d_name, 1, "virtual", 
-			   2, NULL, 4, serviceinfo, -1);
+        add_recursive(store, NULL, &iter, namelist[n]->d_name, serviceinfo);
+        //gtk_tree_store_prepend (store, &iter, NULL);
+        gtk_tree_store_set(store, &iter, 1, "virtual", 2, NULL, 4, serviceinfo, -1);
+		serviceinfo->fullname = malloc(strlen(namelist[n]->d_name) + 1);
+        strcpy(serviceinfo->fullname, namelist[n]->d_name);
         serviceinfo->type = VIRTUALFILE;
         serviceinfo->startline = NULL;
 	serviceinfo->file_content = file_content;
@@ -301,7 +300,6 @@
 
   GtkTreeIter iter;
   GtkTreeModel *model;
-  gchar *servicename;
   FILE *stream;
   gchar res;
   int depth = 1;
@@ -309,7 +307,11 @@
   
   gtk_tree_selection_get_selected(selected, &model, &iter);
   struct s_info *serviceinfo;
-  gtk_tree_model_get(model, &iter, 0, &servicename, 4, &serviceinfo, -1);
+  gtk_tree_model_get(model, &iter, 4, &serviceinfo, -1);
+  if(!serviceinfo) {
+    gtk_text_buffer_set_text(buffer, _("No file associated with that!"), -1);
+    return FALSE;
+  }
   struct s_file_content *file_content = serviceinfo->file_content;
 
   if(!file_content) {
@@ -347,8 +349,7 @@
   } while(TRUE);
   gtk_text_buffer_get_bounds(buffer, &start, &end);
 
-  gtk_window_set_title(GTK_WINDOW(initconf_show_service), servicename);
-  g_free(servicename);
+  gtk_window_set_title(GTK_WINDOW(initconf_show_service), serviceinfo->fullname);
 
   return TRUE;
 }

Modified: initng-gui/initng-conf-gtk/src/serviceparser.h
==============================================================================
--- initng-gui/initng-conf-gtk/src/serviceparser.h	(original)
+++ initng-gui/initng-conf-gtk/src/serviceparser.h	Thu Jun  1 16:09:29 2006
@@ -53,8 +53,10 @@
   char *startline;   //First line of service in file
   e_is status_id;    //Status of service
   struct s_file_content *file_content; //Pointer to file contents
+  char *fullname;    //Full name of service/daemon
 };
 
-
+void add_recursive(GtkTreeStore *store, GtkTreeIter *parent_iter,
+                   GtkTreeIter *iter, const char *name, struct s_info *serviceinfo);
 
 #endif


More information about the Initng-svn mailing list