#include "compat.h"
#include <stdlib.h>
#include "gui.h"
-#include "abstring.h"
+/* #include "abstring.h" */
#include <glade/glade.h>
#include <gdk/gdkkeysyms.h>
#include <gdk/gdk.h>
extern int strncasecmp(const char *s1, const char *s2, unsigned int n);
#endif
-GdkWindow* window1;
+GdkWindow *window1;
GtkWidget *statusbar1;
GladeXML *xml; //global libglade vars
//1 subgraph 2 node 3 edge
int frmObjectTypeIndex;
-Agraph_t* frmObjectg;
+Agraph_t *frmObjectg;
-GtkComboBox* cbSelectGraph; //combo at top left
+GtkComboBox *cbSelectGraph; //combo at top left
-GtkWidget* AttrWidgets[MAXIMUM_WIDGET_COUNT];
-GtkWidget* AttrLabels[MAXIMUM_WIDGET_COUNT];
+GtkWidget *AttrWidgets[MAXIMUM_WIDGET_COUNT];
+GtkWidget *AttrLabels[MAXIMUM_WIDGET_COUNT];
int attr_widgets_modified[MAXIMUM_WIDGET_COUNT];
-int widgetcounter; //number of attributes counted dynamically, might be removed in the future
-attribute attr[MAXIMUM_WIDGET_COUNT];
+int widgetcounter; //number of attributes counted dynamically, might be removed in the future
+attribute attr[MAXIMUM_WIDGET_COUNT];
//call this function only ones
void create_object_properties()
{
- char* data0="TEST0";
- char* data1="TEST1";
- char* data2="TEST2";
- char* data3="TEST3";
- char* data4="TEST4";
- GladeXML *xml;
+#ifdef UNUSED
+ char *data0 = "TEST0";
+ char *data1 = "TEST1";
+ char *data2 = "TEST2";
+ char *data3 = "TEST3";
+ char *data4 = "TEST4";
+#endif
+ GladeXML *xml;
GtkWidget *widget;
xml = glade_xml_new(SMYRNA_GLADE, NULL, NULL);
- widget = glade_xml_get_widget(xml, "listPoints");
- gtk_clist_set_column_title ((GtkCList*)widget,0,"Def");
- gtk_clist_set_column_title ((GtkCList*)widget,1,"x");
- gtk_clist_set_column_title ((GtkCList*)widget,2,"y");
- gtk_clist_set_column_title ((GtkCList*)widget,3,"z");
- gtk_clist_column_titles_show((GtkCList*)widget);
- gtk_widget_show (widget);
- widget = glade_xml_get_widget(xml, "win");
- gtk_widget_show (widget);
+ widget = glade_xml_get_widget(xml, "listPoints");
+ gtk_clist_set_column_title((GtkCList *) widget, 0, "Def");
+ gtk_clist_set_column_title((GtkCList *) widget, 1, "x");
+ gtk_clist_set_column_title((GtkCList *) widget, 2, "y");
+ gtk_clist_set_column_title((GtkCList *) widget, 3, "z");
+ gtk_clist_column_titles_show((GtkCList *) widget);
+ gtk_widget_show(widget);
+ widget = glade_xml_get_widget(xml, "win");
+ gtk_widget_show(widget);
}
+
//call this after create_object_properties()
void object_properties_node_init()
{
-
+
}
void object_properties_edge_init() //customize window for Edges
{
void graph_properties_init(int newgraph) //initialize little open graph dialog
{
- //newgraph 0 : open graph mode
- //newgraph 1 : new graph mode
+ //newgraph 0 : open graph mode
+ //newgraph 1 : new graph mode
- gint result=0;
- xml = glade_xml_new(SMYRNA_GLADE, NULL, NULL);
- gladewidget = glade_xml_get_widget(xml, "entryGraphFileName");
+ gint result = 0;
+ xml = glade_xml_new(SMYRNA_GLADE, NULL, NULL);
+ gladewidget = glade_xml_get_widget(xml, "entryGraphFileName");
- //signals
- //OK
- gladewidget = glade_xml_get_widget(xml, "btnOK");
+ //signals
+ //OK
+ gladewidget = glade_xml_get_widget(xml, "btnOK");
- g_signal_connect ((gpointer) gladewidget, "clicked", G_CALLBACK(dlgOpenGraph_OK_Clicked),
- &newgraph);
+ g_signal_connect((gpointer) gladewidget, "clicked",
+ G_CALLBACK(dlgOpenGraph_OK_Clicked), &newgraph);
- if(newgraph)
- {
- gladewidget = glade_xml_get_widget(xml, "entryGraphName");
- gtk_entry_set_text ((GtkEntry*)gladewidget,"Untitled");
- gladewidget = glade_xml_get_widget(xml, "entryGraphFileName");
- gtk_entry_set_text ((GtkEntry*)gladewidget,"Untitled.dot");
- }
- else
- {
- gladewidget = glade_xml_get_widget(xml, "entryGraphName");
- gtk_entry_set_text ((GtkEntry*)gladewidget,"");
- gladewidget = glade_xml_get_widget(xml, "entryGraphFileName");
- gtk_entry_set_text ((GtkEntry*)gladewidget,"");
- }
- gladewidget = glade_xml_get_widget(xml, "dlgOpenGraph");
- result = gtk_dialog_run (GTK_DIALOG (gladewidget));
+ if (newgraph) {
+ gladewidget = glade_xml_get_widget(xml, "entryGraphName");
+ gtk_entry_set_text((GtkEntry *) gladewidget, "Untitled");
+ gladewidget = glade_xml_get_widget(xml, "entryGraphFileName");
+ gtk_entry_set_text((GtkEntry *) gladewidget, "Untitled.dot");
+ } else {
+ gladewidget = glade_xml_get_widget(xml, "entryGraphName");
+ gtk_entry_set_text((GtkEntry *) gladewidget, "");
+ gladewidget = glade_xml_get_widget(xml, "entryGraphFileName");
+ gtk_entry_set_text((GtkEntry *) gladewidget, "");
+ }
+ gladewidget = glade_xml_get_widget(xml, "dlgOpenGraph");
+ result = gtk_dialog_run(GTK_DIALOG(gladewidget));
}
-GtkComboBox* get_SelectGraph()
+GtkComboBox *get_SelectGraph()
{
- GtkComboBox* cb;
- if (!cbSelectGraph)
- {
+ GtkComboBox *cb;
+ if (!cbSelectGraph) {
- cb=(GtkComboBox*)gtk_combo_box_new_text();
- gtk_widget_show ((GtkWidget*)cb);
- gladewidget = glade_xml_get_widget(xml, "layout6");
- gtk_box_pack_start (GTK_BOX (gladewidget),(GtkWidget*) cb, FALSE, FALSE, 0);
+ cb = (GtkComboBox *) gtk_combo_box_new_text();
+ gtk_widget_show((GtkWidget *) cb);
+ gladewidget = glade_xml_get_widget(xml, "layout6");
+ gtk_box_pack_start(GTK_BOX(gladewidget), (GtkWidget *) cb, FALSE,
+ FALSE, 0);
-
- gtk_layout_put ((GtkLayout*)gladewidget,(GtkWidget*)cb,780,3);
- //signal
- g_signal_connect ((gpointer) cb, "changed", G_CALLBACK(graph_select_change),
- NULL);
+ gtk_layout_put((GtkLayout *) gladewidget, (GtkWidget *) cb, 780,
+ 3);
+ //signal
+ g_signal_connect((gpointer) cb, "changed",
+ G_CALLBACK(graph_select_change), NULL);
- return cb;
- }
- else
- return cbSelectGraph;
+
+ return cb;
+ } else
+ return cbSelectGraph;
}
-void Color_Widget_bg (char* colorstring, GtkWidget *widget)
+void Color_Widget_bg(char *colorstring, GtkWidget * widget)
{
- GdkColor color;
- gdk_color_parse (colorstring, &color);
- gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &color);
- gtk_widget_modify_base(widget, GTK_STATE_NORMAL, &color);
+ GdkColor color;
+ gdk_color_parse(colorstring, &color);
+ gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &color);
+ gtk_widget_modify_base(widget, GTK_STATE_NORMAL, &color);
}
#if 0
-void Color_Widget_fg (int r, int g, int b, GtkWidget *widget)
+void Color_Widget_fg(int r, int g, int b, GtkWidget * widget)
{
- GdkColor color;
- gdk_color_parse ("red", &color);
- gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, &color);
+ GdkColor color;
+ gdk_color_parse("red", &color);
+ gtk_widget_modify_fg(widget, GTK_STATE_NORMAL, &color);
}
#endif
-void load_graph_properties(Agraph_t* graph)
+void load_graph_properties(Agraph_t * graph)
{
- //dlgOpenGraph , GtkDialog
- gtk_entry_set_text((GtkEntry*)glade_xml_get_widget(xml, "entryGraphName"),((custom_graph_data*)AGDATA(graph))->GraphName);
- gtk_entry_set_text((GtkEntry*)glade_xml_get_widget(xml, "entryGraphFileName"),((custom_graph_data*)AGDATA(graph))->GraphFileName);
-
- gtk_combo_box_set_active ((GtkComboBox*)glade_xml_get_widget(xml, "cbLayout"),((custom_graph_data*)AGDATA(graph))->Engine);
- gtk_toggle_button_set_active((GtkToggleButton*)glade_xml_get_widget(xml, "chkVisible"),((custom_graph_data*)AGDATA(graph))->AlwaysShow);
- gtk_toggle_button_set_active((GtkToggleButton*)glade_xml_get_widget(xml, "chkLocked"),((custom_graph_data*)AGDATA(graph))->Locked);
- gtk_toggle_button_set_active((GtkToggleButton*)glade_xml_get_widget(xml, "chkTopView"),((custom_graph_data*)AGDATA(graph))->TopView);
+ //dlgOpenGraph , GtkDialog
+ gtk_entry_set_text((GtkEntry *)
+ glade_xml_get_widget(xml, "entryGraphName"),
+ ((custom_graph_data *) AGDATA(graph))->GraphName);
+ gtk_entry_set_text((GtkEntry *)
+ glade_xml_get_widget(xml, "entryGraphFileName"),
+ ((custom_graph_data *) AGDATA(graph))->
+ GraphFileName);
+
+ gtk_combo_box_set_active((GtkComboBox *)
+ glade_xml_get_widget(xml, "cbLayout"),
+ ((custom_graph_data *) AGDATA(graph))->
+ Engine);
+ gtk_toggle_button_set_active((GtkToggleButton *)
+ glade_xml_get_widget(xml, "chkVisible"),
+ ((custom_graph_data *) AGDATA(graph))->
+ AlwaysShow);
+ gtk_toggle_button_set_active((GtkToggleButton *)
+ glade_xml_get_widget(xml, "chkLocked"),
+ ((custom_graph_data *) AGDATA(graph))->
+ Locked);
+ gtk_toggle_button_set_active((GtkToggleButton *)
+ glade_xml_get_widget(xml, "chkTopView"),
+ ((custom_graph_data *) AGDATA(graph))->
+ TopView);
}
-int update_graph_properties(Agraph_t* graph) //updates graph from gui
+int update_graph_properties(Agraph_t * graph) //updates graph from gui
{
- FILE* file;
- int respond=0;
- int id=0;
- //check the graph name should not be duplicated graph names
- for (id=0;id < view->graphCount ; id ++)
- {
- if (graph != view->g[id])
- {
- if(strcasecmp (gtk_entry_get_text((GtkEntry*)glade_xml_get_widget(xml, "entryGraphName")),((custom_graph_data*)AGDATA(view->g[id]))->GraphName ) == 0)
- {
-
- Dlg=(GtkMessageDialog*)gtk_message_dialog_new (NULL,
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_WARNING,
- GTK_BUTTONS_OK,
- "There is another graph with this name!");
- respond=gtk_dialog_run ((GtkDialog*)Dlg);
- gtk_object_destroy ((GtkObject*)Dlg);
- return 0;
-
- }
+ FILE *file;
+ int respond = 0;
+ int id = 0;
+ //check the graph name should not be duplicated graph names
+ for (id = 0; id < view->graphCount; id++) {
+ if (graph != view->g[id]) {
+ if (strcasecmp
+ (gtk_entry_get_text
+ ((GtkEntry *)
+ glade_xml_get_widget(xml, "entryGraphName")),
+ ((custom_graph_data *) AGDATA(view->g[id]))->GraphName) ==
+ 0) {
+
+ Dlg = (GtkMessageDialog *) gtk_message_dialog_new(NULL,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_OK,
+ "There is another graph with this name!");
+ respond = gtk_dialog_run((GtkDialog *) Dlg);
+ gtk_object_destroy((GtkObject *) Dlg);
+ return 0;
+
+ }
- }
}
-
- //check if file is changed
- if (strcasecmp (gtk_entry_get_text((GtkEntry*)glade_xml_get_widget(xml, "entryGraphFileName")),((custom_graph_data*)AGDATA(graph))->GraphFileName ) != 0)
- {
-
-
- if (file = fopen(gtk_entry_get_text((GtkEntry*)glade_xml_get_widget(xml, "entryGraphFileName")), "r"))
- {
- fclose(file);
- Dlg = (GtkMessageDialog*)gtk_message_dialog_new (NULL,
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_YES_NO,
- "File name you have entered already exists\n,this will cause overwriting on existing file.\nAre you sure?");
- respond=gtk_dialog_run ((GtkDialog*)Dlg);
- gtk_object_destroy ((GtkObject*)Dlg);
-
- if (respond==GTK_RESPONSE_NO)
- return 0;
- }
- //now check if filename is legal, try to open it to write
- if (file = fopen(gtk_entry_get_text((GtkEntry*)glade_xml_get_widget(xml, "entryGraphFileName")), "w"))
- fclose(file);
- else
- {
- Dlg=(GtkMessageDialog*)gtk_message_dialog_new (NULL,
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_WARNING,
- GTK_BUTTONS_OK,
- "File name is invalid or I/O error!");
-
- respond=gtk_dialog_run ((GtkDialog*)Dlg);
- gtk_object_destroy ((GtkObject*)Dlg);
- GTK_DIALOG (Dlg);
-
- return 0;
- }
-
+ }
+
+ //check if file is changed
+ if (strcasecmp
+ (gtk_entry_get_text
+ ((GtkEntry *) glade_xml_get_widget(xml, "entryGraphFileName")),
+ ((custom_graph_data *) AGDATA(graph))->GraphFileName) != 0) {
+
+
+ if ((file =
+ fopen(gtk_entry_get_text
+ ((GtkEntry *)
+ glade_xml_get_widget(xml, "entryGraphFileName")),
+ "r"))) {
+ fclose(file);
+ Dlg = (GtkMessageDialog *) gtk_message_dialog_new(NULL,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_YES_NO,
+ "File name you have entered already exists\n,this will cause overwriting on existing file.\nAre you sure?");
+ respond = gtk_dialog_run((GtkDialog *) Dlg);
+ gtk_object_destroy((GtkObject *) Dlg);
+
+ if (respond == GTK_RESPONSE_NO)
+ return 0;
}
-
-
-
- //if it comes so far graph deserves new values
-
-
-
- ((custom_graph_data*)AGDATA(graph))->GraphName=(char*)gtk_entry_get_text((GtkEntry*)glade_xml_get_widget(xml, "entryGraphName"));
- ((custom_graph_data*)AGDATA(graph))->GraphFileName=(char*)gtk_entry_get_text((GtkEntry*)glade_xml_get_widget(xml, "entryGraphFileName"));
-
- ((custom_graph_data*)AGDATA(graph))->AlwaysShow=gtk_toggle_button_get_active((GtkToggleButton*)glade_xml_get_widget(xml, "chkVisible"));
- ((custom_graph_data*)AGDATA(graph))->Locked=gtk_toggle_button_get_active((GtkToggleButton*)glade_xml_get_widget(xml, "chkLocked"));
- ((custom_graph_data*)AGDATA(graph))->TopView=gtk_toggle_button_get_active((GtkToggleButton*)glade_xml_get_widget(xml, "chkTopView"));
-
-
- //check if the engine has been changed, if so do new layout
- if( ((custom_graph_data*)AGDATA(graph))->Engine != gtk_combo_box_get_active ((GtkComboBox*)glade_xml_get_widget(xml, "cbLayout")) )
- {
- Dlg = (GtkMessageDialog*)gtk_message_dialog_new (NULL,
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_YES_NO,
- "You have changed the layout of the graph,this will change the graph layout\n all your position changes will be lost\n Are you sure?");
- respond=gtk_dialog_run ((GtkDialog*)Dlg);
- if (respond == GTK_RESPONSE_YES)
- do_graph_layout(graph,gtk_combo_box_get_active ((GtkComboBox*)glade_xml_get_widget(xml, "cbLayout")),0);
- gtk_object_destroy ((GtkObject*)Dlg);
+ //now check if filename is legal, try to open it to write
+ if ((file =
+ fopen(gtk_entry_get_text
+ ((GtkEntry *)
+ glade_xml_get_widget(xml, "entryGraphFileName")),
+ "w")))
+ fclose(file);
+ else {
+ Dlg = (GtkMessageDialog *) gtk_message_dialog_new(NULL,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_OK,
+ "File name is invalid or I/O error!");
+
+ respond = gtk_dialog_run((GtkDialog *) Dlg);
+ gtk_object_destroy((GtkObject *) Dlg);
+ GTK_DIALOG(Dlg);
+
+ return 0;
}
- return 1;
+
+ }
+
+
+ //if it comes so far graph deserves new values
+
+
+
+ ((custom_graph_data *) AGDATA(graph))->GraphName =
+ (char *) gtk_entry_get_text((GtkEntry *)
+ glade_xml_get_widget(xml,
+ "entryGraphName"));
+ ((custom_graph_data *) AGDATA(graph))->GraphFileName =
+ (char *) gtk_entry_get_text((GtkEntry *)
+ glade_xml_get_widget(xml,
+ "entryGraphFileName"));
+
+ ((custom_graph_data *) AGDATA(graph))->AlwaysShow =
+ gtk_toggle_button_get_active((GtkToggleButton *)
+ glade_xml_get_widget(xml,
+ "chkVisible"));
+ ((custom_graph_data *) AGDATA(graph))->Locked =
+ gtk_toggle_button_get_active((GtkToggleButton *)
+ glade_xml_get_widget(xml,
+ "chkLocked"));
+ ((custom_graph_data *) AGDATA(graph))->TopView =
+ gtk_toggle_button_get_active((GtkToggleButton *)
+ glade_xml_get_widget(xml,
+ "chkTopView"));
+
+
+ //check if the engine has been changed, if so do new layout
+ if (((custom_graph_data *) AGDATA(graph))->Engine !=
+ gtk_combo_box_get_active((GtkComboBox *)
+ glade_xml_get_widget(xml, "cbLayout"))) {
+ Dlg =
+ (GtkMessageDialog *) gtk_message_dialog_new(NULL,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_YES_NO,
+ "You have changed the layout of the graph,this will change the graph layout\n all your position changes will be lost\n Are you sure?");
+ respond = gtk_dialog_run((GtkDialog *) Dlg);
+ if (respond == GTK_RESPONSE_YES)
+ do_graph_layout(graph,
+ gtk_combo_box_get_active((GtkComboBox *)
+ glade_xml_get_widget
+ (xml, "cbLayout")),
+ 0);
+ gtk_object_destroy((GtkObject *) Dlg);
+ }
+ return 1;
}
-int load_object_properties(int typeIndex,Agraph_t* g) //load from object to gui;
+int load_object_properties(int typeIndex, Agraph_t * g) //load from object to gui;
{
- //typeindex 0:graph 1:cluster 2:Node 3:Edge
- //load attr from first selected object
- GtkLayout* layout;
- GdkColor color;
+ //typeindex 0:graph 1:cluster 2:Node 3:Edge
+ //load attr from first selected object
+ GtkLayout *layout;
+ GdkColor color;
char buf[100];
- int ind=0;
- int Y=45;
- int X=90;
- int Yinc=25;
- int Xinc=30;
- int OriginalX= 90;
- int OriginalY= 45;
- int widget_per_page=21;
- void* obj;
- char line [ 128 ];
- float a,b;
- layout=(GtkLayout*)glade_xml_get_widget(xml, "layout4");
- frmObjectTypeIndex=typeIndex;
- frmObjectg=g;
- widgetcounter=0;
- //values should be set from first selected object
- //according to object type (typeIndex) set the reference object
- switch (typeIndex) //typeindex 0 means new object
- {
- case 1: //graph sub graph (cluster)
- obj=((custom_graph_data*)AGDATA(g))->selectedGraphs[0];
- break;
- case 2: //Node
- obj=((custom_graph_data*)AGDATA(g))->selectedNodes[0];
- break;
- case 3: //Edge
- obj=((custom_graph_data*)AGDATA(g))->selectedEdges[0];
- break;
- }
- for (widgetcounter=0;widgetcounter < MAXIMUM_WIDGET_COUNT ;widgetcounter ++)
- {
- //create the labels and widget here
- attr[widgetcounter].ComboValuesCount=0;
- attr[widgetcounter].ComboValues='\0';
-
- if (!AttrWidgets[widgetcounter])
- {
- AttrLabels[widgetcounter]=gtk_label_new (attr[widgetcounter].Name);
- switch (attr[widgetcounter].Type)
- {
- case 'F': //float
- AttrWidgets[widgetcounter]=gtk_spin_button_new_with_range(0,100,0.001);
- g_signal_connect ((gpointer) AttrWidgets[widgetcounter], "value-changed", G_CALLBACK(attr_widgets_modifiedSlot),(gpointer)widgetcounter);
-
- break;
- case 'C': //color box
- AttrWidgets[widgetcounter]=gtk_color_button_new();
- gtk_widget_set_size_request(AttrWidgets[widgetcounter],50,23);
- g_signal_connect ((gpointer) AttrWidgets[widgetcounter], "color-set", G_CALLBACK(attr_widgets_modifiedSlot),(gpointer)widgetcounter);
-
- break;
- default: //alphanumreric GTK Entry
- AttrWidgets[widgetcounter]=gtk_entry_new();
- gtk_widget_set_size_request(AttrWidgets[widgetcounter],130,23);
- g_signal_connect ((gpointer) AttrWidgets[widgetcounter], "changed", G_CALLBACK(attr_widgets_modifiedSlot),(gpointer)widgetcounter);
-
- break;
- }
- attr[widgetcounter].attrWidget=AttrWidgets[widgetcounter];
- }
- //locate widget on the GtkLayout* layout
- if (attr[widgetcounter].ApplyTo[typeIndex]==1)
- {
- gtk_layout_put (layout,AttrWidgets[widgetcounter],X,Y);
- gtk_layout_put (layout,AttrLabels[widgetcounter],X-80,Y);
- gtk_widget_show(AttrWidgets[widgetcounter]);
- gtk_widget_show(AttrLabels[widgetcounter]);
- Y=Y+Yinc;
- switch(attr[widgetcounter].Type)
- {
- case 'F':
- if (agget(obj, attr[widgetcounter].Name))
- gtk_spin_button_set_value ((GtkSpinButton*)AttrWidgets[widgetcounter],atof(agget(obj, attr[widgetcounter].Name)) );
- else
- gtk_spin_button_set_value ((GtkSpinButton*)AttrWidgets[widgetcounter],atof(attr[widgetcounter].Default) );
- break;
- case 'C':
- if (agget(obj, attr[widgetcounter].Name))
- SetGdkColor(&color,agget(obj, attr[widgetcounter].Name));
- else
- SetGdkColor(&color,attr[widgetcounter].Default);
-
- gtk_color_button_set_color((GtkColorButton*)AttrWidgets[widgetcounter],&color);
- break;
- default:
- if (agget(obj, attr[widgetcounter].Name))
- gtk_entry_set_text((GtkEntry*)AttrWidgets[widgetcounter],agget(obj, attr[widgetcounter].Name));
- else
- gtk_entry_set_text((GtkEntry*)AttrWidgets[widgetcounter],attr[widgetcounter].Default);
-
- }
- gtk_widget_show(AttrWidgets[widgetcounter]);
- gtk_widget_show(AttrLabels[widgetcounter]);
- }
- else
- {
- gtk_widget_hide(AttrWidgets[widgetcounter]);
- gtk_widget_hide(AttrLabels[widgetcounter]);
-
- }
- if (Y > widget_per_page*Yinc)
- {
- X=320;
- Y=OriginalY;
- }
- attr_widgets_modified[widgetcounter]=0; //set to unmodified
- }
+ /* int ind=0; */
+ int Y = 45;
+ int X = 90;
+ int Yinc = 25;
+ /* int Xinc=30; */
+ /* int OriginalX= 90; */
+ int OriginalY = 45;
+ int widget_per_page = 21;
+ void *obj;
+ char line[128];
+ float a, b;
+ layout = (GtkLayout *) glade_xml_get_widget(xml, "layout4");
+ frmObjectTypeIndex = typeIndex;
+ frmObjectg = g;
+ widgetcounter = 0;
+ //values should be set from first selected object
+ //according to object type (typeIndex) set the reference object
+ switch (typeIndex) //typeindex 0 means new object
+ {
+ case 1: //graph sub graph (cluster)
+ obj = ((custom_graph_data *) AGDATA(g))->selectedGraphs[0];
+ break;
+ case 2: //Node
+ obj = ((custom_graph_data *) AGDATA(g))->selectedNodes[0];
+ break;
+ case 3: //Edge
+ obj = ((custom_graph_data *) AGDATA(g))->selectedEdges[0];
+ break;
+ }
+ for (widgetcounter = 0; widgetcounter < MAXIMUM_WIDGET_COUNT;
+ widgetcounter++) {
+ //create the labels and widget here
+ attr[widgetcounter].ComboValuesCount = 0;
+ attr[widgetcounter].ComboValues = '\0';
+
+ if (!AttrWidgets[widgetcounter]) {
+ AttrLabels[widgetcounter] =
+ gtk_label_new(attr[widgetcounter].Name);
+ switch (attr[widgetcounter].Type) {
+ case 'F': //float
+ AttrWidgets[widgetcounter] =
+ gtk_spin_button_new_with_range(0, 100, 0.001);
+ g_signal_connect((gpointer) AttrWidgets[widgetcounter],
+ "value-changed",
+ G_CALLBACK(attr_widgets_modifiedSlot),
+ (gpointer) widgetcounter);
+
+ break;
+ case 'C': //color box
+ AttrWidgets[widgetcounter] = gtk_color_button_new();
+ gtk_widget_set_size_request(AttrWidgets[widgetcounter], 50,
+ 23);
+ g_signal_connect((gpointer) AttrWidgets[widgetcounter],
+ "color-set",
+ G_CALLBACK(attr_widgets_modifiedSlot),
+ (gpointer) widgetcounter);
+
+ break;
+ default: //alphanumreric GTK Entry
+ AttrWidgets[widgetcounter] = gtk_entry_new();
+ gtk_widget_set_size_request(AttrWidgets[widgetcounter],
+ 130, 23);
+ g_signal_connect((gpointer) AttrWidgets[widgetcounter],
+ "changed",
+ G_CALLBACK(attr_widgets_modifiedSlot),
+ (gpointer) widgetcounter);
+
+ break;
+ }
+ attr[widgetcounter].attrWidget = AttrWidgets[widgetcounter];
+ }
+ //locate widget on the GtkLayout* layout
+ if (attr[widgetcounter].ApplyTo[typeIndex] == 1) {
+ gtk_layout_put(layout, AttrWidgets[widgetcounter], X, Y);
+ gtk_layout_put(layout, AttrLabels[widgetcounter], X - 80, Y);
+ gtk_widget_show(AttrWidgets[widgetcounter]);
+ gtk_widget_show(AttrLabels[widgetcounter]);
+ Y = Y + Yinc;
+ switch (attr[widgetcounter].Type) {
+ case 'F':
+ if (agget(obj, attr[widgetcounter].Name))
+ gtk_spin_button_set_value((GtkSpinButton *)
+ AttrWidgets[widgetcounter],
+ atof(agget
+ (obj,
+ attr[widgetcounter].
+ Name)));
+ else
+ gtk_spin_button_set_value((GtkSpinButton *)
+ AttrWidgets[widgetcounter],
+ atof(attr[widgetcounter].
+ Default));
+ break;
+ case 'C':
+ if (agget(obj, attr[widgetcounter].Name))
+ SetGdkColor(&color,
+ agget(obj, attr[widgetcounter].Name));
+ else
+ SetGdkColor(&color, attr[widgetcounter].Default);
+
+ gtk_color_button_set_color((GtkColorButton *)
+ AttrWidgets[widgetcounter],
+ &color);
+ break;
+ default:
+ if (agget(obj, attr[widgetcounter].Name))
+ gtk_entry_set_text((GtkEntry *)
+ AttrWidgets[widgetcounter],
+ agget(obj,
+ attr[widgetcounter].Name));
+ else
+ gtk_entry_set_text((GtkEntry *)
+ AttrWidgets[widgetcounter],
+ attr[widgetcounter].Default);
-
- //first part, common attributes
- sprintf (buf, "%i", ((custom_object_data*)AGDATA(obj))->ID);
- gtk_entry_set_text((GtkEntry*)glade_xml_get_widget(xml, "objEntryName"),((custom_object_data*)AGDATA(obj))->ObjName);
- gtk_entry_set_text((GtkEntry*)glade_xml_get_widget(xml, "objEntryLabel"),agnameof(obj));
-
- gtk_toggle_button_set_active((GtkToggleButton*)glade_xml_get_widget(xml, "frmObjectchkVisible"),((custom_object_data*)AGDATA(obj))->Visible);
- gtk_toggle_button_set_active((GtkToggleButton*)glade_xml_get_widget(xml, "frmObjectchkLocked"),((custom_object_data*)AGDATA(obj))->Locked);
- gtk_toggle_button_set_active((GtkToggleButton*)glade_xml_get_widget(xml, "frmObjectchkHighlighted"),((custom_object_data*)AGDATA(obj))->Highlighted);
- //get the position info // show only one item is selected
- if (
- ( (((custom_graph_data*)AGDATA(g))->selectedNodesCount == 1) && (typeIndex==2) )
- ||
- ( (((custom_graph_data*)AGDATA(g))->selectedEdgesCount == 1) && (typeIndex==3) )
- ||
- ((((custom_graph_data*)AGDATA(g))->selectedGraphsCount == 1) && (typeIndex==3) )
-
- )
- {
- sprintf (line, "%s", agget(obj,"pos"));
- a=(float)atof(strtok (line,"," ));
- b=(float)atof(strtok (NULL,"," ));
- gtk_spin_button_set_value ((GtkSpinButton*)glade_xml_get_widget(xml,"frmObjectPosX"), a );
- gtk_spin_button_set_value ((GtkSpinButton*)glade_xml_get_widget(xml,"frmObjectPosY"), b );
- gtk_spin_button_set_value ((GtkSpinButton*)glade_xml_get_widget(xml,"frmObjectPosZ"), 0 );
- gtk_widget_show (glade_xml_get_widget(xml,"frmObjectPosX"));
- gtk_widget_show (glade_xml_get_widget(xml,"frmObjectPosY"));
- gtk_widget_show (glade_xml_get_widget(xml,"frmObjectPosZ"));
- gtk_widget_show (glade_xml_get_widget(xml,"frmObjectlabel3"));
- gtk_label_set_text( (GtkLabel*)glade_xml_get_widget(xml,"frmObjectPosLabelX"),"X:");
-
- }
- else
+ }
+ gtk_widget_show(AttrWidgets[widgetcounter]);
+ gtk_widget_show(AttrLabels[widgetcounter]);
+ } else {
+ gtk_widget_hide(AttrWidgets[widgetcounter]);
+ gtk_widget_hide(AttrLabels[widgetcounter]);
+
+ }
+ if (Y > widget_per_page * Yinc) {
+ X = 320;
+ Y = OriginalY;
+ }
+ attr_widgets_modified[widgetcounter] = 0; //set to unmodified
+ }
+
+
+ //first part, common attributes
+ sprintf(buf, "%i", ((custom_object_data *) AGDATA(obj))->ID);
+ gtk_entry_set_text((GtkEntry *)
+ glade_xml_get_widget(xml, "objEntryName"),
+ ((custom_object_data *) AGDATA(obj))->ObjName);
+ gtk_entry_set_text((GtkEntry *)
+ glade_xml_get_widget(xml, "objEntryLabel"),
+ agnameof(obj));
+
+ gtk_toggle_button_set_active((GtkToggleButton *)
+ glade_xml_get_widget(xml,
+ "frmObjectchkVisible"),
+ ((custom_object_data *) AGDATA(obj))->
+ Visible);
+ gtk_toggle_button_set_active((GtkToggleButton *)
+ glade_xml_get_widget(xml,
+ "frmObjectchkLocked"),
+ ((custom_object_data *) AGDATA(obj))->
+ Locked);
+ gtk_toggle_button_set_active((GtkToggleButton *)
+ glade_xml_get_widget(xml,
+ "frmObjectchkHighlighted"),
+ ((custom_object_data *) AGDATA(obj))->
+ Highlighted);
+ //get the position info // show only one item is selected
+ if (((((custom_graph_data *) AGDATA(g))->selectedNodesCount == 1)
+ && (typeIndex == 2))
+ || ((((custom_graph_data *) AGDATA(g))->selectedEdgesCount == 1)
+ && (typeIndex == 3))
+ || ((((custom_graph_data *) AGDATA(g))->selectedGraphsCount == 1)
+ && (typeIndex == 3))
+
+ ) {
+ sprintf(line, "%s", agget(obj, "pos"));
+ a = (float) atof(strtok(line, ","));
+ b = (float) atof(strtok(NULL, ","));
+ gtk_spin_button_set_value((GtkSpinButton *)
+ glade_xml_get_widget(xml,
+ "frmObjectPosX"),
+ a);
+ gtk_spin_button_set_value((GtkSpinButton *)
+ glade_xml_get_widget(xml,
+ "frmObjectPosY"),
+ b);
+ gtk_spin_button_set_value((GtkSpinButton *)
+ glade_xml_get_widget(xml,
+ "frmObjectPosZ"),
+ 0);
+ gtk_widget_show(glade_xml_get_widget(xml, "frmObjectPosX"));
+ gtk_widget_show(glade_xml_get_widget(xml, "frmObjectPosY"));
+ gtk_widget_show(glade_xml_get_widget(xml, "frmObjectPosZ"));
+ gtk_widget_show(glade_xml_get_widget(xml, "frmObjectlabel3"));
+ gtk_label_set_text((GtkLabel *)
+ glade_xml_get_widget(xml, "frmObjectPosLabelX"),
+ "X:");
+
+ } else {
+ gtk_widget_hide(glade_xml_get_widget(xml, "frmObjectPosX"));
+ gtk_widget_hide(glade_xml_get_widget(xml, "frmObjectPosY"));
+ gtk_widget_hide(glade_xml_get_widget(xml, "frmObjectPosZ"));
+ gtk_widget_hide(glade_xml_get_widget(xml, "frmObjectlabel3"));
+ gtk_widget_hide(glade_xml_get_widget(xml, "frmObjectPosLabelY"));
+ gtk_widget_hide(glade_xml_get_widget(xml, "frmObjectPosLabelZ"));
+ switch (typeIndex) //typeindex 0 means new object
{
- gtk_widget_hide (glade_xml_get_widget(xml,"frmObjectPosX"));
- gtk_widget_hide (glade_xml_get_widget(xml,"frmObjectPosY"));
- gtk_widget_hide (glade_xml_get_widget(xml,"frmObjectPosZ"));
- gtk_widget_hide (glade_xml_get_widget(xml,"frmObjectlabel3"));
- gtk_widget_hide (glade_xml_get_widget(xml,"frmObjectPosLabelY"));
- gtk_widget_hide (glade_xml_get_widget(xml,"frmObjectPosLabelZ"));
- switch (typeIndex) //typeindex 0 means new object
- {
- case 1: //graph sub graph (cluster)
- gtk_label_set_text((GtkLabel*)glade_xml_get_widget(xml,"frmObjectPosLabelX"),"Changes that you make will be applied to all selected Clusters1");
- break;
- case 2: //Node
- gtk_label_set_text((GtkLabel*)glade_xml_get_widget(xml,"frmObjectPosLabelX"),"Changes that you make will be applied to all selected Nodes!");
- break;
- case 3: //Edge
- gtk_label_set_text((GtkLabel*)glade_xml_get_widget(xml,"frmObjectPosLabelX"),"Changes that you make will be applied to all selected Edges!");
- break;
- }
+ case 1: //graph sub graph (cluster)
+ gtk_label_set_text((GtkLabel *)
+ glade_xml_get_widget(xml,
+ "frmObjectPosLabelX"),
+ "Changes that you make will be applied to all selected Clusters1");
+ break;
+ case 2: //Node
+ gtk_label_set_text((GtkLabel *)
+ glade_xml_get_widget(xml,
+ "frmObjectPosLabelX"),
+ "Changes that you make will be applied to all selected Nodes!");
+ break;
+ case 3: //Edge
+ gtk_label_set_text((GtkLabel *)
+ glade_xml_get_widget(xml,
+ "frmObjectPosLabelX"),
+ "Changes that you make will be applied to all selected Edges!");
+ break;
}
- return 1;
+ }
+ return 1;
}
-void update_object_properties(int typeIndex,Agraph_t* g) //updates objects from gui(node ,edge, cluster)
+void update_object_properties(int typeIndex, Agraph_t * g) //updates objects from gui(node ,edge, cluster)
{
- int ind=0;
- for (ind = 0 ; ind < widgetcounter ; ind ++)
- {
- //if widget has been changed
- if (attr_widgets_modified[ind] == 1)
- {
- switch (typeIndex) //typeindex 0 means new object
- {
- case 1: //graph sub graph (cluster)
- change_selected_graph_attributes(g,attr[ind].Name,get_attribute_string_value_from_widget(&attr[ind]));
- break;
- case 2: //Node
- change_selected_node_attributes(g,attr[ind].Name,get_attribute_string_value_from_widget(&attr[ind]));
- break;
- case 3: //Edge
- change_selected_edge_attributes(g,attr[ind].Name,get_attribute_string_value_from_widget(&attr[ind]));
- break;
- }
- }
-
+ int ind = 0;
+ for (ind = 0; ind < widgetcounter; ind++) {
+ //if widget has been changed
+ if (attr_widgets_modified[ind] == 1) {
+ switch (typeIndex) //typeindex 0 means new object
+ {
+ case 1: //graph sub graph (cluster)
+ change_selected_graph_attributes(g, attr[ind].Name,
+ get_attribute_string_value_from_widget
+ (&attr[ind]));
+ break;
+ case 2: //Node
+ change_selected_node_attributes(g, attr[ind].Name,
+ get_attribute_string_value_from_widget
+ (&attr[ind]));
+ break;
+ case 3: //Edge
+ change_selected_edge_attributes(g, attr[ind].Name,
+ get_attribute_string_value_from_widget
+ (&attr[ind]));
+ break;
+ }
}
+
+ }
}
-char* get_attribute_string_value_from_widget(attribute* att)
+char *get_attribute_string_value_from_widget(attribute * att)
{
- GdkColor color;
- switch(att->Type)
- {
- case 'F':
- sprintf(guibuffer,"%f",gtk_spin_button_get_value((GtkSpinButton*)att->attrWidget));
- return guibuffer;
- break;
- case 'C':
- gtk_color_button_get_color((GtkColorButton*)att->attrWidget,&color);
- sprintf(guibuffer,"#%x%x%x",color.red/255,color.green/255,color.blue/255);
- return guibuffer;
- break;
- default:
- strcpy(guibuffer,gtk_entry_get_text((GtkEntry*)att->attrWidget));
- return guibuffer;
- }
+ GdkColor color;
+ switch (att->Type) {
+ case 'F':
+ sprintf(guibuffer, "%f",
+ gtk_spin_button_get_value((GtkSpinButton *) att->
+ attrWidget));
+ return guibuffer;
+ break;
+ case 'C':
+ gtk_color_button_get_color((GtkColorButton *) att->attrWidget,
+ &color);
+ sprintf(guibuffer, "#%x%x%x", color.red / 255, color.green / 255,
+ color.blue / 255);
+ return guibuffer;
+ break;
+ default:
+ strcpy(guibuffer,
+ gtk_entry_get_text((GtkEntry *) att->attrWidget));
+ return guibuffer;
+ }
}
-void change_selected_graph_attributes (Agraph_t* g,char* attrname,char* attrvalue)
+void change_selected_graph_attributes(Agraph_t * g, char *attrname,
+ char *attrvalue)
{
- int ind=0;
- agattr(g,AGRAPH,attrname,"");
+ int ind = 0;
+ agattr(g, AGRAPH, attrname, "");
+
+ for (ind = 0;
+ ind < ((custom_graph_data *) AGDATA(g))->selectedGraphsCount;
+ ind++) {
+ agset(((custom_graph_data *) AGDATA(g))->selectedGraphs[ind],
+ attrname, attrvalue);
+ }
- for (ind=0;ind <((custom_graph_data*)AGDATA(g))->selectedGraphsCount;ind ++ )
- {
- agset(((custom_graph_data*)AGDATA(g))->selectedGraphs[ind],attrname,attrvalue);
- }
-
}
-void change_selected_node_attributes (Agraph_t* g,char* attrname,char* attrvalue)
+void change_selected_node_attributes(Agraph_t * g, char *attrname,
+ char *attrvalue)
{
- int ind=0;
- agattr(g,AGNODE,attrname,"");
- for (ind=0;ind <((custom_graph_data*)AGDATA(g))->selectedNodesCount;ind ++ )
- {
- agset(((custom_graph_data*)AGDATA(g))->selectedNodes[ind],attrname,attrvalue);
- }
+ int ind = 0;
+ agattr(g, AGNODE, attrname, "");
+ for (ind = 0;
+ ind < ((custom_graph_data *) AGDATA(g))->selectedNodesCount;
+ ind++) {
+ agset(((custom_graph_data *) AGDATA(g))->selectedNodes[ind],
+ attrname, attrvalue);
+ }
}
-void change_selected_edge_attributes (Agraph_t* g,char* attrname,char* attrvalue)
+void change_selected_edge_attributes(Agraph_t * g, char *attrname,
+ char *attrvalue)
{
- int ind=0;
- agattr(g,AGEDGE,attrname,"");
- for (ind=0;ind <((custom_graph_data*)AGDATA(g))->selectedEdgesCount;ind ++ )
- {
- agset(((custom_graph_data*)AGDATA(g))->selectedEdges[ind],attrname,attrvalue);
-
- }
+ int ind = 0;
+ agattr(g, AGEDGE, attrname, "");
+ for (ind = 0;
+ ind < ((custom_graph_data *) AGDATA(g))->selectedEdgesCount;
+ ind++) {
+ agset(((custom_graph_data *) AGDATA(g))->selectedEdges[ind],
+ attrname, attrvalue);
+
+ }
}
void load_attributes()
{
- FILE * file;
+ FILE *file;
char line[255];
- char *ss;
- char* pch;
- int ind=0;
- int attrcount=0;
- //loads attributes from a text file
- file = fopen (SMYRNA_ATTRS, "r");
- if ( file != NULL )
- {
- while ( fgets ( line, sizeof line, file ) != NULL )
- {
- pch = strtok (line,",");
- ind=0;
- while (pch != NULL)
- {
- ss=strdup(pch);
-// ABRemove(&ss,'\"');
-// ABRemove(&ss,' ');
- pch = strtok (NULL, ",");
- switch (ind)
- {
- case 0:
- attr[attrcount].Type=ss[0];
- break;
- case 1:
- attr[attrcount].Name=strdup(ss);
- break;
- case 2:
- attr[attrcount].Default=strdup(ss);
- break;
- case 3:
- if (strstr(ss,"ANY_ELEMENT"))
- {
- attr[attrcount].ApplyTo[0]=1;
- attr[attrcount].ApplyTo[1]=1;
- attr[attrcount].ApplyTo[2]=1;
- attr[attrcount].ApplyTo[3]=1;
- }
- else
- {
- attr[attrcount].ApplyTo[0]=strstr(ss,"GRAPH") ? 1:0;
- attr[attrcount].ApplyTo[1]=strstr(ss,"CLUSTER") ? 1:0;
- attr[attrcount].ApplyTo[2]=strstr(ss,"NODE")? 1:0;
- attr[attrcount].ApplyTo[3]=strstr(ss,"EDGE")? 1:0;
- }
- break;
- case 4:
- if (strstr(ss,"ALL_ENGINES"))
- {
- attr[attrcount].Engine[0]=1;
- attr[attrcount].Engine[1]=1;
- attr[attrcount].Engine[2]=1;
- attr[attrcount].Engine[3]=1;
- attr[attrcount].Engine[4]=1;
- }
- else
- {
- attr[attrcount].Engine[0]=strstr(ss,"DOT")? 1:0;
- attr[attrcount].Engine[1]=strstr(ss,"NEATO")? 1:0;
- attr[attrcount].Engine[2]=strstr(ss,"TWOPI")? 1:0;
- attr[attrcount].Engine[3]=strstr(ss,"CIRCO")? 1:0;
- attr[attrcount].Engine[4]=strstr(ss,"FDP")? 1:0;
- }
- break;
- default:
- attr[attrcount].ComboValues=realloc(attr[attrcount].ComboValues,sizeof(char**)*attr[attrcount].ComboValuesCount);
- attr[attrcount].ComboValues[attr[attrcount].ComboValuesCount]=strdup(ss);
- attr[attrcount].ComboValuesCount ++;
- break;
- }
- ind++;
- }
- attrcount++;
+ char *ss;
+ char *pch;
+ int ind = 0;
+ int attrcount = 0;
+ //loads attributes from a text file
+ file = fopen(SMYRNA_ATTRS, "r");
+ if (file != NULL) {
+ while (fgets(line, sizeof line, file) != NULL) {
+ pch = strtok(line, ",");
+ ind = 0;
+ while (pch != NULL) {
+ ss = strdup(pch);
+// ABRemove(&ss,'\"');
+// ABRemove(&ss,' ');
+ pch = strtok(NULL, ",");
+ switch (ind) {
+ case 0:
+ attr[attrcount].Type = ss[0];
+ break;
+ case 1:
+ attr[attrcount].Name = strdup(ss);
+ break;
+ case 2:
+ attr[attrcount].Default = strdup(ss);
+ break;
+ case 3:
+ if (strstr(ss, "ANY_ELEMENT")) {
+ attr[attrcount].ApplyTo[0] = 1;
+ attr[attrcount].ApplyTo[1] = 1;
+ attr[attrcount].ApplyTo[2] = 1;
+ attr[attrcount].ApplyTo[3] = 1;
+ } else {
+ attr[attrcount].ApplyTo[0] =
+ strstr(ss, "GRAPH") ? 1 : 0;
+ attr[attrcount].ApplyTo[1] =
+ strstr(ss, "CLUSTER") ? 1 : 0;
+ attr[attrcount].ApplyTo[2] =
+ strstr(ss, "NODE") ? 1 : 0;
+ attr[attrcount].ApplyTo[3] =
+ strstr(ss, "EDGE") ? 1 : 0;
+ }
+ break;
+ case 4:
+ if (strstr(ss, "ALL_ENGINES")) {
+ attr[attrcount].Engine[0] = 1;
+ attr[attrcount].Engine[1] = 1;
+ attr[attrcount].Engine[2] = 1;
+ attr[attrcount].Engine[3] = 1;
+ attr[attrcount].Engine[4] = 1;
+ } else {
+ attr[attrcount].Engine[0] =
+ strstr(ss, "DOT") ? 1 : 0;
+ attr[attrcount].Engine[1] =
+ strstr(ss, "NEATO") ? 1 : 0;
+ attr[attrcount].Engine[2] =
+ strstr(ss, "TWOPI") ? 1 : 0;
+ attr[attrcount].Engine[3] =
+ strstr(ss, "CIRCO") ? 1 : 0;
+ attr[attrcount].Engine[4] =
+ strstr(ss, "FDP") ? 1 : 0;
+ }
+ break;
+ default:
+ attr[attrcount].ComboValues =
+ realloc(attr[attrcount].ComboValues,
+ sizeof(char **) *
+ attr[attrcount].ComboValuesCount);
+ attr[attrcount].ComboValues[attr[attrcount].
+ ComboValuesCount] =
+ strdup(ss);
+ attr[attrcount].ComboValuesCount++;
+ break;
}
+ ind++;
+ }
+ attrcount++;
}
+ }
}
-
-
-
-