324 |
|
|
325 |
enum { |
enum { |
326 |
PROJECT_COL_NAME = 0, |
PROJECT_COL_NAME = 0, |
327 |
|
PROJECT_COL_STATUS, |
328 |
PROJECT_COL_DESCRIPTION, |
PROJECT_COL_DESCRIPTION, |
329 |
PROJECT_COL_DATA, |
PROJECT_COL_DATA, |
330 |
PROJECT_NUM_COLS |
PROJECT_NUM_COLS |
545 |
return project; |
return project; |
546 |
} |
} |
547 |
|
|
548 |
|
// predecs |
549 |
|
void project_get_status_icon_stock_id(project_t *project, gchar **stock_id); |
550 |
|
|
551 |
static void on_project_new(GtkButton *button, gpointer data) { |
static void on_project_new(GtkButton *button, gpointer data) { |
552 |
select_context_t *context = (select_context_t*)data; |
select_context_t *context = (select_context_t*)data; |
553 |
project_t **project = &context->project; |
project_t **project = &context->project; |
558 |
gtk_tree_view_get_model(GTK_TREE_VIEW(context->view)); |
gtk_tree_view_get_model(GTK_TREE_VIEW(context->view)); |
559 |
|
|
560 |
GtkTreeIter iter; |
GtkTreeIter iter; |
561 |
|
gchar *status_stock_id = NULL; |
562 |
|
project_get_status_icon_stock_id(*project, &status_stock_id); |
563 |
gtk_list_store_append(GTK_LIST_STORE(model), &iter); |
gtk_list_store_append(GTK_LIST_STORE(model), &iter); |
564 |
gtk_list_store_set(GTK_LIST_STORE(model), &iter, |
gtk_list_store_set(GTK_LIST_STORE(model), &iter, |
565 |
PROJECT_COL_NAME, (*project)->name, |
PROJECT_COL_NAME, (*project)->name, |
566 |
|
PROJECT_COL_STATUS, status_stock_id, |
567 |
PROJECT_COL_DESCRIPTION, (*project)->desc, |
PROJECT_COL_DESCRIPTION, (*project)->desc, |
568 |
PROJECT_COL_DATA, *project, |
PROJECT_COL_DATA, *project, |
569 |
-1); |
-1); |
614 |
GtkTreeModel *model; |
GtkTreeModel *model; |
615 |
GtkTreeIter iter; |
GtkTreeIter iter; |
616 |
|
|
617 |
/* description may have changed, so update list */ |
/* description etc. may have changed, so update list */ |
618 |
GtkTreeSelection *selection = |
GtkTreeSelection *selection = |
619 |
gtk_tree_view_get_selection(GTK_TREE_VIEW(context->view)); |
gtk_tree_view_get_selection(GTK_TREE_VIEW(context->view)); |
620 |
g_assert(gtk_tree_selection_get_selected(selection, &model, &iter)); |
g_assert(gtk_tree_selection_get_selected(selection, &model, &iter)); |
621 |
|
|
622 |
// gtk_tree_model_get(model, &iter, PROJECT_COL_DATA, &project, -1); |
// gtk_tree_model_get(model, &iter, PROJECT_COL_DATA, &project, -1); |
623 |
|
gchar *status_stock_id = NULL; |
624 |
|
project_get_status_icon_stock_id(project, &status_stock_id); |
625 |
gtk_list_store_set(GTK_LIST_STORE(model), &iter, |
gtk_list_store_set(GTK_LIST_STORE(model), &iter, |
626 |
PROJECT_COL_NAME, project->name, |
PROJECT_COL_NAME, project->name, |
627 |
|
PROJECT_COL_STATUS, status_stock_id, |
628 |
PROJECT_COL_DESCRIPTION, project->desc, |
PROJECT_COL_DESCRIPTION, project->desc, |
629 |
-1); |
-1); |
630 |
|
|
635 |
view_selected(context, project); |
view_selected(context, project); |
636 |
} |
} |
637 |
|
|
638 |
|
|
639 |
|
gboolean project_osm_present(project_t *project) { |
640 |
|
char *osm_name = g_strdup_printf("%s/%s.osm", project->path, project->name); |
641 |
|
gboolean is_present = g_file_test(osm_name, G_FILE_TEST_EXISTS); |
642 |
|
g_free(osm_name); |
643 |
|
return is_present; |
644 |
|
} |
645 |
|
|
646 |
|
void project_get_status_icon_stock_id(project_t *project, gchar **stock_id) { |
647 |
|
*stock_id = (! project_osm_present(project)) ? GTK_STOCK_DIALOG_WARNING |
648 |
|
: diff_present(project) ? GTK_STOCK_PROPERTIES |
649 |
|
: GTK_STOCK_FILE; |
650 |
|
// TODO: check for outdatedness too. Which icon to use? |
651 |
|
} |
652 |
|
|
653 |
static GtkWidget *project_list_widget(select_context_t *context) { |
static GtkWidget *project_list_widget(select_context_t *context) { |
654 |
GtkWidget *vbox = gtk_vbox_new(FALSE,3); |
GtkWidget *vbox = gtk_vbox_new(FALSE,3); |
655 |
context->view = gtk_tree_view_new(); |
context->view = gtk_tree_view_new(); |
664 |
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(context->view), |
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(context->view), |
665 |
-1, _("Name"), renderer, "text", PROJECT_COL_NAME, NULL); |
-1, _("Name"), renderer, "text", PROJECT_COL_NAME, NULL); |
666 |
|
|
667 |
|
/* --- State flags column --- */ |
668 |
|
GtkCellRenderer *pixbuf_renderer = gtk_cell_renderer_pixbuf_new(); |
669 |
|
GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes(_("State"), |
670 |
|
pixbuf_renderer, "stock_id", PROJECT_COL_STATUS, |
671 |
|
NULL); |
672 |
|
//gtk_tree_view_column_pack_start(column, renderer2, FALSE); |
673 |
|
//gtk_tree_view_column_add_attribute(column, renderer2, "stock_id", PROJECT_COL_FLAG_DIFF_PRESENT); |
674 |
|
gtk_tree_view_column_set_expand(column, FALSE); |
675 |
|
gtk_tree_view_insert_column(GTK_TREE_VIEW(context->view), column, -1); |
676 |
|
|
677 |
/* --- "Description" column --- */ |
/* --- "Description" column --- */ |
678 |
renderer = gtk_cell_renderer_text_new(); |
renderer = gtk_cell_renderer_text_new(); |
679 |
g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL ); |
g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL ); |
680 |
GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes( |
column = gtk_tree_view_column_new_with_attributes( |
681 |
_("Description"), renderer, "text", PROJECT_COL_DESCRIPTION, NULL); |
_("Description"), renderer, "text", PROJECT_COL_DESCRIPTION, NULL); |
682 |
gtk_tree_view_column_set_expand(column, TRUE); |
gtk_tree_view_column_set_expand(column, TRUE); |
683 |
gtk_tree_view_insert_column(GTK_TREE_VIEW(context->view), column, -1); |
gtk_tree_view_insert_column(GTK_TREE_VIEW(context->view), column, -1); |
684 |
|
|
685 |
/* build the store */ |
/* build the store */ |
686 |
GtkListStore *store = gtk_list_store_new(PROJECT_NUM_COLS, |
GtkListStore *store = gtk_list_store_new(PROJECT_NUM_COLS, |
687 |
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); |
G_TYPE_STRING, // name |
688 |
|
G_TYPE_STRING, // status |
689 |
|
G_TYPE_STRING, // desc |
690 |
|
G_TYPE_POINTER); // data |
691 |
|
|
692 |
GtkTreeIter iter; |
GtkTreeIter iter; |
693 |
project_t *project = context->project; |
project_t *project = context->project; |
694 |
while(project) { |
while(project) { |
695 |
|
gchar *status_stock_id = NULL; |
696 |
|
project_get_status_icon_stock_id(project, &status_stock_id); |
697 |
/* Append a row and fill in some data */ |
/* Append a row and fill in some data */ |
698 |
gtk_list_store_append(store, &iter); |
gtk_list_store_append(store, &iter); |
699 |
gtk_list_store_set(store, &iter, |
gtk_list_store_set(store, &iter, |
700 |
PROJECT_COL_NAME, project->name, |
PROJECT_COL_NAME, project->name, |
701 |
|
PROJECT_COL_STATUS, status_stock_id, |
702 |
PROJECT_COL_DESCRIPTION, project->desc, |
PROJECT_COL_DESCRIPTION, project->desc, |
703 |
PROJECT_COL_DATA, project, |
PROJECT_COL_DATA, project, |
704 |
-1); |
-1); |