--- /dev/null
+#include "glexpose.h"
+#include "draw.h"
+#include "topview.h"
+/*
+ refreshes camera settings using view parameters such as pan zoom etc
+ params:ViewInfo , global view variable defined in viewport.c
+ return value:always 1
+*/
+int glupdatecamera(ViewInfo* view)
+{
+
+ gluLookAt(view->panx,view->pany,view->zoom*-1,view->panx,view->pany,0.0,0.0,1.0,0.0);
+ GetOGLPosRef(1,view->h-5,&(view->clipX1),&(view->clipY1),&(view->clipZ1));
+ GetOGLPosRef(view->w-1,1,&(view->clipX2),&(view->clipY2),&(view->clipZ2));
+ return 1;
+}
+
+/*
+ main gl expose ,any time sreen needs to be redrawn, this function is called by gltemplate
+ ,all drawings are initialized in this function
+ params:ViewInfo , global view variable defined in viewport.c
+ return value:0 if something goes wrong with GL 1 , otherwise
+*/
+int glexpose_main(ViewInfo* view)
+{
+ if(!glupdatecamera(view))
+ return 0;
+ glexpose_grid(view);
+ draw_fisheye_magnifier(view);
+ draw_magnifier(view);
+ glexpose_drawgraph(view);
+ draw_selection_box(view);
+ drawBorders(view);
+ return 1;
+}
+
+/*
+ draws grid (little dots , with no use)
+ params:ViewInfo , global view variable defined in viewport.c
+ return value:none
+*/
+void glexpose_grid(ViewInfo* view)
+{
+ //drawing grids
+ float x,y;
+ if(view->gridVisible)
+ {
+ glPointSize (1);
+ glBegin(GL_POINTS);
+ glColor4f(view->gridColor.R,view->gridColor.G,view->gridColor.B,view->gridColor.A);
+ for (x=view->bdxLeft; x <= view->bdxRight;x=x +view->gridSize)
+ {
+ for (y=view->bdyBottom; y <=view->bdyTop ;y=y +view->gridSize)
+ {
+ glVertex3f(x,y,0);
+ }
+ }
+ glEnd();
+ }
+}
+
+/*
+ draws active graph depending on graph type
+ params:ViewInfo , global view variable defined in viewport.c
+ return value:1 if there is a graph to draw else 0
+*/
+int glexpose_drawgraph(ViewInfo* view)
+{
+ if(view->activeGraph > -1)
+ {
+ if(((custom_graph_data*)AGDATA(view->g[view->activeGraph]))->TopView)
+ {
+ drawTopViewGraph(view->g[view->activeGraph]);//view->Topview style dots and straight lines
+ glCompSetDraw(view->Topview->topviewmenu);
+ }
+ else
+ drawGraph(view->g[view->activeGraph]);//xdot based drawing functions
+
+ return 1;
+ }
+ return 0;
+}
+
--- /dev/null
+#include "topviewdata.h"
+
+
+int prepare_nodes_for_groups(topview* t,topviewdata* td,int groupindex)
+{
+ GdkColor color;
+ int i=0;
+ int count=0;
+ tv_node tvn;
+ gtk_color_button_get_color(td->gtkhostcolor[0],&color);
+
+ for (i;i <t->Nodecount ; i++)
+ {
+ tvn.index=i;
+ if(validate_group_node(&tvn,td->hostregex[groupindex]))
+ {
+ count ++;
+ gtk_color_button_get_color(td->gtkhostcolor[groupindex],&color);
+ t->Nodes[i].GroupIndex=groupindex;
+ t->Nodes[i].GroupColor.R=color.red/65535.0;
+ t->Nodes[i].GroupColor.G=color.green/65535.0;
+ t->Nodes[i].GroupColor.B=color.blue/65535.0;
+ }
+ }
+}
+
+int load_host_buttons(topview* t,Agraph_t *g,glCompSet* s)
+{
+ GtkLayout* layout;
+ int btncount=0;
+ int i=0;
+ char buf[255];
+ char *str;
+ char hostbtncaption[50];
+ char hostbtnregex[50];
+ char hostbtncolorR[50];
+ char hostbtncolorG[50];
+ char hostbtncolorB[50];
+ char hostbtncolorA[50];
+ int X=10;
+ int Y=25;
+ GdkColor color;
+ glCompPanel* p;
+ glCompButton* b;
+
+ layout=glade_xml_get_widget(xml, "frmHostSelectionFixed");
+ str='\0';
+ str=agget(g, "hostbtncount");
+ if (str)
+ btncount=atoi(str);
+
+// Graph [hostbtncaption1="AT&T",hostbtnregex1="*.ATT*",hostbtncolorR1="1",hostbtncolorG1="0",hostbtncolorB1="0",hostbtncolorA1="1"];
+
+ t->TopviewData->hostregex=malloc (sizeof(char**)*btncount);
+ t->TopviewData->gtkhostbtn=malloc(sizeof(GtkButton*)*btncount);
+ t->TopviewData->gtkhostcolor=malloc(sizeof(GtkColorButton*)*btncount);
+ t->TopviewData->gtkhostbtncount=btncount;
+ if (btncount > 0)
+ {
+ p=glCompPanelNew(25,75,165,400);
+ p->data=2; //data panel
+ p->color.R=0.80;
+ p->color.B=0,2;
+ glCompSetAddPanel(s,p);
+ }
+ for (i=0;i < btncount ; i++)
+ {
+ sprintf(hostbtncaption,"hostbtncaption%i",i);
+ sprintf(hostbtnregex,"hostbtnregex%i",i);
+ sprintf(hostbtncolorR,"hostbtncolorR%i",i);
+ sprintf(hostbtncolorG,"hostbtncolorG%i",i);
+ sprintf(hostbtncolorB,"hostbtncolorB%i",i);
+ sprintf(hostbtncolorA,"hostbtncolorA%i",i);
+ printf ("caption:%s regex:%s Color(%s,%s,%s,%s)\n",
+ agget(g,hostbtncaption ),
+ agget(g,hostbtnregex),
+ agget(g,hostbtncolorR),
+ agget(g,hostbtncolorG),
+ agget(g,hostbtncolorB),
+ agget(g,hostbtncolorA));
+ t->TopviewData->hostregex[i]=agget(g,hostbtnregex);
+
+ b=glCompButtonNew(5,7+(i+1)*36,150,35,agget(g,hostbtncaption ),'\0',0,0);
+ b->color.R=atof(agget(g,hostbtncolorR));
+ b->color.G=atof(agget(g,hostbtncolorG));
+ b->color.B=atof(agget(g,hostbtncolorB));
+ b->color.A=1;
+ b->panel=p;
+ b->groupid=-1;
+ b->callbackfunc=glhost_button_clicked_Slot;
+ b->data=i;
+ glCompSetAddButton(s,b);
+
+ t->TopviewData->gtkhostbtn[i]=gtk_button_new_with_label(agget(g,hostbtncaption ));
+ g_signal_connect ((gpointer) t->TopviewData->gtkhostbtn[i], "clicked", G_CALLBACK(host_button_clicked_Slot),i);
+
+ color.blue=65535*atof(agget(g,hostbtncolorB));
+ color.red=65535*atof(agget(g,hostbtncolorR));
+ color.green=65535*atof(agget(g,hostbtncolorG));
+
+ t->TopviewData->gtkhostcolor[i]=gtk_color_button_new_with_color(&color);
+
+ gtk_color_button_set_alpha(t->TopviewData->gtkhostbtn[i],65535*atof(agget(g,hostbtncolorA)));
+
+
+ gtk_layout_put (layout,t->TopviewData->gtkhostbtn[i],X,Y);
+ gtk_widget_set_size_request(t->TopviewData->gtkhostbtn[i],200,35);
+
+ gtk_layout_put (layout,t->TopviewData->gtkhostcolor[i],X+225,Y);
+ gtk_widget_set_size_request(t->TopviewData->gtkhostcolor[i],40,35);
+
+ gtk_widget_show(t->TopviewData->gtkhostbtn[i]);
+ gtk_widget_show(t->TopviewData->gtkhostcolor[i]);
+ Y=Y+40;
+ t->TopviewData->hostactive[i]=0;
+ }
+ p->height=15+(btncount+1)*36;
+ for (i=0;i < btncount ; i++)
+ {
+ prepare_nodes_for_groups(t,t->TopviewData,i);
+ }
+}
+void glhost_button_clicked_Slot(void* p)
+{
+ //negative active
+ int i,user_data;
+ user_data=((glCompButton*)p)->data;
+ if(view->Topview->TopviewData->hostactive[user_data]==0)
+ view->Topview->TopviewData->hostactive[user_data]=1;
+ else
+ view->Topview->TopviewData->hostactive[user_data]=0;
+ glexpose();
+}
+void host_button_clicked_Slot(GtkWidget *widget,gpointer user_data)
+{
+ //negative active
+ int i;
+ if(view->Topview->TopviewData->hostactive[(int)user_data]==0)
+ view->Topview->TopviewData->hostactive[(int)user_data]=1;
+ else
+ view->Topview->TopviewData->hostactive[(int)user_data]=0;
+ glexpose();
+}
+
+
+