/* $Id: project.c,v 1.1 2011/11/28 04:51:40 khorben Exp $ */ /* Copyright (c) 2011 Pierre Pronchery */ /* This file is part of DeforaOS Devel GEDI */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /* FIXME: * - make sure all pathnames point to the top directory * - load the configuration by appending "/project.conf" as required */ #include #include #include #include "project.h" /* Project */ /* private */ /* types */ struct _Project { String * pathname; /* project's top directory */ Config * config; /* widgets */ /* properties window */ GtkWidget * pr_window; }; /* public */ /* functions */ /* project_new */ Project * project_new(void) { Project * p; if((p = object_new(sizeof(*p))) == NULL) return NULL; p->pathname = NULL; p->config = config_new(); p->pr_window = NULL; if(p->config == NULL) { project_delete(p); return NULL; } return p; } /* project_delete */ void project_delete(Project * project) { string_delete(project->pathname); if(project->config != NULL) config_delete(project->config); object_delete(project); } /* accessors */ /* project_get_package */ char const * project_get_package(Project * project) { return config_get(project->config, NULL, "package"); } /* project_get_pathname */ char const * project_get_pathname(Project * project) { return project->pathname; } /* project_set_pathname */ int project_set_pathname(Project * project, char const * pathname) { String * p; if((p = string_new(pathname)) == NULL) return -1; string_delete(project->pathname); project->pathname = p; return 0; } /* useful */ /* project_load */ int project_load(Project * project, char const * pathname) { Config * config; String * p; char const * package; char const * version; config = config_new(); p = string_new(pathname); if(config != NULL && p != NULL && config_load(config, p) == 0) { package = config_get(config, NULL, "package"); version = config_get(config, NULL, "version"); if(package != NULL && version != NULL) { string_delete(project->pathname); project->pathname = p; config_delete(project->config); project->config = config; return 0; } error_set_code(1, "%s", "Project file is missing" " package name and version"); } return -1; } /* project_save */ int project_save(Project * project) { if(project->pathname == NULL) return -error_set_code(1, "%s", "No path defined for the project"); /* FIXME implement */ return -error_set_code(1, "%s", "Not implemented yet"); } /* project_properties */ static void _properties_new(Project * p); static gboolean _on_properties_closex(gpointer data); void project_properties(Project * project) { if(project->pr_window == NULL) _properties_new(project); gtk_widget_show_all(project->pr_window); } static void _properties_new(Project * p) { p->pr_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(p->pr_window), 4); gtk_window_set_title(GTK_WINDOW(p->pr_window), "Project properties"); g_signal_connect_swapped(G_OBJECT(p->pr_window), "delete-event", G_CALLBACK(_on_properties_closex), p); /* FIXME */ } static gboolean _on_properties_closex(gpointer data) { Project * p = data; gtk_widget_hide(p->pr_window); return TRUE; }