long EditorWindow::onActivateCreator (FXObject* , FXSelector, void* ) { butSelector->handle(this,MKUINT(ID_UNCHECK ,SEL_COMMAND),NULL); butCreator->handle (this,MKUINT(ID_CHECK ,SEL_COMMAND),NULL); butMirror->handle (this,MKUINT(ID_UNCHECK ,SEL_COMMAND),NULL); butRotate->handle (this,MKUINT(ID_UNCHECK ,SEL_COMMAND),NULL); for (int i = 0; i<3; i++) View[i]->setTool(TOOL_CREATOR); return 1; }
long EditorWindow::onActivateRotate(FXObject* , FXSelector, void* ) { if (PM->isSelectionEmpty()) // non dovrebbe mai accadere return 1; butSelector->handle(this,MKUINT(ID_UNCHECK ,SEL_COMMAND),NULL); butCreator->handle (this,MKUINT(ID_UNCHECK ,SEL_COMMAND),NULL); butMirror->handle (this,MKUINT(ID_UNCHECK ,SEL_COMMAND),NULL); butRotate->handle (this,MKUINT(ID_CHECK ,SEL_COMMAND),NULL); for (int i = 0; i<3; i++) View[i]->setTool(TOOL_ROTATE); return 1; }
long AlphaBallControl::onQueryTip(FXObject* sender,FXSelector,void*){ if(!tip.empty() && (flags&FLAG_TIP)){ sender->handle(this,MKUINT(ID_SETSTRINGVALUE,SEL_COMMAND),(void*)&tip); return 1; } return 0; }
long CDPreferences::onCmdAccept(FXObject*,FXSelector,void*) { handle(this,MKUINT(ID_APPLY,SEL_COMMAND),NULL); getApp()->stopModal(this,TRUE); hide(); return 1; }
void Viewport::updateButtons() { butCPoints->handle(this,MKUINT((RenderMode.ShowCtrlPoints) ? ID_CHECK:ID_UNCHECK ,SEL_COMMAND),NULL); butCPolygon->handle(this,MKUINT((RenderMode.ShowCtrlPolygon) ? ID_CHECK:ID_UNCHECK ,SEL_COMMAND),NULL); butPatch->handle(this,MKUINT((RenderMode.ShowPatch) ? ID_CHECK:ID_UNCHECK ,SEL_COMMAND),NULL); butSnapToGrid->handle(this,MKUINT((RenderMode.SnapToGrid) ? ID_CHECK:ID_UNCHECK ,SEL_COMMAND),NULL); butCullFace->handle(this,MKUINT((RenderMode.Cullface) ? ID_UNCHECK : ID_CHECK, SEL_COMMAND),NULL); butShowGrid->handle(this,MKUINT((RenderMode.ShowGrid) ? ID_CHECK : ID_UNCHECK, SEL_COMMAND),NULL); butSolid->handle(this,MKUINT((RenderMode.Solid) ? ID_CHECK : ID_UNCHECK, SEL_COMMAND),NULL); butTexture->handle(this,MKUINT((RenderMode.Texture) ? ID_CHECK : ID_UNCHECK, SEL_COMMAND),NULL); butCameraTrackball->handle(this,MKUINT((RenderMode.UseCamera) ? ID_CHECK:ID_UNCHECK ,SEL_COMMAND),NULL); }
long AlphaBallControl::onLeftBtnRelease(FXObject*,FXSelector,void* ptr){ FXuint flgs=flags; float* valphap = new float[1]; int vmax; if(isEnabled()){ ungrab(); flags|=FLAG_UPDATE; flags&=~FLAG_PRESSED; flags&=~FLAG_CHANGED; if(target && target->handle(this,MKUINT(message,SEL_LEFTBUTTONRELEASE),ptr)) return 1; if(flgs&FLAG_CHANGED){ getMaxBound(vmax,spotx,spoty); valphap[0]=vmax; if(target) target->handle(this,MKUINT(message,SEL_COMMAND),(void*)valphap); delete valphap; } return 1; } return 1; }
long AlphaBallControl::onLeftBtnPress(FXObject*,FXSelector,void* ptr){ FXEvent* event=(FXEvent*)ptr; flags&=~FLAG_TIP; float* valphap = new float[1]; int vmax; if(isEnabled()){ grab(); if(target && target->handle(this,MKUINT(message,SEL_LEFTBUTTONPRESS),ptr)) return 1; movespot(event->win_x-dialx,event->win_y-dialy); getMaxBound(vmax,spotx,spoty); valphap[0]=vmax; if(target) target->handle(this,MKUINT(message,SEL_CHANGED),(void*)valphap); flags|=FLAG_CHANGED; flags&=~FLAG_UPDATE; flags|=FLAG_PRESSED; delete valphap; } return 1; }
// Cleanup; icons must be explicitly deleted FileSelector::~FileSelector() { // Write options to the registry getApp()->reg().writeUnsignedEntry("FILEDIALOG","name_size",list->getHeaderSize(0)); getApp()->reg().writeUnsignedEntry("FILEDIALOG","size_size",list->getHeaderSize(1)); getApp()->reg().writeUnsignedEntry("FILEDIALOG","type_size",list->getHeaderSize(2)); getApp()->reg().writeUnsignedEntry("FILEDIALOG","ext_size",list->getHeaderSize(3)); getApp()->reg().writeUnsignedEntry("FILEDIALOG","modd_size",list->getHeaderSize(4)); getApp()->reg().writeUnsignedEntry("FILEDIALOG","user_size",list->getHeaderSize(5)); getApp()->reg().writeUnsignedEntry("FILEDIALOG","grou_size",list->getHeaderSize(6)); getApp()->reg().writeUnsignedEntry("FILEDIALOG","attr_size",list->getHeaderSize(7)); getApp()->reg().writeUnsignedEntry("FILEDIALOG","listmode",getFileBoxStyle()); getApp()->reg().writeUnsignedEntry("FILEDIALOG","hiddenfiles",shownHiddenFiles()); getApp()->reg().writeUnsignedEntry("FILEDIALOG","thumbnails",shownThumbnails()); getApp()->reg().write(); FXAccelTable *table=getShell()->getAccelTable(); if(table) { table->removeAccel(MKUINT(KEY_BackSpace,0)); table->removeAccel(MKUINT(KEY_h,CONTROLMASK)); table->removeAccel(MKUINT(KEY_w,CONTROLMASK)); table->removeAccel(MKUINT(KEY_a,CONTROLMASK)); table->removeAccel(MKUINT(KEY_i,CONTROLMASK)); } delete list; delete pathlink; delete pathtext; delete filename; delete filefilter; delete readonly; delete accept; delete cancel; delete btnbackhist; delete btnforwardhist; }
long CDPreferences::onCmdList(FXObject*,FXSelector,void* ptr) { std::vector<FXTreeItem*>::const_iterator iter; for(iter=treeitem.begin(); iter!=treeitem.end(); ++iter) { if(*iter==(FXTreeItem*)ptr) { switcher->handle(this,MKUINT(FXSwitcher::ID_OPEN_FIRST+(iter-treeitem.begin()),SEL_COMMAND),NULL); break; } } return 1; }
long AlphaBallControl::onMotion(FXObject*,FXSelector,void* ptr){ FXEvent* event=(FXEvent*)ptr; flags&=~FLAG_TIP; float* valphap = new float[1]; int vmax; if(flags&FLAG_PRESSED){ movespot(event->win_x-dialx,event->win_y-dialy); getMaxBound(vmax,spotx,spoty); valphap[0]=vmax; if(target) target->handle(this,MKUINT(message,SEL_CHANGED),(void*)valphap); flags|=FLAG_CHANGED; delete valphap; return 1; } return 0; }
// Note : the original function from FXAccelTable is buggy!! // Parse accelerator from string FXHotKey _parseAccel(const FXString& string) { register FXuint code=0,mods=0; register FXint pos=0; // Parse leading space while(pos<string.length() && Ascii::isSpace(string[pos])) pos++; // Parse modifiers while(pos<string.length()) { // Modifier if(comparecase(&string[pos],"ctl",3)==0) { mods|=CONTROLMASK; pos+=3; } else if(comparecase(&string[pos],"ctrl",4)==0) { mods|=CONTROLMASK; pos+=4; } else if(comparecase(&string[pos],"alt",3)==0) { mods|=ALTMASK; pos+=3; } else if(comparecase(&string[pos],"meta",4)==0) { mods|=METAMASK; pos+=4; } else if(comparecase(&string[pos],"shift",5)==0) { mods|=SHIFTMASK; pos+=5; } else break; // Separator if(string[pos]=='+' || string[pos]=='-' || Ascii::isSpace(string[pos])) pos++; } // Test for some special keys if(comparecase(&string[pos],"home",4)==0) code=KEY_Home; else if(comparecase(&string[pos],"end",3)==0) code=KEY_End; else if(comparecase(&string[pos],"pgup",4)==0) code=KEY_Page_Up; else if(comparecase(&string[pos],"pgdn",4)==0) code=KEY_Page_Down; else if(comparecase(&string[pos],"left",4)==0) code=KEY_Left; else if(comparecase(&string[pos],"right",5)==0) code=KEY_Right; else if(comparecase(&string[pos],"up",2)==0) code=KEY_Up; else if(comparecase(&string[pos],"down",4)==0) code=KEY_Down; else if(comparecase(&string[pos],"ins",3)==0) code=KEY_Insert; else if(comparecase(&string[pos],"del",3)==0) code=KEY_Delete; else if(comparecase(&string[pos],"esc",3)==0) code=KEY_Escape; else if(comparecase(&string[pos],"tab",3)==0) code=KEY_Tab; else if(comparecase(&string[pos],"return",6)==0) code=KEY_Return; else if(comparecase(&string[pos],"enter",5)==0) code=KEY_Return; else if(comparecase(&string[pos],"back",4)==0) code=KEY_BackSpace; else if(comparecase(&string[pos],"spc",3)==0) code=KEY_space; else if(comparecase(&string[pos],"space",5)==0) code=KEY_space; // Test for function keys else if(Ascii::toLower(string[pos])=='f' && Ascii::isDigit(string[pos+1])) { if(Ascii::isDigit(string[pos+2])) { // !!!! Hack to fix a bug in FOX !!!! code=KEY_F1+10*(string[pos+1]-'0')+(string[pos+2]-'0')-1; // !!!! End of hack !!!! } else code=KEY_F1+string[pos+1]-'1'; } // Test if hexadecimal code designator else if(string[pos]=='#') code=strtoul(&string[pos+1],NULL,16); // Test if its a single character accelerator else if(Ascii::isPrint(string[pos])) { if(mods&SHIFTMASK) code=Ascii::toUpper(string[pos])+KEY_space-' '; else code=Ascii::toLower(string[pos])+KEY_space-' '; } return MKUINT(code,mods); }
long CDPreferences::onUpdDeviceRemove(FXObject* sender,FXSelector,void*) { FXuint msg=(devlist->getNumItems()>1)?ID_ENABLE:ID_DISABLE; sender->handle(this,MKUINT(msg,SEL_COMMAND),NULL); return 1; }