Tidied up layour of control panel window, removed unused code from panel

git-svn-id: svn://svn.savannah.nongnu.org/lash/trunk@3 1de19dc7-4e3f-0410-a61d-eddf686bf0b7
This commit is contained in:
Dave Robillard 2005-09-13 10:04:43 +00:00
parent 0fffb9efd3
commit f83e0694be
6 changed files with 122 additions and 406 deletions

View File

@ -1,10 +1,10 @@
/* LASH Control Panel
* Copyright (C) 2005 Dave Robillarrd <drobilla@connect.carleton.ca>
* Copyright(C) 2005 Dave Robillarrd <drobilla@connect.carleton.ca>
*
* 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; either version 2 of the License, or
* (at your option) any later version.
*(at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -27,75 +27,68 @@
#include "panel.h"
const char * filename = "lash_panel.data";
static void print_help ()
static void
print_help()
{
printf("LASH Control Panel version %s\n", PACKAGE_VERSION);
printf("Copyright (C) 2005 Dave Robillard <drobilla@connect.carleton.ca>\n");
printf
("Copyright(C) 2005 Dave Robillard <drobilla@connect.carleton.ca>\n");
printf("\n");
printf("This program comes with ABSOLUTELY NO WARRANTY. You are licensed to use it\n");
printf("under the terms of the GNU General Public License, version 2 or later. See\n");
printf
("This program comes with ABSOLUTELY NO WARRANTY. You are licensed to use it\n");
printf
("under the terms of the GNU General Public License, version 2 or later. See\n");
printf("the COPYING file that came with this software for details.\n");
printf("\n");
printf(" -h, --help Display this help info\n");
printf(" -f, --filename <filename> Store data with LASH using the specified file name\n");
printf(" --lash-port=<port> Connect to server on port <port>\n");
printf("\n");
}
int
main(int argc, char ** argv)
main(int argc, char **argv)
{
lash_args_t * lash_args;
lash_client_t * lash_client;
panel_t * panel;
lash_args_t *lash_args;
lash_client_t *lash_client;
panel_t *panel;
int opt;
const char * options = "hf:";
const char *options = "h:";
struct option long_options[] = {
{ "help", 0, NULL, 'h' },
{ "filename", 1, NULL, 'f' },
{ 0, 0, 0, 0 }
{"help", 0, NULL, 'h'},
{0, 0, 0, 0}
};
lash_args = lash_extract_args (&argc, &argv);
lash_args = lash_extract_args(&argc, &argv);
gtk_set_locale ();
gtk_init (&argc, &argv);
gtk_set_locale();
gtk_init(&argc, &argv);
while ((opt = getopt_long (argc, argv, options, long_options, NULL)) != -1) {
while ((opt = getopt_long(argc, argv, options, long_options, NULL)) != -1) {
switch (opt) {
case 'f':
filename = optarg;
break;
case 'h':
print_help ();
exit (0);
print_help();
exit(0);
break;
case ':':
case '?':
print_help ();
exit (1);
print_help();
exit(1);
break;
}
}
lash_client = lash_init(lash_args, "LASH Control Panel",
LASH_Server_Interface, LASH_PROTOCOL (2,0));
LASH_Server_Interface, LASH_PROTOCOL(2, 0));
if (!lash_client) {
fprintf (stderr, "%s: could not initialise LASH\n", __FUNCTION__);
exit (1);
fprintf(stderr, "%s: could not initialise LASH\n", __FUNCTION__);
exit(1);
}
panel = panel_create(lash_client);
panel = panel_create (lash_client);
gtk_main ();
gtk_main();
return 0;
}

View File

@ -34,21 +34,16 @@ void quit_cb(GtkButton * button, void * data);
project_t*
get_project(panel_t* panel, const char* const name)
{
char* search = NULL;
project_t* project = NULL;
GtkTreeModel* tree_model = GTK_TREE_MODEL(panel->projects);
GtkTreeIter iter;
if (gtk_tree_model_get_iter_first(tree_model, &iter)) do {
gtk_tree_model_get(tree_model, &iter, PROJECT_NAME_COLUMN, &search, -1);
gtk_tree_model_get(tree_model, &iter, PROJECT_PROJECT_COLUMN, &project, -1);
if (!strcmp(search, name)) {
gtk_tree_model_get(tree_model, &iter, PROJECT_PROJECT_COLUMN, &project, -1);
free(search);
if (!strcmp(name, project->name))
return project;
}
free(search);
} while (gtk_tree_model_iter_next(tree_model, &iter));
fprintf(stderr, "Error: Unable to find project '%s'!", name);
@ -97,11 +92,10 @@ event_project_add(panel_t* panel, lash_event_t* event)
project = project_create(panel->lash_client, name);
gtk_list_store_set(panel->projects, &iter,
PROJECT_NAME_COLUMN, name,
PROJECT_PROJECT_COLUMN, project,
-1);
gtk_widget_unparent(project->box);
/*gtk_widget_unparent(project->box);*/
project->page_number = gtk_notebook_append_page(GTK_NOTEBOOK(panel->project_notebook),
project->box, project->tab_label);
@ -112,7 +106,6 @@ event_project_add(panel_t* panel, lash_event_t* event)
void
event_project_remove(panel_t* panel, lash_event_t* event)
{
char* search = NULL;
const char* name = lash_event_get_string(event);
project_t* project = get_project(panel, name);
GtkTreeModel* tree_model = GTK_TREE_MODEL(panel->projects);
@ -122,17 +115,14 @@ event_project_remove(panel_t* panel, lash_event_t* event)
if (project != NULL)
if (gtk_tree_model_get_iter_first(tree_model, &iter)) do {
gtk_tree_model_get(tree_model, &iter, PROJECT_NAME_COLUMN, &search, -1);
gtk_tree_model_get(tree_model, &iter, PROJECT_PROJECT_COLUMN, &project, -1);
if (!strcmp(search, name)) {
if (!strcmp(name, project->name)) {
gtk_list_store_remove(panel->projects, &iter);
free(search);
gtk_notebook_remove_page(GTK_NOTEBOOK(panel->project_notebook), project->page_number);
project_destroy(project);
break;
}
free(search);
} while (gtk_tree_model_iter_next(tree_model, &iter));
}
@ -264,53 +254,17 @@ idle_cb(gpointer data)
panel =(panel_t *) data;
while((event = lash_get_event(panel->lash_client)) ) {
while ((event = lash_get_event(panel->lash_client)) ) {
deal_with_event(panel, event);
}
/*while((config = lash_get_config(panel->lash_client)) ) {
/*while ((config = lash_get_config(panel->lash_client)) ) {
add_config(panel, config);
}*/
return TRUE;
}
/*
void
save_project_cb(GtkButton * button, void * data)
{
lash_client_t * client;
lash_event_t * event;
client =(lash_client_t *) data;
event = lash_event_new_with_type(LASH_Save);
lash_send_event(client, event);
}*/
const char *
get_filename(panel_t * panel)
{
static GtkWidget * dialog = NULL;
static char * file = NULL;
int response;
if (!dialog)
dialog = gtk_file_selection_new("Select file");
if (file) {
free(file);
file = NULL;
}
response = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_hide(dialog);
if (response != GTK_RESPONSE_OK)
return NULL;
file = lash_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(dialog)));
return file;
}
void
quit_cb(GtkButton * button, void * data)
@ -344,149 +298,6 @@ open_cb(GtkButton * button, void* data)
gtk_widget_destroy(open_dialog);
}
/*
gboolean
session_exists(panel_t * panel, const char * key)
{
GtkTreeIter iter;
GtkTreeModel * tree_model;
gboolean found = FALSE;
gchar * existing_key;
tree_model = GTK_TREE_MODEL(panel->projects);
if (gtk_tree_model_get_iter_first(tree_model, &iter))
do {
gtk_tree_model_get(tree_model, &iter, PROJECT_NAME_COLUMN, &existing_key, -1);
if (strcmp(existing_key, key) == 0)
found = TRUE;
free(existing_key);
if (found)
return TRUE;
} while(gtk_tree_model_iter_next(tree_model, &iter));
return FALSE;
}
*/
/*
void
set_project_name(panel_t* panel, const char* old_name, const char* new_name)
{
lash_event_t* event;
event = lash_event_new_with_type(LASH_Project_Name);
lash_event_set_type(event, LASH_Project_Name);
lash_event_set_project(event, old_name);
lash_event_set_string(event, new_name);
lash_send_event(panel->lash_client, event);
printf("Told server to set project %s name to '%s'\n", old_name, new_name);
}
void
set_project_dir(panel_t* panel, const char* project, const char* dir)
{
lash_event_t* event;
event = lash_event_new_with_type(LASH_Project_Dir);
lash_event_set_project(event, project);
lash_event_set_string(event, dir);
lash_send_event(panel->lash_client, event);
printf("Told server to set project %s dir to '%s'\n", project, dir);
}
void
save_session(panel_t* panel, const char* project)
{
lash_event_t* event;
event = lash_event_new_with_type(LASH_Save);
lash_event_set_project(event, project);
lash_send_event(panel->lash_client, event);
printf("Told server to save project %s\n", project);
}
*/
#if 0
void
edit_session(panel_t* panel, GtkTreeIter* iter)
{
char* project = NULL;
char* new_name = NULL;
char* dir = NULL;
gint response = GTK_RESPONSE_NONE;
gtk_tree_model_get(GTK_TREE_MODEL(panel->projects), iter,
PROJECT_NAME_COLUMN, &project,
PROJECT_DIR_COLUMN, &dir,
-1);
gtk_entry_set_text(GTK_ENTRY(panel->project_editor_name), project);
gtk_entry_set_text(GTK_ENTRY(panel->project_editor_dir), dir);
free(dir);
response = gtk_dialog_run(GTK_DIALOG(panel->project_editor));
gtk_widget_hide(panel->project_editor);
if (response == GTK_RESPONSE_ACCEPT) {
/*gtk_list_store_set(panel->projects, iter,
PROJECT_DIR_COLUMN, gtk_entry_get_text(GTK_ENTRY(panel->project_editor_dir)),
-1); */
new_name = (char*)gtk_entry_get_text(GTK_ENTRY(panel->project_editor_name));
dir = (char*)gtk_entry_get_text(GTK_ENTRY(panel->project_editor_dir));
set_project_dir(panel, project, dir); /* must be first because of name change */
set_project_name(panel, project, new_name);
/*if (!session_exists(client, name))
gtk_list_store_set(panel->projects, iter, PROJECT_NAME_COLUMN, name, -1);
*/
}
free(project);
}
#endif
/*
gboolean
get_selected_iter(panel_t * client, GtkTreeIter * iter)
{
GtkTreeSelection * selection;
GtkTreeModel * model;
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(client->project_list));
return gtk_tree_selection_get_selected(selection, &model, iter);
}
*/
/*
const char *
create_new_key(panel_t * panel)
{
static char key[32];
unsigned long i;
gboolean found = TRUE;
for(i = 1;
found && sprintf(key, "data-%ld", i);
i++) {
found = session_exists(panel, key);
}
return key;
}
*/
panel_t *
panel_create(lash_client_t * lash_client)
@ -494,36 +305,18 @@ panel_create(lash_client_t * lash_client)
panel_t * panel;
GtkWidget * main_box;
/*GtkWidget * project_label;*/
GtkWidget * menu_bar;
GtkWidget * menu;
GtkWidget * root_menu;
GtkWidget * quit_menu_item;
GtkWidget * open_menu_item;
/*GtkWidget * filename_frame;
GtkWidget * filename_label;
GtkWidget * project_and_file_pane; */
/*GtkWidget * file_frame;
GtkWidget * file_scroll;
GtkWidget * file_text;*/
guint status_context;
/*GtkWidget * project_editor_table;
GtkWidget * project_editor_name_label;
GtkWidget * project_editor_dir_label;*/
panel = lash_malloc(sizeof(panel_t));
panel->lash_client = lash_client;
panel->projects = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
panel->projects = gtk_list_store_new(PROJECT_NUM_COLUMNS, G_TYPE_POINTER);
panel->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(panel->window), WINDOW_TITLE);
@ -560,29 +353,6 @@ panel_create(lash_client_t * lash_client)
gtk_menu_shell_append(GTK_MENU_SHELL (menu_bar), root_menu);
/*
* filename frame
*/
/*filename_frame = gtk_frame_new("File name");
gtk_widget_show(filename_frame);
gtk_container_set_border_width(GTK_CONTAINER(filename_frame), 4);
gtk_box_pack_start(GTK_BOX(main_box), filename_frame, FALSE, TRUE, 0);
filename_label = gtk_label_new(filename);
gtk_widget_show(filename_label);
gtk_misc_set_padding(GTK_MISC(filename_label), 8, 4);
gtk_misc_set_alignment(GTK_MISC(filename_label), 0.0, 0.5);
gtk_container_add(GTK_CONTAINER(filename_frame), filename_label);*/
/*
* config and file pane
*/
/*project_and_file_pane = gtk_vpaned_new();
gtk_widget_show(project_and_file_pane);
gtk_box_pack_start(GTK_BOX(main_box), project_and_file_pane, TRUE, TRUE, 0);
*/
/*
* projects notebook
*/
@ -591,7 +361,6 @@ panel_create(lash_client_t * lash_client)
gtk_widget_show(panel->project_notebook);
gtk_box_pack_start(GTK_BOX(main_box), panel->project_notebook, TRUE, TRUE, 0);
/*
* status bar
*/
@ -604,68 +373,6 @@ panel_create(lash_client_t * lash_client)
g_strdup_printf("Connected to server %s", lash_get_server_name(lash_client)));
gtk_box_pack_start(GTK_BOX(main_box), panel->status_bar, FALSE, TRUE, 0);
/*
* config editor
*/
/*panel->project_editor =
gtk_dialog_new_with_buttons("LASH Session Editor",
GTK_WINDOW(panel->window),
GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_CANCEL,
GTK_RESPONSE_REJECT,
GTK_STOCK_OK,
GTK_RESPONSE_ACCEPT,
NULL);
project_editor_table = gtk_table_new(2, 2, FALSE);
gtk_widget_show(project_editor_table);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(panel->project_editor)->vbox),
project_editor_table);
gtk_container_set_border_width(GTK_CONTAINER(project_editor_table), 4);
project_editor_name_label = gtk_label_new("Name");
gtk_misc_set_alignment(GTK_MISC(project_editor_name_label), 0.5, 0.5);
gtk_widget_show(project_editor_name_label);
project_editor_dir_label = gtk_label_new("Directory");
gtk_misc_set_alignment(GTK_MISC(project_editor_dir_label), 0.5, 0.5);
gtk_widget_show(project_editor_dir_label);
panel->project_editor_name = gtk_entry_new();
gtk_widget_show(panel->project_editor_name);
panel->project_editor_dir = gtk_entry_new();
gtk_widget_show(panel->project_editor_dir);
gtk_table_attach(GTK_TABLE(project_editor_table),
project_editor_name_label,
0, 1, 0, 1,
GTK_FILL,
GTK_FILL,
4, 0);
gtk_table_attach(GTK_TABLE(project_editor_table),
project_editor_dir_label,
0, 1, 1, 2,
GTK_FILL,
GTK_FILL,
4, 0);
gtk_table_attach(GTK_TABLE(project_editor_table),
panel->project_editor_name,
1, 2, 0, 1,
GTK_FILL|GTK_EXPAND,
GTK_FILL|GTK_EXPAND,
4, 0);
gtk_table_attach(GTK_TABLE(project_editor_table),
panel->project_editor_dir,
1, 2, 1, 2,
GTK_FILL|GTK_EXPAND,
GTK_FILL|GTK_EXPAND,
4, 0);
*/
gtk_timeout_add(1000, idle_cb, panel);
gtk_widget_show(panel->window);

View File

@ -27,7 +27,6 @@ typedef struct _panel panel_t;
enum
{
PROJECT_NAME_COLUMN,
PROJECT_PROJECT_COLUMN,
PROJECT_NUM_COLUMNS
};
@ -35,21 +34,16 @@ enum
struct _panel
{
lash_client_t * lash_client;
lash_client_t* lash_client;
GtkListStore * projects;
GtkTextBuffer * file_data;
GtkWidget * window;
GtkWidget * status_bar;
GtkWidget * project_notebook;
/*GtkWidget * project_editor;
GtkWidget * project_editor_name;
GtkWidget * project_editor_dir;*/
GtkListStore* projects;
GtkWidget* window;
GtkWidget* status_bar;
GtkWidget* project_notebook;
};
extern const char * filename;
panel_t * panel_create (lash_client_t * client);
panel_t* panel_create (lash_client_t * client);

View File

@ -45,7 +45,7 @@ close_cb(GtkButton * button, void * data)
lash_event_set_project(event, project->name);
lash_send_event(project->lash_client, event);
printf ("Told server to close project %s\n", project->name);
printf("Told server to close project %s\n", project->name);
}
@ -72,12 +72,32 @@ set_dir_cb(GtkButton * button, void* data)
lash_event_set_project(event, project->name);
lash_event_set_string(event, filename);
lash_send_event(project->lash_client, event);
printf("Told server to set project directory %s\n", filename);
}
gtk_widget_destroy(open_dialog);
}
void
set_name_cb(GtkEntry* entry, void* data)
{
project_t* project = (project_t*)data;
lash_event_t* event = NULL;
const char* new_name = gtk_entry_get_text(GTK_ENTRY(project->name_entry));
printf("Name changed: %s\n", new_name);
event = lash_event_new_with_type(LASH_Project_Name);
lash_event_set_project(event, project->name);
lash_event_set_string(event, new_name);
lash_send_event(project->lash_client, event);
}
/* Project */
@ -104,39 +124,66 @@ project_create(lash_client_t* lash_client, const char* const name)
gtk_misc_set_alignment(GTK_MISC(project->properties_label), 0.0, 0.5);
gtk_label_set_use_markup(GTK_LABEL(project->properties_label), TRUE);
gtk_box_pack_start(GTK_BOX(project->box), project->properties_label, FALSE, FALSE, 0);
/* Properties table */
project->properties_table = gtk_table_new(2, 3, FALSE);
gtk_widget_show(project->properties_table);
gtk_box_pack_start(GTK_BOX(project->box), project->properties_table, FALSE, TRUE, 0);
/* Name label */
project->name_box = gtk_hbox_new(FALSE, 3);
gtk_widget_show(project->name_box);
gtk_box_pack_start(GTK_BOX(project->box), project->name_box, FALSE, TRUE, 0);
project->name_label = gtk_label_new(" Name: ");
gtk_widget_show(project->name_label);
gtk_box_pack_start(GTK_BOX(project->name_box), project->name_label, FALSE, FALSE, 0);
gtk_table_attach(GTK_TABLE(project->properties_table), project->name_label, 0, 1, 0, 1,
0, 0, 2, 2);
project->name_entry = gtk_entry_new();
gtk_entry_set_editable(GTK_ENTRY(project->name_entry), FALSE);
gtk_entry_set_editable(GTK_ENTRY(project->name_entry), TRUE);
gtk_widget_show(project->name_entry);
gtk_box_pack_start(GTK_BOX(project->name_box), project->name_entry, TRUE, TRUE, 0);
g_signal_connect(G_OBJECT(project->name_entry), "activate", G_CALLBACK(set_name_cb), project);
gtk_table_attach(GTK_TABLE(project->properties_table), project->name_entry, 1, 2, 0, 1,
GTK_EXPAND|GTK_FILL, 0, 2, 2);
project->set_name_button = gtk_button_new_with_label("Apply");
gtk_widget_show(project->set_name_button);
g_signal_connect(G_OBJECT(project->set_name_button), "clicked", G_CALLBACK(set_name_cb), project);
gtk_table_attach(GTK_TABLE(project->properties_table), project->set_name_button, 2, 3, 0, 1,
GTK_FILL, GTK_FILL, 2, 2);
/* Directory label */
project->dir_box = gtk_hbox_new(FALSE, 3);
gtk_widget_show(project->dir_box);
gtk_box_pack_start(GTK_BOX(project->box), project->dir_box, FALSE, TRUE, 0);
project->dir_label = gtk_label_new(" Directory: ");
gtk_widget_show(project->dir_label);
gtk_box_pack_start(GTK_BOX(project->dir_box), project->dir_label, FALSE, FALSE, 0);
gtk_table_attach(GTK_TABLE(project->properties_table), project->dir_label, 0, 1, 1, 2,
0, 0, 2, 2);
project->dir_entry = gtk_entry_new();
gtk_entry_set_editable(GTK_ENTRY(project->dir_entry), FALSE);
gtk_widget_show(project->dir_entry);
gtk_box_pack_start(GTK_BOX(project->dir_box), project->dir_entry, TRUE, TRUE, 0);
gtk_table_attach(GTK_TABLE(project->properties_table), project->dir_entry, 1, 2, 1, 2,
GTK_EXPAND|GTK_FILL, 0, 2, 2);
project->set_dir_button = gtk_button_new_with_label("Select...");
project->set_dir_button = gtk_button_new_with_label("Browse...");
gtk_widget_show(project->set_dir_button);
g_signal_connect(G_OBJECT(project->set_dir_button), "clicked", G_CALLBACK(set_dir_cb), project);
gtk_box_pack_start(GTK_BOX(project->dir_box), project->set_dir_button, FALSE, TRUE, 6);
gtk_table_attach(GTK_TABLE(project->properties_table), project->set_dir_button, 2, 3, 1, 2,
GTK_FILL, GTK_FILL, 2, 2);
/* Buttons */
project->clients_button_box = gtk_hbutton_box_new();
gtk_widget_show(project->clients_button_box);
gtk_button_box_set_layout(GTK_BUTTON_BOX(project->clients_button_box), GTK_BUTTONBOX_SPREAD);
gtk_box_pack_start(GTK_BOX(project->box), project->clients_button_box, FALSE, TRUE, 0);
/* Close button */
project->close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
gtk_widget_show(project->close_button);
g_signal_connect(G_OBJECT(project->close_button), "clicked", G_CALLBACK(close_cb), project);
gtk_box_pack_start(GTK_BOX(project->clients_button_box), project->close_button, FALSE, TRUE, 6);
/* Save button */
project->save_button = gtk_button_new_from_stock(GTK_STOCK_SAVE);
gtk_widget_show(project->save_button);
g_signal_connect(G_OBJECT(project->save_button), "clicked", G_CALLBACK(save_cb), project);
gtk_box_pack_start(GTK_BOX(project->clients_button_box), project->save_button, FALSE, TRUE, 6);
/* Clients header */
project->clients_label = gtk_label_new("<span weight=\"bold\">Clients</span>");
@ -176,31 +223,6 @@ project_create(lash_client_t* lash_client, const char* const name)
"text", CLIENT_ID_COLUMN, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(project->clients_list), project->id_column);
/* Separator */
project->buttons_separator = gtk_hseparator_new();
gtk_widget_show(project->buttons_separator);
gtk_box_pack_start(GTK_BOX(project->box), project->buttons_separator, FALSE, TRUE, 6);
/* Buttons */
project->clients_button_box = gtk_hbutton_box_new();
gtk_widget_show(project->clients_button_box);
gtk_button_box_set_layout(GTK_BUTTON_BOX(project->clients_button_box), GTK_BUTTONBOX_SPREAD);
gtk_box_pack_start(GTK_BOX(project->box), project->clients_button_box, FALSE, TRUE, 0);
/* Close button */
project->close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
gtk_widget_show(project->close_button);
g_signal_connect(G_OBJECT(project->close_button), "clicked", G_CALLBACK(close_cb), project);
gtk_box_pack_start(GTK_BOX(project->clients_button_box), project->close_button, FALSE, TRUE, 6);
/* Save button */
project->save_button = gtk_button_new_from_stock(GTK_STOCK_SAVE);
gtk_widget_show(project->save_button);
g_signal_connect(G_OBJECT(project->save_button), "clicked", G_CALLBACK(save_cb), project);
gtk_box_pack_start(GTK_BOX(project->clients_button_box), project->save_button, FALSE, TRUE, 6);
/* Set name (field and tab label) */
project_set_name(project, name);
@ -240,10 +262,10 @@ project_set_name(project_t* project, const char* const name)
{
assert(project != NULL);
free(project->name);
project->name = malloc(sizeof(char) * (strlen(name)+1));
project->name = calloc(strlen(name)+1, sizeof(char));
strncpy(project->name, name, strlen(name)+1);
gtk_label_set_text(GTK_LABEL(project->tab_label), name);
gtk_entry_set_text(GTK_ENTRY(project->name_entry), name);
gtk_label_set_text(GTK_LABEL(project->tab_label), project->name);
gtk_entry_set_text(GTK_ENTRY(project->name_entry), project->name);
}
@ -252,8 +274,8 @@ project_set_dir(project_t* project, const char* const dir)
{
assert(project != NULL);
free(project->dir);
project->dir = malloc(sizeof(char) * (strlen(dir)+1));
project->dir = calloc(strlen(dir)+1, sizeof(char));
strncpy(project->dir, dir, strlen(dir)+1);
gtk_entry_set_text(GTK_ENTRY(project->dir_entry), dir);
gtk_entry_set_text(GTK_ENTRY(project->dir_entry), project->dir);
}

View File

@ -46,10 +46,10 @@ struct _project {
GtkWidget* tab_label;
GtkWidget* properties_label;
GtkWidget* name_box;
GtkWidget* properties_table;
GtkWidget* name_label;
GtkWidget* name_entry;
GtkWidget* dir_box;
GtkWidget* set_name_button;
GtkWidget* dir_label;
GtkWidget* dir_entry;
GtkWidget* set_dir_button;
@ -61,7 +61,6 @@ struct _project {
GtkCellRenderer* clients_renderer;
GtkTreeViewColumn* name_column;
GtkTreeViewColumn* id_column;
GtkWidget* buttons_separator;
GtkWidget* clients_button_box;
GtkWidget* save_button;
GtkWidget* close_button;

View File

@ -437,16 +437,17 @@ project_move(project_t * project, const char *new_dir)
if (strcmp(new_dir, project->directory) == 0)
return;
/* check to be sure directory does not already exist (etc) */
/* Check to be sure directory is acceptable
* FIXME: thorough enough error checking? */
DIR* dir = opendir(new_dir);
if (dir != NULL) {
fprintf(stderr, "Can not move project directory to %s - directory exists\n", new_dir);
fprintf(stderr, "Warning: directory %s exists, files may be overwritten.\n", new_dir);
closedir(dir);
return;
} else if (errno == ENOTDIR) {
/* FIXME: thorough enough error checking? */
} else if (dir == NULL && errno == ENOTDIR) {
fprintf(stderr, "Can not move project directory to %s - exists but is not a directory\n", new_dir);
return;
} else if (dir == NULL && errno == ENOENT) {
printf("Directory %s does not exist, and will be created.\n", new_dir);
}
/* close all the clients' stores */