#include "viewport.h"
#include "selection.h"
tv_nodes TV_Nodes;
-static char buf [255];
-int MP_Flag=0;
+static char buf[255];
+int MP_Flag = 0;
-tv_filter* create_tv_filter()
+#ifdef UNUSED
+static
+void clear_tv_filter(tv_filter * TV_Filter)
{
- tv_filter* f;
- f=(tv_filter*)malloc(sizeof(tv_filter));
- clear_tv_filter(f);
- return f;
+ TV_Filter->highlighted = -1;
+ TV_Filter->visible = -1;
+ TV_Filter->min_data1 = NULL;
+ TV_Filter->max_data1 = NULL;
+ TV_Filter->min_data2 = NULL;
+ TV_Filter->max_data2 = NULL;
+
+ TV_Nodes.filtered = 0;
+
}
-void init_tv_nodes(tv_nodes* TV_Nodes)
+
+static
+tv_filter *create_tv_filter()
{
- int i;
- TV_Nodes->filtered=0;
- TV_Nodes->activepage=-1;
- TV_Nodes->firstnodeid=0;
- TV_Nodes->pagecount=0;
- TV_Nodes->recordperpage=22;
- TV_Nodes->page_data_index=0;
- TV_Nodes->Y_Gap=25;
- TV_Nodes->Y=12;
- TV_Nodes->initial_Y=12;
- TV_Nodes->chkSelected_X=5;
- TV_Nodes->IDLabel_X=10;
- TV_Nodes->chkVisible_X=55;
- TV_Nodes->chkHighlighted_X=85;
- TV_Nodes->Data1_X=105;
- TV_Nodes->Data2_X=305;
- TV_Nodes->page_data_node_index=0;
- reset_page_History();
-
- //null gui elemetns
- for (i=0;i < MAX_NODE_PER_PAGE ;i ++)
- {
- TV_Nodes->TV_Node[i].chkHighlighted=NULL;
- TV_Nodes->TV_Node[i].chkSelected=NULL;
- TV_Nodes->TV_Node[i].chkVisible=NULL;
- TV_Nodes->TV_Node[i].Data1=NULL;
- TV_Nodes->TV_Node[i].Data2=NULL;
- TV_Nodes->TV_Node[i].IDLabel=NULL;
- }
- TV_Nodes->initialized=1;
+ tv_filter *f;
+ f = (tv_filter *) malloc(sizeof(tv_filter));
+ clear_tv_filter(f);
+ return f;
}
+#endif
-void clear_tv_filter(tv_filter* TV_Filter)
+static
+void init_tv_nodes(tv_nodes * TV_Nodes)
{
- TV_Filter->highlighted=-1;
- TV_Filter->visible=-1;
- TV_Filter->min_data1=NULL;
- TV_Filter->max_data1=NULL;
- TV_Filter->min_data2=NULL;
- TV_Filter->max_data2=NULL;
-
- TV_Nodes.filtered=0;
-
+ int i;
+ TV_Nodes->filtered = 0;
+ TV_Nodes->activepage = -1;
+ TV_Nodes->firstnodeid = 0;
+ TV_Nodes->pagecount = 0;
+ TV_Nodes->recordperpage = 22;
+ TV_Nodes->page_data_index = 0;
+ TV_Nodes->Y_Gap = 25;
+ TV_Nodes->Y = 12;
+ TV_Nodes->initial_Y = 12;
+ TV_Nodes->chkSelected_X = 5;
+ TV_Nodes->IDLabel_X = 10;
+ TV_Nodes->chkVisible_X = 55;
+ TV_Nodes->chkHighlighted_X = 85;
+ TV_Nodes->Data1_X = 105;
+ TV_Nodes->Data2_X = 305;
+ TV_Nodes->page_data_node_index = 0;
+ reset_page_History();
+
+ //null gui elemetns
+ for (i = 0; i < MAX_NODE_PER_PAGE; i++) {
+ TV_Nodes->TV_Node[i].chkHighlighted = NULL;
+ TV_Nodes->TV_Node[i].chkSelected = NULL;
+ TV_Nodes->TV_Node[i].chkVisible = NULL;
+ TV_Nodes->TV_Node[i].Data1 = NULL;
+ TV_Nodes->TV_Node[i].Data2 = NULL;
+ TV_Nodes->TV_Node[i].IDLabel = NULL;
+ }
+ TV_Nodes->initialized = 1;
}
-extern int set_filter(tv_filter* TV_Filter,char* MinData1,char* MaxData1,char* MinData2,char* MaxData2,char* Filter_String,int selected,int visible,int highlighted)
+int
+set_filter(tv_filter * TV_Filter, char *MinData1, char *MaxData1,
+ char *MinData2, char *MaxData2, char *Filter_String,
+ int selected, int visible, int highlighted)
{
- TV_Filter->selected=selected;
- TV_Filter->highlighted=highlighted;
- TV_Filter->visible=visible;
- TV_Filter->min_data1=MinData1;
- TV_Filter->max_data1=MaxData1;
- TV_Filter->min_data2=MinData2;
- TV_Filter->max_data2=MaxData2;
- TV_Filter->filter_string=Filter_String;
- TV_Nodes.filtered=1;
- return 1;
+ TV_Filter->selected = selected;
+ TV_Filter->highlighted = highlighted;
+ TV_Filter->visible = visible;
+ TV_Filter->min_data1 = MinData1;
+ TV_Filter->max_data1 = MaxData1;
+ TV_Filter->min_data2 = MinData2;
+ TV_Filter->max_data2 = MaxData2;
+ TV_Filter->filter_string = Filter_String;
+ TV_Nodes.filtered = 1;
+ return 1;
}
+
+#ifdef UNUSED
+static
int reverse_selection()
{
- int i=0;
- for (i; i < view->Topview->Nodecount ; i ++)
- {
- if (((custom_object_data*)AGDATA(view->Topview->Nodes[i].Node))->Selected )
- deselect_node(view->g[view->activeGraph],view->Topview->Nodes[i].Node);
- else
- select_node(view->g[view->activeGraph],view->Topview->Nodes[i].Node);
- }
- for (i=0; i < view->Topview->Edgecount ; i ++)
- {
- if (((custom_object_data*)AGDATA(view->Topview->Edges[i].Edge))->Selected )
- deselect_edge(view->g[view->activeGraph],view->Topview->Edges[i].Edge);
- else
- select_edge(view->g[view->activeGraph],view->Topview->Edges[i].Edge);
- }
-}
-int validate_node(tv_node* TV_Node)
-{
- static btree_node* n=0;
- char* data_attr1;
- char* data_attr2;
- char* buf;
-// n=tree_from_filter_string("([IP=\"^10.*\",min=\"0\",max=\"0\"])");
- // get attributes from graph
- data_attr1=agget(view->g[view->activeGraph],"DataAttribute1");
- data_attr2=agget(view->g[view->activeGraph],"DataAttribute2");
-
-
- if (TV_Nodes.filtered)
- {
- int valid=1;
- if((MP_Flag==1) || (!n))
- {
- n=tree_from_filter_string(TV_Nodes.filter.filter_string);
- MP_Flag=0;
- buf=agget(view->Topview->Nodes[TV_Node->index].Node,data_attr1);
- if(buf)
- {
- if (strcmp(TV_Nodes.filter.min_data1,buf))
- valid=0;
- }
- }
- if (data_attr1 && TV_Nodes.filter.max_data1 && agget(view->Topview->Nodes[TV_Node->index].Node,data_attr1))
- {
- if (strcmp(agget(view->Topview->Nodes[TV_Node->index].Node,data_attr1),TV_Nodes.filter.min_data1))
- valid=0;
- }
- //string data checks attr2
- if (data_attr2 && TV_Nodes.filter.min_data2 && agget(view->Topview->Nodes[TV_Node->index].Node,data_attr2))
- {
- if (strcmp(TV_Nodes.filter.min_data2, agget(view->Topview->Nodes[TV_Node->index].Node,data_attr2) ))
- valid=0;
- }
- if (data_attr2 && TV_Nodes.filter.max_data2 && agget(view->Topview->Nodes[TV_Node->index].Node,data_attr2))
- {
- if (agget(view->Topview->Nodes[TV_Node->index].Node,data_attr2),TV_Nodes.filter.min_data2)
- valid=0;
- }
- if (strlen(TV_Nodes.filter.filter_string)>0)
- valid=evaluate_expresions (TV_Node,n);
- //if show only highlighted
- if (TV_Nodes.filter.highlighted >= 0)
- {
- if(((custom_object_data*)AGDATA(view->Topview->Nodes[TV_Node->index].Node))->Highlighted!= TV_Nodes.filter.highlighted)
- valid=0;
- }
- //if show only visibles
- if (TV_Nodes.filter.visible >= 0)
- {
- if(((custom_object_data*)AGDATA(view->Topview->Nodes[TV_Node->index].Node))->Visible!= TV_Nodes.filter.visible)
- valid=0;
- }
- //if show only selected
- if (TV_Nodes.filter.selected >= 0)
- {
- if(((custom_object_data*)AGDATA(view->Topview->Nodes[TV_Node->index].Node))->Selected!= TV_Nodes.filter.selected)
- valid=0;
- }
- return valid;
- }
+ int i = 0;
+ for (i; i < view->Topview->Nodecount; i++) {
+ if (((custom_object_data *) AGDATA(view->Topview->Nodes[i].Node))->
+ Selected)
+ deselect_node(view->g[view->activeGraph],
+ view->Topview->Nodes[i].Node);
else
- return 1;
+ select_node(view->g[view->activeGraph],
+ view->Topview->Nodes[i].Node);
+ }
+ for (i = 0; i < view->Topview->Edgecount; i++) {
+ if (((custom_object_data *) AGDATA(view->Topview->Edges[i].Edge))->
+ Selected)
+ deselect_edge(view->g[view->activeGraph],
+ view->Topview->Edges[i].Edge);
+ else
+ select_edge(view->g[view->activeGraph],
+ view->Topview->Edges[i].Edge);
+ }
}
+#endif
-int update_node_gui_objects(tv_node* TV_Node)
+static
+int validate_node(tv_node * TV_Node)
{
- char* data_attr1;
- char* data_attr2;
- char buf[255];
- GtkLayout* layout;
-
- // get attributes from graph
- data_attr1=agget(view->g[view->activeGraph],"DataAttribute1");
- data_attr2=agget(view->g[view->activeGraph],"DataAttribute2");
-
- //create if objects are null
- layout=(GtkLayout*)glade_xml_get_widget(xml, "layoutTVData");
- //select box
- if (!TV_Node->chkSelected)
- {
- TV_Node->chkSelected=(GtkCheckButton*)gtk_check_button_new();
- gtk_layout_put (layout,(GtkWidget*)TV_Node->chkSelected,LOCATION_X_CHKSELECTED,TV_Nodes.Y);
- }
- gtk_widget_show((GtkWidget*)TV_Node->chkSelected);
- gtk_toggle_button_set_active((GtkToggleButton*)TV_Node->chkSelected,((custom_object_data*)AGDATA(view->Topview->Nodes[TV_Node->index].Node))->Selected);
-
- //Id Label
- if (!TV_Node->IDLabel)
- {
- TV_Node->IDLabel=(GtkLabel*)gtk_label_new("");
- gtk_layout_put (layout,(GtkWidget*)TV_Node->IDLabel,LOCATION_X_IDLABEL,TV_Nodes.Y);
+ static btree_node *n = 0;
+ char *data_attr1;
+ char *data_attr2;
+ char *buf;
+// n=tree_from_filter_string("([IP=\"^10.*\",min=\"0\",max=\"0\"])");
+ // get attributes from graph
+ data_attr1 = agget(view->g[view->activeGraph], "DataAttribute1");
+ data_attr2 = agget(view->g[view->activeGraph], "DataAttribute2");
+
+
+ if (TV_Nodes.filtered) {
+ int valid = 1;
+ if ((MP_Flag == 1) || (!n)) {
+ n = tree_from_filter_string(TV_Nodes.filter.filter_string);
+ MP_Flag = 0;
+ buf =
+ agget(view->Topview->Nodes[TV_Node->index].Node,
+ data_attr1);
+ if (buf) {
+ if (strcmp(TV_Nodes.filter.min_data1, buf))
+ valid = 0;
+ }
}
- sprintf(buf, "%d", TV_Node->index);
- gtk_label_set_text (TV_Node->IDLabel,buf);
- gtk_widget_show((GtkWidget*)TV_Node->IDLabel);
-
- //visible
- if (!TV_Node->chkVisible)
- {
- TV_Node->chkVisible=(GtkCheckButton*)gtk_check_button_new();
- gtk_layout_put (layout,(GtkWidget*)TV_Node->chkVisible,LOCATION_X_CHKVISIBLE,TV_Nodes.Y);
+ if (data_attr1 && TV_Nodes.filter.max_data1
+ && agget(view->Topview->Nodes[TV_Node->index].Node,
+ data_attr1)) {
+ if (strcmp
+ (agget
+ (view->Topview->Nodes[TV_Node->index].Node, data_attr1),
+ TV_Nodes.filter.min_data1))
+ valid = 0;
}
-
- gtk_widget_show((GtkWidget*)TV_Node->chkVisible);
- gtk_toggle_button_set_active((GtkToggleButton*)TV_Node->chkVisible,((custom_object_data*)AGDATA(view->Topview->Nodes[TV_Node->index].Node))->Visible);
- //highlighted
- if (!TV_Node->chkHighlighted)
- {
- TV_Node->chkHighlighted=(GtkCheckButton*)gtk_check_button_new();
- gtk_layout_put (layout,(GtkWidget*)TV_Node->chkHighlighted,LOCATION_X_CHKHIGHLIGHTED,TV_Nodes.Y);
+ //string data checks attr2
+ if (data_attr2 && TV_Nodes.filter.min_data2
+ && agget(view->Topview->Nodes[TV_Node->index].Node,
+ data_attr2)) {
+ if (strcmp
+ (TV_Nodes.filter.min_data2,
+ agget(view->Topview->Nodes[TV_Node->index].Node,
+ data_attr2)))
+ valid = 0;
}
- gtk_widget_show((GtkWidget*)TV_Node->chkHighlighted);
- gtk_toggle_button_set_active((GtkToggleButton*)TV_Node->chkHighlighted,((custom_object_data*)AGDATA(view->Topview->Nodes[TV_Node->index].Node))->Highlighted);
-
-
- //DATA 1
- if (!TV_Node->Data1)
- {
- TV_Node->Data1=(GtkEntry*)gtk_entry_new();
- gtk_layout_put (layout,(GtkWidget*)TV_Node->Data1,LOCATION_X_DATA1,TV_Nodes.Y);
- gtk_widget_set_size_request((GtkWidget*)TV_Node->Data1,300,23);
-
+ if (data_attr2 && TV_Nodes.filter.max_data2
+ && agget(view->Topview->Nodes[TV_Node->index].Node,
+ data_attr2)) {
+ if (agget
+ (view->Topview->Nodes[TV_Node->index].Node, data_attr2),
+ TV_Nodes.filter.min_data2)
+ valid = 0;
}
- if(data_attr1)
- {
- gtk_entry_set_text (TV_Node->Data1,agget(view->Topview->Nodes[TV_Node->index].Node,data_attr1));
+ if (strlen(TV_Nodes.filter.filter_string) > 0)
+ valid = evaluate_expresions(TV_Node, n);
+ //if show only highlighted
+ if (TV_Nodes.filter.highlighted >= 0) {
+ if (((custom_object_data *)
+ AGDATA(view->Topview->Nodes[TV_Node->index].Node))->
+ Highlighted != TV_Nodes.filter.highlighted)
+ valid = 0;
}
- else
- gtk_entry_set_text (TV_Node->Data1,"");
- gtk_widget_show((GtkWidget*)TV_Node->Data1);
-
- //DATA 2
- if (!TV_Node->Data2)
- {
- TV_Node->Data2=(GtkEntry*)gtk_entry_new();
- gtk_layout_put (layout,(GtkWidget*)TV_Node->Data2,LOCATION_X_DATA2,TV_Nodes.Y);
- gtk_widget_set_size_request((GtkWidget*)TV_Node->Data2,300,23);
+ //if show only visibles
+ if (TV_Nodes.filter.visible >= 0) {
+ if (((custom_object_data *)
+ AGDATA(view->Topview->Nodes[TV_Node->index].Node))->
+ Visible != TV_Nodes.filter.visible)
+ valid = 0;
}
- if(data_attr2)
- {
- gtk_entry_set_text (TV_Node->Data2,agget(view->Topview->Nodes[TV_Node->index].Node,data_attr2));
+ //if show only selected
+ if (TV_Nodes.filter.selected >= 0) {
+ if (((custom_object_data *)
+ AGDATA(view->Topview->Nodes[TV_Node->index].Node))->
+ Selected != TV_Nodes.filter.selected)
+ valid = 0;
}
- else
- gtk_entry_set_text (TV_Node->Data2,"");
- gtk_widget_show((GtkWidget*)TV_Node->Data2);
+ return valid;
+ } else
return 1;
+}
+
+static int update_node_gui_objects(tv_node * TV_Node)
+{
+ char *data_attr1;
+ char *data_attr2;
+ char buf[255];
+ GtkLayout *layout;
+
+ // get attributes from graph
+ data_attr1 = agget(view->g[view->activeGraph], "DataAttribute1");
+ data_attr2 = agget(view->g[view->activeGraph], "DataAttribute2");
+
+ //create if objects are null
+ layout = (GtkLayout *) glade_xml_get_widget(xml, "layoutTVData");
+ //select box
+ if (!TV_Node->chkSelected) {
+ TV_Node->chkSelected = (GtkCheckButton *) gtk_check_button_new();
+ gtk_layout_put(layout, (GtkWidget *) TV_Node->chkSelected,
+ LOCATION_X_CHKSELECTED, TV_Nodes.Y);
+ }
+ gtk_widget_show((GtkWidget *) TV_Node->chkSelected);
+ gtk_toggle_button_set_active((GtkToggleButton *) TV_Node->chkSelected,
+ ((custom_object_data *)
+ AGDATA(view->Topview->
+ Nodes[TV_Node->index].Node))->
+ Selected);
+
+ //Id Label
+ if (!TV_Node->IDLabel) {
+ TV_Node->IDLabel = (GtkLabel *) gtk_label_new("");
+ gtk_layout_put(layout, (GtkWidget *) TV_Node->IDLabel,
+ LOCATION_X_IDLABEL, TV_Nodes.Y);
+ }
+ sprintf(buf, "%d", TV_Node->index);
+ gtk_label_set_text(TV_Node->IDLabel, buf);
+ gtk_widget_show((GtkWidget *) TV_Node->IDLabel);
+
+ //visible
+ if (!TV_Node->chkVisible) {
+ TV_Node->chkVisible = (GtkCheckButton *) gtk_check_button_new();
+ gtk_layout_put(layout, (GtkWidget *) TV_Node->chkVisible,
+ LOCATION_X_CHKVISIBLE, TV_Nodes.Y);
+ }
+
+ gtk_widget_show((GtkWidget *) TV_Node->chkVisible);
+ gtk_toggle_button_set_active((GtkToggleButton *) TV_Node->chkVisible,
+ ((custom_object_data *)
+ AGDATA(view->Topview->
+ Nodes[TV_Node->index].Node))->
+ Visible);
+ //highlighted
+ if (!TV_Node->chkHighlighted) {
+ TV_Node->chkHighlighted =
+ (GtkCheckButton *) gtk_check_button_new();
+ gtk_layout_put(layout, (GtkWidget *) TV_Node->chkHighlighted,
+ LOCATION_X_CHKHIGHLIGHTED, TV_Nodes.Y);
+ }
+ gtk_widget_show((GtkWidget *) TV_Node->chkHighlighted);
+ gtk_toggle_button_set_active((GtkToggleButton *) TV_Node->
+ chkHighlighted,
+ ((custom_object_data *)
+ AGDATA(view->Topview->
+ Nodes[TV_Node->index].Node))->
+ Highlighted);
+
+
+ //DATA 1
+ if (!TV_Node->Data1) {
+ TV_Node->Data1 = (GtkEntry *) gtk_entry_new();
+ gtk_layout_put(layout, (GtkWidget *) TV_Node->Data1,
+ LOCATION_X_DATA1, TV_Nodes.Y);
+ gtk_widget_set_size_request((GtkWidget *) TV_Node->Data1, 300, 23);
+
+ }
+ if (data_attr1) {
+ gtk_entry_set_text(TV_Node->Data1,
+ agget(view->Topview->Nodes[TV_Node->index].Node,
+ data_attr1));
+ } else
+ gtk_entry_set_text(TV_Node->Data1, "");
+ gtk_widget_show((GtkWidget *) TV_Node->Data1);
+
+ //DATA 2
+ if (!TV_Node->Data2) {
+ TV_Node->Data2 = (GtkEntry *) gtk_entry_new();
+ gtk_layout_put(layout, (GtkWidget *) TV_Node->Data2,
+ LOCATION_X_DATA2, TV_Nodes.Y);
+ gtk_widget_set_size_request((GtkWidget *) TV_Node->Data2, 300, 23);
+ }
+ if (data_attr2) {
+ gtk_entry_set_text(TV_Node->Data2,
+ agget(view->Topview->Nodes[TV_Node->index].Node,
+ data_attr2));
+ } else
+ gtk_entry_set_text(TV_Node->Data2, "");
+ gtk_widget_show((GtkWidget *) TV_Node->Data2);
+ return 1;
}
-extern int tv_nodes_last_page()
+int tv_nodes_last_page()
{
- if (TV_Nodes.activepage<TV_Nodes.pagecount)
- return tv_nodes_goto_page(TV_Nodes.pagecount);
- else
- return 0;
+ if (TV_Nodes.activepage < TV_Nodes.pagecount)
+ return tv_nodes_goto_page(TV_Nodes.pagecount);
+ else
+ return 0;
}
-extern int tv_nodes_first_page()
+
+int tv_nodes_first_page()
{
- if (TV_Nodes.activepage>0)
- return tv_nodes_goto_page(0);
- else
- return 0;
+ if (TV_Nodes.activepage > 0)
+ return tv_nodes_goto_page(0);
+ else
+ return 0;
}
-extern int tv_nodes_goto_page(int page)
+static int hide_data_widgets()
{
- GtkSpinButton* spn;
- tv_node* tvn;
- GtkLabel* lblTVPage;
+ int i;
+ for (i = 0; i < MAX_NODE_PER_PAGE; i++) {
+ if (TV_Nodes.TV_Node[i].chkHighlighted) {
+ gtk_widget_hide((GtkWidget *) TV_Nodes.TV_Node[i].
+ chkHighlighted);
+ gtk_widget_hide((GtkWidget *) TV_Nodes.TV_Node[i].chkSelected);
+ gtk_widget_hide((GtkWidget *) TV_Nodes.TV_Node[i].chkVisible);
+ gtk_widget_hide((GtkWidget *) TV_Nodes.TV_Node[i].Data1);
+ gtk_widget_hide((GtkWidget *) TV_Nodes.TV_Node[i].Data2);
+ gtk_widget_hide((GtkWidget *) TV_Nodes.TV_Node[i].IDLabel);
+ }
+ }
+ return 1;
- if ((page >=0) && page <= TV_Nodes.pagecount)
- {
- if(TV_Nodes.general_purpose_flag==1)
- {
- update_TV_data_from_gui();
- TV_Nodes.general_purpose_flag=0;
- }
- TV_Nodes.activepage=page;
- TV_Nodes.page_data_node_index=TV_Nodes.page_history[TV_Nodes.activepage];
- TV_Nodes.page_data_index=0;
- TV_Nodes.firstnodeid=TV_Nodes.page_data_node_index;
- TV_Nodes.Y=TV_Nodes.initial_Y;
- hide_data_widgets();
+
+}
+int tv_nodes_goto_page(int page)
+{
+ GtkSpinButton *spn;
+ tv_node *tvn;
+ GtkLabel *lblTVPage;
+
+ if ((page >= 0) && page <= TV_Nodes.pagecount) {
+ if (TV_Nodes.general_purpose_flag == 1) {
+ update_TV_data_from_gui();
+ TV_Nodes.general_purpose_flag = 0;
}
- else
- return 0;
- while ((TV_Nodes.page_data_index < TV_Nodes.recordperpage)&&(TV_Nodes.page_data_node_index < view->Topview->Nodecount))
- {
- tvn=&TV_Nodes.TV_Node[TV_Nodes.page_data_index];
- tvn->index=TV_Nodes.page_data_node_index;
- if(view->Topview->Nodes[TV_Nodes.page_data_node_index].valid==1)
- {
- TV_Nodes.page_data_index++;
- update_node_gui_objects(tvn);
- TV_Nodes.Y=TV_Nodes.Y+TV_Nodes.Y_Gap;
- }
- TV_Nodes.page_data_node_index++;
+ TV_Nodes.activepage = page;
+ TV_Nodes.page_data_node_index =
+ TV_Nodes.page_history[TV_Nodes.activepage];
+ TV_Nodes.page_data_index = 0;
+ TV_Nodes.firstnodeid = TV_Nodes.page_data_node_index;
+ TV_Nodes.Y = TV_Nodes.initial_Y;
+ hide_data_widgets();
+ } else
+ return 0;
+ while ((TV_Nodes.page_data_index < TV_Nodes.recordperpage)
+ && (TV_Nodes.page_data_node_index < view->Topview->Nodecount)) {
+ tvn = &TV_Nodes.TV_Node[TV_Nodes.page_data_index];
+ tvn->index = TV_Nodes.page_data_node_index;
+ if (view->Topview->Nodes[TV_Nodes.page_data_node_index].valid == 1) {
+ TV_Nodes.page_data_index++;
+ update_node_gui_objects(tvn);
+ TV_Nodes.Y = TV_Nodes.Y + TV_Nodes.Y_Gap;
}
- lblTVPage=(GtkLabel*)glade_xml_get_widget(xml, "lblTVPage");
- sprintf(buf,"(%i / %i)", TV_Nodes.activepage+1,TV_Nodes.pagecount+1);
- gtk_label_set_text(lblTVPage,buf);
- spn=(GtkSpinButton*)glade_xml_get_widget(xml, "spnTVGotopage");
- gtk_spin_button_set_value(spn,page+1);
+ TV_Nodes.page_data_node_index++;
+ }
+ lblTVPage = (GtkLabel *) glade_xml_get_widget(xml, "lblTVPage");
+ sprintf(buf, "(%i / %i)", TV_Nodes.activepage + 1,
+ TV_Nodes.pagecount + 1);
+ gtk_label_set_text(lblTVPage, buf);
+ spn = (GtkSpinButton *) glade_xml_get_widget(xml, "spnTVGotopage");
+ gtk_spin_button_set_value(spn, page + 1);
- return 1;
+ return 1;
}
-extern int tv_nodes_prior_page()
+int tv_nodes_prior_page()
{
- if (TV_Nodes.activepage >0)
- {
- return tv_nodes_goto_page(TV_Nodes.activepage -1);
- }
- else
- return 0;
+ if (TV_Nodes.activepage > 0) {
+ return tv_nodes_goto_page(TV_Nodes.activepage - 1);
+ } else
+ return 0;
}
-extern int tv_nodes_next_page()
+int tv_nodes_next_page()
{
- if (TV_Nodes.activepage < TV_Nodes.pagecount)
- {
- return tv_nodes_goto_page(TV_Nodes.activepage +1);
- }
- else
- return 0;
+ if (TV_Nodes.activepage < TV_Nodes.pagecount) {
+ return tv_nodes_goto_page(TV_Nodes.activepage + 1);
+ } else
+ return 0;
}
-extern void execute_tv_nodes()
+
+void execute_tv_nodes()
{
- gtk_widget_hide(glade_xml_get_widget(xml, "frmTVNodes"));
- gtk_widget_show(glade_xml_get_widget(xml, "frmTVNodes"));
-// gtk_window_set_keep_above (glade_xml_get_widget(xml, "frmTVNodes"),1);
- if(TV_Nodes.initialized < 1)
- {
- init_tv_nodes(&TV_Nodes);
- }
- //test filter
- prepare_page_history();
- TV_Nodes.general_purpose_flag=1;
- tv_nodes_next_page();
+ gtk_widget_hide(glade_xml_get_widget(xml, "frmTVNodes"));
+ gtk_widget_show(glade_xml_get_widget(xml, "frmTVNodes"));
+// gtk_window_set_keep_above (glade_xml_get_widget(xml, "frmTVNodes"),1);
+ if (TV_Nodes.initialized < 1) {
+ init_tv_nodes(&TV_Nodes);
+ }
+ //test filter
+ prepare_page_history();
+ TV_Nodes.general_purpose_flag = 1;
+ tv_nodes_next_page();
}
-static int hide_data_widgets()
-{
- int i;
- for (i=0;i < MAX_NODE_PER_PAGE ;i ++)
- {
- if (TV_Nodes.TV_Node[i].chkHighlighted)
- {
- gtk_widget_hide((GtkWidget*)TV_Nodes.TV_Node[i].chkHighlighted);
- gtk_widget_hide((GtkWidget*)TV_Nodes.TV_Node[i].chkSelected);
- gtk_widget_hide((GtkWidget*)TV_Nodes.TV_Node[i].chkVisible);
- gtk_widget_hide((GtkWidget*)TV_Nodes.TV_Node[i].Data1);
- gtk_widget_hide((GtkWidget*)TV_Nodes.TV_Node[i].Data2);
- gtk_widget_hide((GtkWidget*)TV_Nodes.TV_Node[i].IDLabel);
- }
- }
- return 1;
-
-
-}
-extern int reset_page_History()
+int reset_page_History()
{
/* if(TV_Nodes.page_history_count > 0)
{
free(TV_Nodes.page_history);
TV_Nodes.page_history_count=0;
}*/
- TV_Nodes.page_history_count=0;
- TV_Nodes.page_history=realloc(TV_Nodes.page_history,sizeof(int) * TV_Nodes.page_history_count);
- return 1;
+ TV_Nodes.page_history_count = 0;
+ TV_Nodes.page_history =
+ realloc(TV_Nodes.page_history,
+ sizeof(int) * TV_Nodes.page_history_count);
+ return 1;
}
static int push_to_page_history(int index)
{
- TV_Nodes.page_history_count++;
- TV_Nodes.page_history=realloc(TV_Nodes.page_history,sizeof(int) * TV_Nodes.page_history_count);
- TV_Nodes.page_history[TV_Nodes.page_history_count-1]=index;
- return 1;
+ TV_Nodes.page_history_count++;
+ TV_Nodes.page_history =
+ realloc(TV_Nodes.page_history,
+ sizeof(int) * TV_Nodes.page_history_count);
+ TV_Nodes.page_history[TV_Nodes.page_history_count - 1] = index;
+ return 1;
}
+
+#ifdef UNUSED
static int pop_from_page_history()
{
- if(TV_Nodes.page_history_count > 0)
- {
- int return_value;
- return_value=TV_Nodes.page_history[TV_Nodes.page_history_count-1];
- TV_Nodes.page_history_count--;
- TV_Nodes.page_history=realloc(TV_Nodes.page_history,sizeof(int) * TV_Nodes.page_history_count);
- return return_value;
- }
- return 0;
+ if (TV_Nodes.page_history_count > 0) {
+ int return_value;
+ return_value =
+ TV_Nodes.page_history[TV_Nodes.page_history_count - 1];
+ TV_Nodes.page_history_count--;
+ TV_Nodes.page_history =
+ realloc(TV_Nodes.page_history,
+ sizeof(int) * TV_Nodes.page_history_count);
+ return return_value;
+ }
+ return 0;
}
+#endif
-extern int prepare_page_history()
+static int set_data_attributes()
{
- GtkLabel* lblTVPage;
- GtkSpinButton* spn;
- int i=0;
- int count=0;
- tv_node tvn;
- TV_Nodes.pagecount=0;
- TV_Nodes.activepage=-1;
- reset_page_History();
- push_to_page_history(0);
-
- for (i;i < view->Topview->Nodecount ; i++)
- {
- tvn.index=i;
- if(validate_node(&tvn))
- {
- count ++;
- view->Topview->Nodes[i].valid=1;
- }
- else
- view->Topview->Nodes[i].valid=0;
- if (count== TV_Nodes.recordperpage)
- {
- push_to_page_history(i+1);
- TV_Nodes.pagecount++;
- count=0;
- }
- }
- spn=(GtkSpinButton*)glade_xml_get_widget(xml, "spnTVGotopage");
- gtk_spin_button_set_value(spn,0);
- gtk_spin_button_set_range(spn,0,TV_Nodes.pagecount+1);
-
-
- lblTVPage=(GtkLabel*)glade_xml_get_widget(xml, "lblTVPage");
- sprintf(buf,"(%i / %i)", 1,TV_Nodes.pagecount+1);
- gtk_label_set_text(lblTVPage,buf);
- set_data_attributes();
- return 1;
+ GtkLabel *lblData1;
+ GtkLabel *lblData2;
+ char *data_attr1;
+ char *data_attr2;
+ // get attributes from graph
+ data_attr1 = agget(view->g[view->activeGraph], "DataAttribute1");
+ data_attr2 = agget(view->g[view->activeGraph], "DataAttribute2");
+ if (!data_attr1) {
+ agattr(view->g[view->activeGraph], AGRAPH, "DataAttribute1",
+ "DATA1");
+ agattr(view->g[view->activeGraph], AGNODE, "DATA1", "");
+ }
+ if (!data_attr2) {
+ agattr(view->g[view->activeGraph], AGRAPH, "DataAttribute2",
+ "DATA2");
+ agattr(view->g[view->activeGraph], AGNODE, "DATA2", "");
+ }
+
+ data_attr1 = agget(view->g[view->activeGraph], "DataAttribute1");
+ data_attr2 = agget(view->g[view->activeGraph], "DataAttribute2");
+
+ lblData1 = (GtkLabel *) glade_xml_get_widget(xml, "lblTVData1");
+ lblData2 = (GtkLabel *) glade_xml_get_widget(xml, "lblTVData2");
+ if (!strcmp(data_attr1, "\\N"))
+ data_attr1 = "Name";
+ gtk_label_set_text(lblData1, data_attr1);
+ gtk_label_set_text(lblData2, data_attr2);
+ return 1;
}
-static int set_data_attributes()
+
+int prepare_page_history()
{
- GtkLabel* lblData1;
- GtkLabel* lblData2;
- char* data_attr1;
- char* data_attr2;
- // get attributes from graph
- data_attr1=agget(view->g[view->activeGraph],"DataAttribute1");
- data_attr2=agget(view->g[view->activeGraph],"DataAttribute2");
- if (!data_attr1)
- {
- agattr(view->g[view->activeGraph],AGRAPH,"DataAttribute1","DATA1");
- agattr(view->g[view->activeGraph],AGNODE,"DATA1","");
- }
- if (!data_attr2)
- {
- agattr(view->g[view->activeGraph],AGRAPH,"DataAttribute2","DATA2");
- agattr(view->g[view->activeGraph],AGNODE,"DATA2","");
+ GtkLabel *lblTVPage;
+ GtkSpinButton *spn;
+ int i = 0;
+ int count = 0;
+ tv_node tvn;
+ TV_Nodes.pagecount = 0;
+ TV_Nodes.activepage = -1;
+ reset_page_History();
+ push_to_page_history(0);
+
+ for (i; i < view->Topview->Nodecount; i++) {
+ tvn.index = i;
+ if (validate_node(&tvn)) {
+ count++;
+ view->Topview->Nodes[i].valid = 1;
+ } else
+ view->Topview->Nodes[i].valid = 0;
+ if (count == TV_Nodes.recordperpage) {
+ push_to_page_history(i + 1);
+ TV_Nodes.pagecount++;
+ count = 0;
}
+ }
+ spn = (GtkSpinButton *) glade_xml_get_widget(xml, "spnTVGotopage");
+ gtk_spin_button_set_value(spn, 0);
+ gtk_spin_button_set_range(spn, 0, TV_Nodes.pagecount + 1);
- data_attr1=agget(view->g[view->activeGraph],"DataAttribute1");
- data_attr2=agget(view->g[view->activeGraph],"DataAttribute2");
- lblData1=(GtkLabel*)glade_xml_get_widget(xml, "lblTVData1");
- lblData2=(GtkLabel*)glade_xml_get_widget(xml, "lblTVData2");
- gtk_label_set_text (lblData1,data_attr1);
- gtk_label_set_text (lblData2,data_attr2);
- return 1;
+ lblTVPage = (GtkLabel *) glade_xml_get_widget(xml, "lblTVPage");
+ sprintf(buf, "(%i / %i)", 1, TV_Nodes.pagecount + 1);
+ gtk_label_set_text(lblTVPage, buf);
+ set_data_attributes();
+ return 1;
}
-extern int update_TV_data_from_gui()
+int update_TV_data_from_gui()
{
- int i=0;
- int index=0;
- char* data_attr1;
- char* data_attr2;
- // get attributes from graph
- data_attr1=agget(view->g[view->activeGraph],"DataAttribute1");
- data_attr2=agget(view->g[view->activeGraph],"DataAttribute2");
-
- for (i;i < TV_Nodes.recordperpage ; i++)
- {
- index=TV_Nodes.TV_Node[i].index;
- if (index < view->Topview->Nodecount)
- {
- // apply if selected
- if(gtk_toggle_button_get_active((GtkToggleButton*)TV_Nodes.TV_Node[i].chkSelected))
- {
- if (!((custom_object_data*)AGDATA(view->Topview->Nodes[index].Node))->Selected)
- select_node(view->g[view->activeGraph],view->Topview->Nodes[index].Node);
- }
- else
- {
- if (((custom_object_data*)AGDATA(view->Topview->Nodes[index].Node))->Selected)
- deselect_node(view->g[view->activeGraph],view->Topview->Nodes[index].Node);
- }
- // apply if Visible
- if(gtk_toggle_button_get_active((GtkToggleButton*)TV_Nodes.TV_Node[i].chkVisible))
- {
- if (!((custom_object_data*)AGDATA(view->Topview->Nodes[index].Node))->Visible)
- ((custom_object_data*)AGDATA(view->Topview->Nodes[index].Node))->Visible=1;
- }
- else
- {
- if (((custom_object_data*)AGDATA(view->Topview->Nodes[index].Node))->Visible)
- ((custom_object_data*)AGDATA(view->Topview->Nodes[index].Node))->Visible=0;
- }
- // apply if Highlighted
- if(gtk_toggle_button_get_active((GtkToggleButton*)TV_Nodes.TV_Node[i].chkHighlighted))
- {
- if (!((custom_object_data*)AGDATA(view->Topview->Nodes[index].Node))->Highlighted)
- ((custom_object_data*)AGDATA(view->Topview->Nodes[index].Node))->Highlighted=1;
- }
- else
- {
- if (((custom_object_data*)AGDATA(view->Topview->Nodes[index].Node))->Highlighted)
- ((custom_object_data*)AGDATA(view->Topview->Nodes[index].Node))->Highlighted=0;
- }
- //Data1
- agset((void*)view->Topview->Nodes[index].Node,data_attr1,(char*)gtk_entry_get_text (TV_Nodes.TV_Node[i].Data1));
- //Data2
- agset(view->Topview->Nodes[index].Node,data_attr2,(char*)gtk_entry_get_text (TV_Nodes.TV_Node[i].Data2));
-
- }
+ int i = 0;
+ int index = 0;
+ char *data_attr1;
+ char *data_attr2;
+ // get attributes from graph
+ data_attr1 = agget(view->g[view->activeGraph], "DataAttribute1");
+ data_attr2 = agget(view->g[view->activeGraph], "DataAttribute2");
+
+ for (i; i < TV_Nodes.recordperpage; i++) {
+ index = TV_Nodes.TV_Node[i].index;
+ if (index < view->Topview->Nodecount) {
+ // apply if selected
+ if (gtk_toggle_button_get_active
+ ((GtkToggleButton *) TV_Nodes.TV_Node[i].chkSelected)) {
+ if (!
+ ((custom_object_data *)
+ AGDATA(view->Topview->Nodes[index].Node))->Selected)
+ select_node(view->g[view->activeGraph],
+ view->Topview->Nodes[index].Node);
+ } else {
+ if (((custom_object_data *)
+ AGDATA(view->Topview->Nodes[index].Node))->Selected)
+ deselect_node(view->g[view->activeGraph],
+ view->Topview->Nodes[index].Node);
+ }
+ // apply if Visible
+ if (gtk_toggle_button_get_active
+ ((GtkToggleButton *) TV_Nodes.TV_Node[i].chkVisible)) {
+ if (!
+ ((custom_object_data *)
+ AGDATA(view->Topview->Nodes[index].Node))->Visible)
+ ((custom_object_data *)
+ AGDATA(view->Topview->Nodes[index].Node))->Visible =
+ 1;
+ } else {
+ if (((custom_object_data *)
+ AGDATA(view->Topview->Nodes[index].Node))->Visible)
+ ((custom_object_data *)
+ AGDATA(view->Topview->Nodes[index].Node))->Visible =
+ 0;
+ }
+ // apply if Highlighted
+ if (gtk_toggle_button_get_active
+ ((GtkToggleButton *) TV_Nodes.TV_Node[i].chkHighlighted)) {
+ if (!
+ ((custom_object_data *)
+ AGDATA(view->Topview->Nodes[index].Node))->
+ Highlighted)
+ ((custom_object_data *)
+ AGDATA(view->Topview->Nodes[index].Node))->
+ Highlighted = 1;
+ } else {
+ if (((custom_object_data *)
+ AGDATA(view->Topview->Nodes[index].Node))->
+ Highlighted)
+ ((custom_object_data *)
+ AGDATA(view->Topview->Nodes[index].Node))->
+ Highlighted = 0;
+ }
+ //Data1
+ agset((void *) view->Topview->Nodes[index].Node, data_attr1,
+ (char *) gtk_entry_get_text(TV_Nodes.TV_Node[i].Data1));
+ //Data2
+ agset(view->Topview->Nodes[index].Node, data_attr2,
+ (char *) gtk_entry_get_text(TV_Nodes.TV_Node[i].Data2));
+
}
- return 1;
+ }
+ return 1;
}
-extern int apply_filter_from_gui()
+int apply_filter_from_gui()
{
- int selected;
- int visible;
- int highlighted;
-
- if(gtk_toggle_button_get_active((GtkToggleButton*)glade_xml_get_widget(xml,"rbTVFilterSel1")))
- selected=-1;
- if(gtk_toggle_button_get_active((GtkToggleButton*)glade_xml_get_widget(xml,"rbTVFilterSel2")))
- selected=1;
- if(gtk_toggle_button_get_active((GtkToggleButton*)glade_xml_get_widget(xml,"rbTVFilterSel3")))
- selected=0;
-
- if(gtk_toggle_button_get_active((GtkToggleButton*)glade_xml_get_widget(xml,"rbTVFilterVisible1")))
- visible=-1;
- if(gtk_toggle_button_get_active((GtkToggleButton*)glade_xml_get_widget(xml,"rbTVFilterVisible2")))
- visible=1;
- if(gtk_toggle_button_get_active((GtkToggleButton*)glade_xml_get_widget(xml,"rbTVFilterVisible3")))
- visible=0;
-
- if(gtk_toggle_button_get_active((GtkToggleButton*)glade_xml_get_widget(xml,"rbTVFilterHigh1")))
- highlighted=-1;
- if(gtk_toggle_button_get_active((GtkToggleButton*)glade_xml_get_widget(xml,"rbTVFilterHigh2")))
- highlighted=1;
- if(gtk_toggle_button_get_active((GtkToggleButton*)glade_xml_get_widget(xml,"rbTVFilterHigh3")))
- highlighted=0;
- set_filter(&TV_Nodes.filter,
- (char*)gtk_entry_get_text ((GtkEntry*)glade_xml_get_widget(xml,"edtTVFilterMinData1") ),
- (char*)gtk_entry_get_text ((GtkEntry*)glade_xml_get_widget(xml,"edtTVFilterMaxData1") ),
- (char*)gtk_entry_get_text ((GtkEntry*)glade_xml_get_widget(xml,"edtTVFilterMinData2") ),
- (char*)gtk_entry_get_text ((GtkEntry*)glade_xml_get_widget(xml,"edtTVFilterMaxData2") ),
- (char*)gtk_entry_get_text ((GtkEntry*)glade_xml_get_widget(xml,"edtTVFilterString") ),
- selected,visible,highlighted);
- MP_Flag=1;
- prepare_page_history();
- tv_nodes_next_page();
- return 1;
+ int selected;
+ int visible;
+ int highlighted;
+
+ if (gtk_toggle_button_get_active
+ ((GtkToggleButton *) glade_xml_get_widget(xml, "rbTVFilterSel1")))
+ selected = -1;
+ if (gtk_toggle_button_get_active
+ ((GtkToggleButton *) glade_xml_get_widget(xml, "rbTVFilterSel2")))
+ selected = 1;
+ if (gtk_toggle_button_get_active
+ ((GtkToggleButton *) glade_xml_get_widget(xml, "rbTVFilterSel3")))
+ selected = 0;
+
+ if (gtk_toggle_button_get_active
+ ((GtkToggleButton *)
+ glade_xml_get_widget(xml, "rbTVFilterVisible1")))
+ visible = -1;
+ if (gtk_toggle_button_get_active
+ ((GtkToggleButton *)
+ glade_xml_get_widget(xml, "rbTVFilterVisible2")))
+ visible = 1;
+ if (gtk_toggle_button_get_active
+ ((GtkToggleButton *)
+ glade_xml_get_widget(xml, "rbTVFilterVisible3")))
+ visible = 0;
+
+ if (gtk_toggle_button_get_active
+ ((GtkToggleButton *) glade_xml_get_widget(xml, "rbTVFilterHigh1")))
+ highlighted = -1;
+ if (gtk_toggle_button_get_active
+ ((GtkToggleButton *) glade_xml_get_widget(xml, "rbTVFilterHigh2")))
+ highlighted = 1;
+ if (gtk_toggle_button_get_active
+ ((GtkToggleButton *) glade_xml_get_widget(xml, "rbTVFilterHigh3")))
+ highlighted = 0;
+ set_filter(&TV_Nodes.filter,
+ (char *) gtk_entry_get_text((GtkEntry *)
+ glade_xml_get_widget(xml,
+ "edtTVFilterMinData1")),
+ (char *) gtk_entry_get_text((GtkEntry *)
+ glade_xml_get_widget(xml,
+ "edtTVFilterMaxData1")),
+ (char *) gtk_entry_get_text((GtkEntry *)
+ glade_xml_get_widget(xml,
+ "edtTVFilterMinData2")),
+ (char *) gtk_entry_get_text((GtkEntry *)
+ glade_xml_get_widget(xml,
+ "edtTVFilterMaxData2")),
+ (char *) gtk_entry_get_text((GtkEntry *)
+ glade_xml_get_widget(xml,
+ "edtTVFilterString")),
+ selected, visible, highlighted);
+ MP_Flag = 1;
+ prepare_page_history();
+ tv_nodes_next_page();
+ return 1;
}
-extern int tv_select_all()
+int tv_select_all()
{
- tv_node tvn;
- int i=0;
- for (i;i < view->Topview->Nodecount ; i++)
- {
- tvn.index=i;
- if(validate_node(&tvn))
- {
- select_node(view->g[view->activeGraph],view->Topview->Nodes[i].Node);
- }
+ tv_node tvn;
+ int i = 0;
+ for (i; i < view->Topview->Nodecount; i++) {
+ tvn.index = i;
+ if (validate_node(&tvn)) {
+ select_node(view->g[view->activeGraph],
+ view->Topview->Nodes[i].Node);
}
- apply_filter_from_gui();
- return 1;
+ }
+ apply_filter_from_gui();
+ return 1;
}
-extern int tv_unselect_all()
+
+int tv_unselect_all()
{
- tv_node tvn;
- int i=0;
- for (i;i < view->Topview->Nodecount ; i++)
- {
- tvn.index=i;
- if(validate_node(&tvn))
- {
- deselect_node(view->g[view->activeGraph],view->Topview->Nodes[i].Node);
- }
+ tv_node tvn;
+ int i = 0;
+ for (i; i < view->Topview->Nodecount; i++) {
+ tvn.index = i;
+ if (validate_node(&tvn)) {
+ deselect_node(view->g[view->activeGraph],
+ view->Topview->Nodes[i].Node);
}
- apply_filter_from_gui();
- return 1;
+ }
+ apply_filter_from_gui();
+ return 1;
}
-extern int tv_highligh_all()
+
+int tv_highligh_all()
{
- tv_node tvn;
- int i=0;
- for (i;i < view->Topview->Nodecount ; i++)
- {
- tvn.index=i;
- if(validate_node(&tvn))
- {
- ((custom_object_data*)AGDATA(view->Topview->Nodes[i].Node))->Highlighted=1;
- }
+ tv_node tvn;
+ int i = 0;
+ for (i; i < view->Topview->Nodecount; i++) {
+ tvn.index = i;
+ if (validate_node(&tvn)) {
+ ((custom_object_data *) AGDATA(view->Topview->Nodes[i].Node))->
+ Highlighted = 1;
}
- apply_filter_from_gui();
- return 1;
+ }
+ apply_filter_from_gui();
+ return 1;
}
-extern int tv_unhighligh_all()
+
+int tv_unhighligh_all()
{
- tv_node tvn;
- int i=0;
- for (i;i < view->Topview->Nodecount ; i++)
- {
- tvn.index=i;
- if(validate_node(&tvn))
- {
- ((custom_object_data*)AGDATA(view->Topview->Nodes[i].Node))->Highlighted=0;
- }
+ tv_node tvn;
+ int i = 0;
+ for (i; i < view->Topview->Nodecount; i++) {
+ tvn.index = i;
+ if (validate_node(&tvn)) {
+ ((custom_object_data *) AGDATA(view->Topview->Nodes[i].Node))->
+ Highlighted = 0;
}
- apply_filter_from_gui();
- return 1;
+ }
+ apply_filter_from_gui();
+ return 1;
}
-extern int tv_show_all()
+
+int tv_show_all()
{
- tv_node tvn;
- int i=0;
- for (i;i < view->Topview->Nodecount ; i++)
- {
- tvn.index=i;
- if(validate_node(&tvn))
- {
- ((custom_object_data*)AGDATA(view->Topview->Nodes[i].Node))->Visible=1;
- }
+ tv_node tvn;
+ int i = 0;
+ for (i; i < view->Topview->Nodecount; i++) {
+ tvn.index = i;
+ if (validate_node(&tvn)) {
+ ((custom_object_data *) AGDATA(view->Topview->Nodes[i].Node))->
+ Visible = 1;
}
- apply_filter_from_gui();
- return 1;
+ }
+ apply_filter_from_gui();
+ return 1;
}
-extern int tv_hide_all()
+
+int tv_hide_all()
{
- tv_node tvn;
- int i=0;
- for (i;i < view->Topview->Nodecount ; i++)
- {
- tvn.index=i;
- if(validate_node(&tvn))
- {
- ((custom_object_data*)AGDATA(view->Topview->Nodes[i].Node))->Visible=0;
- }
+ tv_node tvn;
+ int i = 0;
+ for (i; i < view->Topview->Nodecount; i++) {
+ tvn.index = i;
+ if (validate_node(&tvn)) {
+ ((custom_object_data *) AGDATA(view->Topview->Nodes[i].Node))->
+ Visible = 0;
}
- apply_filter_from_gui();
- return 1;
+ }
+ apply_filter_from_gui();
+ return 1;
}
-
-
-
-
-
-
#define countof( array ) ( sizeof( array )/sizeof( array[0] ) )
-ViewInfo* view;
+ViewInfo *view;
/*these two global variables should be wrapped in somethign else*/
-GtkMessageDialog* Dlg;
+GtkMessageDialog *Dlg;
int respond;
-void clear_viewport(ViewInfo* view)
+void clear_viewport(ViewInfo * view)
{
- int ind=0;
- /*free topview if there is one*/
- if(view->graphCount)
- {
- cleartopview(view->Topview);
- /*all cgraph graphs should be freed*/
- for (ind=0;ind < view->graphCount;ind ++)
- {
- agclose(view->g[ind]);
- }
- /*frees itself*/
- free(view);
+ int ind = 0;
+ /*free topview if there is one */
+ if (view->graphCount) {
+ cleartopview(view->Topview);
+ /*all cgraph graphs should be freed */
+ for (ind = 0; ind < view->graphCount; ind++) {
+ agclose(view->g[ind]);
}
+ /*frees itself */
+ free(view);
+ }
}
-void init_viewport(ViewInfo* view)
+void init_viewport(ViewInfo * view)
{
- //init graphs
- view->g=NULL; //no graph, gl screen should check it
- view->graphCount=0; //and disable interactivity if count is zero
-
-
- view->bdxLeft=0;
- view->bdxRight=500;
- view->bdyBottom=0;
- view->bdyTop=500;
- view->bdzBottom=0;
- view->bdzTop=0;
-
- view->borderColor.R=1;
- view->borderColor.G=0;
- view->borderColor.B=0;
- view->borderColor.A=1;
-
- view->bdVisible=1; //show borders red
-
- view->gridSize=10;
- view->gridColor.R=0.5;
- view->gridColor.G=0.5;
- view->gridColor.B=0.5;
- view->gridColor.A=1;
- view->gridVisible=0; //show grids in light gray
-
- //mouse mode=pan
- view->mouse.mouse_mode=0;
- //pen color
- view->penColor.R=0;
- view->penColor.G=0;
- view->penColor.B=0;
- view->penColor.A=1;
-
- view->fillColor.R=1;
- view->fillColor.G=0;
- view->fillColor.B=0;
- view->fillColor.A=1;
- //background color , default white
- view->bgColor.R=1;
- view->bgColor.G=1;
- view->bgColor.B=1;
- view->bgColor.A=1;
-
- //selected objets are drawn with this color
- view->selectedNodeColor.R=1;
- view->selectedNodeColor.G=0;
- view->selectedNodeColor.B=0;
- view->selectedNodeColor.A=1;
-
- //default line width;
- view->LineWidth=1;
-
- //default view settings , camera is not active
- view->GLDepth=1; //should be set before GetFixedOGLPos(int x, int y,float kts) funtion is used!!!!
- view->panx=0;
- view->pany=0;
- view->panz=0;
-
- view->prevpanx=0;
- view->prevpany=0;
-
-
- view->zoom=-20;
- view->texture=1;
- view->FontSize=52;
-
- view->topviewusermode =TOP_VIEW_USER_NOVICE_MODE; //for demo
- view->mg.active=0;
- view->mg.x=0;
- view->mg.y=0;
- view->mg.width=DEFAULT_MAGNIFIER_WIDTH;
- view->mg.height=DEFAULT_MAGNIFIER_HEIGHT;
- view->mg.kts=DEFAULT_MAGNIFIER_KTS;
- view->fmg.R=DEFAULT_FISHEYE_MAGNIFIER_RADIUS;
- view->fmg.active=0;
- view->mouse.mouse_down=0;
- view->activeGraph=-1;
- view->SignalBlock=0;
- view->Selection.Active=0;
- view->Selection.SelectionColor.R=0.5;
- view->Selection.SelectionColor.G=(float)0.2;
- view->Selection.SelectionColor.B=1;
- view->Selection.SelectionColor.A=1;
- view->Selection.Anti=0;
- view->Topview=malloc(sizeof(topview));
- view->Topview->topviewmenu='\0';
+ //init graphs
+ view->g = NULL; //no graph, gl screen should check it
+ view->graphCount = 0; //and disable interactivity if count is zero
+
+
+ view->bdxLeft = 0;
+ view->bdxRight = 500;
+ view->bdyBottom = 0;
+ view->bdyTop = 500;
+ view->bdzBottom = 0;
+ view->bdzTop = 0;
+
+ view->borderColor.R = 1;
+ view->borderColor.G = 0;
+ view->borderColor.B = 0;
+ view->borderColor.A = 1;
+
+ view->bdVisible = 1; //show borders red
+
+ view->gridSize = 10;
+ view->gridColor.R = 0.5;
+ view->gridColor.G = 0.5;
+ view->gridColor.B = 0.5;
+ view->gridColor.A = 1;
+ view->gridVisible = 0; //show grids in light gray
+
+ //mouse mode=pan
+ view->mouse.mouse_mode = 0;
+ //pen color
+ view->penColor.R = 0;
+ view->penColor.G = 0;
+ view->penColor.B = 0;
+ view->penColor.A = 1;
+
+ view->fillColor.R = 1;
+ view->fillColor.G = 0;
+ view->fillColor.B = 0;
+ view->fillColor.A = 1;
+ //background color , default white
+ view->bgColor.R = 1;
+ view->bgColor.G = 1;
+ view->bgColor.B = 1;
+ view->bgColor.A = 1;
+
+ //selected objets are drawn with this color
+ view->selectedNodeColor.R = 1;
+ view->selectedNodeColor.G = 0;
+ view->selectedNodeColor.B = 0;
+ view->selectedNodeColor.A = 1;
+
+ //default line width;
+ view->LineWidth = 1;
+
+ //default view settings , camera is not active
+ view->GLDepth = 1; //should be set before GetFixedOGLPos(int x, int y,float kts) funtion is used!!!!
+ view->panx = 0;
+ view->pany = 0;
+ view->panz = 0;
+
+ view->prevpanx = 0;
+ view->prevpany = 0;
+
+
+ view->zoom = -20;
+ view->texture = 1;
+ view->FontSize = 52;
+
+ view->topviewusermode = TOP_VIEW_USER_NOVICE_MODE; //for demo
+ view->mg.active = 0;
+ view->mg.x = 0;
+ view->mg.y = 0;
+ view->mg.width = DEFAULT_MAGNIFIER_WIDTH;
+ view->mg.height = DEFAULT_MAGNIFIER_HEIGHT;
+ view->mg.kts = DEFAULT_MAGNIFIER_KTS;
+ view->fmg.R = DEFAULT_FISHEYE_MAGNIFIER_RADIUS;
+ view->fmg.active = 0;
+ view->mouse.mouse_down = 0;
+ view->activeGraph = -1;
+ view->SignalBlock = 0;
+ view->Selection.Active = 0;
+ view->Selection.SelectionColor.R = 0.5;
+ view->Selection.SelectionColor.G = (float) 0.2;
+ view->Selection.SelectionColor.B = 1;
+ view->Selection.SelectionColor.A = 1;
+ view->Selection.Anti = 0;
+ view->Topview = malloc(sizeof(topview));
+ view->Topview->topviewmenu = '\0';
}
-int add_graph_to_viewport_from_file (char* fileName)
+int add_graph_to_viewport_from_file(char *fileName)
{
- //returns 1 if successfull else 0
- Agraph_t* graph;
- graph=loadGraph(fileName);
- if(graph)
- {
- view->graphCount = view->graphCount + 1;
- view->g= (Agraph_t**)realloc(view->g,sizeof(Agraph_t*)*view->graphCount);
- view->g[view->graphCount-1]=graph;
- view->activeGraph=view->graphCount-1;
- //GUI update , graph combo box on top-right should be updated
- refreshControls(view);
- return 1;
- }
- else
- return 0;
-
+ //returns 1 if successfull else 0
+ Agraph_t *graph;
+ graph = loadGraph(fileName);
+ if (graph) {
+ view->graphCount = view->graphCount + 1;
+ view->g =
+ (Agraph_t **) realloc(view->g,
+ sizeof(Agraph_t *) * view->graphCount);
+ view->g[view->graphCount - 1] = graph;
+ view->activeGraph = view->graphCount - 1;
+ //GUI update , graph combo box on top-right should be updated
+ refreshControls(view);
+ return 1;
+ } else
+ return 0;
+
}
int add_new_graph_to_viewport()
{
- //returns graph index , otherwise -1
- Agraph_t* graph;
- graph=(Agraph_t*) malloc(sizeof(Agraph_t));
- if(graph)
- {
- view->graphCount = view->graphCount + 1;
- view->g[view->graphCount-1]=graph;
- return (view->graphCount-1);
- }
- else
- return -1;
+ //returns graph index , otherwise -1
+ Agraph_t *graph;
+ graph = (Agraph_t *) malloc(sizeof(Agraph_t));
+ if (graph) {
+ view->graphCount = view->graphCount + 1;
+ view->g[view->graphCount - 1] = graph;
+ return (view->graphCount - 1);
+ } else
+ return -1;
}
-void refreshControls(ViewInfo* v)
+void refreshControls(ViewInfo * v)
{
- int i=0;
- GtkComboBox* widget;
- widget=get_SelectGraph();
- //load graph names to combobox
- for (i=0; i < v->graphCount; i ++)
- {
- gtk_combo_box_append_text(widget,((custom_graph_data*)(AGDATA(v->g[i])))->GraphFileName);
- }
- view->SignalBlock=1; //HACK
- gtk_combo_box_set_active (widget,view->activeGraph);
- view->SignalBlock=0;
+ int i = 0;
+ GtkComboBox *widget;
+ widget = get_SelectGraph();
+ //load graph names to combobox
+ for (i = 0; i < v->graphCount; i++) {
+ gtk_combo_box_append_text(widget,
+ ((custom_graph_data
+ *) (AGDATA(v->g[i])))->GraphFileName);
+ }
+ view->SignalBlock = 1; //HACK
+ gtk_combo_box_set_active(widget, view->activeGraph);
+ view->SignalBlock = 0;
- //change button colors
- Color_Widget_bg ("gray",glade_xml_get_widget(xml, "btnDot"));
- Color_Widget_bg ("gray",glade_xml_get_widget(xml, "btnNeato"));
- Color_Widget_bg ("gray",glade_xml_get_widget(xml, "btnTwopi"));
- Color_Widget_bg ("gray",glade_xml_get_widget(xml, "btnCirco"));
- Color_Widget_bg ("gray",glade_xml_get_widget(xml, "btnFdp"));
+ //change button colors
+ Color_Widget_bg("gray", glade_xml_get_widget(xml, "btnDot"));
+ Color_Widget_bg("gray", glade_xml_get_widget(xml, "btnNeato"));
+ Color_Widget_bg("gray", glade_xml_get_widget(xml, "btnTwopi"));
+ Color_Widget_bg("gray", glade_xml_get_widget(xml, "btnCirco"));
+ Color_Widget_bg("gray", glade_xml_get_widget(xml, "btnFdp"));
- switch( ((custom_graph_data*)(AGDATA(view->g[view->activeGraph])))->Engine )
- {
- case 0:
- Color_Widget_bg ("red",glade_xml_get_widget(xml, "btnDot"));
- break;
+ switch (((custom_graph_data *) (AGDATA(view->g[view->activeGraph])))->
+ Engine) {
+ case 0:
+ Color_Widget_bg("red", glade_xml_get_widget(xml, "btnDot"));
+ break;
- case 1:
- Color_Widget_bg ("red",glade_xml_get_widget(xml, "btnNeato"));
- break;
+ case 1:
+ Color_Widget_bg("red", glade_xml_get_widget(xml, "btnNeato"));
+ break;
- case 2:
- Color_Widget_bg ("red",glade_xml_get_widget(xml, "btnTwopi"));
- break;
+ case 2:
+ Color_Widget_bg("red", glade_xml_get_widget(xml, "btnTwopi"));
+ break;
- case 3:
- Color_Widget_bg ("red",glade_xml_get_widget(xml, "btnCirco"));
- break;
+ case 3:
+ Color_Widget_bg("red", glade_xml_get_widget(xml, "btnCirco"));
+ break;
- case 4:
- Color_Widget_bg ("red",glade_xml_get_widget(xml, "btnFdp"));
- break;
+ case 4:
+ Color_Widget_bg("red", glade_xml_get_widget(xml, "btnFdp"));
+ break;
- }
- glexpose();
+ }
+ glexpose();
+
-
}
-void update_graph_params(Agraph_t* graph) //adds gledit params
+void update_graph_params(Agraph_t * graph) //adds gledit params
{
- char tempString[100];
- agattr(graph,AGRAPH,"GraphFileName",((custom_graph_data*)(AGDATA(graph)))->GraphFileName);
- agattr(graph,AGRAPH,"GraphName",((custom_graph_data*)(AGDATA(graph)))->GraphName);
- sprintf( tempString, "%i", ((custom_graph_data*)(AGDATA(graph)))->AlwaysShow );
- agattr(graph,AGRAPH,"AlwaysShow",tempString);
- sprintf( tempString, "%i", ((custom_graph_data*)(AGDATA(graph)))->TopView);
- agattr(graph,AGRAPH,"TopView",tempString);
- sprintf( tempString, "%i", ((custom_graph_data*)(AGDATA(graph)))->Locked);
- agattr(graph,AGRAPH,"Locked",tempString);
- sprintf( tempString, "%i", ((custom_graph_data*)(AGDATA(graph)))->Engine);
- agattr(graph,AGRAPH,"Engine",tempString);
+ char tempString[100];
+ agattr(graph, AGRAPH, "GraphFileName",
+ ((custom_graph_data *) (AGDATA(graph)))->GraphFileName);
+ agattr(graph, AGRAPH, "GraphName",
+ ((custom_graph_data *) (AGDATA(graph)))->GraphName);
+ sprintf(tempString, "%i",
+ ((custom_graph_data *) (AGDATA(graph)))->AlwaysShow);
+ agattr(graph, AGRAPH, "AlwaysShow", tempString);
+ sprintf(tempString, "%i",
+ ((custom_graph_data *) (AGDATA(graph)))->TopView);
+ agattr(graph, AGRAPH, "TopView", tempString);
+ sprintf(tempString, "%i",
+ ((custom_graph_data *) (AGDATA(graph)))->Locked);
+ agattr(graph, AGRAPH, "Locked", tempString);
+ sprintf(tempString, "%i",
+ ((custom_graph_data *) (AGDATA(graph)))->Engine);
+ agattr(graph, AGRAPH, "Engine", tempString);
}
-void load_graph_params(Agraph_t* graph) //run once right after loading graph
+void load_graph_params(Agraph_t * graph) //run once right after loading graph
{
- //file may or may have not gl edit attributes
- //first defaults are set in loading function
- //here file is checked for previously saved gledit attributes
- if(agget(graph, "GraphName")) //Graph Name
- {
- ((custom_graph_data*)AGDATA(graph))->GraphName=(char*)malloc((strlen(agget(graph, "GraphName"))+1)*sizeof(char));
- strcpy(((custom_graph_data*)AGDATA(graph))->GraphName,agget(graph, "GraphName"));
- }
- if(agget(graph, "AlwaysShow")) //Graph Name
- ((custom_graph_data*)AGDATA(graph))->AlwaysShow=atoi(agget(graph, "AlwaysShow"));
- else
- ((custom_graph_data*)AGDATA(graph))->AlwaysShow=0;
-
- if(agget(graph, "TopView")) //Graph Name
- ((custom_graph_data*)AGDATA(graph))->TopView=atoi(agget(graph, "TopView"));
- else
- ((custom_graph_data*)AGDATA(graph))->TopView=0;
- if(agget(graph, "Locked")) //Graph Name
- ((custom_graph_data*)AGDATA(graph))->Locked=atoi(agget(graph, "Locked"));
- else
- ((custom_graph_data*)AGDATA(graph))->Locked=0;
- if(agget(graph, "Engine")) //Graph Name
- ((custom_graph_data*)AGDATA(graph))->Engine=atoi(agget(graph, "Engine"));
- else
- ((custom_graph_data*)AGDATA(graph))->Engine=0; //DOT
+ //file may or may have not gl edit attributes
+ //first defaults are set in loading function
+ //here file is checked for previously saved gledit attributes
+ if (agget(graph, "GraphName")) //Graph Name
+ {
+ ((custom_graph_data *) AGDATA(graph))->GraphName =
+ (char *) malloc((strlen(agget(graph, "GraphName")) + 1) *
+ sizeof(char));
+ strcpy(((custom_graph_data *) AGDATA(graph))->GraphName,
+ agget(graph, "GraphName"));
+ }
+ if (agget(graph, "AlwaysShow")) //Graph Name
+ ((custom_graph_data *) AGDATA(graph))->AlwaysShow =
+ atoi(agget(graph, "AlwaysShow"));
+ else
+ ((custom_graph_data *) AGDATA(graph))->AlwaysShow = 0;
+
+ if (agget(graph, "TopView")) //Graph Name
+ ((custom_graph_data *) AGDATA(graph))->TopView =
+ atoi(agget(graph, "TopView"));
+ else
+ ((custom_graph_data *) AGDATA(graph))->TopView = 0;
+ if (agget(graph, "Locked")) //Graph Name
+ ((custom_graph_data *) AGDATA(graph))->Locked =
+ atoi(agget(graph, "Locked"));
+ else
+ ((custom_graph_data *) AGDATA(graph))->Locked = 0;
+ if (agget(graph, "Engine")) //Graph Name
+ ((custom_graph_data *) AGDATA(graph))->Engine =
+ atoi(agget(graph, "Engine"));
+ else
+ ((custom_graph_data *) AGDATA(graph))->Engine = 0; //DOT
+
+ ((custom_graph_data *) AGDATA(graph))->Modified = 0; //not modified yet
+ ((custom_graph_data *) AGDATA(graph))->selectedEdges = '\0';
+ ((custom_graph_data *) AGDATA(graph))->selectedNodes = '\0';
+ ((custom_graph_data *) AGDATA(graph))->selectedGraphs = '\0';
+
+ ((custom_graph_data *) AGDATA(graph))->selectedNodesCount = 0;
+ ((custom_graph_data *) AGDATA(graph))->selectedEdgesCount = 0;
+ ((custom_graph_data *) AGDATA(graph))->selectedGraphsCount = 0;
- ((custom_graph_data*)AGDATA(graph))->Modified=0; //not modified yet
- ((custom_graph_data*)AGDATA(graph))->selectedEdges='\0';
- ((custom_graph_data*)AGDATA(graph))->selectedNodes='\0';
- ((custom_graph_data*)AGDATA(graph))->selectedGraphs='\0';
- ((custom_graph_data*)AGDATA(graph))->selectedNodesCount=0;
- ((custom_graph_data*)AGDATA(graph))->selectedEdgesCount=0;
- ((custom_graph_data*)AGDATA(graph))->selectedGraphsCount=0;
-
-
/* if(agget((void*)g, "xdotversion")) //xdot exists
((custom_graph_data*)AGDATA(g))->view->Topview=0; //need to check xdot version attribute
else //we dont know if it is view->Topview or simply a graph with no xdot, for testing i ll use view->Topview
}
-int save_graph() //save without prompt
+int save_graph() //save without prompt
{
- //check if there is an active graph
- if(view->activeGraph > -1)
- {
- //check if active graph has a file name
- if (((custom_graph_data*)AGDATA(view->g[view->activeGraph]))->GraphFileName)
- {
- return save_graph_with_file_name(view->g[view->activeGraph],((custom_graph_data*)AGDATA(view->g[view->activeGraph]))->GraphFileName);
- }
- else
- return save_as_graph();
- }
- return 1;
+ //check if there is an active graph
+ if (view->activeGraph > -1) {
+ //check if active graph has a file name
+ if (((custom_graph_data *) AGDATA(view->g[view->activeGraph]))->
+ GraphFileName) {
+ return save_graph_with_file_name(view->g[view->activeGraph],
+ ((custom_graph_data *)
+ AGDATA(view->
+ g[view->
+ activeGraph]))->
+ GraphFileName);
+ } else
+ return save_as_graph();
+ }
+ return 1;
}
-int save_as_graph() //save with prompt
+
+int save_as_graph() //save with prompt
{
- //check if there is an active graph
- if(view->activeGraph > -1)
- {
- GtkWidget *dialog;
- dialog = gtk_file_chooser_dialog_new ("Save File",
- NULL,
- GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
- gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
- {
- char *filename;
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
- save_graph_with_file_name(view->g[view->activeGraph],filename);
- g_free (filename);
- gtk_widget_destroy (dialog);
-
- return 1;
- }
- else
- {
- gtk_widget_destroy (dialog);
- return 0;
- }
+ //check if there is an active graph
+ if (view->activeGraph > -1) {
+ GtkWidget *dialog;
+ dialog = gtk_file_chooser_dialog_new("Save File",
+ NULL,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ GTK_STOCK_SAVE,
+ GTK_RESPONSE_ACCEPT, NULL);
+ gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER
+ (dialog), TRUE);
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
+ char *filename;
+ filename =
+ gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+ save_graph_with_file_name(view->g[view->activeGraph],
+ filename);
+ g_free(filename);
+ gtk_widget_destroy(dialog);
+
+ return 1;
+ } else {
+ gtk_widget_destroy(dialog);
+ return 0;
}
- return 0;
+ }
+ return 0;
}
-int save_graph_with_file_name(Agraph_t* graph,char* fileName) //saves graph with file name,if file name is NULL save as is ++
+int save_graph_with_file_name(Agraph_t * graph, char *fileName) //saves graph with file name,if file name is NULL save as is ++
{
- //if file name is NULL save to graph's filename
- //else use file name, this implements save as..
- FILE* output_file;
- update_graph_params(graph);
- if(fileName)
- output_file = fopen(fileName, "w");
- else
- {
- if ( ((custom_graph_data*)(AGDATA(graph)))->GraphFileName )
- output_file = fopen(((custom_graph_data*)(AGDATA(graph)))->GraphFileName, "w");
- else
- {
- g_print("there is no file name to save! Programmer error\n");
- return 0;
- }
- }
- if (output_file == NULL)
- {
- g_print("Cannot create file \n");
- return 0;
- }
- else if (agwrite(graph,(void*) output_file))
- {
- g_print("%s sucessfully saved \n", fileName);
- return 1;
+ //if file name is NULL save to graph's filename
+ //else use file name, this implements save as..
+ FILE *output_file;
+ update_graph_params(graph);
+ if (fileName)
+ output_file = fopen(fileName, "w");
+ else {
+ if (((custom_graph_data *) (AGDATA(graph)))->GraphFileName)
+ output_file =
+ fopen(((custom_graph_data *) (AGDATA(graph)))->
+ GraphFileName, "w");
+ else {
+ g_print("there is no file name to save! Programmer error\n");
+ return 0;
}
+ }
+ if (output_file == NULL) {
+ g_print("Cannot create file \n");
return 0;
+ } else if (agwrite(graph, (void *) output_file)) {
+ g_print("%s sucessfully saved \n", fileName);
+ return 1;
+ }
+ return 0;
}
-int create_xdot_for_graph(Agraph_t* graph,int keeppos)
+int create_xdot_for_graph(Agraph_t * graph, int keeppos)
{
- //0 failed , 1 successfull
- //save graph to __temp.dot
- //run dot/neato whatever to create the xdot version __temp.xdot
- //delete temp files
- //use this function to do layouts too
- int r=0;
- FILE* output_file;
- update_graph_params(graph);
+ //0 failed , 1 successfull
+ //save graph to __temp.dot
+ //run dot/neato whatever to create the xdot version __temp.xdot
+ //delete temp files
+ //use this function to do layouts too
+ int r = 0;
+ FILE *output_file;
+ update_graph_params(graph);
#ifdef _WIN32
- if(output_file = fopen("c:/__tempfile.dot", "w"))
+ if (output_file = fopen("c:/__tempfile.dot", "w"))
#else
- if(output_file = fopen("/tmp/__tempfile.dot", "w"))
+ if ((output_file = fopen("/tmp/__tempfile.dot", "w")))
#endif
- {
- clear_graph_xdot(graph);
- agwrite(graph,(void*) output_file); //save graph
- fclose(output_file);//close file desc
+ {
+ clear_graph_xdot(graph);
+ agwrite(graph, (void *) output_file); //save graph
+ fclose(output_file); //close file desc
- if(keeppos==0)
- {
+ if (keeppos == 0) {
#ifdef _WIN32
- if ( ((custom_graph_data*)AGDATA(graph))->Engine == 0)
- system("\"C:/Program Files/Graphviz2.15/bin/dot.exe\" -Txdot -Kdot c:/__tempfile.dot -oc:/__tempfile.xdot");
- if ( ((custom_graph_data*)AGDATA(graph))->Engine == 1)
- system("\"C:/Program Files/Graphviz2.15/bin/dot.exe\" -Txdot -Kneato c:/__tempfile.dot -oc:/__tempfile.xdot");
- if ( ((custom_graph_data*)AGDATA(graph))->Engine == 2)
- system("\"C:/Program Files/Graphviz2.15/bin/dot.exe\" -Txdot -Ktwopi c:/__tempfile.dot -oc:/__tempfile.xdot");
- if ( ((custom_graph_data*)AGDATA(graph))->Engine == 3)
- system("\"C:/Program Files/Graphviz2.15/bin/dot.exe\" -Txdot -Kcirco c:/__tempfile.dot -oc:/__tempfile.xdot");
- if ( ((custom_graph_data*)AGDATA(graph))->Engine == 4)
- system("\"C:/Program Files/Graphviz2.15/bin/dot.exe\" -Txdot -Kfdp c:/__tempfile.dot -oc:/__tempfile.xdot");
+ if (((custom_graph_data *) AGDATA(graph))->Engine == 0)
+ system
+ ("\"C:/Program Files/Graphviz2.15/bin/dot.exe\" -Txdot -Kdot c:/__tempfile.dot -oc:/__tempfile.xdot");
+ if (((custom_graph_data *) AGDATA(graph))->Engine == 1)
+ system
+ ("\"C:/Program Files/Graphviz2.15/bin/dot.exe\" -Txdot -Kneato c:/__tempfile.dot -oc:/__tempfile.xdot");
+ if (((custom_graph_data *) AGDATA(graph))->Engine == 2)
+ system
+ ("\"C:/Program Files/Graphviz2.15/bin/dot.exe\" -Txdot -Ktwopi c:/__tempfile.dot -oc:/__tempfile.xdot");
+ if (((custom_graph_data *) AGDATA(graph))->Engine == 3)
+ system
+ ("\"C:/Program Files/Graphviz2.15/bin/dot.exe\" -Txdot -Kcirco c:/__tempfile.dot -oc:/__tempfile.xdot");
+ if (((custom_graph_data *) AGDATA(graph))->Engine == 4)
+ system
+ ("\"C:/Program Files/Graphviz2.15/bin/dot.exe\" -Txdot -Kfdp c:/__tempfile.dot -oc:/__tempfile.xdot");
#else
- if ( ((custom_graph_data*)AGDATA(graph))->Engine == 0)
- system("\"dot\" -Txdot -Kdot /tmp/__tempfile.dot -o/tmp/__tempfile.xdot");
- if ( ((custom_graph_data*)AGDATA(graph))->Engine == 1)
- system("\"dot\" -Txdot -Kneato /tmp/__tempfile.dot -o/tmp/__tempfile.xdot");
- if ( ((custom_graph_data*)AGDATA(graph))->Engine == 2)
- system("\"dot\" -Txdot -Ktwopi /tmp/__tempfile.dot -o/tmp/__tempfile.xdot");
- if ( ((custom_graph_data*)AGDATA(graph))->Engine == 3)
- system("\"dot\" -Txdot -Kcirco /tmp/__tempfile.dot -o/tmp/__tempfile.xdot");
- if ( ((custom_graph_data*)AGDATA(graph))->Engine == 4)
- system("\"dot\" -Txdot -Kfdp /tmp/__tempfile.dot -o/tmp/__tempfile.xdot");
+ if (((custom_graph_data *) AGDATA(graph))->Engine == 0)
+ system
+ ("\"dot\" -Txdot -Kdot /tmp/__tempfile.dot -o/tmp/__tempfile.xdot");
+ if (((custom_graph_data *) AGDATA(graph))->Engine == 1)
+ system
+ ("\"dot\" -Txdot -Kneato /tmp/__tempfile.dot -o/tmp/__tempfile.xdot");
+ if (((custom_graph_data *) AGDATA(graph))->Engine == 2)
+ system
+ ("\"dot\" -Txdot -Ktwopi /tmp/__tempfile.dot -o/tmp/__tempfile.xdot");
+ if (((custom_graph_data *) AGDATA(graph))->Engine == 3)
+ system
+ ("\"dot\" -Txdot -Kcirco /tmp/__tempfile.dot -o/tmp/__tempfile.xdot");
+ if (((custom_graph_data *) AGDATA(graph))->Engine == 4)
+ system
+ ("\"dot\" -Txdot -Kfdp /tmp/__tempfile.dot -o/tmp/__tempfile.xdot");
#endif
- }
-
- //no position change
- else
+ }
+ //no position change
+ else
#ifdef _WIN32
- system("\"C:/Program Files/Graphviz2.15/bin/neato.exe\" -n2 -Txdot c:/__tempfile.dot -oc:/__tempfile.xdot");
+ system
+ ("\"C:/Program Files/Graphviz2.15/bin/neato.exe\" -n2 -Txdot c:/__tempfile.dot -oc:/__tempfile.xdot");
#else
- system("\"neato\" -n2 -Txdot /tmp/__tempfile.dot -o/tmp/__tempfile.xdot");
+ system
+ ("\"neato\" -n2 -Txdot /tmp/__tempfile.dot -o/tmp/__tempfile.xdot");
#endif
-
- if(r) //load the new graph and change file name
- {
- clear_graph(graph); //i am not sure about this, need to talk to North
- return TRUE;
- }
+ if (r) //load the new graph and change file name
+ {
+ clear_graph(graph); //i am not sure about this, need to talk to North
+ return TRUE;
+
}
- else
- return FALSE;
+ } else
+ return FALSE;
- return 0;
+ return 0;
}
-int do_graph_layout(Agraph_t* graph,int Engine,int keeppos) //changes the layout, all user relocations are reset unless keeppos is set to 1
+int do_graph_layout(Agraph_t * graph, int Engine, int keeppos) //changes the layout, all user relocations are reset unless keeppos is set to 1
{
/* Agnode_t *v;
Agedge_t *e;
Agsym_t *attr;
Dict_t *d;
int cnt;*/
-// mydata *p;
- FILE* input_file;
- char* _filename=(char*)malloc((strlen(((custom_graph_data*)(AGDATA(view->g[view->activeGraph])))->GraphFileName)+1)*sizeof(char));
- strcpy(_filename,((custom_graph_data*)AGDATA(view->g[view->activeGraph]))->GraphFileName);
-
-
- ((custom_graph_data*)AGDATA(view->g[view->activeGraph]))->Engine=Engine;
- create_xdot_for_graph(view->g[view->activeGraph],keeppos);
+// mydata *p;
+ FILE *input_file;
+ char *_filename =
+ (char *)
+ malloc((strlen
+ (((custom_graph_data
+ *) (AGDATA(view->g[view->activeGraph])))->
+ GraphFileName) + 1) * sizeof(char));
+ strcpy(_filename,
+ ((custom_graph_data *) AGDATA(view->g[view->activeGraph]))->
+ GraphFileName);
+
+
+ ((custom_graph_data *) AGDATA(view->g[view->activeGraph]))->Engine =
+ Engine;
+ create_xdot_for_graph(view->g[view->activeGraph], keeppos);
#ifdef _WIN32
- input_file = fopen("c:/__tempfile.xdot", "r");
+ input_file = fopen("c:/__tempfile.xdot", "r");
#else
- input_file = fopen("/tmp/__tempfile.xdot", "r");
+ input_file = fopen("/tmp/__tempfile.xdot", "r");
#endif
- clear_graph(view->g[view->activeGraph]);
- agclose(view->g[view->activeGraph]);
- if (input_file == NULL)
- g_print("temp file Cannot open n");
- else if (view->g[view->activeGraph]= agread(input_file,NIL(Agdisc_t*)))
- {
- fclose(input_file);
- //attaching rec for graph fields
- attach_object_custom_data_to_graph(view->g[view->activeGraph]);
- //set real file name
- ((custom_graph_data*)AGDATA(view->g[view->activeGraph]))->GraphFileName=(char*)malloc((strlen(_filename)+1)*sizeof(char));
- load_graph_params(view->g[view->activeGraph]); //init glparams
- strcpy(((custom_graph_data*)AGDATA(view->g[view->activeGraph]))->GraphFileName,_filename);
- free(_filename);
- //set engine
- ((custom_graph_data*)AGDATA(view->g[view->activeGraph]))->Engine=Engine;
- ((custom_graph_data*)AGDATA(view->g[view->activeGraph]))->Modified=1;
- refreshControls(view);
- return 1;
- }
- else
- {
- return 0;
- }
-
-
+ clear_graph(view->g[view->activeGraph]);
+ agclose(view->g[view->activeGraph]);
+ if (input_file == NULL)
+ g_print("temp file Cannot open n");
+ else if ((view->g[view->activeGraph] =
+ agread(input_file, NIL(Agdisc_t *)))) {
+ fclose(input_file);
+ //attaching rec for graph fields
+ attach_object_custom_data_to_graph(view->g[view->activeGraph]);
+ //set real file name
+ ((custom_graph_data *) AGDATA(view->g[view->activeGraph]))->
+ GraphFileName =
+ (char *) malloc((strlen(_filename) + 1) * sizeof(char));
+ load_graph_params(view->g[view->activeGraph]); //init glparams
+ strcpy(((custom_graph_data *) AGDATA(view->g[view->activeGraph]))->
+ GraphFileName, _filename);
+ free(_filename);
+ //set engine
+ ((custom_graph_data *) AGDATA(view->g[view->activeGraph]))->
+ Engine = Engine;
+ ((custom_graph_data *) AGDATA(view->g[view->activeGraph]))->
+ Modified = 1;
+ refreshControls(view);
+ return 1;
+ } else {
return 0;
+ }
+
+
+ return 0;
}
-void clear_graph(Agraph_t* graph)
+void clear_graph(Agraph_t * graph)
//clears custom data binded
{
-
+
}
-Agraph_t* loadGraph(char* filename)
+Agraph_t *loadGraph(char *filename)
{
- Agraph_t *g;
-// mydata *p;
- FILE* input_file;
- input_file = fopen(filename, "r");
- if (input_file == NULL)
- g_print("Cannot open %s\n", filename);
- else if (g = agread(input_file,NIL(Agdisc_t*)))
+ Agraph_t *g;
+// mydata *p;
+ FILE *input_file;
+ input_file = fopen(filename, "r");
+ if (input_file == NULL)
+ g_print("Cannot open %s\n", filename);
+ else if ((g = agread(input_file, NIL(Agdisc_t *)))) {
+ attach_object_custom_data_to_graph(g);
+ load_graph_params(g);
+
+ if ((!agget(g, "xdotversion"))
+ && ((agget(g, "TopView") == "0")
+ || !agget(g, "TopView")
+ )
+
+ )
{
- attach_object_custom_data_to_graph(g);
- load_graph_params(g);
-
- if (
- ( !agget(g, "xdotversion"))
- &&
- (
- ( agget(g, "TopView")=="0")
- ||
- !agget(g, "TopView")
- )
-
- )
-
- {
- create_xdot_for_graph(g,0);
- fclose(input_file);
+ create_xdot_for_graph(g, 0);
+ fclose(input_file);
#ifdef _WIN32
- input_file = fopen("c:/__tempfile.xdot", "r");
+ input_file = fopen("c:/__tempfile.xdot", "r");
#else
- input_file = fopen("/tmp/__tempfile.xdot", "r");
+ input_file = fopen("/tmp/__tempfile.xdot", "r");
#endif
- while(input_file== NULL) //HACK!!!!
- {
- input_file = fopen("c:/__tempfile.xdot", "r");
-// g_print("Cannot open xdot error %si\n",strerror(errno));
-
- }
- g = agread(input_file,NIL(Agdisc_t*));
- g_print("xdot is being loaded\n");
- //attaching rec for graph fields
- attach_object_custom_data_to_graph(g);
- load_graph_params(g);
- // fclose(input_file);
- }
- ((custom_graph_data*)AGDATA(g))->GraphFileName=(char*)malloc((strlen(filename)+1)*sizeof(char));
- //attaching rec for graph objects
- strcpy(((custom_graph_data*)AGDATA(g))->GraphFileName,filename);
- /*if(strcasecmp(agget(g, "TopView"),"1")==0)
- {
- if(
- TopviewNodeCount > 0)
- {
- Dlg=gtk_message_dialog_new (NULL,
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_WARNING,
- GTK_BUTTONS_OK,
- "For Performance issues , this program does not support multiple Topview graphs!");
- respond=gtk_dialog_run (Dlg);
- gtk_object_destroy (Dlg);
- agclose(g);
- return 0;
- }
- else
- PrepareTopview(g);
- }*/
- preparetopview(g,view->Topview);
- return g;
- }
- else
- {
- return 0;
+ while (input_file == NULL) //HACK!!!!
+ {
+ input_file = fopen("c:/__tempfile.xdot", "r");
+// g_print("Cannot open xdot error %si\n",strerror(errno));
+
+ }
+ g = agread(input_file, NIL(Agdisc_t *));
+ g_print("xdot is being loaded\n");
+ //attaching rec for graph fields
+ attach_object_custom_data_to_graph(g);
+ load_graph_params(g);
+ // fclose(input_file);
}
+ ((custom_graph_data *) AGDATA(g))->GraphFileName =
+ (char *) malloc((strlen(filename) + 1) * sizeof(char));
+ //attaching rec for graph objects
+ strcpy(((custom_graph_data *) AGDATA(g))->GraphFileName, filename);
+ /*if(strcasecmp(agget(g, "TopView"),"1")==0)
+ {
+ if(
+ TopviewNodeCount > 0)
+ {
+ Dlg=gtk_message_dialog_new (NULL,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_OK,
+ "For Performance issues , this program does not support multiple Topview graphs!");
+ respond=gtk_dialog_run (Dlg);
+ gtk_object_destroy (Dlg);
+ agclose(g);
+ return 0;
+ }
+ else
+ PrepareTopview(g);
+ } */
+ preparetopview(g, view->Topview);
+ return g;
+ } else {
return 0;
+ }
+ return 0;
}
-int clear_object_xdot(void* obj)
+int clear_object_xdot(void *obj)
{
- if (obj)
- {
- if(agattrsym(obj,"_draw_"))
- agset(obj,"_draw_","");
- if(agattrsym(obj,"_ldraw_"))
- agset(obj,"_ldraw_","");
- if(agattrsym(obj,"_hdraw_"))
- agset(obj,"_hdraw_","");
- if(agattrsym(obj,"_tdraw_"))
- agset(obj,"_tdraw_","");
- if(agattrsym(obj,"_hldraw_"))
- agset(obj,"_hldraw_","");
- if(agattrsym(obj,"_tldraw_"))
- agset(obj,"_tldraw_","");
- return 1;
- }
- return 0;
+ if (obj) {
+ if (agattrsym(obj, "_draw_"))
+ agset(obj, "_draw_", "");
+ if (agattrsym(obj, "_ldraw_"))
+ agset(obj, "_ldraw_", "");
+ if (agattrsym(obj, "_hdraw_"))
+ agset(obj, "_hdraw_", "");
+ if (agattrsym(obj, "_tdraw_"))
+ agset(obj, "_tdraw_", "");
+ if (agattrsym(obj, "_hldraw_"))
+ agset(obj, "_hldraw_", "");
+ if (agattrsym(obj, "_tldraw_"))
+ agset(obj, "_tldraw_", "");
+ return 1;
+ }
+ return 0;
}
-int clear_graph_xdot(Agraph_t* graph) //clears all xdot attributes, used especially before layout change
+int clear_graph_xdot(Agraph_t * graph) //clears all xdot attributes, used especially before layout change
{
- Agnode_t *n;
- Agedge_t *e;
- Agraph_t *s;
+ Agnode_t *n;
+ Agedge_t *e;
+ Agraph_t *s;
-
- clear_object_xdot(graph);
- n = agfstnode(graph);
-
- for (s = agfstsubg(graph); s; s = agnxtsubg(s))
- clear_object_xdot(s);
- for (n = agfstnode(graph); n; n = agnxtnode(graph, n))
- {
- clear_object_xdot(n);
- for (e = agfstout(graph,n) ; e ; e = agnxtout (graph,e))
- {
- clear_object_xdot(e);
- }
+ clear_object_xdot(graph);
+ n = agfstnode(graph);
+
+ for (s = agfstsubg(graph); s; s = agnxtsubg(s))
+ clear_object_xdot(s);
+
+ for (n = agfstnode(graph); n; n = agnxtnode(graph, n)) {
+ clear_object_xdot(n);
+ for (e = agfstout(graph, n); e; e = agnxtout(graph, e)) {
+ clear_object_xdot(e);
}
- return 1;
+ }
+ return 1;
}
*/
-int attach_object_custom_data_to_graph(Agraph_t* graph)
+int attach_object_custom_data_to_graph(Agraph_t * graph)
{
Agnode_t *n;
- Agedge_t *e;
- Agraph_t *s;
+ Agedge_t *e;
+ Agraph_t *s;
- agbindrec(graph,"custom_graph_data",sizeof(custom_graph_data),TRUE);//graph custom data
- init_object_custom_data(graph,graph); //attach to graph itself
+ agbindrec(graph, "custom_graph_data", sizeof(custom_graph_data), TRUE); //graph custom data
+ init_object_custom_data(graph, graph); //attach to graph itself
- n = agfstnode(graph);
-
- for (s = agfstsubg(graph); s; s = agnxtsubg(s))
- init_object_custom_data(graph,s); //attach to subgraph
+ n = agfstnode(graph);
- for (n = agfstnode(graph); n; n = agnxtnode(graph, n))
- {
- init_object_custom_data(graph,n); //attach to node
- for (e = agfstout(graph,n) ; e ; e = agnxtout (graph,e))
- {
- init_object_custom_data(graph,e); //attach to edge
- }
+ for (s = agfstsubg(graph); s; s = agnxtsubg(s))
+ init_object_custom_data(graph, s); //attach to subgraph
+
+ for (n = agfstnode(graph); n; n = agnxtnode(graph, n)) {
+ init_object_custom_data(graph, n); //attach to node
+ for (e = agfstout(graph, n); e; e = agnxtout(graph, e)) {
+ init_object_custom_data(graph, e); //attach to edge
}
- return 1;
-
+ }
+ return 1;
+
}
-int init_object_custom_data(Agraph_t* graph,void* obj)//creates a custom_object_data
+int init_object_custom_data(Agraph_t * graph, void *obj) //creates a custom_object_data
{
- agdelrec(graph, "custom_object_data");
- agbindrec(obj,"custom_object_data",sizeof(custom_object_data),TRUE);
- ((custom_object_data*)AGDATA(obj))->ID=0;
- ((custom_object_data*)AGDATA(obj))->ObjName=NULL;
- ((custom_object_data*)AGDATA(obj))->ObjType=AGTYPE(obj);
- ((custom_object_data*)AGDATA(obj))->Layer=-1;
- ((custom_object_data*)AGDATA(obj))->Visible=1;
- ((custom_object_data*)AGDATA(obj))->Locked=0;
- ((custom_object_data*)AGDATA(obj))->Highlighted=0;
- ((custom_object_data*)AGDATA(obj))->NumDataCount=0;
- ((custom_object_data*)AGDATA(obj))->NumData=NULL;
- ((custom_object_data*)AGDATA(obj))->StrDataCount=0;
- ((custom_object_data*)AGDATA(obj))->StrData=NULL;
- return 1;
+ agdelrec(graph, "custom_object_data");
+ agbindrec(obj, "custom_object_data", sizeof(custom_object_data), TRUE);
+ ((custom_object_data *) AGDATA(obj))->ID = 0;
+ ((custom_object_data *) AGDATA(obj))->ObjName = NULL;
+ ((custom_object_data *) AGDATA(obj))->ObjType = AGTYPE(obj);
+ ((custom_object_data *) AGDATA(obj))->Layer = -1;
+ ((custom_object_data *) AGDATA(obj))->Visible = 1;
+ ((custom_object_data *) AGDATA(obj))->Locked = 0;
+ ((custom_object_data *) AGDATA(obj))->Highlighted = 0;
+ ((custom_object_data *) AGDATA(obj))->NumDataCount = 0;
+ ((custom_object_data *) AGDATA(obj))->NumData = NULL;
+ ((custom_object_data *) AGDATA(obj))->StrDataCount = 0;
+ ((custom_object_data *) AGDATA(obj))->StrData = NULL;
+ return 1;
}
-int clear_object_custom_data(void* obj) //frees memory allocated for cutom object data
+int clear_object_custom_data(void *obj) //frees memory allocated for cutom object data
{
- return ( (clear_string_data_from_object_custom_data(obj)) || (clear_numeric_data_from_object_custom_data(obj)));
+ return ((clear_string_data_from_object_custom_data(obj))
+ || (clear_numeric_data_from_object_custom_data(obj)));
}
-int add_string_data_to_object_custom_data(void* obj,char* data)
+int add_string_data_to_object_custom_data(void *obj, char *data)
{
- if ((obj != NULL) && (data !=NULL))
- {
- ((custom_object_data*)AGDATA(obj))->StrData=realloc( ((custom_object_data*)AGDATA(obj))->StrData , sizeof(char*)*(((custom_object_data*)AGDATA(obj))->StrDataCount +1));
- ((custom_object_data*)AGDATA(obj))->StrData[((custom_object_data*)AGDATA(obj))->StrDataCount]=malloc((strlen(data)+1) * sizeof(char));
- strcpy(((custom_object_data*)AGDATA(obj))->StrData[((custom_object_data*)AGDATA(obj))->StrDataCount],data);
- ((custom_object_data*)AGDATA(obj))->StrDataCount++;
- return 1;
- }
- return 0;
+ if ((obj != NULL) && (data != NULL)) {
+ ((custom_object_data *) AGDATA(obj))->StrData =
+ realloc(((custom_object_data *) AGDATA(obj))->StrData,
+ sizeof(char *) *
+ (((custom_object_data *) AGDATA(obj))->StrDataCount +
+ 1));
+ ((custom_object_data *) AGDATA(obj))->
+ StrData[((custom_object_data *) AGDATA(obj))->StrDataCount] =
+ malloc((strlen(data) + 1) * sizeof(char));
+ strcpy(((custom_object_data *) AGDATA(obj))->
+ StrData[((custom_object_data *) AGDATA(obj))->StrDataCount],
+ data);
+ ((custom_object_data *) AGDATA(obj))->StrDataCount++;
+ return 1;
+ }
+ return 0;
}
-int add_numeric_data_to_object_custom_data(void* obj,float data)
+int add_numeric_data_to_object_custom_data(void *obj, float data)
{
- if (obj != NULL)
- {
- ((custom_object_data*)AGDATA(obj))->NumData=realloc( ((custom_object_data*)AGDATA(obj))->StrData , sizeof(char*)*(((custom_object_data*)AGDATA(obj))->NumDataCount+1));
- ((custom_object_data*)AGDATA(obj))->NumData[((custom_object_data*)AGDATA(obj))->NumDataCount]=data;
- ((custom_object_data*)AGDATA(obj))->NumDataCount++;
- return 1;
- }
- return 0;
+ if (obj != NULL) {
+ ((custom_object_data *) AGDATA(obj))->NumData =
+ realloc(((custom_object_data *) AGDATA(obj))->StrData,
+ sizeof(char *) *
+ (((custom_object_data *) AGDATA(obj))->NumDataCount +
+ 1));
+ ((custom_object_data *) AGDATA(obj))->
+ NumData[((custom_object_data *) AGDATA(obj))->NumDataCount] =
+ data;
+ ((custom_object_data *) AGDATA(obj))->NumDataCount++;
+ return 1;
+ }
+ return 0;
}
-int clear_string_data_from_object_custom_data(void* obj)
+int clear_string_data_from_object_custom_data(void *obj)
{
- if(obj != NULL)
- {
- int ind=0;
- for (ind=0; ind < ((custom_object_data*)AGDATA(obj))->StrDataCount;ind ++)
- {
- free ( ((custom_object_data*)AGDATA(obj))->StrData[ind]);
- }
- free(((custom_object_data*)AGDATA(obj))->StrData);
- return 1;
+ if (obj != NULL) {
+ int ind = 0;
+ for (ind = 0;
+ ind < ((custom_object_data *) AGDATA(obj))->StrDataCount;
+ ind++) {
+ free(((custom_object_data *) AGDATA(obj))->StrData[ind]);
}
- return 0;
+ free(((custom_object_data *) AGDATA(obj))->StrData);
+ return 1;
+ }
+ return 0;
}
-int clear_numeric_data_from_object_custom_data(void* obj)
+int clear_numeric_data_from_object_custom_data(void *obj)
{
- if(obj != NULL)
- {
- free(((custom_object_data*)AGDATA(obj))->NumData);
- return 1;
- }
- return 0;
+ if (obj != NULL) {
+ free(((custom_object_data *) AGDATA(obj))->NumData);
+ return 1;
+ }
+ return 0;
}
-void move_node(void* obj,float dx,float dy)
+void move_node(void *obj, float dx, float dy)
{
- char buf[512];
- char buf2[512];
- char* pch;
- int a=0;
- int i=0;
- if( (agget(obj,"pos")) && ( AGTYPE(obj)==AGNODE ))
- {
- //tokenize
- strcpy(buf,agget(obj, "pos"));
-
- pch=strtok (buf,"," );
- while (pch != NULL)
- {
- if(i==0)
- a=sprintf(buf2+a,"%i,",atoi(pch)-(int)dx);
- else
- a=sprintf(buf2+a,"%i,",atoi(pch)-(int)dy);
- pch=strtok (NULL,"," );
- i++;
- }
- buf2[strlen(buf2)-1]='\0';
- agset(obj,"pos",buf2);
+ char buf[512];
+ char buf2[512];
+ char *pch;
+ int a = 0;
+ int i = 0;
+ if ((agget(obj, "pos")) && (AGTYPE(obj) == AGNODE)) {
+ //tokenize
+ strcpy(buf, agget(obj, "pos"));
+
+ pch = strtok(buf, ",");
+ while (pch != NULL) {
+ if (i == 0)
+ a = sprintf(buf2 + a, "%i,", atoi(pch) - (int) dx);
+ else
+ a = sprintf(buf2 + a, "%i,", atoi(pch) - (int) dy);
+ pch = strtok(NULL, ",");
+ i++;
}
+ buf2[strlen(buf2) - 1] = '\0';
+ agset(obj, "pos", buf2);
+ }
}
-void move_nodes(Agraph_t* g) //move selected nodes
+static char *move_xdot(void *obj, xdot * x, int dx, int dy, int dz)
{
- Agnode_t* obj;
+ int i = 0;
+ int j = 0;
+ /* int a=0; */
+ /* char* pch; */
+ /* int pos[MAXIMUM_POS_COUNT]; //maximum pos count hopefully does not exceed 100 */
+ if (!x)
+ return "\0";
+
+ for (i = 0; i < x->cnt; i++) {
+ switch (x->ops[i].kind) {
+ case xd_filled_polygon:
+ case xd_unfilled_polygon:
+ case xd_filled_bezier:
+ case xd_unfilled_bezier:
+ case xd_polyline:
+ for (j = 0; j < x->ops[i].u.polygon.cnt; j++) {
+ x->ops[i].u.polygon.pts[j].x =
+ x->ops[i].u.polygon.pts[j].x - dx;
+ x->ops[i].u.polygon.pts[j].y =
+ x->ops[i].u.polygon.pts[j].y - dy;
+ x->ops[i].u.polygon.pts[j].z =
+ x->ops[i].u.polygon.pts[j].z - dz;
+ }
+ break;
+ case xd_filled_ellipse:
+ case xd_unfilled_ellipse:
+ x->ops[i].u.ellipse.x = x->ops[i].u.ellipse.x - dx;
+ x->ops[i].u.ellipse.y = x->ops[i].u.ellipse.y - dy;
+ // x->ops[i].u.ellipse.z=x->ops[i].u.ellipse.z-dz;
+ break;
+ case xd_text:
+ x->ops[i].u.text.x = x->ops[i].u.text.x - dx;
+ x->ops[i].u.text.y = x->ops[i].u.text.y - dy;
+ // x->ops[i].u.text.z=x->ops[i].u.text.z-dz;
+ break;
+ case xd_image:
+ x->ops[i].u.image.pos.x = x->ops[i].u.image.pos.x - dx;
+ x->ops[i].u.image.pos.y = x->ops[i].u.image.pos.y - dy;
+ // x->ops[i].u.image.pos.z=x->ops[i].u.image.pos.z-dz;
+ break;
+ default:
+ break;
+ }
+ }
+ view->GLx = view->GLx2;
+ view->GLy = view->GLy2;
+ return sprintXDot(x);
- float dx,dy;
- xdot* bf;
- int i=0;
- dx=view->GLx-view->GLx2;
- dy=view->GLy-view->GLy2;
- if(((custom_graph_data*)AGDATA(view->g[view->activeGraph]))->TopView == 0)
- {
- for (i=0;i < ((custom_graph_data*)AGDATA(g))->selectedNodesCount;i++)
- {
- obj=((custom_graph_data*)AGDATA(g))->selectedNodes[i];
- bf=parseXDot (agget(obj,"_draw_"));
- agset(obj,"_draw_",move_xdot(obj,bf,(int)dx,(int)dy,0));
- free(bf);
- bf=parseXDot (agget(obj,"_ldraw_"));
- agset(obj,"_ldraw_",move_xdot(obj,bf,(int)dx,(int)dy,0));
- free(bf);
- move_node(obj,dx,dy);
- //iterate edges
- /*for (e = agfstout(g,obj) ; e ; e = agnxtout (g,e))
- {
- bf=parseXDot (agget(e,"_tdraw_"));
- agset(e,"_tdraw_",move_xdot(e,bf,(int)dx,(int)dy,0.00));
- free(bf);
- bf=parseXDot (agget(e,"_tldraw_"));
- agset(e,"_tldraw_",move_xdot(e,bf,(int)dx,(int)dy,0.00));
- free(bf);
- bf=parseXDot (agget(e,"_draw_"));
- agset(e,"_draw_",offset_spline(bf,(int)dx,(int)dy,0.00,0.00,0.00));
- free(bf);
- bf=parseXDot (agget(e,"_ldraw_"));
- agset(e,"_ldraw_",offset_spline(bf,(int)dx,(int)dy,0.00,0.00,0.00));
- free (bf);
- }*/
- /* for (e = agfstin(g,obj) ; e ; e = agnxtin (g,e))
- {
- free(bf);
- bf=parseXDot (agget(e,"_hdraw_"));
- agset(e,"_hdraw_",move_xdot(e,bf,(int)dx,(int)dy,0.00));
- free(bf);
- bf=parseXDot (agget(e,"_hldraw_"));
- agset(e,"_hldraw_",move_xdot(e,bf,(int)dx,(int)dy,0.00));
- free(bf);
- bf=parseXDot (agget(e,"_draw_"));
- agset(e,"_draw_",offset_spline(e,bf,(int)dx,(int)dy,0.00,0.00,0.00));
- free(bf);
- bf=parseXDot (agget(e,"_ldraw_"));
- agset(e,"_ldraw_",offset_spline(e,bf,(int)dx,(int)dy,0.00,0.00,0.00));
- }*/
+}
+
+#ifdef UNUSED
+static char *offset_spline(xdot * x, float dx, float dy, float headx,
+ float heady)
+{
+ int i = 0;
+ Agnode_t *headn, tailn;
+ Agedge_t *e;
+ e = x->obj; //assume they are all edges, check function name
+ headn = aghead(e);
+ tailn = agtail(e);
+
+ for (i = 0; i < x->cnt; i++) //more than 1 splines ,possible
+ {
+ switch (x->ops[i].kind) {
+ case xd_filled_polygon:
+ case xd_unfilled_polygon:
+ case xd_filled_bezier:
+ case xd_unfilled_bezier:
+ case xd_polyline:
+ if (((custom_object_data *) AGDATA((headn)->obj))->Selected ==
+ 1)
+ &&((custom_object_data *) AGDATA((tailn)->obj))->
+ Selected == 1)) {
+ for (j = 0; j < x->ops[i].u.polygon.cnt; j++) {
+
+ x->ops[i].u.polygon.pts[j].x =
+ x->ops[i].u.polygon.pts[j].x + dx;
+ x->ops[i].u.polygon.pts[j].y =
+ x->ops[i].u.polygon.pts[j].y + dy;
+ x->ops[i].u.polygon.pts[j].z =
+ x->ops[i].u.polygon.pts[j].z + dz;
}
+ }
+ break;
}
+ }
+ return 0;
}
+#endif
+void move_nodes(Agraph_t * g) //move selected nodes
+{
+ Agnode_t *obj;
+
+ float dx, dy;
+ xdot *bf;
+ int i = 0;
+ dx = view->GLx - view->GLx2;
+ dy = view->GLy - view->GLy2;
+
+ if (((custom_graph_data *) AGDATA(view->g[view->activeGraph]))->
+ TopView == 0) {
+ for (i = 0;
+ i < ((custom_graph_data *) AGDATA(g))->selectedNodesCount;
+ i++) {
+ obj = ((custom_graph_data *) AGDATA(g))->selectedNodes[i];
+ bf = parseXDot(agget(obj, "_draw_"));
+ agset(obj, "_draw_",
+ move_xdot(obj, bf, (int) dx, (int) dy, 0));
+ free(bf);
+ bf = parseXDot(agget(obj, "_ldraw_"));
+ agset(obj, "_ldraw_",
+ move_xdot(obj, bf, (int) dx, (int) dy, 0));
+ free(bf);
+ move_node(obj, dx, dy);
+ //iterate edges
+ /*for (e = agfstout(g,obj) ; e ; e = agnxtout (g,e))
+ {
+ bf=parseXDot (agget(e,"_tdraw_"));
+ agset(e,"_tdraw_",move_xdot(e,bf,(int)dx,(int)dy,0.00));
+ free(bf);
+ bf=parseXDot (agget(e,"_tldraw_"));
+ agset(e,"_tldraw_",move_xdot(e,bf,(int)dx,(int)dy,0.00));
+ free(bf);
+ bf=parseXDot (agget(e,"_draw_"));
+ agset(e,"_draw_",offset_spline(bf,(int)dx,(int)dy,0.00,0.00,0.00));
+ free(bf);
+ bf=parseXDot (agget(e,"_ldraw_"));
+ agset(e,"_ldraw_",offset_spline(bf,(int)dx,(int)dy,0.00,0.00,0.00));
+ free (bf);
+ } */
+ /* for (e = agfstin(g,obj) ; e ; e = agnxtin (g,e))
+ {
+ free(bf);
+ bf=parseXDot (agget(e,"_hdraw_"));
+ agset(e,"_hdraw_",move_xdot(e,bf,(int)dx,(int)dy,0.00));
+ free(bf);
+ bf=parseXDot (agget(e,"_hldraw_"));
+ agset(e,"_hldraw_",move_xdot(e,bf,(int)dx,(int)dy,0.00));
+ free(bf);
+ bf=parseXDot (agget(e,"_draw_"));
+ agset(e,"_draw_",offset_spline(e,bf,(int)dx,(int)dy,0.00,0.00,0.00));
+ free(bf);
+ bf=parseXDot (agget(e,"_ldraw_"));
+ agset(e,"_ldraw_",offset_spline(e,bf,(int)dx,(int)dy,0.00,0.00,0.00));
+ } */
+ }
+ }
+}
-int SetGdkColor(GdkColor* c,char* color)
-{
- gvcolor_t cl;
- if (color != '\0')
- {
- colorxlate(color, &cl, RGBA_DOUBLE);
- c->red=(int)(cl.u.RGBA[0]*65535.0);
- c->green=(int)(cl.u.RGBA[1]*65535.0);
- c->blue=(int)(cl.u.RGBA[2]*65535.0);
- return 1;
- }
- else
- return 0;
-}
+int SetGdkColor(GdkColor * c, char *color) {
+ gvcolor_t cl;
+ if (color != '\0') {
+ colorxlate(color, &cl, RGBA_DOUBLE);
+ c->red = (int) (cl.u.RGBA[0] * 65535.0);
+ c->green = (int) (cl.u.RGBA[1] * 65535.0);
+ c->blue = (int) (cl.u.RGBA[2] * 65535.0);
+ return 1;
+ } else
+ return 0;
-void glexpose()
-{
- expose_event (view->drawing_area,NULL,NULL);
}
+void glexpose() {
+ expose_event(view->drawing_area, NULL, NULL);
+}