ActionEditor::ActionEditor(QWidget * par) : QWidget(par) { QGridLayout * l = new QGridLayout(this); m_pSplitter = new QSplitter(Qt::Horizontal,this); m_pSplitter->setChildrenCollapsible(false); l->addWidget(m_pSplitter,0,0); KviTalVBox * box = new KviTalVBox(m_pSplitter); m_pTreeWidget = new ActionEditorTreeView(box); KviTalIconAndRichTextItemDelegate *itemDelegate=new KviTalIconAndRichTextItemDelegate(m_pTreeWidget); m_pTreeWidget->setItemDelegate(itemDelegate); //m_pTreeWidget->setShowSortIndicator(true); m_pTreeWidget->setFocusPolicy(Qt::StrongFocus); connect(m_pTreeWidget,SIGNAL(currentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *)),this,SLOT(currentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *))); m_pNewActionButton = new QPushButton(__tr2qs_ctx("New Action","editor"),box); connect(m_pNewActionButton,SIGNAL(clicked()),this,SLOT(newAction())); m_pDeleteActionsButton = new QPushButton(__tr2qs_ctx("Delete Actions","editor"),box); connect(m_pDeleteActionsButton,SIGNAL(clicked()),this,SLOT(deleteActions())); m_pExportActionsButton = new QPushButton(__tr2qs_ctx("Export Actions...","editor"),box); connect(m_pExportActionsButton,SIGNAL(clicked()),this,SLOT(exportActions())); box->setSpacing(1); m_pSingleActionEditor = new SingleActionEditor(m_pSplitter,this); ActionEditorTreeWidgetItem * last = 0; ActionEditorTreeWidgetItem * first = 0; KviPointerHashTableIterator<QString,KviAction> it(*(KviActionManager::instance()->actions())); while(KviAction * a = it.current()) { if(a->isKviUserActionNeverOverrideThis()) { ActionData * ad = new ActionData( a->name(), ((KviKvsUserAction *)a)->scriptCode(), ((KviKvsUserAction *)a)->visibleNameCode(), ((KviKvsUserAction *)a)->descriptionCode(), a->category() ? a->category()->name() : KviActionManager::categoryGeneric()->name(), a->bigIconId(), a->smallIconId(), a->flags(), a->keySequence(), 0 ); ActionEditorTreeWidgetItem * lvi = new ActionEditorTreeWidgetItem(m_pTreeWidget,ad); ad->m_pItem = lvi; if(ad->m_szName == g_szLastEditedAction) last = lvi; if(!first) first = lvi; } ++it; } if(!last)last = first; // try to sleect the first one then if(last) { m_pTreeWidget->setCurrentItem(last); currentItemChanged(last,last); } else { currentItemChanged(0,0); } }
bool XMLModelDefinitionSerializer::exportScript(ModelDefinitionPtr modelDef, const std::string& directory, const std::string& filename) { if (filename == "") { return false; } TiXmlDocument xmlDoc; try { if (!oslink::directory(directory).isExisting()) { S_LOG_INFO("Creating directory " << directory); oslink::directory::mkdir(directory.c_str()); } TiXmlElement elem("models"); TiXmlElement modelElem("model"); modelElem.SetAttribute("name", modelDef->getName().c_str()); std::string useScaleOf; switch (modelDef->getUseScaleOf()) { case ModelDefinition::MODEL_ALL: useScaleOf = "all"; break; case ModelDefinition::MODEL_DEPTH: useScaleOf = "depth"; break; case ModelDefinition::MODEL_HEIGHT: useScaleOf = "height"; break; case ModelDefinition::MODEL_NONE: useScaleOf = "none"; break; case ModelDefinition::MODEL_WIDTH: useScaleOf = "width"; break; } modelElem.SetAttribute("usescaleof", useScaleOf.c_str()); if (modelDef->getRenderingDistance() != 0.0f) { modelElem.SetDoubleAttribute("renderingdistance", modelDef->getRenderingDistance()); } if (modelDef->getScale() != 0) { modelElem.SetDoubleAttribute("scale", modelDef->getScale()); } modelElem.SetAttribute("showcontained", modelDef->getShowContained() ? "true" : "false"); if (modelDef->getContentOffset() != Ogre::Vector3::ZERO) { TiXmlElement contentOffset("contentoffset"); XMLHelper::fillElementFromVector3(contentOffset, modelDef->getContentOffset()); modelElem.InsertEndChild(contentOffset); } const RenderingDefinition* renderingDef = modelDef->getRenderingDefinition(); if (renderingDef) { TiXmlElement rendering("rendering"); rendering.SetAttribute("scheme", renderingDef->getScheme().c_str()); for (StringParamStore::const_iterator I = renderingDef->getParameters().begin(); I != renderingDef->getParameters().end(); ++I) { TiXmlElement param("param"); param.SetAttribute("key", I->first.c_str()); param.SetValue(I->second.c_str()); rendering.InsertEndChild(param); } modelElem.InsertEndChild(rendering); } TiXmlElement translate("translate"); XMLHelper::fillElementFromVector3(translate, modelDef->getTranslate()); modelElem.InsertEndChild(translate); TiXmlElement rotation("rotation"); XMLHelper::fillElementFromQuaternion(rotation, modelDef->getRotation()); modelElem.InsertEndChild(rotation); modelElem.SetAttribute("icon", modelDef->getIconPath().c_str()); if (modelDef->getRenderingDefinition()) { TiXmlElement rendering("rendering"); rendering.SetAttribute("scheme", modelDef->getRenderingDefinition()->getScheme().c_str()); for (StringParamStore::const_iterator I = modelDef->getRenderingDefinition()->getParameters().begin(); I != modelDef->getRenderingDefinition()->getParameters().end(); ++I) { TiXmlElement param("param"); param.SetAttribute("key", I->first.c_str()); param.SetValue(I->second.c_str()); } } //start with submodels exportSubModels(modelDef, modelElem); //now do actions exportActions(modelDef, modelElem); exportAttachPoints(modelDef, modelElem); exportViews(modelDef, modelElem); exportLights(modelDef, modelElem); exportParticleSystems(modelDef, modelElem); exportBoneGroups(modelDef, modelElem); exportPoses(modelDef, modelElem); elem.InsertEndChild(modelElem); xmlDoc.InsertEndChild(elem); xmlDoc.SaveFile((directory + filename).c_str()); S_LOG_INFO("Saved file " << (directory + filename)); return true; } catch (...) { S_LOG_FAILURE("An error occurred saving the modeldefinition for "<< modelDef->getName() << "." ); return false; } }