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:
parent
0fffb9efd3
commit
f83e0694be
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue