123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- /*************************************************************************
- * Copyright (c) 2011 AT&T Intellectual Property
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors: Details at https://graphviz.org
- *************************************************************************/
- #include "menucallbacks.h"
- #include "viewport.h"
- #include "tvnodes.h"
- #include "gvprpipe.h"
- #include "topviewsettings.h"
- #include "gltemplate.h"
- #include <common/const.h>
- #include <assert.h>
- #include <ctype.h>
- #include <glib.h>
- #include <stdlib.h>
- #include "frmobjectui.h"
- #include <util/agxbuf.h>
- void mAttributesSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- showAttrsWidget();
- }
- void mOpenSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- GtkWidget *dialog;
- GtkFileFilter *filter;
- filter = gtk_file_filter_new();
- gtk_file_filter_add_pattern(filter, "*.gv");
- gtk_file_filter_add_pattern(filter, "*.dot");
- dialog = gtk_file_chooser_dialog_new("Open File",
- NULL,
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN,
- GTK_RESPONSE_ACCEPT, NULL);
- gtk_file_chooser_set_filter((GtkFileChooser *) dialog, filter);
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
- char *filename;
- filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- add_graph_to_viewport_from_file(filename);
- g_free(filename);
- }
- gtk_widget_destroy(dialog);
- }
- void mSaveSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- save_graph(); //save without prompt
- }
- void mSaveAsSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- save_as_graph(); //save with prompt
- }
- void mCloseSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- if (view->activeGraph == 0)
- close_graph(view);
- }
- void mOptionsSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- }
- void mQuitSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- close_graph(view);
- gtk_main_quit();
- }
- //edit
- void mCutSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- }
- void mCopySlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- }
- void mPasteSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- }
- void mDeleteSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- }
- void mTopviewSettingsSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- show_settings_form();
- }
- //view
- void mShowToolBoxSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- if (!gtk_widget_set_gl_capability
- (glade_xml_get_widget(xml, "glfixed"), configure_gl(),
- gtk_widget_get_gl_context(view->drawing_area), 0, 0))
- printf("glwidget creation failed \n");
- }
- void mShowConsoleSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- static int state = 0; // off by default
- if (state) {
- gtk_widget_hide (glade_xml_get_widget(xml, "vbox13"));
- gtk_widget_show (glade_xml_get_widget(xml, "show_console1"));
- gtk_widget_hide (glade_xml_get_widget(xml, "hide_console1"));
- state = 0;
- }
- else {
- gtk_widget_show (glade_xml_get_widget(xml, "vbox13"));
- gtk_widget_hide (glade_xml_get_widget(xml, "show_console1"));
- gtk_widget_show (glade_xml_get_widget(xml, "hide_console1"));
- state = 1;
- }
- }
- //Graph
- void mNodeListSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- gtk_widget_show(glade_xml_get_widget(xml, "frmTVNodes"));
- setup_tree (view->g[view->activeGraph]);
- }
- void mNewNodeSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- }
- void mNewEdgeSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- }
- void mNewClusterSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- }
- void mGraphPropertiesSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- //there has to be an active graph to open the graph prop page
- if (view->activeGraph > -1) {
- load_graph_properties(); //load from graph to gui
- gtk_dialog_set_response_sensitive((GtkDialog *)
- glade_xml_get_widget(xml,
- "dlgOpenGraph"),
- 1, 1);
- gtk_dialog_set_response_sensitive((GtkDialog *)
- glade_xml_get_widget(xml,
- "dlgOpenGraph"),
- 2, 1);
- gtk_dialog_run((GtkDialog *)glade_xml_get_widget(xml, "dlgOpenGraph"));
- //need to hide the dialog , again freaking GTK!!!!
- gtk_widget_hide(glade_xml_get_widget(xml, "dlgOpenGraph"));
- }
- }
- void mNodeFindSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- }
- static void mPropertiesSlot(void) {
- if (view->activeGraph >= 0)
- gtk_widget_hide(glade_xml_get_widget(xml, "frmObject"));
- gtk_widget_show(glade_xml_get_widget(xml, "frmObject"));
- }
- void mClusterPropertiesSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- mPropertiesSlot();
- }
- void mNodePropertiesSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- mPropertiesSlot();
- }
- void mEdgePropertiesSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- mPropertiesSlot();
- }
- void mShowCodeSlot(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- }
- void mAbout(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- }
- void change_cursor(GdkCursorType C)
- {
- GdkCursor *cursor;
- cursor = gdk_cursor_new(C);
- gdk_window_set_cursor((GdkWindow *) view->drawing_area->window,
- cursor);
- gdk_cursor_destroy(cursor);
- }
- void mTestgvpr(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- char *bf2;
- GtkTextBuffer *gtkbuf;
- GtkTextIter startit;
- GtkTextIter endit;
- const char *args;
- int cloneGraph;
- args =
- gtk_entry_get_text((GtkEntry *)
- glade_xml_get_widget(xml, "gvprargs"));
- gtkbuf =
- gtk_text_view_get_buffer((GtkTextView *)
- glade_xml_get_widget(xml,
- "gvprtextinput"));
- gtk_text_buffer_get_start_iter(gtkbuf, &startit);
- gtk_text_buffer_get_end_iter(gtkbuf, &endit);
- bf2 = gtk_text_buffer_get_text(gtkbuf, &startit, &endit, 0);
- if (*args == '\0' && *bf2 == '\0') {
- g_free(bf2);
- return;
- }
- size_t argc = 1;
- if (*args != '\0')
- argc += 2;
- if (*bf2 != '\0')
- argc++;
- if (gtk_toggle_button_get_active
- ((GtkToggleButton *) glade_xml_get_widget(xml, "gvprapplycb"))) {
- cloneGraph = 1;
- argc++;
- } else
- cloneGraph = 0;
- assert(argc <= 5);
- char *argv[6] = {0};
- size_t j = 0;
- argv[j++] = "smyrna";
- if (cloneGraph)
- argv[j++] = "-C";
- if (*args != '\0') {
- argv[j++] = "-a";
- // Suppress Clang/GCC -Wcast-qual warning. Casting away const here is acceptable
- // as `run_gvpr` does not modify input arguments.
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wcast-qual"
- #endif
- argv[j++] = (char*)args;
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
- }
- if (*bf2 != '\0') {
- argv[j++] = bf2;
- }
- assert(j == argc);
- run_gvpr(view->g[view->activeGraph], argc, argv);
- g_free(bf2);
- }
- /*
- opens a file open dialog and load a gvpr program to gvpr script text box
- if the current script is modified, user should be informed about it
- */
- void on_gvprbuttonload_clicked(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- FILE *input_file = NULL;
- char *str;
- agxbuf xbuf = {0};
- GtkTextBuffer *gtkbuf; /*GTK buffer from glade GUI */
- char buf[BUFSIZ];
- char *filename = NULL;
- if (openfiledlg(&filename)) {
- input_file = fopen(filename, "r");
- g_free(filename);
- if (input_file) {
- while (fgets(buf, BUFSIZ, input_file))
- agxbput(&xbuf, buf);
- gtkbuf =
- gtk_text_view_get_buffer((GtkTextView *)
- glade_xml_get_widget(xml,
- "gvprtextinput"));
- str = agxbuse(&xbuf);
- if (g_utf8_validate(str, -1, NULL)) {
- gtk_text_buffer_set_text(gtkbuf, str, -1);
- } else {
- show_gui_warning("File format is not UTF8!");
- }
- fclose(input_file);
- } else {
- show_gui_warning("file couldn't be opened\n");
- }
- }
- agxbfree(&xbuf);
- }
- /*
- opens a file save dialog and save a gvpr program from gvpr script text box
- if the current script is modified, user should be informed about it
- */
- void on_gvprbuttonsave_clicked(GtkWidget *widget, void *user_data) {
- (void)widget;
- (void)user_data;
- FILE *output_file = NULL;
- GtkTextBuffer *gtkbuf; /*GTK buffer from glade GUI */
- char *bf2;
- GtkTextIter startit;
- GtkTextIter endit;
- char *filename = NULL;
- if (savefiledlg(&filename)) {
- output_file = fopen(filename, "w");
- g_free(filename);
- if (output_file) {
- gtkbuf =
- gtk_text_view_get_buffer((GtkTextView *)
- glade_xml_get_widget(xml,
- "gvprtextinput"));
- gtk_text_buffer_get_start_iter(gtkbuf, &startit);
- gtk_text_buffer_get_end_iter(gtkbuf, &endit);
- bf2 = gtk_text_buffer_get_text(gtkbuf, &startit, &endit, 0);
- fputs(bf2, output_file);
- free(bf2);
- fclose(output_file);
- }
- /*Code has not been completed for this function yet */
- }
- }
|