Graphviz 14.1.3~dev.20260201.2050
Loading...
Searching...
No Matches
menucallbacks.c
Go to the documentation of this file.
1/*************************************************************************
2 * Copyright (c) 2011 AT&T Intellectual Property
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * https://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors: Details at https://graphviz.org
9 *************************************************************************/
10
11#include "config.h"
12
13#include "menucallbacks.h"
14#include "viewport.h"
15#include "tvnodes.h"
16
17#include "gvprpipe.h"
18#include "topviewsettings.h"
19#include "gltemplate.h"
20#include <common/const.h>
21#include <assert.h>
22#include <ctype.h>
23#include <glib.h>
24#include <stdlib.h>
25#include "frmobjectui.h"
26#include <util/agxbuf.h>
27
28void mAttributesSlot(GtkWidget *widget, void *user_data) {
29 (void)widget;
30 (void)user_data;
31
33}
34
35void mOpenSlot(GtkWidget *widget, void *user_data) {
36 (void)widget;
37 (void)user_data;
38
39 GtkWidget *dialog;
40 GtkFileFilter *filter;
41
42 filter = gtk_file_filter_new();
43 gtk_file_filter_add_pattern(filter, "*.gv");
44 gtk_file_filter_add_pattern(filter, "*.dot");
45 dialog = gtk_file_chooser_dialog_new("Open File",
46 NULL,
47 GTK_FILE_CHOOSER_ACTION_OPEN,
48 GTK_STOCK_CANCEL,
49 GTK_RESPONSE_CANCEL,
50 GTK_STOCK_OPEN,
51 GTK_RESPONSE_ACCEPT, NULL);
52
53 gtk_file_chooser_set_filter((GtkFileChooser *) dialog, filter);
54 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
55 char *filename;
56 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
57
59 g_free(filename);
60 }
61
62 gtk_widget_destroy(dialog);
63}
64
65void mSaveSlot(GtkWidget *widget, void *user_data) {
66 (void)widget;
67 (void)user_data;
68
69 save_graph(); //save without prompt
70}
71
72void mSaveAsSlot(GtkWidget *widget, void *user_data) {
73 (void)widget;
74 (void)user_data;
75
76 save_as_graph(); //save with prompt
77}
78
79void mCloseSlot(GtkWidget *widget, void *user_data) {
80 (void)widget;
81 (void)user_data;
82
83 if (view->activeGraph == 0)
85}
86
87void mOptionsSlot(GtkWidget *widget, void *user_data) {
88 (void)widget;
89 (void)user_data;
90}
91
92void mQuitSlot(GtkWidget *widget, void *user_data) {
93 (void)widget;
94 (void)user_data;
95
97 gtk_main_quit();
98}
99
100//edit
101void mCutSlot(GtkWidget *widget, void *user_data) {
102 (void)widget;
103 (void)user_data;
104}
105
106void mCopySlot(GtkWidget *widget, void *user_data) {
107 (void)widget;
108 (void)user_data;
109}
110
111void mPasteSlot(GtkWidget *widget, void *user_data) {
112 (void)widget;
113 (void)user_data;
114}
115
116void mDeleteSlot(GtkWidget *widget, void *user_data) {
117 (void)widget;
118 (void)user_data;
119}
120void mTopviewSettingsSlot(GtkWidget *widget, void *user_data) {
121 (void)widget;
122 (void)user_data;
124}
125
126//view
127void mShowToolBoxSlot(GtkWidget *widget, void *user_data) {
128 (void)widget;
129 (void)user_data;
130
131 if (!gtk_widget_set_gl_capability
132 (glade_xml_get_widget(xml, "glfixed"), configure_gl(),
133 gtk_widget_get_gl_context(view->drawing_area), 0, 0))
134 printf("glwidget creation failed \n");
135}
136
137void mShowConsoleSlot(GtkWidget *widget, void *user_data) {
138 (void)widget;
139 (void)user_data;
140
141 static int state = 0; // off by default
142
143 if (state) {
144 gtk_widget_hide (glade_xml_get_widget(xml, "vbox13"));
145 gtk_widget_show (glade_xml_get_widget(xml, "show_console1"));
146 gtk_widget_hide (glade_xml_get_widget(xml, "hide_console1"));
147 state = 0;
148 }
149 else {
150 gtk_widget_show (glade_xml_get_widget(xml, "vbox13"));
151 gtk_widget_hide (glade_xml_get_widget(xml, "show_console1"));
152 gtk_widget_show (glade_xml_get_widget(xml, "hide_console1"));
153 state = 1;
154 }
155}
156
157//Graph
158void mNodeListSlot(GtkWidget *widget, void *user_data) {
159 (void)widget;
160 (void)user_data;
161
162 gtk_widget_show(glade_xml_get_widget(xml, "frmTVNodes"));
164}
165
166void mNewNodeSlot(GtkWidget *widget, void *user_data) {
167 (void)widget;
168 (void)user_data;
169}
170
171void mNewEdgeSlot(GtkWidget *widget, void *user_data) {
172 (void)widget;
173 (void)user_data;
174}
175
176void mNewClusterSlot(GtkWidget *widget, void *user_data) {
177 (void)widget;
178 (void)user_data;
179}
180
181void mGraphPropertiesSlot(GtkWidget *widget, void *user_data) {
182 (void)widget;
183 (void)user_data;
184
185 //there has to be an active graph to open the graph prop page
186 if (view->activeGraph > -1) {
187 load_graph_properties(); //load from graph to gui
188 gtk_dialog_set_response_sensitive((GtkDialog *)
189 glade_xml_get_widget(xml,
190 "dlgOpenGraph"),
191 1, 1);
192 gtk_dialog_set_response_sensitive((GtkDialog *)
193 glade_xml_get_widget(xml,
194 "dlgOpenGraph"),
195 2, 1);
196 gtk_dialog_run((GtkDialog *)glade_xml_get_widget(xml, "dlgOpenGraph"));
197 //need to hide the dialog , again freaking GTK!!!!
198 gtk_widget_hide(glade_xml_get_widget(xml, "dlgOpenGraph"));
199 }
200}
201
202void mNodeFindSlot(GtkWidget *widget, void *user_data) {
203 (void)widget;
204 (void)user_data;
205}
206
207static void mPropertiesSlot(void) {
208 if (view->activeGraph >= 0)
209 gtk_widget_hide(glade_xml_get_widget(xml, "frmObject"));
210 gtk_widget_show(glade_xml_get_widget(xml, "frmObject"));
211}
212
213void mClusterPropertiesSlot(GtkWidget *widget, void *user_data) {
214 (void)widget;
215 (void)user_data;
216
218}
219
220void mNodePropertiesSlot(GtkWidget *widget, void *user_data) {
221 (void)widget;
222 (void)user_data;
223
225}
226
227void mEdgePropertiesSlot(GtkWidget *widget, void *user_data) {
228 (void)widget;
229 (void)user_data;
230
232}
233
234void mShowCodeSlot(GtkWidget *widget, void *user_data) {
235 (void)widget;
236 (void)user_data;
237}
238
239void mAbout(GtkWidget *widget, void *user_data) {
240 (void)widget;
241 (void)user_data;
242}
243
244void change_cursor(GdkCursorType C)
245{
246 GdkCursor *cursor;
247 cursor = gdk_cursor_new(C);
248 gdk_window_set_cursor((GdkWindow *) view->drawing_area->window,
249 cursor);
250 gdk_cursor_destroy(cursor);
251}
252
253void mTestgvpr(GtkWidget *widget, void *user_data) {
254 (void)widget;
255 (void)user_data;
256
257 char *bf2;
258 GtkTextBuffer *gtkbuf;
259 GtkTextIter startit;
260 GtkTextIter endit;
261 const char *args;
262 int cloneGraph;
263
264 args =
265 gtk_entry_get_text((GtkEntry *)
266 glade_xml_get_widget(xml, "gvprargs"));
267 gtkbuf =
268 gtk_text_view_get_buffer((GtkTextView *)
269 glade_xml_get_widget(xml,
270 "gvprtextinput"));
271 gtk_text_buffer_get_start_iter(gtkbuf, &startit);
272 gtk_text_buffer_get_end_iter(gtkbuf, &endit);
273 bf2 = gtk_text_buffer_get_text(gtkbuf, &startit, &endit, 0);
274
275 if (*args == '\0' && *bf2 == '\0') {
276 g_free(bf2);
277 return;
278 }
279
280 size_t argc = 1;
281 if (*args != '\0')
282 argc += 2;
283 if (*bf2 != '\0')
284 argc++;
285 if (gtk_toggle_button_get_active
286 ((GtkToggleButton *) glade_xml_get_widget(xml, "gvprapplycb"))) {
287 cloneGraph = 1;
288 argc++;
289 } else
290 cloneGraph = 0;
291 assert(argc <= 5);
292 char *argv[6] = {0};
293 size_t j = 0;
294 argv[j++] = "smyrna";
295 if (cloneGraph)
296 argv[j++] = "-C";
297 if (*args != '\0') {
298 argv[j++] = "-a";
299// Suppress Clang/GCC -Wcast-qual warning. Casting away const here is acceptable
300// as `run_gvpr` does not modify input arguments.
301#ifdef __GNUC__
302#pragma GCC diagnostic push
303#pragma GCC diagnostic ignored "-Wcast-qual"
304#endif
305 argv[j++] = (char*)args;
306#ifdef __GNUC__
307#pragma GCC diagnostic pop
308#endif
309 }
310 if (*bf2 != '\0') {
311 argv[j++] = bf2;
312 }
313 assert(j == argc);
314
315 run_gvpr(view->g[view->activeGraph], argc, argv);
316 g_free(bf2);
317}
318
319/*
320 opens a file open dialog and load a gvpr program to gvpr script text box
321 if the current script is modified, user should be informed about it
322*/
323void on_gvprbuttonload_clicked(GtkWidget *widget, void *user_data) {
324 (void)widget;
325 (void)user_data;
326
327 FILE *input_file = NULL;
328 char *str;
329 agxbuf xbuf = {0};
330 GtkTextBuffer *gtkbuf; /*GTK buffer from glade GUI */
331
332 char buf[BUFSIZ];
333
334 char *filename = NULL;
335 if (openfiledlg(&filename)) {
336 input_file = fopen(filename, "r");
337 g_free(filename);
338 if (input_file) {
339 while (fgets(buf, BUFSIZ, input_file))
340 agxbput(&xbuf, buf);
341 gtkbuf =
342 gtk_text_view_get_buffer((GtkTextView *)
343 glade_xml_get_widget(xml,
344 "gvprtextinput"));
345 str = agxbuse(&xbuf);
346 if (g_utf8_validate(str, -1, NULL)) {
347 gtk_text_buffer_set_text(gtkbuf, str, -1);
348 } else {
349 show_gui_warning("File format is not UTF8!");
350 }
351 fclose(input_file);
352 } else {
353 show_gui_warning("file couldn't be opened\n");
354 }
355 }
356 agxbfree(&xbuf);
357}
358
359/*
360 opens a file save dialog and save a gvpr program from gvpr script text box
361 if the current script is modified, user should be informed about it
362*/
363void on_gvprbuttonsave_clicked(GtkWidget *widget, void *user_data) {
364 (void)widget;
365 (void)user_data;
366
367 FILE *output_file = NULL;
368 GtkTextBuffer *gtkbuf; /*GTK buffer from glade GUI */
369 char *bf2;
370 GtkTextIter startit;
371 GtkTextIter endit;
372
373 char *filename = NULL;
374 if (savefiledlg(&filename)) {
375 output_file = fopen(filename, "w");
376 g_free(filename);
377 if (output_file) {
378 gtkbuf =
379 gtk_text_view_get_buffer((GtkTextView *)
380 glade_xml_get_widget(xml,
381 "gvprtextinput"));
382 gtk_text_buffer_get_start_iter(gtkbuf, &startit);
383 gtk_text_buffer_get_end_iter(gtkbuf, &endit);
384 bf2 = gtk_text_buffer_get_text(gtkbuf, &startit, &endit, 0);
385 fputs(bf2, output_file);
386 free(bf2);
387 fclose(output_file);
388 }
389
390 /*Code has not been completed for this function yet */
391 }
392}
Dynamically expanding string buffers.
static void agxbfree(agxbuf *xb)
free any malloced resources
Definition agxbuf.h:97
static WUR char * agxbuse(agxbuf *xb)
Definition agxbuf.h:325
void showAttrsWidget(void)
GdkGLConfig * configure_gl(void)
Definition gltemplate.c:314
void free(void *)
node NULL
Definition grammar.y:181
int openfiledlg(char **filename)
Definition gui.c:58
int savefiledlg(char **filename)
Definition gui.c:82
void load_graph_properties(void)
Definition gui.c:34
void show_gui_warning(char *str)
Definition gui.c:41
GladeXML * xml
Definition gui.c:24
agxbput(xb, staging)
static Agraph_t * cloneGraph(std::vector< Agraph_t * > &gs, GVC_t *gvc, Agdesc_t kind)
Definition gvpack.cpp:535
int run_gvpr(Agraph_t *srcGraph, size_t argc, char *argv[])
Definition gvprpipe.c:43
static agxbuf xbuf[NUMXBUFS]
textitem scanner parser str
Definition htmlparse.y:218
void on_gvprbuttonsave_clicked(GtkWidget *widget, void *user_data)
void mCloseSlot(GtkWidget *widget, void *user_data)
void mSaveSlot(GtkWidget *widget, void *user_data)
void mNodeListSlot(GtkWidget *widget, void *user_data)
void mNewClusterSlot(GtkWidget *widget, void *user_data)
void change_cursor(GdkCursorType C)
void mTestgvpr(GtkWidget *widget, void *user_data)
void mOptionsSlot(GtkWidget *widget, void *user_data)
void on_gvprbuttonload_clicked(GtkWidget *widget, void *user_data)
void mShowConsoleSlot(GtkWidget *widget, void *user_data)
void mNodePropertiesSlot(GtkWidget *widget, void *user_data)
void mCutSlot(GtkWidget *widget, void *user_data)
void mTopviewSettingsSlot(GtkWidget *widget, void *user_data)
void mAbout(GtkWidget *widget, void *user_data)
void mNodeFindSlot(GtkWidget *widget, void *user_data)
void mDeleteSlot(GtkWidget *widget, void *user_data)
void mGraphPropertiesSlot(GtkWidget *widget, void *user_data)
void mCopySlot(GtkWidget *widget, void *user_data)
void mNewNodeSlot(GtkWidget *widget, void *user_data)
void mEdgePropertiesSlot(GtkWidget *widget, void *user_data)
void mNewEdgeSlot(GtkWidget *widget, void *user_data)
void mShowCodeSlot(GtkWidget *widget, void *user_data)
void mOpenSlot(GtkWidget *widget, void *user_data)
void mPasteSlot(GtkWidget *widget, void *user_data)
void mSaveAsSlot(GtkWidget *widget, void *user_data)
void mClusterPropertiesSlot(GtkWidget *widget, void *user_data)
void mQuitSlot(GtkWidget *widget, void *user_data)
void mShowToolBoxSlot(GtkWidget *widget, void *user_data)
void mAttributesSlot(GtkWidget *widget, void *user_data)
static void mPropertiesSlot(void)
#define C
Definition pack.c:32
ViewInfo * view
Definition viewport.c:40
Agraph_t ** g
Definition smyrnadefs.h:288
int activeGraph
Definition smyrnadefs.h:292
GtkWidget * drawing_area
open gl canvas
Definition smyrnadefs.h:302
void show_settings_form(void)
void setup_tree(Agraph_t *g)
Definition tvnodes.c:351
void close_graph(ViewInfo *vi)
Definition viewport.c:74
int add_graph_to_viewport_from_file(char *fileName)
Definition viewport.c:347
int save_as_graph(void)
Definition viewport.c:493
int save_graph(void)
Definition viewport.c:473