34static char*
ID =
"ID";
74 if ((outputfile = fopen(filename,
"w"))) {
75 ret =
agwrite(subg, outputfile);
78 fprintf (stderr,
"Could not open %s for writing\n", filename);
99 agxset(v, visible_attr, bf);
116 dialog = gtk_file_chooser_dialog_new(
"Save File",
118 GTK_FILE_CHOOSER_ACTION_SAVE,
122 GTK_RESPONSE_ACCEPT,
NULL);
123 gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER
125 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
127 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
131 gtk_widget_destroy(dialog);
135 gtk_widget_destroy(dialog);
143 GtkTreeViewColumn *column;
144 GtkCellRendererText *renderer;
147 renderer = (GtkCellRendererText *) gtk_cell_renderer_text_new();
148 ((GtkCellRenderer *) renderer)->mode = GTK_CELL_RENDERER_MODE_EDITABLE;
149 renderer->editable = editable;
153 renderer->foreground = c;
156 gtk_tree_view_column_new_with_attributes(Title,
158 renderer,
"text", asso,
161 gtk_tree_view_append_column(GTK_TREE_VIEW(
tree), column);
162 gtk_tree_view_column_set_resizable(column, 1);
169 GtkTreeViewColumn *column;
170 GtkCellRendererToggle *renderer;
171 renderer = (GtkCellRendererToggle *) gtk_cell_renderer_toggle_new();
172 renderer->activatable = editable;
175 gtk_tree_view_column_new_with_attributes(Title,
177 renderer,
"active", asso,
179 gtk_tree_view_append_column(GTK_TREE_VIEW(
tree), column);
180 gtk_tree_view_column_set_resizable(column, 1);
194 gtk_tree_store_append(
grid->store, &iter,
NULL);
196 for (
id = 0;
id <
grid->count;
id++) {
198 if (strcmp(cp->
name,
ID) == 0)
continue;
207 g_value_init(&value, cp->
type);
208 switch (
grid->columns[
id].type) {
211 if ((strcmp(bf,
"1") == 0) || (strcmp(bf,
"true") == 0)
212 || (strcmp(bf,
"True") == 0))
213 g_value_set_boolean(&value, 1);
215 g_value_set_boolean(&value, 0);
218 g_value_set_boolean(&value, 1);
222 g_value_set_static_string(&value, bf);
225 gtk_tree_store_set_value(
grid->store, &iter,
id, &value);
226 g_value_unset(&value);
234 if ((ncolumns == 0) || (types ==
NULL))
237 gtk_tree_store_clear(
store);
238 g_object_unref(
store);
241 store = gtk_tree_store_newv(ncolumns, types);
265 GtkTreeViewColumn *column;
270 while ((column = gtk_tree_view_get_column(
tree, 0)))
271 gtk_tree_view_remove_column(
tree, column);
272 store = (GtkTreeStore *) gtk_tree_view_get_model(
tree);
274 tree = (GtkTreeView *) gtk_tree_view_new();
275 gtk_widget_show((GtkWidget *)
tree);
277 gtk_container_add((GtkContainer *)
278 glade_xml_get_widget(
xml,
"scrolledwindow9"),
284 for (
id = 0;
id < g->
count;
id++)
288 gtk_tree_view_set_model(
tree, (GtkTreeModel *)
store);
290 for (
id = 0;
id < g->
count;
id++)
300 assert(g->
count >= 0);
311 for (
id = 0;
id < g->
count;
id++) {
356 static GtkTreeView *
tree;
358 char *buf =
agget(g,
"datacolumns");
Memory allocation wrappers that exit on failure.
static void * gv_recalloc(void *ptr, size_t old_nmemb, size_t new_nmemb, size_t size)
static void * gv_calloc(size_t nmemb, size_t size)
static void * gv_alloc(size_t size)
Agsym_t * agattr_text(Agraph_t *g, int kind, char *name, const char *value)
creates or looks up text attributes of a graph
int agxset(void *obj, Agsym_t *sym, const char *value)
char * agget(void *obj, char *name)
Agedge_t * agsubedge(Agraph_t *g, Agedge_t *e, int createflag)
Agedge_t * agfstout(Agraph_t *g, Agnode_t *n)
Agedge_t * agnxtout(Agraph_t *g, Agedge_t *e)
int agwrite(Agraph_t *g, void *chan)
Return 0 on success, EOF on failure.
Agnode_t * agnxtnode(Agraph_t *g, Agnode_t *n)
Agnode_t * agfstnode(Agraph_t *g)
Agnode_t * agsubnode(Agraph_t *g, Agnode_t *n, int createflag)
char * agnameof(void *)
returns a string descriptor for the object.
Agraph_t * agsubg(Agraph_t *g, char *name, int cflag)
int agdelsubg(Agraph_t *g, Agraph_t *sub)
textitem scanner parser str
static int store(segment_t *seg, int first, pointf *pts)
a non-owning string reference
state for an in-progress string tokenization
Non-owning string references.
static bool strview_str_eq(strview_t a, const char *b)
compare a string reference to a string for equality
static char * strview_str(strview_t source)
make a heap-allocated string from this string view
static strview_t strview(const char *referent, char terminator)
create a string reference
static strview_t tok_get(const tok_t *t)
get the current token
static tok_t tok(const char *input, const char *separators)
begin tokenization of a new string
static bool tok_end(const tok_t *t)
is this tokenizer exhausted?
static void tok_next(tok_t *t)
advance to the next token in the string being scanned
void updateSmGraph(Agraph_t *g, topview *t)
static int create_save_subgraph_from_filter(char *filename, int withEdges)
static void create_column(gridCol *c, GtkTreeView *tree, int id)
static grid_t * update_columns(grid_t *g, char *str)
static void create_text_column(char *Title, GtkTreeView *tree, int asso, bool editable)
int tv_save_as(int withEdges)
static grid_t * initGrid(void)
static void clearGrid(grid_t *g)
static void add_column(grid_t *g, strview_t name, bool editable, GType g_type)
static GtkTreeStore * update_tree_store(GtkTreeStore *store, int ncolumns, GType *types)
static GtkTreeView * update_tree(GtkTreeView *tree, grid_t *g)
void setup_tree(Agraph_t *g)
static void create_toggle_column(char *Title, GtkTreeView *tree, int asso, bool editable)
static void populate_data(Agraph_t *g, grid_t *grid)
static void induceEdges(Agraph_t *g, Agraph_t *sg)
static void set_visibility(Agraph_t *g, int visibility)
VIS_API void visibility(vconfig_t *)