Diff of /trunk/src/project.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 29 by harbaum, Wed Dec 24 20:16:53 2008 UTC revision 45 by achadwick, Mon Jan 26 23:47:27 2009 UTC
# Line 324  typedef struct { Line 324  typedef struct {
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
# Line 544  project_t *project_new(select_context_t Line 545  project_t *project_new(select_context_t
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;
# Line 554  static void on_project_new(GtkButton *bu Line 558  static void on_project_new(GtkButton *bu
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);
# Line 607  static void on_project_edit(GtkButton *b Line 614  static void on_project_edit(GtkButton *b
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    
# Line 625  static void on_project_edit(GtkButton *b Line 635  static void on_project_edit(GtkButton *b
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();
# Line 639  static GtkWidget *project_list_widget(se Line 664  static GtkWidget *project_list_widget(se
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);

Legend:
Removed from v.29  
changed lines
  Added in v.45