Changeset dd6c0135749a94cfae94719893c655fbdf7f912a

Show
Ignore:
Timestamp:
12/07/10 05:31:28 (2 years ago)
Author:
Nedko Arnaudov <nedko@…>
Children:
5dd853997b0b38e965b436f647841b9d115190ea
Parents:
cf12c2e3e0d97f01ea24b8a9e3a8663a670a1e7e
git-author:
Nedko Arnaudov <nedko@arnaudov.name> / 2010-12-07T05:31:13Z+0200
git-committer:
Nedko Arnaudov <nedko@arnaudov.name> / 2010-12-07T05:31:28Z+0200
Message:

gui: implement project properties dialog (description and notes). Fix for #90

Files:
1 added
1 removed
7 modified
1 moved

Legend:

Unmodified
Added
Removed
  • gui/graph_view.c

    ra5d878c rdd6c013  
    114114} 
    115115 
    116 static void project_properties_changed(void * context, const char * project_dir, const char * project_name) 
     116static 
     117void 
     118project_properties_changed( 
     119  void * context, 
     120  const char * project_dir, 
     121  const char * project_name, 
     122  const char * project_description, 
     123  const char * project_notes) 
    117124{ 
    118125  bool empty; 
  • gui/menu.c

    r6c5bfcb rdd6c013  
    3030#include "studio.h" 
    3131#include "dynmenu.h" 
     32#include "project_properties.h" 
    3233 
    3334static GtkWidget * g_menu_item_new_studio; 
     
    416417    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
    417418 
     419    menuitem = gtk_menu_item_new_with_label("Project Properties..."); 
     420    g_signal_connect(menuitem, "activate", (GCallback)ladish_project_properties_dialog_run, NULL); 
     421    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
     422 
    418423    menuitem = gtk_separator_menu_item_new(); /* separator */ 
    419424    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
  • gui/project_properties.h

    r05a0860 rdd6c013  
    33 * LADI Session Handler (ladish) 
    44 * 
    5  * Copyright (C) 2008 Nedko Arnaudov <nedko@arnaudov.name> 
     5 * Copyright (C) 2010 Nedko Arnaudov <nedko@arnaudov.name> 
    66 * 
    77 ************************************************************************** 
    8  * This file contains interface of the project_properties_dialog class 
     8 * This file contains interface for the project properties dialog helpers 
    99 ************************************************************************** 
    1010 * 
     
    2525 */ 
    2626 
    27 #ifndef PROJECT_PROPERTIES_HPP__B854A265_3660_4DAA_87E7_104020C5962D__INCLUDED 
    28 #define PROJECT_PROPERTIES_HPP__B854A265_3660_4DAA_87E7_104020C5962D__INCLUDED 
     27#ifndef PROJECT_PROPERTIES_H__B854A265_3660_4DAA_87E7_104020C5962D__INCLUDED 
     28#define PROJECT_PROPERTIES_H__B854A265_3660_4DAA_87E7_104020C5962D__INCLUDED 
    2929 
    30 struct project_properties_dialog_impl; 
     30void ladish_project_properties_dialog_run(void); 
    3131 
    32 class project_properties_dialog 
    33 { 
    34 public: 
    35   project_properties_dialog(); 
    36   ~project_properties_dialog(); 
    37  
    38   void run(boost::shared_ptr<project> project_ptr); 
    39  
    40 private: 
    41   project_properties_dialog_impl * _impl_ptr; 
    42 }; 
    43  
    44 #endif // #ifndef PROJECT_PROPERTIES_HPP__B854A265_3660_4DAA_87E7_104020C5962D__INCLUDED 
     32#endif // #ifndef PROJECT_PROPERTIES_H__B854A265_3660_4DAA_87E7_104020C5962D__INCLUDED 
  • gui/room.c

    r128ad4d rdd6c013  
    9090{ 
    9191  bool new_project; 
    92   char * project_dir; 
    93   char * project_name; 
     92  const char * project_dir; 
     93  const char * project_name; 
    9494 
    95   if (!ladish_room_proxy_get_project_properties(graph_view_get_room(get_current_view()), &project_dir, &project_name)) 
    96   { 
    97     error_message_box("Get project properties failed, please inspect logs."); 
    98     return; 
    99   } 
     95  ladish_room_proxy_get_project_properties(graph_view_get_room(get_current_view()), &project_dir, &project_name, NULL, NULL); 
    10096 
    10197  new_project = strlen(project_dir) == 0; 
    102  
    103   free(project_name); 
    104   free(project_dir); 
    10598 
    10699  if (new_project) 
  • gui/save_project_dialog.c

    r841852a1 rdd6c013  
    5656  GtkResponseType response; 
    5757 
    58   char * project_dir; 
    59   char * project_name; 
     58  const char * project_dir; 
     59  const char * project_name; 
    6060 
    6161  dialog = get_gtk_builder_widget("project_save_as_dialog"); 
     
    6666  g_signal_connect( G_OBJECT(path_button), "clicked", G_CALLBACK(on_path_button_clicked), NULL); 
    6767 
    68   if (!ladish_room_proxy_get_project_properties(room, &project_dir, &project_name)) 
    69   { 
    70     error_message_box("Get project properties failed, please inspect logs."); 
    71     return; 
    72   } 
     68  ladish_room_proxy_get_project_properties(room, &project_dir, &project_name, NULL, NULL); 
    7369 
    7470  gtk_entry_set_text(path, project_dir); 
    7571  gtk_entry_set_text(name, project_name); 
    76  
    77   free(project_name); 
    78   free(project_dir); 
    7972 
    8073  gtk_widget_show(dialog); 
  • proxies/room_proxy.c

    r7a6f304 rdd6c013  
    3737    void * project_properties_changed_context, 
    3838    const char * project_dir, 
    39     const char * project_name); 
     39    const char * project_name, 
     40    const char * project_description, 
     41    const char * project_notes); 
    4042 
    4143  uint64_t project_properties_version; 
    4244  char * project_name; 
    4345  char * project_dir; 
     46  char * project_description; 
     47  char * project_notes; 
    4448}; 
    4549 
     
    5155  const char * name; 
    5256  const char * dir; 
     57  const char * description; 
     58  const char * notes; 
    5359  char * name_buffer; 
    5460  char * dir_buffer; 
     61  char * description_buffer; 
     62  char * notes_buffer; 
    5563 
    5664  signature = dbus_message_get_signature(message_ptr); 
     
    5866  { 
    5967    log_error("%s signature mismatch. '%s'", context, signature); 
    60     return false; 
     68    goto fail; 
    6169  } 
    6270 
     
    6977  { 
    7078    log_error("%s contains project properties version 0", context); 
    71     return false; 
     79    goto fail; 
    7280  } 
    7381 
    7482  if (proxy_ptr->project_properties_version >= version) 
    7583  { 
    76     return true; 
     84    goto fail; 
    7785  } 
    7886 
     
    8593  { 
    8694    dir = ""; 
     95  } 
     96 
     97  if (!dbus_iter_get_dict_entry_string(&iter, "description", &description)) 
     98  { 
     99    description = ""; 
     100  } 
     101 
     102  if (!dbus_iter_get_dict_entry_string(&iter, "notes", &notes)) 
     103  { 
     104    notes = ""; 
    87105  } 
    88106 
     
    91109  { 
    92110    log_error("strdup() failed for project name"); 
    93     return false; 
     111    goto fail; 
    94112  } 
    95113 
     
    98116  { 
    99117    log_error("strdup() failed for project dir"); 
    100     free(name_buffer); 
    101     return false; 
     118    goto fail_free_name_buffer; 
     119  } 
     120 
     121  description_buffer = strdup(description); 
     122  if (description_buffer == NULL) 
     123  { 
     124    log_error("strdup() failed for project description"); 
     125    goto fail_free_dir_buffer; 
     126  } 
     127 
     128  notes_buffer = strdup(notes); 
     129  if (notes_buffer == NULL) 
     130  { 
     131    log_error("strdup() failed for project notes"); 
     132    goto fail_free_description_buffer; 
    102133  } 
    103134 
     
    115146  } 
    116147  proxy_ptr->project_dir = dir_buffer; 
     148 
     149  if (proxy_ptr->project_description != NULL) 
     150  { 
     151    free(proxy_ptr->project_description); 
     152  } 
     153  proxy_ptr->project_description = description_buffer; 
     154 
     155  if (proxy_ptr->project_notes != NULL) 
     156  { 
     157    free(proxy_ptr->project_notes); 
     158  } 
     159  proxy_ptr->project_notes = notes_buffer; 
    117160 
    118161  /* log_info("Room '%s' project properties changed:", proxy_ptr->object); /\* TODO: cache project name *\/ */ 
     
    120163  /* log_info("  Project name: '%s'", proxy_ptr->project_name); */ 
    121164  /* log_info("  Project dir: '%s'", proxy_ptr->project_dir); */ 
     165  /* log_info("  Project description: '%s'", proxy_ptr->project_description); */ 
     166  /* log_info("  Project notes: '%s'", proxy_ptr->project_notes); */ 
    122167 
    123168  proxy_ptr->project_properties_changed( 
    124169    proxy_ptr->project_properties_changed_context, 
    125170    proxy_ptr->project_dir, 
    126     proxy_ptr->project_name); 
    127  
    128   return true; 
     171    proxy_ptr->project_name, 
     172    proxy_ptr->project_description, 
     173    proxy_ptr->project_notes); 
     174 
     175  return true; 
     176 
     177fail_free_description_buffer: 
     178  free(description_buffer); 
     179fail_free_dir_buffer: 
     180  free(dir_buffer); 
     181fail_free_name_buffer: 
     182  free(name_buffer); 
     183fail: 
     184  return false; 
    129185} 
    130186 
     
    176232    void * project_properties_changed_context, 
    177233    const char * project_dir, 
    178     const char * project_name), 
     234    const char * project_name, 
     235    const char * project_description, 
     236    const char * project_notes), 
    179237  ladish_room_proxy_handle * handle_ptr) 
    180238{ 
     
    205263  proxy_ptr->project_name = NULL; 
    206264  proxy_ptr->project_dir = NULL; 
     265  proxy_ptr->project_description = NULL; 
     266  proxy_ptr->project_notes = NULL; 
    207267 
    208268  proxy_ptr->project_properties_changed_context = project_properties_changed_context; 
     
    257317  } 
    258318 
     319  if (proxy_ptr->project_description != NULL) 
     320  { 
     321    free(proxy_ptr->project_description); 
     322  } 
     323 
     324  if (proxy_ptr->project_notes != NULL) 
     325  { 
     326    free(proxy_ptr->project_notes); 
     327  } 
     328 
    259329  free(proxy_ptr->object); 
    260330  free(proxy_ptr->service); 
     
    328398} 
    329399 
    330 bool ladish_room_proxy_get_project_properties(ladish_room_proxy_handle proxy, char ** project_dir, char ** project_name) 
    331 { 
    332   char * name; 
    333   char * dir; 
    334  
     400void 
     401ladish_room_proxy_get_project_properties( 
     402  ladish_room_proxy_handle proxy, 
     403  const char ** project_dir, 
     404  const char ** project_name, 
     405  const char ** project_description, 
     406  const char ** project_notes) 
     407{ 
    335408  ASSERT(proxy_ptr->project_properties_version > 0); 
    336409 
    337   name = strdup(proxy_ptr->project_name); 
    338   if (name == NULL) 
    339   { 
    340     log_error("strdup() failed for project name"); 
    341     return false; 
    342   } 
    343  
    344   dir = strdup(proxy_ptr->project_dir); 
    345   if (dir == NULL) 
    346   { 
    347     log_error("strdup() failed for project dir"); 
    348     free(name); 
    349     return false; 
    350   } 
    351  
    352   *project_name = name; 
    353   *project_dir = dir; 
     410  if (project_dir != NULL) 
     411  { 
     412    *project_dir = proxy_ptr->project_dir; 
     413  } 
     414 
     415  if (project_name != NULL) 
     416  { 
     417    *project_name = proxy_ptr->project_name; 
     418  } 
     419 
     420  if (project_description != NULL) 
     421  { 
     422    *project_description = proxy_ptr->project_description; 
     423  } 
     424 
     425  if (project_notes != NULL) 
     426  { 
     427    *project_notes = proxy_ptr->project_notes; 
     428  } 
     429} 
     430 
     431bool 
     432ladish_room_proxy_set_project_description( 
     433  ladish_room_proxy_handle proxy, 
     434  const char * description) 
     435{ 
     436  uint64_t new_version; 
     437 
     438  if (!dbus_call(0, proxy_ptr->service, proxy_ptr->object, IFACE_ROOM, "SetProjectDescription", "s", &description, "t", &new_version)) 
     439  { 
     440    log_error("SetProjectDescription() failed."); 
     441    return false; 
     442  } 
     443 
     444  return true; 
     445} 
     446 
     447bool 
     448ladish_room_proxy_set_project_notes( 
     449  ladish_room_proxy_handle proxy, 
     450  const char * notes) 
     451{ 
     452  uint64_t new_version; 
     453 
     454  if (!dbus_call(0, proxy_ptr->service, proxy_ptr->object, IFACE_ROOM, "SetProjectNotes", "s", &notes, "t", &new_version)) 
     455  { 
     456    log_error("SetProjectNotes(%s) failed.", notes); 
     457    return false; 
     458  } 
    354459 
    355460  return true; 
  • proxies/room_proxy.h

    r6c5bfcb rdd6c013  
    4040    void * project_properties_changed_context, 
    4141    const char * project_dir, 
    42     const char * project_name), 
     42    const char * project_name, 
     43    const char * project_description, 
     44    const char * project_notes), 
    4345  ladish_room_proxy_handle * proxy_ptr); 
    4446 
     
    4850bool ladish_room_proxy_save_project(ladish_room_proxy_handle proxy, const char * project_dir, const char * project_name); 
    4951bool ladish_room_proxy_unload_project(ladish_room_proxy_handle proxy); 
    50 bool ladish_room_proxy_get_project_properties(ladish_room_proxy_handle proxy, char ** project_dir, char ** project_name); 
     52 
     53void 
     54ladish_room_proxy_get_project_properties( 
     55  ladish_room_proxy_handle proxy, 
     56  const char ** project_dir, 
     57  const char ** project_name, 
     58  const char ** project_description, 
     59  const char ** project_notes); 
     60 
     61bool 
     62ladish_room_proxy_set_project_description( 
     63  ladish_room_proxy_handle proxy, 
     64  const char * description); 
     65 
     66bool 
     67ladish_room_proxy_set_project_notes( 
     68  ladish_room_proxy_handle proxy, 
     69  const char * notes); 
    5170 
    5271bool 
  • wscript

    r75e08bc rdd6c013  
    501501            'load_project_dialog.c', 
    502502            'save_project_dialog.c', 
     503            'project_properties.c', 
    503504            'world_tree.c', 
    504505            'graph_view.c',