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))); }
//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; }
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 (); }
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); } } } }
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 {
// _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; }
void EmberEntityMappingManager::parseScript (Ogre::DataStreamPtr &stream, const Ogre::String &groupName) { TiXmlDocument xmlDoc; XMLHelper xmlHelper; if (!xmlHelper.Load(xmlDoc, stream)) { return; } mXmlSerializer.parseScript(xmlDoc, stream->getName()); }
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 (); }
// _StoreTrackProperties status_t XMLExporter::_StoreTrackProperties(XMLHelper& xml, TrackProperties* properties) { status_t ret = xml.CreateTag("TRACK_PROPERTIES"); if (ret == B_OK) ret = properties->XMLStore(xml); if (ret == B_OK) ret = xml.CloseTag(); return ret; }
// _StoreClipLibrary status_t XMLExporter::_StoreClipLibrary(XMLHelper& xml, const Playlist* list) { status_t ret = xml.CreateTag("REFERENCED_OBJECTS"); if (ret == B_OK) ret = _StoreAllClips(xml, list); if (ret == B_OK) ret = xml.CloseTag(); // REFERENCED_OBJECTS return ret; }
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 }
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)); }
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))); }
int RKComponentMap::addSubMenu (QDomElement& parent, const QDomElement& description, const QString& cnamespace) { RK_TRACE (PLUGIN); int counter = 0; XMLHelper* xml = XMLHelper::getStaticHelper (); // 1: check whether menu already exists, and create new menu otherwise QDomElement menu_element = findOrCreateElement (parent, "Menu", xml->getStringAttribute (description, "id", "none", DL_ERROR), xml->getStringAttribute (description, "label", i18n ("(no label)"), DL_WARNING), xml->getIntAttribute (description, "index", -1, DL_INFO)); // 2: recurse into submenus (of element to add!) XMLChildList list = xml->getChildElements (description, "menu", DL_INFO); for (XMLChildList::const_iterator it=list.begin (); it != list.end (); ++it) { counter += addSubMenu (menu_element, (*it), cnamespace); } // 3: add entries list = xml->getChildElements (description, "entry", DL_INFO); for (XMLChildList::const_iterator it=list.begin (); it != list.end (); ++it) { QString id = cnamespace + xml->getStringAttribute ((*it), "component", "#invalid#", DL_ERROR); RKComponentHandle* handle = components[id]; if ((!handle) || (!handle->isPlugin ())) { RK_DO (qDebug ("No such component found while creating menu-entries or component is not a standalone plugin: \"%s\". No entry created.", id.latin1 ()), PLUGIN, DL_ERROR); } else { findOrCreateElement (menu_element, "Action", id, QString::null, xml->getIntAttribute ((*it), "index", -1, DL_INFO)); counter++; } } return counter; }
// 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; }
// XMLStore status_t PlaybackReport::XMLStore(XMLHelper& xml) const { status_t ret = B_OK; PlaybackMap::Iterator iterator = fIDPlaybackCountMap.GetIterator(); while (iterator.HasNext()) { PlaybackMap::Entry entry = iterator.Next(); ret = xml.CreateTag("CLIP"); if (ret == B_OK) ret = xml.SetAttribute("clip_id", entry.key.GetString()); if (ret == B_OK) ret = xml.SetAttribute("playback_count", entry.value); if (ret == B_OK) ret = xml.CloseTag(); // CLIP if (ret < B_OK) break; } return ret; }
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); } }
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 ()); }
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 (); }
// _StoreClipID status_t XMLExporter::_StoreClipID(XMLHelper& xml, const BString& clipID, int32 index, const BString& templateName, int32 version) { status_t ret = xml.CreateTag("OBJECT"); if (ret == B_OK) ret = xml.SetAttribute("id", clipID.String()); if (ret == B_OK) ret = xml.SetAttribute("index", index); if (ret == B_OK && version >= 0) ret = xml.SetAttribute("version", version); if (ret == B_OK && templateName.Length() > 0) ret = xml.SetAttribute("template_name", templateName.String()); if (ret == B_OK) ret = xml.CloseTag(); return ret; }
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) { lodDef.addLodDistance(Ogre::StringConverter::parseReal(distVal), dist); } } } } }
RKPluginSpinBox::RKPluginSpinBox (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); // get xml-helper XMLHelper *xml = XMLHelper::getStaticHelper (); // first question: int or real intmode = (xml->getMultiChoiceAttribute (element, "type", "integer;real", 1, DL_INFO) == 0); // create and add properties addChild ("int", intvalue = new RKComponentPropertyInt (this, intmode, 0)); intvalue->setInternal (true); addChild ("real", realvalue = new RKComponentPropertyDouble (this, !intmode, 0)); // layout and label QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); QLabel *label = new QLabel (xml->getStringAttribute (element, "label", i18n ("Enter value:"), DL_WARNING), this); vbox->addWidget (label); // create spinbox and read settings spinbox = new RKSpinBox (this); if (!intmode) { double min = xml->getDoubleAttribute (element, "min", -FLT_MAX, DL_INFO); double max = xml->getDoubleAttribute (element, "max", FLT_MAX, DL_INFO); double initial = xml->getDoubleAttribute (element, "initial", min, DL_INFO); int default_precision = xml->getIntAttribute (element, "default_precision", 2, DL_INFO); int max_precision = xml->getIntAttribute (element, "max_precision", 8, DL_INFO); spinbox->setRealMode (min, max, initial, default_precision, max_precision); realvalue->setMin (min); realvalue->setMax (max); realvalue->setPrecision (default_precision); } else { int min = xml->getIntAttribute (element, "min", INT_MIN, DL_INFO); int max = xml->getIntAttribute (element, "max", INT_MAX, DL_INFO); int initial = xml->getIntAttribute (element, "initial", min, DL_INFO); spinbox->setIntMode (min, max, initial); intvalue->setMin (min); intvalue->setMax (max); } // connect connect (spinbox, SIGNAL (valueChanged (int)), this, SLOT (valueChanged (int))); connect (intvalue, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (valueChanged (RKComponentPropertyBase *))); connect (realvalue, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (valueChanged (RKComponentPropertyBase *))); updating = false; // finish layout vbox->addWidget (spinbox); vbox->addStretch (1); // make sure label remains attached to spinbox if (xml->getStringAttribute (element, "size", "normal", DL_INFO) == "small") { spinbox->setFixedWidth (100); } // initialize valueChanged (1); }
RKPreviewBox::RKPreviewBox (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); prior_preview_done = true; new_preview_pending = false; // get xml-helper XMLHelper *xml = parent_component->xmlHelper (); preview_mode = (PreviewMode) xml->getMultiChoiceAttribute (element, "mode", "plot;data;output;custom", 0, DL_INFO); placement = (PreviewPlacement) xml->getMultiChoiceAttribute (element, "placement", "default;attached;detached;docked", 0, DL_INFO); if (placement == DefaultPreview) placement = DockedPreview; preview_active = xml->getBoolAttribute (element, "active", false, DL_INFO); idprop = RObject::rQuote (QString ().sprintf ("%p", this)); // 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->i18nStringAttribute (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 label status_label = new QLabel (QString (), this); status_label->setWordWrap (true); vbox->addWidget (status_label); // prepare placement placement_command = ".rk.with.window.hints ({"; placement_end = "\n}, "; if (placement == AttachedPreview) placement_end.append ("\"attached\""); else if (placement == DetachedPreview) placement_end.append ("\"detached\""); else placement_end.append ("\"\""); placement_end.append (", " + RObject::rQuote (idprop) + ", style=\"preview\")"); if (placement == DockedPreview) { RKStandardComponent *uicomp = topmostStandardComponent (); if (uicomp) { uicomp->addDockedPreview (state, toggle_preview_box->text (), idprop); if (preview_mode == OutputPreview) { RKGlobals::rInterface ()->issueCommand ("local ({\n" "outfile <- tempfile (fileext='html')\n" "rk.assign.preview.data(" + idprop + ", list (filename=outfile, on.delete=function (id) {\n" " rk.flush.output (outfile, ask=FALSE)\n" " unlink (outfile)\n" "}))\n" "oldfile <- rk.set.output.html.file (outfile, style='preview') # for initialization\n" "rk.set.output.html.file (oldfile)\n" "})\n" + placement_command + "rk.show.html(rk.get.preview.data (" + idprop + ")$filename)" + placement_end, RCommand::Plugin | RCommand::Sync); } else { // For all others, create an empty data.frame as dummy. Even for custom docked previews it has the effect of initializing the preview area with _something_. RKGlobals::rInterface ()->issueCommand ("local ({\nrk.assign.preview.data(" + idprop + ", data.frame ())\n})\n" + placement_command + "rk.edit(rkward::.rk.variables$.rk.preview.data[[" + idprop + "]])" + placement_end, RCommand::Plugin | RCommand::Sync); } // A bit of a hack: For now, in wizards, docked previews are always active, and control boxes are meaningless. if (uicomp->isWizardish ()) { hide (); toggle_preview_box->setChecked (true); } } } // 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 {
RKMatrixInput::RKMatrixInput (const QDomElement& element, RKComponent* parent_component, QWidget* parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); is_valid = true; // get xml-helper XMLHelper *xml = parent_component->xmlHelper (); // create layout QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); QLabel *label = new QLabel (xml->i18nStringAttribute (element, "label", i18n ("Enter data:"), DL_INFO), this); vbox->addWidget (label); display = new RKTableView (this); vbox->addWidget (display); mode = static_cast<Mode> (xml->getMultiChoiceAttribute (element, "mode", "integer;real;string", 1, DL_WARNING)); if (mode == Integer) { min = xml->getIntAttribute (element, "min", INT_MIN, DL_INFO) - .1; // we'll only allow ints anyway. Make sure not to run into floating point precision issues. max = xml->getIntAttribute (element, "max", INT_MAX, DL_INFO) + .1; } else if (mode == Real) { min = xml->getDoubleAttribute (element, "min", -FLT_MAX, DL_INFO); max = xml->getDoubleAttribute (element, "max", FLT_MAX, DL_INFO); } else { min = -FLT_MAX; max = FLT_MAX; } min_rows = xml->getIntAttribute (element, "min_rows", 0, DL_INFO); min_columns = xml->getIntAttribute (element, "min_columns", 0, DL_INFO); // Note: string type matrix allows missings, implicitly (treating them as empty strings) allow_missings = xml->getBoolAttribute (element, "allow_missings", false, DL_INFO); if (mode == String) allow_missings = true; allow_user_resize_columns = xml->getBoolAttribute (element, "allow_user_resize_columns", true, DL_INFO); allow_user_resize_rows = xml->getBoolAttribute (element, "allow_user_resize_rows", true, DL_INFO); trailing_rows = allow_user_resize_rows ? 1 : 0; trailing_columns = allow_user_resize_columns ? 1 : 0; row_count = new RKComponentPropertyInt (this, false, xml->getIntAttribute (element, "rows", qMax (2, min_rows), DL_INFO)); column_count = new RKComponentPropertyInt (this, false, xml->getIntAttribute (element, "columns", qMax (2, min_columns), DL_INFO)); tsv_data = new RKComponentPropertyBase (this, false); row_count->setInternal (true); addChild ("rows", row_count); column_count->setInternal (true); addChild ("columns", column_count); addChild ("tsv", tsv_data); connect (row_count, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (dimensionPropertyChanged(RKComponentPropertyBase*))); connect (column_count, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (dimensionPropertyChanged(RKComponentPropertyBase*))); connect (tsv_data, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (tsvPropertyChanged())); updating_tsv_data = false; model = new RKMatrixInputModel (this); QString headers = xml->getStringAttribute (element, "horiz_headers", QString (), DL_INFO); if (!headers.isEmpty ()) model->horiz_header = headers.split (';'); else if (!headers.isNull ()) display->horizontalHeader ()->hide (); // attribute explicitly set to "" headers = xml->getStringAttribute (element, "vert_headers", QString (), DL_INFO); if (!headers.isEmpty ()) model->vert_header = headers.split (';'); else if (!headers.isNull ()) display->verticalHeader ()->hide (); updateAll (); display->setModel (model); display->setAlternatingRowColors (true); if (xml->getBoolAttribute (element, "fixed_width", false, DL_INFO)) { display->horizontalHeader ()->setStretchLastSection (true); } if (xml->getBoolAttribute (element, "fixed_height", false, DL_INFO)) { int max_row = row_count->intValue () - 1; display->setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff); display->setFixedHeight (display->horizontalHeader ()->height () + display->rowViewportPosition (max_row) + display->rowHeight (max_row)); } // define standard actions KAction *cut = KStandardAction::cut (this, SLOT (cut()), this); display->addAction (cut); KAction *copy = KStandardAction::copy (this, SLOT (copy()), this); display->addAction (copy); KAction *paste = KStandardAction::paste (this, SLOT (paste()), this); display->addAction (paste); display->setContextMenuPolicy (Qt::ActionsContextMenu); display->setRKItemDelegate (new RKItemDelegate (display, model, true)); connect (display, SIGNAL (blankSelectionRequest()), this, SLOT (clearSelectedCells())); }
// XMLRestore status_t RenderPreset::XMLRestore(XMLHelper& xmlHelper) { xmlHelper.GetAttribute("name", fName); fRenderPreview = xmlHelper.GetAttribute("preview", fRenderPreview); // "use alpha" depends on "preview" setting if (!fRenderPreview) fUseAlpha = xmlHelper.GetAttribute("use_alpha", fUseAlpha); else fUseAlpha = false; if (xmlHelper.OpenTag("FILE_FORMAT") == B_OK) { xmlHelper.GetAttribute("name", fFamilyName); xmlHelper.CloseTag(); // FILE_FORMAT } if (xmlHelper.OpenTag("VIDEO") == B_OK) { fHasVideoTrack = xmlHelper.GetAttribute("on", fHasVideoTrack); if (xmlHelper.OpenTag("VIDEO_FORMAT") == B_OK) { fLineWidth = xmlHelper.GetAttribute("line_width", fLineWidth); fLineCount = xmlHelper.GetAttribute("line_count", fLineCount); fColorSpace = (color_space)xmlHelper.GetAttribute("color_space", (int32)fColorSpace); xmlHelper.CloseTag(); // VIDEO_FORMAT } if (xmlHelper.OpenTag("VIDEO_CODEC") == B_OK) { xmlHelper.GetAttribute("name", fVideoCodecName); xmlHelper.CloseTag(); // VIDEO_CODEC } if (xmlHelper.OpenTag("QUALITY") == B_OK) { fVideoQuality = xmlHelper.GetAttribute("value", fVideoQuality); xmlHelper.CloseTag(); // QUALITY; } xmlHelper.CloseTag(); // VIDEO; } if (xmlHelper.OpenTag("AUDIO") == B_OK) { fHasAudioTrack = xmlHelper.GetAttribute("on", fHasAudioTrack); if (xmlHelper.OpenTag("AUDIO_CODEC") == B_OK) { xmlHelper.GetAttribute("name", fAudioCodecName); fAudioFrameRate = xmlHelper.GetAttribute("frame_rate", fAudioFrameRate); fAudioChannelCount = xmlHelper.GetAttribute("channels", fAudioChannelCount); xmlHelper.CloseTag(); // AUDIO_CODEC } xmlHelper.CloseTag(); // AUDIO } if (xmlHelper.OpenTag("COPYRIGHT") == B_OK) { xmlHelper.GetAttribute("string", fCopyright); xmlHelper.CloseTag(); // COPYRIGHT } if (xmlHelper.OpenTag("TIMECODE") == B_OK) { fTimeCodeOverlay = xmlHelper.GetAttribute("visible", fTimeCodeOverlay); fTimeCodeTransparency = xmlHelper.GetAttribute("transparency", fTimeCodeTransparency); fTimeCodeScale = xmlHelper.GetAttribute("scale", fTimeCodeScale); xmlHelper.CloseTag(); // TIMECODE } return B_OK; }
// XMLStore status_t RenderPreset::XMLStore(XMLHelper& xmlHelper) const { status_t error = B_OK; xmlHelper.SetAttribute("name", Name()); xmlHelper.SetAttribute("preview", fRenderPreview); xmlHelper.SetAttribute("use_alpha", fUseAlpha); if ((error = xmlHelper.CreateTag("FILE_FORMAT")) == B_OK) { xmlHelper.SetAttribute("name", FormatFamily()); xmlHelper.CloseTag(); // FILE_FORMAT } if ((error = xmlHelper.CreateTag("VIDEO")) == B_OK) { xmlHelper.SetAttribute("on", fHasVideoTrack); if ((error = xmlHelper.CreateTag("VIDEO_FORMAT")) == B_OK) { xmlHelper.SetAttribute("line_width", fLineWidth); xmlHelper.SetAttribute("line_count", fLineCount); xmlHelper.SetAttribute("color_space", (int32)fColorSpace); xmlHelper.CloseTag(); // VIDEO_FORMAT } if ((error = xmlHelper.CreateTag("VIDEO_CODEC")) == B_OK) { xmlHelper.SetAttribute("name", fVideoCodecName); xmlHelper.CloseTag(); // VIDEO_CODEC } if ((error = xmlHelper.CreateTag("QUALITY")) == B_OK) { xmlHelper.SetAttribute("value", fVideoQuality); xmlHelper.CloseTag(); // QUALITY } xmlHelper.CloseTag(); // VIDEO } if ((error = xmlHelper.CreateTag("AUDIO")) == B_OK) { xmlHelper.SetAttribute("on", fHasAudioTrack); if ((error = xmlHelper.CreateTag("AUDIO_CODEC")) == B_OK) { xmlHelper.SetAttribute("name", fAudioCodecName); xmlHelper.SetAttribute("frame_rate", fAudioFrameRate); xmlHelper.SetAttribute("channels", fAudioChannelCount); xmlHelper.CloseTag(); // AUDIO_CODEC } xmlHelper.CloseTag(); // AUDIO } if ((error = xmlHelper.CreateTag("COPYRIGHT")) == B_OK) { xmlHelper.SetAttribute("string", fCopyright); xmlHelper.CloseTag(); // COPYRIGHT } if ((error = xmlHelper.CreateTag("TIMECODE")) == B_OK) { xmlHelper.SetAttribute("visible", fTimeCodeOverlay); xmlHelper.SetAttribute("transparency", fTimeCodeTransparency); xmlHelper.SetAttribute("scale", fTimeCodeScale); xmlHelper.CloseTag(); // TIMECODE } // Who cares about errors? return B_OK; }
RKOptionSet::RKOptionSet (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); XMLHelper *xml = XMLHelper::getStaticHelper (); updating = false; last_known_status = Processing; n_invalid_rows = n_unfinished_rows = 0; min_rows = xml->getIntAttribute (element, "min_rows", 0, DL_INFO); min_rows_if_any = xml->getIntAttribute (element, "min_rows_if_any", 1, DL_INFO); max_rows = xml->getIntAttribute (element, "max_rows", INT_MAX, DL_INFO); // build UI framework QVBoxLayout *layout = new QVBoxLayout (this); switcher = new QStackedWidget (this); layout->addWidget (switcher); user_area = new KVBox (this); switcher->addWidget (user_area); updating_notice = new QLabel (i18n ("Updating status, please wait"), this); switcher->addWidget (updating_notice); update_timer.setInterval (0); update_timer.setSingleShot (true); connect (&update_timer, SIGNAL (timeout()), this, SLOT (slotUpdateUnfinishedRows())); // create some meta properties serialization_of_set = new RKComponentPropertyBase (this, false); addChild ("serialized", serialization_of_set); connect (serialization_of_set, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (serializationPropertyChanged(RKComponentPropertyBase*))); row_count = new RKComponentPropertyInt (this, false, 0); row_count->setInternal (true); addChild ("row_count", row_count); // NOTE: read-only return_to_row = active_row = -1; current_row = new RKComponentPropertyInt (this, false, active_row); current_row->setInternal (true); addChild ("current_row", current_row); // NOTE: read-write connect (current_row, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (currentRowPropertyChanged(RKComponentPropertyBase*))); // first build the contents, as we will need to refer to the elements inside, later model = 0; display = 0; // will be created from the builder, on demand -> createDisplay () contents_container = new RKComponent (this, user_area); QDomElement content_element = xml->getChildElement (element, "content", DL_ERROR); RKComponentBuilder *builder = new RKComponentBuilder (contents_container, content_element); builder->buildElement (content_element, user_area, false); // NOTE that parent widget != parent component, here, by intention. The point is that the display should not be disabled along with the contents builder->parseLogic (xml->getChildElement (element, "logic", DL_INFO), false); builder->makeConnections (); addChild ("contents", contents_container); connect (standardComponent (), SIGNAL (standardInitializationComplete()), this, SLOT (fetchDefaults())); // create columns XMLChildList options = xml->getChildElements (element, "optioncolumn", DL_WARNING); QStringList visible_column_labels ("#"); // Optionally hidden first row for index for (int i = 0; i < options.size (); ++i) { const QDomElement &e = options.at (i); QString id = xml->getStringAttribute (e, "id", QString (), DL_ERROR); QString label = xml->getStringAttribute (e, "label", QString (), DL_DEBUG); QString governor = xml->getStringAttribute (e, "connect", QString (), DL_INFO); bool external = xml->getBoolAttribute (e, "external", false, DL_INFO); while (child_map.contains (id)) { RK_DEBUG (PLUGIN, DL_ERROR, "optionset already contains a property named %s. Renaming to _%s", qPrintable (id), qPrintable (id)); id = "_" + id; } ColumnInfo col_inf; col_inf.column_name = id; col_inf.external = external; col_inf.governor = governor; if (external && e.hasAttribute ("default")) col_inf.default_value = xml->getStringAttribute (e, "default", QString (), DL_ERROR); RKComponentPropertyStringList *column_property = new RKComponentPropertyStringList (this, false); column_property->setInternal (external); // Yes, looks strange, indeed. External properties should simply not be serialized / restored... addChild (id, column_property); connect (column_property, SIGNAL (valueChanged(RKComponentPropertyBase *)), this, SLOT (columnPropertyChanged(RKComponentPropertyBase *))); if (!label.isEmpty ()) { col_inf.display_index = visible_column_labels.size (); col_inf.column_label = label; visible_column_labels.append (label); visible_columns.append (column_property); } else { col_inf.display_index = -1; } column_map.insert (column_property, col_inf); } keycolumn = 0; QString keycol = xml->getStringAttribute (element, "keycolumn", QString (), DL_DEBUG); if (!keycol.isEmpty ()) { keycolumn = static_cast<RKComponentPropertyStringList*> (child_map.value (keycol)); if (!column_map.contains (keycolumn)) { RK_DEBUG (PLUGIN, DL_ERROR, "optionset does not contain an optioncolumn named %s. Falling back to manual insertion mode", qPrintable (keycol)); keycolumn = 0; } else if (!column_map[keycolumn].external) { RK_DEBUG (PLUGIN, DL_ERROR, "keycolumn (%s) is not marked as external. Falling back to manual insertion mode", qPrintable (keycol)); keycolumn = 0; } else { updating = true; keycolumn->setValue (KEYCOLUMN_UNINITIALIZED_VALUE); updating = false; } } QMap<RKComponentPropertyStringList *, ColumnInfo>::iterator it = column_map.begin (); for (; it != column_map.end (); ++it) { ColumnInfo &ci = it.value (); if (!ci.governor.isEmpty ()) { // there *can* be columns without governor for driven or connected option sets // Establish connections between columns and their respective governors. Since the format differs, the connection is done indirectly, through this component. // So, here, we set up a map of properties to columns, and connect to the change signals. RKComponentBase *governor = contents_container->lookupComponent (ci.governor, &ci.governor_modifier); if (governor && governor->isProperty ()) { RKComponentPropertyBase *gov_prop = static_cast<RKComponentPropertyBase*> (governor); if (ci.external) { if (!ci.governor_modifier.isEmpty ()) { RK_DEBUG (PLUGIN, DL_ERROR, "Cannot connect external column '%s' in optionset to property with modifier (%s).", qPrintable (ci.column_name), qPrintable (ci.governor)); continue; } } columns_to_update.insertMulti (gov_prop, it.key ()); connect (gov_prop, SIGNAL (valueChanged(RKComponentPropertyBase *)), this, SLOT (governingPropertyChanged(RKComponentPropertyBase *))); } else {
// _StorePlaylistItem status_t XMLExporter::_StorePlaylistItem(XMLHelper& xml, ClipPlaylistItem* item) { status_t ret = xml.CreateTag("ITEM"); if (ret == B_OK && item->StartFrame() != 0) ret = xml.SetAttribute("startframe", item->StartFrame()); if (ret == B_OK) ret = xml.SetAttribute("duration", item->Duration()); if (ret == B_OK && item->Track() != 0) ret = xml.SetAttribute("track", item->Track()); if (ret == B_OK) ret = xml.SetAttribute("clip_offset", item->ClipOffset()); if (ret == B_OK && item->IsVideoMuted()) ret = xml.SetAttribute("video_muted", true); if (ret == B_OK && item->IsAudioMuted()) ret = xml.SetAttribute("audio_muted", true); if (ret == B_OK) { BString clipID; if (item->Clip()) { clipID = item->Clip()->ID(); } else { item->GetValue(PROPERTY_CLIP_ID, clipID); } if (fClipIdIndexMap.ContainsKey(clipID.String())) { // the map should always contain the id! ret = xml.SetAttribute("clip_index", fClipIdIndexMap.Get(clipID.String())); } else { // this is a fallback, but we should not be here! ret = xml.SetAttribute("clip_id", clipID.String()); } } if (ret == B_OK) ret = store_properties(xml, item); // store the NavigationInfo if it exists if (const NavigationInfo* info = item->NavigationInfo()) { ret = xml.CreateTag("NAV_INFO"); if (ret == B_OK) ret = info->XMLStore(xml); if (ret == B_OK) ret = xml.CloseTag(); } if (ret == B_OK) ret = xml.CloseTag(); return ret; }
int RKComponentMap::addPluginMap (const QString& plugin_map_file) { RK_TRACE (PLUGIN); XMLHelper* xml = XMLHelper::getStaticHelper (); QDomElement element; XMLChildList list; QDomElement document_element = xml->openXMLFile (plugin_map_file, DL_ERROR); if (xml->highestError () >= DL_ERROR) return (0); QString prefix = QFileInfo (plugin_map_file).dirPath (true) + "/" + xml->getStringAttribute (document_element, "base_prefix", QString::null, DL_INFO); QString cnamespace = xml->getStringAttribute (document_element, "namespace", "rkward", DL_INFO) + "::"; // step 1: create (list of) components element = xml->getChildElement (document_element, "components", DL_INFO); list = xml->getChildElements (element, "component", DL_INFO); for (XMLChildList::const_iterator it=list.begin (); it != list.end (); ++it) { QString filename = prefix + xml->getStringAttribute((*it), "file", QString::null, DL_WARNING); QString id = cnamespace + xml->getStringAttribute((*it), "id", QString::null, DL_WARNING); int type = xml->getMultiChoiceAttribute ((*it), "type", "standard", 0, DL_WARNING); QString label = xml->getStringAttribute ((*it), "label", i18n ("(no label)"), DL_WARNING); if (components.contains (id)) { RK_DO (qDebug ("RKComponentMap already contains a component with id \"%s\". Ignoring second entry.", id.latin1 ()), PLUGIN, DL_WARNING); } else if (!QFileInfo (filename).isReadable ()) { RK_DO (qDebug ("Specified file '%s' for component id \"%s\" does not exist or is not readable. Ignoring.", filename.latin1 (), id.latin1 ()), PLUGIN, DL_ERROR); } else { components.insert (id, RKComponentHandle::createComponentHandle (filename, (RKComponentType) type, id, label)); } } // step 2: create / insert into menus QDomElement xmlgui_menubar_elem = xml->getChildElement (xmlguiBuildDocument ().documentElement (), "MenuBar", DL_ERROR); element = xml->getChildElement (document_element, "hierarchy", DL_INFO); list = xml->getChildElements (element, "menu", DL_INFO); int counter = 0; for (XMLChildList::const_iterator it=list.begin (); it != list.end (); ++it) { counter += addSubMenu (xmlgui_menubar_elem, (*it), cnamespace); } // step 3: included files QStringList includelist; list = xml->getChildElements (document_element, "include", DL_INFO); for (XMLChildList::const_iterator it=list.constBegin (); it != list.constEnd (); ++it) { QString file = prefix + xml->getStringAttribute (*it, "file", QString::null, DL_ERROR); if (QFileInfo (file).isReadable ()) { includelist.append (file); } else { RK_DO (qDebug ("Specified include file '%s' does not exist or is not readable. Ignoring.", file.latin1 ()), PLUGIN, DL_ERROR); } } for (QStringList::const_iterator it = includelist.constBegin (); it != includelist.constEnd (); ++it) { counter += addPluginMap (*it); } return counter; }