本文整理汇总了C++中XMLHelper类的典型用法代码示例。如果您正苦于以下问题:C++ XMLHelper类的具体用法?C++ XMLHelper怎么用?C++ XMLHelper使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了XMLHelper类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: RKAbstractOptionSelector
RKDropDown::RKDropDown (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKAbstractOptionSelector (parent_component, parent_widget) {
RK_TRACE (PLUGIN);
// get xml-helper
XMLHelper *xml = parent_component->xmlHelper ();
// create layout
QVBoxLayout *vbox = new QVBoxLayout (this);
vbox->setContentsMargins (0, 0, 0, 0);
label = new QLabel (xml->i18nStringAttribute (element, "label", i18n ("Select one:"), DL_INFO), this);
vbox->addWidget (label);
// create ComboBox
box = new QComboBox (this);
box->setEditable (false);
listwidget = new QListWidget (box);
box->setModel (listwidget->model ());
box->setView (listwidget);
addOptionsAndInit (element);
vbox->addWidget (box);
connect (box, SIGNAL (activated(int)), this, SLOT (comboItemActivated(int)));
}
示例2: RK_TRACE
//static
QDomElement RKComponentMap::findOrCreateElement (QDomElement& parent, const QString& tagname, const QString& name, const QString& label, int index) {
RK_TRACE (PLUGIN);
XMLHelper* xml = XMLHelper::getStaticHelper ();
XMLChildList list = xml->getChildElements (parent, QString::null, DL_INFO); // we need to look at all children, so we get the order right
QDomElement insert_after_element;
for (XMLChildList::const_iterator it=list.begin (); it != list.end (); ++it) {
if ((tagname == (*it).tagName ()) && (name == xml->getStringAttribute ((*it), "name", "", DL_ERROR))) {
return (*it);
} else {
if (index >= 0) {
if (index > xml->getIntAttribute ((*it), "index", -1, DL_INFO)) {
insert_after_element = *it;
}
}
}
}
// element not found. Create a new one instead
QDomElement ret = xmlguiBuildDocument ().createElement (tagname);
ret.setAttribute ("name", name);
ret.setAttribute ("index", index);
if (!label.isEmpty ()) {
QDomElement text = xmlguiBuildDocument ().createElement ("text");
text.appendChild (xmlguiBuildDocument ().createTextNode (label));
ret.appendChild (text);
}
parent.insertAfter (ret, insert_after_element); // if index_after_element.isNull, this add the new element as the last child of parent!
return ret;
}
示例3: RKComponent
RKPluginBrowser::RKPluginBrowser (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) {
RK_TRACE (PLUGIN);
// get xml-helper
XMLHelper *xml = XMLHelper::getStaticHelper ();
// create and add property
addChild ("selection", selection = new RKComponentPropertyBase (this, true));
connect (selection, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (textChanged (RKComponentPropertyBase *)));
setRequired (xml->getBoolAttribute (element, "required", true, DL_INFO));
connect (requirednessProperty (), SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (requirednessChanged(RKComponentPropertyBase*)));
QVBoxLayout *vbox = new QVBoxLayout (this, RKGlobals::spacingHint ());
int intmode = xml->getMultiChoiceAttribute (element, "type", "file;dir;savefile", 0, DL_INFO);
GetFileNameWidget::FileType mode;
if (intmode == 0) {
mode = GetFileNameWidget::ExistingFile;
} else if (intmode == 0) {
mode = GetFileNameWidget::ExistingDirectory;
} else {
mode = GetFileNameWidget::SaveFile;
}
selector = new GetFileNameWidget (this, mode, xml->getStringAttribute (element, "label", i18n ("Enter filename"), DL_INFO), i18n ("Select"), xml->getStringAttribute (element, "initial", QString::null, DL_INFO));
selector->setFilter (xml->getStringAttribute (element, "filter", QString::null, DL_INFO));
connect (selector, SIGNAL (locationChanged ()), SLOT (textChanged ()));
vbox->addWidget (selector);
// initialize
updating = false;
textChanged ();
}
示例4: parseScript
void XMLSoundDefParser::parseScript(Ogre::DataStreamPtr stream)
{
TiXmlDocument xmlDoc;
XMLHelper xmlHelper;
if (!xmlHelper.Load(xmlDoc, stream))
{
return;
}
TiXmlElement* rootElem = xmlDoc.RootElement();
if (rootElem) {
for (TiXmlElement* smElem = rootElem->FirstChildElement();
smElem != 0; smElem = smElem->NextSiblingElement())
{
const char* tmp = smElem->Attribute("name");
if (!tmp)
{
continue;
}
std::string finalName(tmp);
SoundGroupDefinition* newModel = mManager.createSoundGroupDefinition(finalName);
if (newModel)
{
S_LOG_INFO("Sound Model " << finalName << " created.");
readBuffers(newModel, smElem);
}
}
}
}
示例5: RKComponent
RKPreviewBox::RKPreviewBox (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) {
RK_TRACE (PLUGIN);
preview_active = false;
last_plot_done = true;
new_plot_pending = false;
dev_num = 0;
// get xml-helper
XMLHelper *xml = XMLHelper::getStaticHelper ();
// create and add property
addChild ("state", state = new RKComponentPropertyBool (this, true, preview_active, "active", "inactive"));
state->setInternal (true); // restoring this does not make sense.
connect (state, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (changedState (RKComponentPropertyBase *)));
// create checkbox
QVBoxLayout *vbox = new QVBoxLayout (this);
vbox->setContentsMargins (0, 0, 0, 0);
toggle_preview_box = new QCheckBox (xml->getStringAttribute (element, "label", i18n ("Preview"), DL_INFO), this);
vbox->addWidget (toggle_preview_box);
toggle_preview_box->setChecked (preview_active);
connect (toggle_preview_box, SIGNAL (stateChanged (int)), this, SLOT (changedState (int)));
// status lable
status_label = new QLabel (QString::null, this);
vbox->addWidget (status_label);
// find and connect to code property of the parent
QString dummy;
RKComponentBase *cp = parentComponent ()->lookupComponent ("code", &dummy);
if (cp && dummy.isNull () && (cp->type () == PropertyCode)) {
code_property = static_cast<RKComponentPropertyCode *> (cp);
connect (code_property, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (changedCode (RKComponentPropertyBase *)));
} else {
示例6:
// _StorePlaylist
status_t
XMLExporter::_StorePlaylist(XMLHelper& xml, Playlist* list)
{
status_t ret = xml.CreateTag("PLAYLIST");
if (ret == B_OK) {
int32 count = list->CountItems();
for (int32 i = 0; i < count; i++) {
PlaylistItem* item = list->ItemAtFast(i);
ret = _StorePlaylistItem(xml, item);
if (ret != B_OK)
break;
}
}
if (ret == B_OK) {
int32 count = list->CountTrackProperties();
for (int32 i = 0; i < count; i++) {
TrackProperties* properties = list->TrackPropertiesAtFast(i);
ret = _StoreTrackProperties(xml, properties);
if (ret != B_OK)
break;
}
}
if (ret == B_OK && list->SoloTrack() >= 0)
ret = xml.SetAttribute("solo_track", list->SoloTrack());
if (ret == B_OK)
ret = xml.CloseTag();
return ret;
}
示例7: RKComponent
RKVarSelector::RKVarSelector (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) {
RK_TRACE (PLUGIN);
XMLHelper *xml = parent_component->xmlHelper ();
// TODO: read filter settings
addChild ("selected", selected = new RKComponentPropertyRObjects (this, false));
selected->setInternal (true);
addChild ("root", root = new RKComponentPropertyRObjects (this, false));
connect (root, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (rootChanged()));
root->setInternal (true);
QVBoxLayout *vbox = new QVBoxLayout (this);
vbox->setContentsMargins (0, 0, 0, 0);
QHBoxLayout *hbox = new QHBoxLayout ();
hbox->setContentsMargins (0, 0, 0, 0);
vbox->addLayout (hbox);
QLabel *label = new QLabel (xml->i18nStringAttribute (element, "label", i18n ("Select Variable(s)"), DL_INFO), this);
hbox->addWidget (label);
QToolButton *advanced_button = new QToolButton (this);
advanced_button->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionConfigureGeneric));
advanced_button->setPopupMode (QToolButton::InstantPopup);
advanced_button->setAutoRaise (true);
hbox->addWidget (advanced_button);
// TODO: Or should these actions be moved to RKObjectListView, non-tool-window-mode?
show_all_envs_action = new QAction (i18n ("Show all environments"), this);
show_all_envs_action->setCheckable (true);
show_all_envs_action->setToolTip (i18n ("Show objects in all environments on the <i>search()</i> path, instead of just those in <i>.GlobalEnv</i>. Check this, if you want to select objects from a loaded package."));
connect (show_all_envs_action, SIGNAL (toggled(bool)), this, SLOT (rootChanged()));
filter_widget = 0;
filter_widget_placeholder = new QVBoxLayout (this);
filter_widget_placeholder->setContentsMargins (0, 0, 0, 0);
vbox->addLayout (filter_widget_placeholder);
show_filter_action = new QAction (i18n ("Show filter options"), this);
show_filter_action->setCheckable (true);
show_filter_action->setShortcut (QKeySequence ("Ctrl+F"));
show_filter_action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionSearch));
connect (show_filter_action, SIGNAL (toggled(bool)), this, SLOT(showFilterWidget()));
list_view = new RKObjectListView (false, this);
list_view->setSelectionMode (QAbstractItemView::ExtendedSelection);
list_view->initialize ();
vbox->addWidget (list_view);
connect (list_view, SIGNAL (selectionChanged()), this, SLOT (objectSelectionChanged()));
QAction* sep = list_view->contextMenu ()->insertSeparator (list_view->contextMenu ()->actions ().value (0));
list_view->contextMenu ()->insertAction (sep, show_filter_action);
list_view->contextMenu ()->insertAction (sep, show_all_envs_action);
advanced_button->setMenu (list_view->contextMenu ());
rootChanged ();
}
示例8: RKComponent
RKVarSlot::RKVarSlot (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) {
RK_TRACE (PLUGIN);
XMLHelper *xml = XMLHelper::getStaticHelper ();
// basic layout
QGridLayout *g_layout = new QGridLayout (this, 4, 3, RKGlobals::spacingHint ());
QLabel *label = new QLabel (xml->getStringAttribute (element, "label", i18n ("Variable:"), DL_INFO), this);
g_layout->addWidget (label, 0, 2);
select = new QPushButton (QString::null, this);
setSelectButton (false);
connect (select, SIGNAL (clicked ()), this, SLOT (selectPressed ()));
g_layout->addWidget (select, 1, 0);
g_layout->addColSpacing (1, 5);
list = new QListView (this);
list->setSelectionMode (QListView::Extended);
list->addColumn (" "); // for counter
list->addColumn (i18n ("Name"));
list->setSorting (2);
g_layout->addWidget (list, 1, 2);
// initialize properties
addChild ("source", source = new RKComponentPropertyRObjects (this, false));
addChild ("available", available = new RKComponentPropertyRObjects (this, true));
addChild ("selected", selected = new RKComponentPropertyRObjects (this, false));
// find out about options
if (multi = xml->getBoolAttribute (element, "multi", false, DL_INFO)) {
available->setListLength (xml->getIntAttribute (element, "min_vars", 1, DL_INFO), xml->getIntAttribute (element, "min_vars_if_any", 1, DL_INFO), xml->getIntAttribute (element, "max_vars", 0, DL_INFO));
connect (list, SIGNAL (selectionChanged ()), this, SLOT (listSelectionChanged ()));
} else {
available->setListLength (1, 1, 1);
// make it look like a line-edit
list->header ()->hide ();
list->setFixedHeight (list->fontMetrics ().height () + 2*list->itemMargin () + 4); // the height of a single line including margins
list->setColumnWidthMode (0, QListView::Manual);
list->setColumnWidth (0, 0);
list->setHScrollBarMode (QScrollView::AlwaysOff);
list->setVScrollBarMode (QScrollView::AlwaysOff);
g_layout->setRowStretch (3, 1); // so the label does not get separated from the view
}
// initialize filters
available->setClassFilter (QStringList::split (" ", xml->getStringAttribute (element, "classes", QString::null, DL_INFO)));
setRequired (xml->getBoolAttribute (element, "required", false, DL_INFO));
available->setTypeFilter (QStringList::split (" ", xml->getStringAttribute (element, "types", QString::null, DL_INFO)));
available->setDimensionFilter (xml->getIntAttribute (element, "num_dimensions", 0, DL_INFO), xml->getIntAttribute (element, "min_length", 0, DL_INFO), xml->getIntAttribute (element, "max_length", INT_MAX, DL_INFO));
connect (available, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (availablePropertyChanged (RKComponentPropertyBase *)));
availablePropertyChanged (available); // initialize
}
示例9: RKComponent
RKInput::RKInput (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) {
RK_TRACE (PLUGIN);
textedit = 0;
lineedit = 0;
// get xml-helper
XMLHelper *xml = parent_component->xmlHelper ();
// create and add property
addChild ("text", text = new RKComponentPropertyBase (this, false));
connect (text, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (textChanged(RKComponentPropertyBase*)));
setRequired (xml->getBoolAttribute (element, "required", false, DL_INFO));
connect (requirednessProperty (), SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (requirednessChanged(RKComponentPropertyBase*)));
// do all the layouting
QVBoxLayout *vbox = new QVBoxLayout (this);
vbox->setContentsMargins (0, 0, 0, 0);
label_string = xml->i18nStringAttribute (element, "label", i18n ("Enter text"), DL_INFO);
if (!label_string.isEmpty ()) {
QLabel *label = new QLabel (label_string, this);
vbox->addWidget (label);
}
int size = xml->getMultiChoiceAttribute (element, "size", "small;medium;large", 1, DL_INFO);
if (size == 2) {
textedit = new QTextEdit (this);
QFontMetrics fm = QFontMetrics (textedit->currentFont ());
int lheight = fm.lineSpacing ();
int margin = fm.descent () + 2;
textedit->setMinimumSize (250, lheight * 4 + margin);
vbox->addWidget (textedit);
connect (textedit, SIGNAL (textChanged()), SLOT (textChanged()));
} else {
lineedit = new QLineEdit (this);
vbox->addWidget (lineedit);
connect (lineedit, SIGNAL (textChanged(QString)), SLOT (textChanged(QString)));
}
vbox->addStretch (1); // to keep the label attached
// initialize
updating = false;
// DO NOT replace "" with QString (), here! it is important, that this is actually an empty string, not a null string.
text->setValue (xml->getStringAttribute (element, "initial", "", DL_INFO));
}
示例10: RKComponent
RKPluginFrame::RKPluginFrame (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) {
RK_TRACE (PLUGIN);
XMLHelper* xml = parent_component->xmlHelper ();
QVBoxLayout *layout = new QVBoxLayout (this);
layout->setContentsMargins (0, 0, 0, 0);
frame = new QGroupBox (xml->i18nStringAttribute (element, "label", QString(), DL_INFO), this);
layout->addWidget (frame);
layout = new QVBoxLayout (frame);
page = new KVBox (frame);
page->setSpacing (RKGlobals::spacingHint ());
layout->addWidget (page);
checked = 0;
if (xml->getBoolAttribute (element, "checkable", false, DL_INFO)) {
frame->setCheckable (true);
frame->setChecked (xml->getBoolAttribute (element, "checked", true, DL_INFO));
initCheckedProperty ();
connect (frame, SIGNAL (toggled(bool)), this, SLOT (checkedChanged(bool)));
}
示例11:
// XMLRestore
status_t
PlaybackReport::XMLRestore(XMLHelper& xml)
{
status_t ret = B_OK;
while (xml.OpenTag("CLIP")) {
BString clipID = xml.GetAttribute("clip_id", "");
int32 playbackCount = xml.GetAttribute("playback_count", (int32)-1);
if (clipID.Length() > 0 && playbackCount >= 0) {
ret = fIDPlaybackCountMap.Put(clipID.String(), playbackCount);
}
if (ret == B_OK)
ret = xml.CloseTag(); // CLIP
if (ret < B_OK)
break;
}
return ret;
}
示例12: RKComponent
RKValueSelector::RKValueSelector (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) {
RK_TRACE (PLUGIN);
updating = false;
XMLHelper *xml = parent_component->xmlHelper ();
standalone = element.tagName () == "select";
addChild ("selected", selected = new RKComponentPropertyStringList (this, false));
connect (selected, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (selectionPropertyChanged()));
selected->setInternal (!standalone);
addChild ("available", available = new RKComponentPropertyStringList (this, false));
connect (available, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (availablePropertyChanged()));
available->setInternal (true);
addChild ("labels", labels = new RKComponentPropertyStringList (this, false));
connect (labels, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (labelsPropertyChanged()));
labels->setInternal (true);
QVBoxLayout *vbox = new QVBoxLayout (this);
vbox->setContentsMargins (0, 0, 0, 0);
label_string = xml->i18nStringAttribute (element, "label", QString (), DL_INFO);
if (!label_string.isNull ()) {
QLabel *label = new QLabel (label_string, this);
vbox->addWidget (label);
}
list_view = new QTreeView (this);
list_view->setHeaderHidden (true);
list_view->setSelectionMode (QAbstractItemView::ExtendedSelection);
list_view->setRootIsDecorated (false);
model = new QStringListModel (this);
list_view->setModel (model);
connect (list_view->selectionModel (), SIGNAL (selectionChanged(QItemSelection,QItemSelection)), this, SLOT (listSelectionChanged()));
vbox->addWidget (list_view);
XMLChildList options = xml->getChildElements (element, "option", DL_INFO);
if (!options.isEmpty ()) {
QStringList values_list;
QStringList labels_list;
QStringList selected_list;
for (int i = 0; i < options.size (); ++i) {
const QDomElement &child = options[i];
QString v = xml->getStringAttribute (child, "value", QString (), DL_WARNING);
QString l = xml->i18nStringAttribute (child, "label", v, DL_INFO);
if (xml->getBoolAttribute (child, "checked", false, DL_INFO)) selected_list.append (v);
labels_list.append (l);
values_list.append (v);
}
available->setValueList (values_list);
labels->setValueList (labels_list);
selected->setValueList (selected_list);
}
}
示例13: RKComponent
RKRadio::RKRadio (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) {
RK_TRACE (PLUGIN);
// create and register properties
addChild ("string", string = new RKComponentPropertyBase (this, false));
connect (string, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (propertyChanged (RKComponentPropertyBase *)));
addChild ("number", number = new RKComponentPropertyInt (this, true, -1));
connect (number, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (propertyChanged (RKComponentPropertyBase *)));
// get xml-helper
XMLHelper *xml = XMLHelper::getStaticHelper ();
// create layout
QVBoxLayout *vbox = new QVBoxLayout (this, RKGlobals::spacingHint ());
// create ButtonGroup
group = new QButtonGroup (xml->getStringAttribute (element, "label", i18n ("Select one:"), DL_INFO), this);
// create internal layout for the buttons in the ButtonGroup
group->setColumnLayout (0, Qt::Vertical);
group->layout()->setSpacing (RKGlobals::spacingHint ());
group->layout()->setMargin (RKGlobals::marginHint ());
QVBoxLayout *group_layout = new QVBoxLayout (group->layout(), RKGlobals::spacingHint ());
// create all the options
XMLChildList option_elements = xml->getChildElements (element, "option", DL_ERROR);
int checked = 0;
int i = 0;
for (XMLChildList::const_iterator it = option_elements.begin (); it != option_elements.end (); ++it) {
QRadioButton *button = new QRadioButton (xml->getStringAttribute (*it, "label", QString::null, DL_ERROR), group);
options.insert (i, xml->getStringAttribute (*it, "value", QString::null, DL_WARNING));
group_layout->addWidget (button);
if (xml->getBoolAttribute (*it, "checked", false, DL_INFO)) {
button->setChecked (true);
checked = i;
}
++i;
}
updating = false;
number->setIntValue (checked); // will also take care of checking the correct button
number->setMin (0);
number->setMax (i-1);
vbox->addWidget (group);
connect (group, SIGNAL (clicked (int)), this, SLOT (buttonClicked (int)));
// initialize
buttonClicked (group->selectedId ());
}
示例14: RKComponent
RKPluginSaveObject::RKPluginSaveObject (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) {
RK_TRACE (PLUGIN);
// read settings
XMLHelper *xml = XMLHelper::getStaticHelper ();
bool checkable = xml->getBoolAttribute (element, "checkable", false, DL_INFO);
bool checked = xml->getBoolAttribute (element, "checked", false, DL_INFO);
bool required = xml->getBoolAttribute (element, "required", true, DL_INFO);
QString label = xml->getStringAttribute (element, "label", i18n ("Save to:"), DL_INFO);
QString initial = xml->getStringAttribute (element, "initial", i18n ("my.data"), DL_INFO);
// create and add properties
addChild ("selection", selection = new RKComponentPropertyBase (this, required));
connect (selection, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (externalChange ()));
selection->setInternal (true); // the two separate properties "parent" and "objectname" are used for (re-)storing.
addChild ("parent", parent = new RKComponentPropertyRObjects (this, false));
connect (parent, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (externalChange ()));
addChild ("objectname", objectname = new RKComponentPropertyBase (this, false));
connect (objectname, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (externalChange ()));
addChild ("active", active = new RKComponentPropertyBool (this, false, false, "1", "0"));
connect (active, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (externalChange ()));
if (!checkable) active->setInternal (true);
// create GUI
groupbox = new QGroupBox (label, this);
groupbox->setCheckable (checkable);
if (checkable) groupbox->setChecked (checked);
connect (groupbox, SIGNAL (toggled(bool)), this, SLOT (internalChange ()));
selector = new RKSaveObjectChooser (groupbox, initial);
connect (selector, SIGNAL (changed (bool)), SLOT (internalChange ()));
QVBoxLayout *vbox = new QVBoxLayout (this);
vbox->setContentsMargins (0, 0, 0, 0);
QVBoxLayout *vbox_b = new QVBoxLayout (groupbox);
vbox_b->setContentsMargins (0, 0, 0, 0);
vbox_b->addWidget (selector);
vbox->addWidget (groupbox);
// initialize
setRequired (required);
updating = false;
internalChange ();
}
示例15: importLodDefinition
void XMLLodDefinitionSerializer::importLodDefinition(const Ogre::DataStreamPtr& stream, LodDefinition& lodDef) const
{
TiXmlDocument xmlDoc;
XMLHelper xmlHelper;
if (!xmlHelper.Load(xmlDoc, stream)) {
return;
}
// <lod>...</lod>
TiXmlElement* rootElem = xmlDoc.RootElement();
if (rootElem) {
// <automatic enabled="true|false" />
TiXmlElement* autElem = rootElem->FirstChildElement("automatic");
if (autElem) {
const char* tmp = autElem->Attribute("enabled");
if (tmp) {
lodDef.setUseAutomaticLod(Ogre::StringConverter::parseBool(tmp, true));
}
}
// <manual>...</manual>
TiXmlElement* manElem = rootElem->FirstChildElement("manual");
if (manElem) {
// <type>user|automatic</type>
TiXmlElement* elem = manElem->FirstChildElement("type");
if (elem) {
const char* tmp = elem->GetText();
if (tmp && strcmp(tmp, "automatic") == 0) {
lodDef.setType(LodDefinition::LT_AUTOMATIC_VERTEX_REDUCTION);
} else {
lodDef.setType(LodDefinition::LT_USER_CREATED_MESH);
}
}
// <strategy>distance|pixelcount</strategy>
elem = manElem->FirstChildElement("strategy");
if (elem) {
const char* tmp = elem->GetText();
if (tmp && strcmp(tmp, "distance") == 0) {
lodDef.setStrategy(LodDefinition::LS_DISTANCE);
} else {
lodDef.setStrategy(LodDefinition::LS_PIXEL_COUNT);
}
}
// <level>...</level> <level>...</level> <level>...</level>
for (TiXmlElement* distElem = manElem->FirstChildElement("level");
distElem != 0;
distElem = distElem->NextSiblingElement("level")) {
LodDistance dist;
if (lodDef.getType() == LodDefinition::LT_USER_CREATED_MESH) {
// <meshName>.../test.mesh</meshName>
elem = distElem->FirstChildElement("meshName");
if (elem) {
const char* tmp = elem->GetText();
bool isValidMeshName = Ogre::ResourceGroupManager::getSingleton().resourceExistsInAnyGroup(tmp);
if (tmp && isValidMeshName) {
dist.setMeshName(tmp);
} else {
S_LOG_FAILURE(
lodDef.getName() <<
" contains invalid mesh name for user created lod level. Skipping lod level for distance "
<< distElem->Attribute("distance"));
continue;
}
}
} else {
// <method>constant|proportional</method>
elem = distElem->FirstChildElement("method");
if (elem) {
const char* tmp = elem->GetText();
if (tmp) {
if (strcmp(tmp, "constant") == 0) {
dist.setReductionMethod(Ogre::LodLevel::VRM_CONSTANT);
} else if (strcmp(tmp, "proportional") == 0) {
dist.setReductionMethod(Ogre::LodLevel::VRM_PROPORTIONAL);
} else {
dist.setReductionMethod(Ogre::LodLevel::VRM_COLLAPSE_COST);
}
} else {
dist.setReductionMethod(Ogre::LodLevel::VRM_PROPORTIONAL);
}
}
// <value>0.5</value>
elem = distElem->FirstChildElement("value");
if (elem) {
const char* tmp = elem->GetText();
if (tmp) {
dist.setReductionValue(Ogre::StringConverter::parseReal(tmp));
}
}
}
// <level distance="10">...</level>
const char* distVal = distElem->Attribute("distance");
if (distVal) {
//.........这里部分代码省略.........