[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