static bool getFlColor(const std::string &str, Fl_Color &c) { if(str == "1"){ c = FL_YELLOW; return true; } int r, g, b; if(str.size() && GetRGBForString(str.c_str(), r, g, b)){ c = fl_color_cube(r * (FL_NUM_RED - 1) / 255, g * (FL_NUM_GREEN - 1) / 255, b * (FL_NUM_BLUE - 1) / 255); return true; } c = FL_BLACK; return false; }
FL_EXPORT_C(Fl_Color, fl_color_cubeC)(int r, int g, int b){return fl_color_cube(r,g,b);}
void pQuery(DdManager *ddman, DdNode *value, DdNode *action, char * pfile, onum *ovars, rnum *vars, int numvars, int numovars) { int i,j; nvars = numvars; novars = numovars; ov = ovars; v = vars; dd = ddman; act = new DdNode*[MAXNUMPOLICIES]; val = new DdNode*[MAXNUMPOLICIES]; action_out = new Fl_Output*[MAXNUMPOLICIES]; value_out = new Fl_Output*[MAXNUMPOLICIES]; policyName= new Fl_Text_Display*[MAXNUMPOLICIES]; policyNameBuf = new Fl_Text_Buffer*[MAXNUMPOLICIES]; ask = new Fl_Button*[MAXNUMPOLICIES]; askindex = new int[MAXNUMPOLICIES]; numpolicies = 1; act[0] = action; Cudd_Ref(act[0]); val[0] = value; Cudd_Ref(val[0]); query = new int[numovars]; choice_width = 80; label_width = 80; choice_height = 20; menubar_height = 30; max_chars = 10; field_width = choice_width+label_width; window_width = 2*(field_width)+300; window_height = menubar_height+max(int(ceil(novars/2.0)),5)*(choice_height+10); window = new Fl_Window(window_width,window_height); int k,R,G,B; R=125; G=125; B=255; window->color( fl_color_cube(R*FL_NUM_RED/256,G*FL_NUM_GREEN/256, B*FL_NUM_BLUE/256)); var_choice = new Fl_Choice*[numovars]; char *buf[numovars]; char **buff[numovars]; varindex = new int**[numovars]; varvals = new int[numovars]; int xpos,ypos; R=0; G=12; B=12; for (i=0; i<numovars; i++) { varindex[i] = new int*[ovars[i].nvals]; varvals[i] = 0; buf[i] = new char[max_chars]; buff[i] = new char*[ovars[i].nvals]; for (j=0; j<max_chars-1; j++) buf[i][j] = ov[i].name[j]; buf[i][j] = '\0'; xpos = i%2; ypos = i/2; var_choice[i] = new Fl_Choice(xpos*field_width+label_width, menubar_height+ypos*(choice_height+10), choice_width,choice_height,buf[i]); var_choice[i]->labelcolor(fl_color_cube(R*FL_NUM_RED/256,G*FL_NUM_GREEN/256, B*FL_NUM_BLUE/256)); for (j=0; j<ovars[i].nvals; j++) { varindex[i][j] = new int[2]; varindex[i][j][0] = i; varindex[i][j][1] = j; buff[i][j] = new char[max_chars]; for (k=0; k<max_chars-1; k++) buff[i][j][k] = ovars[i].valname[j][k]; buff[i][j][k] = '\0'; var_choice[i]->add(buff[i][j],"",&var_callback,varindex[i][j]); } var_choice[i]->value(0); } policyName[0] =new Fl_Text_Display(2*field_width+120,menubar_height,150,40); policyNameBuf[0] = new Fl_Text_Buffer(10); policyNameBuf[0]->append(pfile); policyName[0]->buffer(policyNameBuf[0]); ask[0] = new Fl_Button(2*field_width+120,menubar_height+40,150,30,"query"); askindex[0] = 0; ask[0]->callback(ask_callback, askindex); action_out[0] = new Fl_Output(2*field_width+120,menubar_height+70,150,40,strdup("action")); value_out[0] = new Fl_Output(2*field_width+120,menubar_height+110,150,40,strdup("value")); menu_bar = new Fl_Menu_Bar(0,0,window_width,menubar_height-10); menu_bar->menu(baritems); window->end(); window->show(); Fl::run(); // clean up for (i=0; i<numpolicies; i++) { Cudd_RecursiveDeref(dd,act[i]); Cudd_RecursiveDeref(dd,val[i]); } delete [] var_choice; for (i=0; i<numovars; i++) { for (j=0; j<ovars[i].nvals; j++) { delete [] varindex[i][j]; delete [] buff[i][j]; } delete [] buff[i]; delete [] buf[i]; delete [] varindex[i]; } delete [] varvals; delete [] varindex; }