Changeset 3423 in orxonox.OLD for orxonox/trunk/src/gui/orxonox_gui_exec.cc
- Timestamp:
- Feb 27, 2005, 7:11:19 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
orxonox/trunk/src/gui/orxonox_gui_exec.cc
r3187 r3423 28 28 #include <string> 29 29 30 HashTable* orxonoxFlagHash; 31 30 32 /** 31 33 \brief Creates the Exec-Frame 32 \param orxonoxGUI ExecFrame needs to know where to get the Options from 33 */ 34 OrxonoxGuiExec::OrxonoxGuiExec (Window* orxonoxGUI) 35 { 36 configFile = (char*)malloc (512*sizeof (char)); 37 38 execFrame = new Frame ("Execute-Tags:"); 39 execBox = new Box ('v'); 40 execFrame->setGroupName ("misc"); 34 */ 35 OrxonoxGuiExec::OrxonoxGuiExec(void) 36 { 37 configFile =(char*)malloc(512*sizeof(char)); 38 39 this->execFrame = new Frame("Execute-Tags:"); 40 this->execBox = new Box('v'); 41 this->execFrame->setGroupName("misc"); 41 42 42 start = new Button("Start");43 this->start = new Button("Start"); 43 44 #ifdef HAVE_GTK2 44 start->connectSignal ("clicked", startOrxonox);45 this->start->connectSignal("clicked", this, startOrxonox); 45 46 #endif /* HAVE_GTK2 */ 46 execBox->fill(start);47 saveSettings = new CheckButton("Save Settings");48 saveSettings->value = 1;49 saveSettings->saveable = true;50 execBox->fill (saveSettings);51 verboseMode = new Menu ("verbose mode", "no output", "verbose", "debug", "lastItem");52 verboseMode->setFlagName("verbose", "v", 0);53 verboseMode->saveable = true;54 execBox->fill (verboseMode);55 alwaysShow = new CheckButton("Always Show this Menu");56 alwaysShow->setFlagName("gui", "g", 0);57 alwaysShow->saveable = true;58 execBox->fill (alwaysShow);59 quit = new Button("Quit");47 this->execBox->fill(start); 48 this->saveSettings = new CheckButton("Save Settings"); 49 this->saveSettings->value = 1; 50 this->saveSettings->saveability(); 51 this->execBox->fill(this->saveSettings); 52 this->verboseMode = new Menu("verbose mode", "no output", "error", "warning", "info", "lastItem"); 53 this->verboseMode->setFlagName("verbose", "v", 0); 54 this->verboseMode->saveability(); 55 this->execBox->fill(this->verboseMode); 56 this->alwaysShow = new CheckButton("Always Show this Menu"); 57 this->alwaysShow->setFlagName("gui", "g", 0); 58 this->alwaysShow->saveability(); 59 this->execBox->fill(this->alwaysShow); 60 this->quit = new Button("Quit"); 60 61 #ifdef HAVE_GTK2 61 quit->connectSignal ("clicked", orxonoxGUI->orxonox_gui_quit); 62 this->quit->connectSignal("clicked", this, OrxonoxGuiExec::quitOrxonox); 63 // Window::mainWindow->connectSignal("remove", this, OrxonoxGuiExec::quitOrxonox); 64 Window::mainWindow->connectSignal("destroy", this, OrxonoxGuiExec::quitOrxonox); 62 65 #endif /* HAVE_GTK2 */ 63 execBox->fill (quit); 64 65 execFrame->fill (execBox); 66 this->execBox->fill(this->quit); 67 68 this->execFrame->fill(this->execBox); 69 } 70 71 /** 72 \brief Destructs the Execution-stuff 73 */ 74 OrxonoxGuiExec::~OrxonoxGuiExec(void) 75 { 76 if(this->configFile) 77 delete []this->configFile; 66 78 } 67 79 … … 70 82 \return Returns the Exec-frame 71 83 */ 72 Widget* OrxonoxGuiExec::getWidget ()84 Widget* OrxonoxGuiExec::getWidget(void) 73 85 { 74 86 return execFrame; … … 78 90 79 91 /** 80 \brief Sets the location of the configuration File.\n 81 * The name will be parsed from ~/ to /home/[username] on unix and c:/Documents and Settings/username/Settings/ on Windows 92 \brief Sets the location of the configuration File. 82 93 \param filename the location of the configFile 83 */ 84 void OrxonoxGuiExec::setFilename (char* filename) 85 { 86 char* buffer = (char*) malloc (512*sizeof(buffer)); 87 sprintf (buffer, "%s", filename); 88 if (!strncmp (buffer, "~/", 2)) 94 95 \todo: memory allocation could be better. 96 97 The name will be parsed from ~/ to /home/[username] on unix and c:/Documents and Settings/username/Settings/ on Windows 98 */ 99 void OrxonoxGuiExec::setFilename(char* filename) 100 { 101 char* buffer = (char*)malloc(2048*sizeof(char)); 102 sprintf(buffer, "%s", filename); 103 if(!strncmp(buffer, "~/", 2)) 89 104 { 90 105 #ifdef __WIN32__ 91 sprintf (configFile, "%s/%s", getenv("USERPROFILE"), buffer+2);106 sprintf(configFile, "%s/%s", getenv("USERPROFILE"), buffer+2); 92 107 #else 93 sprintf (configFile, "%s/%s", getenv("HOME"), buffer+2);108 sprintf(configFile, "%s/%s", getenv("HOME"), buffer+2); 94 109 #endif 95 110 } 96 else if (buffer) 97 sprintf(configFile, "%s", buffer); 98 delete buffer; 111 else if(buffer) 112 strcpy(this->configFile, buffer); 113 free (buffer); 114 } 115 116 /** 117 \returns The name of the Configuration-File 118 */ 119 char* OrxonoxGuiExec::getConfigFile(void) 120 { 121 return this->configFile; 99 122 } 100 123 … … 103 126 \return 1 if it should 0 if not/ 104 127 */ 105 int OrxonoxGuiExec::shouldsave 106 { 107 return (static_cast<Option*>(saveSettings)->value);128 int OrxonoxGuiExec::shouldsave() 129 { 130 return(static_cast<Option*>(this->saveSettings)->value); 108 131 } 109 132 … … 112 135 \param widget from which Widget on should be saved. 113 136 114 this Function only opens and closes the file, in between OrxonoxGuiExec::writeFileText 115 */ 116 void OrxonoxGuiExec::writeToFile 117 { 118 CONFIG_FILE = fopen(configFile, "w");119 if (CONFIG_FILE)120 writeFileText(widget, 0);121 fclose (CONFIG_FILE);137 this Function only opens and closes the file, in between OrxonoxGuiExec::writeFileText(Widget* widget) will execute the real writing process. 138 */ 139 void OrxonoxGuiExec::writeToFile(Widget* widget) 140 { 141 this->CONFIG_FILE = fopen(configFile, "w"); 142 if(this->CONFIG_FILE) 143 this->writeFileText(widget, 0); 144 fclose(this->CONFIG_FILE); 122 145 } 123 146 … … 127 150 \param depth initially "0", and grows higher, while new Groups are bundeled. 128 151 */ 129 void OrxonoxGuiExec::writeFileText 152 void OrxonoxGuiExec::writeFileText(Widget* widget, int depth) 130 153 { 131 154 int counter = 0; 132 while (counter < depth &&((widget->isOption>0133 && (static_cast<Option*>(widget)->saveable))134 || 135 136 { 137 fprintf (CONFIG_FILE, " ", depth);155 while(counter < depth &&((widget->isOption>0 156 &&(static_cast<Option*>(widget)->isSaveable())) 157 ||(widget->isOption<0 158 && static_cast<Packer*>(widget)->getGroupName()))) 159 { 160 fprintf(this->CONFIG_FILE, " ", depth); 138 161 counter++; 139 162 } 140 163 141 164 // check if it is a Packer, and if it is, check if it has a name and if there is something in it. 142 if 143 { 144 if 145 { 146 fprintf 147 writeFileText(static_cast<Packer*>(widget)->down, depth+1);165 if(widget->isOption <0) 166 { 167 if(static_cast<Packer*>(widget)->getGroupName()) 168 { 169 fprintf(CONFIG_FILE, "[%s]\n", static_cast<Packer*>(widget)->getGroupName()); 170 this->writeFileText(static_cast<Packer*>(widget)->down, depth+1); 148 171 fprintf(CONFIG_FILE, "\n"); 149 172 } 150 173 else 151 174 { 152 writeFileText(static_cast<Packer*>(widget)->down, depth);175 this->writeFileText(static_cast<Packer*>(widget)->down, depth); 153 176 } 154 177 } 155 // if 156 // printf ("%s\n",widget->label);157 if 158 if (static_cast<Option*>(widget)->saveable)178 // if(widget->isOption == 0) 179 // printf("%s\n",widget->title); 180 if(widget->isOption >= 1) 181 if (static_cast<Option*>(widget)->isSaveable()) 159 182 { 160 183 char Buffer[256]; 161 184 char* space2under; 162 strcpy (Buffer, static_cast<Option*>(widget)->label);163 if (strchr(Buffer, '_'))185 strcpy(Buffer, static_cast<Option*>(widget)->title); 186 if(strchr(Buffer, '_')) 164 187 cout << "Warning Optionname" << Buffer << " is not Valid for Saving, because it includes an underscore" << endl; 165 while 188 while(space2under = strchr(Buffer, ' ')) 166 189 { 167 190 space2under[0] = '_'; 168 191 } 169 if 170 fprintf 171 else if 172 fprintf 192 if(widget->isOption <=3) 193 fprintf(CONFIG_FILE, "%s = %d\n", Buffer, static_cast<Option*>(widget)->value); 194 else if(widget->isOption == 5) 195 fprintf(CONFIG_FILE, "%s = %s\n", Buffer, static_cast<OptionLabel*>(widget)->cValue); 173 196 } 174 197 175 if 176 writeFileText(widget->next, depth);198 if(widget->next != NULL) 199 this->writeFileText(widget->next, depth); 177 200 } 178 201 … … 181 204 \param widget from which Widget on should be saved. 182 205 */ 183 void OrxonoxGuiExec::readFromFile (Widget* widget) 184 { 185 CONFIG_FILE = fopen (configFile, "r"); 186 if (CONFIG_FILE) 206 void OrxonoxGuiExec::readFromFile(Widget* widget) 207 { 208 this->CONFIG_FILE = fopen(configFile, "r"); 209 VarInfo varInfo; 210 if(this->CONFIG_FILE) 187 211 { 188 212 Widget* groupWidget = widget; … … 190 214 char Variable[256]= ""; 191 215 char* Value; 192 while (fscanf (CONFIG_FILE, "%s", Buffer) != EOF)216 while(fscanf(this->CONFIG_FILE, "%s", Buffer) != EOF) 193 217 { 194 218 // group-search // 195 if (!strncmp(Buffer, "[", 1))219 if(!strncmp(Buffer, "[", 1)) 196 220 { 197 if ((groupWidget = locateGroup(widget, Buffer, 1))==NULL)221 if((groupWidget = locateGroup(widget, Buffer, 1))==NULL) 198 222 { 199 223 cout << "!!There is no group called " << Buffer << " in this GUI.\n First best Widget will get the Infos assigned.\n Config-File will be updated in next Save\n"; 200 224 groupWidget = widget; 201 225 } 226 else 227 PRINT(3)("Group %s located.\n", static_cast<Packer*>(groupWidget)->groupName); 202 228 } 203 229 // option-setting // 204 if (!strcmp(Buffer, "="))230 if(!strcmp(Buffer, "=")) 205 231 { 206 232 char* under2space; 207 while 233 while(under2space = strchr(Variable, '_')) 208 234 { 209 sprintf 235 sprintf(under2space, " %s", under2space+1); 210 236 } 211 237 212 fscanf (CONFIG_FILE, "%s", Buffer); 213 Value = Buffer; 214 readFileText (groupWidget, Variable, Value, 0); 215 sprintf (Variable, ""); 238 fscanf(this->CONFIG_FILE, "%s", Buffer); 239 varInfo.variableName = Variable; 240 varInfo.variableValue = Buffer; 241 groupWidget->walkThrough(this->readFileText, &varInfo, 0); 242 sprintf(Variable, ""); 216 243 } 217 sprintf (Variable, "%s", Buffer); 218 } 219 widget->walkThrough(widget->setOptions); 220 } 221 } 244 sprintf(Variable, "%s", Buffer); 245 } 246 widget->walkThrough(widget->setOptions, 0); 247 } 248 } 249 222 250 /** 223 251 \brief Maps Confugurations to the Options. 224 252 \param widget which widget downwards 225 \param variableName the name of the Variable that should be set up. 226 \param variableValue the Value of the Variable that should be set up 227 \param depth the depth of the local Widget 228 */ 229 void OrxonoxGuiExec::readFileText (Widget* widget, char* variableName, char* variableValue, int depth) 230 { 231 if (widget->isOption >= 1 && widget->isOption <= 3) 232 { 233 if (!strcmp (static_cast<Option*>(widget)->label, variableName)) 234 static_cast<Option*>(widget)->value = atoi(variableValue); 235 } 236 else if (widget->isOption == 5) 237 { 238 if (!strcmp (static_cast<Option*>(widget)->label, variableName)) 239 static_cast<OptionLabel*>(widget)->setValue(variableValue); 240 } 241 if (widget->isOption < 0) 242 { 243 readFileText (static_cast<Packer*>(widget)->down, variableName, variableValue, depth+1); 244 } 245 246 if (widget->next != NULL && depth !=0) 247 readFileText (widget->next, variableName, variableValue, depth); 253 \param varInfo Information about the Variable to read 254 */ 255 void OrxonoxGuiExec::readFileText(Widget* widget, void* varInfo) 256 { 257 VarInfo* info =(VarInfo*)varInfo; 258 if(widget->title && !strcmp(widget->title, info->variableName)) 259 { 260 PRINT(3)("Located Option %s.\n", widget->title); 261 if(widget->isOption >= 1 && widget->isOption <= 3) 262 { 263 static_cast<Option*>(widget)->value = atoi(info->variableValue); 264 static_cast<Option*>(widget)->redraw(); //!< \todo change this to setValue. 265 } 266 else if(widget->isOption == 5) 267 static_cast<OptionLabel*>(widget)->setValue(info->variableValue); 268 } 248 269 } 249 270 … … 254 275 \param depth The Depth of the search seen from the first widget we searched from. 255 276 \returns The Widget that holds the Group, or the NULL if the Group wasn't found. 277 278 \todo do this in gui-gtk. 256 279 */ 257 280 Widget* OrxonoxGuiExec::locateGroup(Widget* widget, char* groupName, int depth) … … 260 283 261 284 // removes the trailing and ending [ ]. 262 if (!strncmp(groupName, "[", 1))285 if(!strncmp(groupName, "[", 1)) 263 286 { 264 287 groupName = groupName+1; … … 266 289 } 267 290 268 if 269 { 270 if 291 if(widget->isOption < 0) 292 { 293 if(static_cast<Packer*>(widget)->getGroupName() && !strcmp(groupName, static_cast<Packer*>(widget)->getGroupName())) 271 294 { 272 295 return widget; … … 274 297 else 275 298 { 276 if ((tmp = locateGroup(static_cast<Packer*>(widget)->down, groupName, depth+1)) != NULL)299 if((tmp = locateGroup(static_cast<Packer*>(widget)->down, groupName, depth+1)) != NULL) 277 300 return tmp; 278 301 } 279 302 } 280 303 281 if 282 { 283 if ((tmp = locateGroup(widget->next, groupName, depth)) != NULL)304 if(widget->next != NULL && depth != 0) 305 { 306 if((tmp = locateGroup(widget->next, groupName, depth)) != NULL) 284 307 return tmp; 285 308 } … … 289 312 #ifdef HAVE_GTK2 290 313 /** 291 \brief Starts ORXONOX. (not really implemented yet, but the function is there.\n 292 This is a Signal and can be executed through Widget::signal_connect 314 \brief Starts ORXONOX.(not really implemented yet, but the function is there.\n 293 315 \param widget the widget that executed the start command 294 316 \param data additional data 295 */ 296 gint startOrxonox (GtkWidget *widget, Widget* data) 297 { 317 318 This is a Signal and can be executed through Widget::signal_connect 319 */ 320 int OrxonoxGuiExec::startOrxonox(GtkWidget* widget, void* data) 321 { 322 OrxonoxGuiExec* exec =(OrxonoxGuiExec*)data; 323 if(exec->shouldsave()) 324 exec->writeToFile(Window::mainWindow); 298 325 cout << "Starting Orxonox" <<endl; 299 } 326 gtk_main_quit(); 327 system("cd ..;./orxonox"); //!< \todo fix this. should execute orxonox for real(coded not over the shell) 328 } 329 330 /** 331 \brief Starts ORXONOX.(not really implemented yet, but the function is there.\n 332 \param widget the widget that executed the start command 333 \param data additional data 334 335 This is a Signal and can be executed through Widget::signal_connect 336 */ 337 int OrxonoxGuiExec::quitOrxonox(GtkWidget* widget, void* data) 338 { 339 OrxonoxGuiExec* exec =(OrxonoxGuiExec*)data; 340 PRINT(3)( "Quitting Orxonox %p\n", exec); 341 if(exec->shouldsave()) 342 exec->writeToFile(Window::mainWindow); 343 gtk_main_quit(); 344 } 345 #else /* HAVE_GTK2 */ 346 /** 347 \brief Starts ORXONOX.(not really implemented yet, but the function is there.\n 348 \param widget the widget that executed the start command 349 \param data additional data 350 */ 351 int OrxonoxGuiExec::startOrxonox(void* widget, void* data) 352 { 353 OrxonoxGuiExec* exec =(OrxonoxGuiExec*)data; 354 PRINT(3)("Starting Orxonox\n"); 355 if(exec->shouldsave()) 356 exec->writeToFile(Window::mainWindow); 357 system("cd ..;./orxonox"); //!< \todo fix this. should execute orxonox for real(coded not over the shell) 358 } 359 /** 360 \brief Quits ORXONOX. 361 \param widget the widget that executed the Quit command 362 \param data additional data 363 364 This is a Signal and can be executed through Widget::signal_connect 365 */ 366 int OrxonoxGuiExec::quitOrxonox(void* widget, void* data) 367 { 368 OrxonoxGuiExec* exec =(OrxonoxGuiExec*)data; 369 PRINT(3)("Quiting Orxonox"); 370 if(exec->shouldsave()) 371 exec->writeToFile(Window::mainWindow); 372 } 373 300 374 #endif /* HAVE_GTK2 */
Note: See TracChangeset
for help on using the changeset viewer.