GuiControl* GuiInspectorMountingGroup::buildMenuCtrl() { GuiControl* retCtrl = new GuiPopUpMenuCtrl(); // If we couldn't construct the control, bail! if( retCtrl == NULL ) return retCtrl; GuiPopUpMenuCtrl *menu = dynamic_cast<GuiPopUpMenuCtrl*>(retCtrl); // Let's make it look pretty. retCtrl->setDataField( StringTable->insert("profile"), NULL, "GuiPopUpMenuProfile" ); //GuiInspectorTypeMenuBase::_registerEditControl( retCtrl ); char szName[512]; dSprintf( szName, 512, "IE_%s_%d_%s_Field", retCtrl->getClassName(), mParentInspector->getInspectObject()->getId(), mCaption.c_str()); // Register the object retCtrl->registerObject( szName ); // Configure it to update our value when the popup is closed char szBuffer[512]; dSprintf( szBuffer, 512, "%d.apply( %d.getText() );", getId(), menu->getId() ); menu->setField("Command", szBuffer ); return menu; }
GuiControl* GuiInspectorDatablockField::constructEditControl() { GuiControl* retCtrl = new GuiPopUpMenuCtrl(); // If we couldn't construct the control, bail! if( retCtrl == NULL ) return retCtrl; GuiPopUpMenuCtrl *menu = dynamic_cast<GuiPopUpMenuCtrl*>(retCtrl); // Let's make it look pretty. retCtrl->setDataField( StringTable->insert("profile"), NULL, "InspectorTypeEnumProfile" ); menu->setField("text", getData()); _registerEditControl( retCtrl ); // Configure it to update our value when the popup is closed char szBuffer[512]; dSprintf( szBuffer, 512, "%d.apply(%d.getText());%d.inspect(%d);",getId(), retCtrl->getId(),mParent->mParent->getId(), mTarget->getId() ); //dSprintf( szBuffer, 512, "%d.%s = %d.getText();%d.inspect(%d);",mTarget->getId(), getFieldName(), menu->getId(), mParent->mParent->getId(), mTarget->getId() ); menu->setField("Command", szBuffer ); Vector<StringTableEntry> entries; SimDataBlockGroup * grp = Sim::getDataBlockGroup(); for(SimDataBlockGroup::iterator i = grp->begin(); i != grp->end(); i++) { SimDataBlock * datablock = dynamic_cast<SimDataBlock*>(*i); // Skip non-datablocks if we somehow encounter them. if(!datablock) continue; // Ok, now we have to figure inheritance info. if( datablock && datablock->getClassRep()->isClass(mDesiredClass) ) entries.push_back(datablock->getName()); } // sort the entries dQsort(entries.address(), entries.size(), sizeof(StringTableEntry), stringCompare); // add them to our enum for(U32 j = 0; j < entries.size(); j++) menu->addEntry(entries[j], 0); return retCtrl; }
//----------------------------------------------------------------------------- // GuiInspectorDynamicGroup - add custom controls //----------------------------------------------------------------------------- bool GuiInspectorDynamicGroup::createContent() { if(!Parent::createContent()) return false; // encapsulate the button in a dummy control. GuiControl* shell = new GuiControl(); shell->setDataField( StringTable->insert("profile"), NULL, "GuiTransparentProfile" ); if( !shell->registerObject() ) { delete shell; return false; } // add a button that lets us add new dynamic fields. GuiBitmapButtonCtrl* addFieldBtn = new GuiBitmapButtonCtrl(); { SimObject* profilePtr = Sim::findObject("InspectorDynamicFieldButton"); if( profilePtr != NULL ) addFieldBtn->setControlProfile( dynamic_cast<GuiControlProfile*>(profilePtr) ); // FIXME Hardcoded image addFieldBtn->setBitmap("tools/gui/images/iconAdd.png"); char commandBuf[64]; dSprintf(commandBuf, 64, "%d.addDynamicField();", this->getId()); addFieldBtn->setField("command", commandBuf); addFieldBtn->setSizing(horizResizeLeft,vertResizeCenter); //addFieldBtn->setField("buttonMargin", "2 2"); addFieldBtn->resize(Point2I(getWidth() - 20,2), Point2I(16, 16)); addFieldBtn->registerObject("zAddButton"); } shell->resize(Point2I(0,0), Point2I(getWidth(), 28)); shell->addObject(addFieldBtn); // save off the shell control, so we can push it to the bottom of the stack in inspectGroup() mAddCtrl = shell; mStack->addObject(shell); return true; }
GuiControl* GuiInspectorField::constructEditControl() { GuiControl* retCtrl = new GuiTextEditCtrl(); static StringTableEntry sProfile = StringTable->insert( "profile" ); retCtrl->setDataField( sProfile, NULL, "GuiInspectorTextEditProfile" ); _registerEditControl( retCtrl ); char szBuffer[512]; dSprintf( szBuffer, 512, "%d.apply(%d.getText());",getId(), retCtrl->getId() ); // Suffices to hook on to "validate" as regardless of whether we lose // focus through the user pressing enter or clicking away on another // keyboard control, we will see a validate call. retCtrl->setField("validate", szBuffer ); return retCtrl; }