insilmaril@0: #include "xml.h" insilmaril@0: insilmaril@0: #include insilmaril@0: #include insilmaril@2: #include insilmaril@2: //Added by qt3to4: insilmaril@2: #include insilmaril@0: #include insilmaril@0: insilmaril@0: #include "misc.h" insilmaril@0: #include "settings.h" insilmaril@2: #include "linkablemapobj.h" insilmaril@0: insilmaril@0: #include "version.h" insilmaril@0: insilmaril@0: static BranchObj *lastBranch; insilmaril@0: static FloatObj *lastFloat; insilmaril@2: static OrnamentedObj *lastOO; insilmaril@0: insilmaril@0: extern Settings settings; insilmaril@0: insilmaril@0: mapBuilderHandler::mapBuilderHandler() {} insilmaril@0: insilmaril@0: mapBuilderHandler::~mapBuilderHandler() {} insilmaril@0: insilmaril@0: QString mapBuilderHandler::errorProtocol() { return errorProt; } insilmaril@0: insilmaril@0: bool mapBuilderHandler::startDocument() insilmaril@0: { insilmaril@0: errorProt = ""; insilmaril@0: state = StateInit; insilmaril@0: laststate = StateInit; insilmaril@0: branchDepth=0; insilmaril@0: htmldata=""; insilmaril@0: isVymPart=false; insilmaril@0: return true; insilmaril@0: } insilmaril@0: insilmaril@0: insilmaril@0: QString mapBuilderHandler::parseHREF(QString href) insilmaril@0: { insilmaril@0: QString type=href.section(":",0,0); insilmaril@0: QString path=href.section(":",1,1); insilmaril@0: if (!tmpDir.endsWith("/")) insilmaril@0: return tmpDir + "/" + path; insilmaril@0: else insilmaril@0: return tmpDir + path; insilmaril@0: } insilmaril@0: insilmaril@0: bool mapBuilderHandler::startElement ( const QString&, const QString&, insilmaril@0: const QString& eName, const QXmlAttributes& atts ) insilmaril@0: { insilmaril@0: QColor col; insilmaril@2: //cout << "startElement <"< state="<setVersion(atts.value( "version" )); insilmaril@0: if (!mc->checkVersion()) insilmaril@0: QMessageBox::warning( 0, "Warning: Version Problem" , insilmaril@0: "

Map is newer than VYM

" insilmaril@0: "

The map you are just trying to load was " insilmaril@0: "saved using vym " +atts.value("version")+". " insilmaril@2: "The version of this vym is " __VYM_VERSION insilmaril@0: ". If you run into problems after pressing " insilmaril@0: "the ok-button below, updating vym should help."); insilmaril@0: insilmaril@0: } insilmaril@0: if (loadMode==NewMap) insilmaril@0: { insilmaril@0: if (!atts.value( "author").isEmpty() ) insilmaril@0: { insilmaril@0: mc->setAuthor(atts.value( "author" ) ); insilmaril@0: } insilmaril@0: if (!atts.value( "comment").isEmpty() ) insilmaril@0: { insilmaril@0: mc->setComment (atts.value( "comment" ) ); insilmaril@0: } insilmaril@0: if (!atts.value( "backgroundColor").isEmpty() ) insilmaril@0: { insilmaril@0: col.setNamedColor(atts.value("backgroundColor")); insilmaril@0: mc->getCanvas()->setBackgroundColor(col); insilmaril@0: } insilmaril@0: if (!atts.value( "linkColorHint").isEmpty() ) insilmaril@0: { insilmaril@0: if (atts.value("linkColorHint")=="HeadingColor") insilmaril@0: me->setLinkColorHint(HeadingColor); insilmaril@0: else insilmaril@0: me->setLinkColorHint(DefaultColor); insilmaril@0: } insilmaril@0: if (!atts.value( "linkStyle").isEmpty() ) insilmaril@0: { insilmaril@0: QString s=atts.value("linkStyle"); insilmaril@0: if (s=="StyleLine") insilmaril@0: me->setLinkStyle(StyleLine); insilmaril@0: else insilmaril@0: if (s=="StyleParabel") insilmaril@0: me->setLinkStyle(StyleParabel); insilmaril@0: else insilmaril@0: if (s=="StylePolyLine") insilmaril@0: me->setLinkStyle(StylePolyLine); insilmaril@0: else insilmaril@0: me->setLinkStyle(StylePolyParabel); insilmaril@0: } insilmaril@0: if (!atts.value( "linkColor").isEmpty() ) insilmaril@0: { insilmaril@0: col.setNamedColor(atts.value("linkColor")); insilmaril@0: me->setLinkColor(col); insilmaril@0: } insilmaril@2: if (!atts.value( "defXLinkColor").isEmpty() ) insilmaril@2: { insilmaril@2: col.setNamedColor(atts.value("defXLinkColor")); insilmaril@2: me->setDefXLinkColor(col); insilmaril@2: } insilmaril@2: if (!atts.value( "defXLinkWidth").isEmpty() ) insilmaril@2: { insilmaril@2: me->setDefXLinkWidth(atts.value("defXLinkWidth").toInt ()); insilmaril@2: } insilmaril@0: } insilmaril@0: } else if ( eName == "select" && state == StateMap ) insilmaril@0: { insilmaril@0: state=StateMapSelect; insilmaril@0: } else if ( eName == "setting" && state == StateMap ) insilmaril@0: { insilmaril@0: state=StateMapSetting; insilmaril@0: if (loadMode==NewMap) insilmaril@0: readSettingAttr (atts); insilmaril@0: } else if ( eName == "mapcenter" && state == StateMap ) insilmaril@0: { insilmaril@0: state=StateMapCenter; insilmaril@0: if (loadMode==NewMap) insilmaril@0: { insilmaril@0: // Really use the found mapcenter as MCO in a new map insilmaril@0: lastBranch=mc; // avoid empty pointer insilmaril@0: } else insilmaril@0: { insilmaril@0: // Treat the found mapcenter as a branch insilmaril@0: // in an existing map insilmaril@0: LinkableMapObj* lmo=me->getSelection(); insilmaril@0: if (lmo && (typeid(*lmo) == typeid(BranchObj) ) insilmaril@0: || (typeid(*lmo) == typeid(MapCenterObj) ) ) insilmaril@0: { insilmaril@2: lastBranch=(BranchObj*)lmo; insilmaril@0: if (loadMode==ImportAdd) insilmaril@0: { insilmaril@0: lastBranch->addBranch(); insilmaril@0: lastBranch=lastBranch->getLastBranch(); insilmaril@0: } else insilmaril@0: lastBranch->clear(); insilmaril@0: } else insilmaril@0: return false; insilmaril@0: } insilmaril@0: readBranchAttr (atts); insilmaril@0: } else if ( (eName == "standardflag" ||eName == "standardFlag") && state == StateMapCenter) insilmaril@0: { insilmaril@0: state=StateMapCenterStandardFlag; insilmaril@0: } else if ( eName == "heading" && state == StateMapCenter) insilmaril@0: { insilmaril@0: state=StateMapCenterHeading; insilmaril@0: if (!atts.value( "textColor").isEmpty() ) insilmaril@0: { insilmaril@0: col.setNamedColor(atts.value("textColor")); insilmaril@2: lastBranch->setColor(col ); insilmaril@0: } insilmaril@0: } else if ( eName == "note" && state == StateMapCenter) insilmaril@0: { // only for backward compatibility (<1.4.6). Use htmlnote now. insilmaril@0: state=StateMapCenterNote; insilmaril@0: if (!readNoteAttr (atts) ) return false; insilmaril@0: } else if ( eName == "htmlnote" && state == StateMapCenter) insilmaril@0: { insilmaril@0: laststate=state; insilmaril@0: state=StateHtmlNote; insilmaril@0: } else if ( eName == "floatimage" && state == StateMapCenter ) insilmaril@0: { insilmaril@0: state=StateMapCenterFloatImage; insilmaril@0: lastBranch->addFloatImage(); insilmaril@0: lastFloat=lastBranch->getLastFloatImage(); insilmaril@0: if (!readFloatImageAttr(atts)) return false; insilmaril@2: } else if ( (eName == "branch"||eName=="floatimage") && state == StateMap) insilmaril@0: { insilmaril@0: // This is used in vymparts, which have no mapcenter! insilmaril@0: isVymPart=true; insilmaril@0: LinkableMapObj* lmo=me->getSelection(); insilmaril@2: if (!lmo) insilmaril@2: { insilmaril@2: // If a vym part is _loaded_ (not imported), insilmaril@2: // selection==lmo==NULL insilmaril@2: // Treat it like ImportAdd then... insilmaril@2: loadMode=ImportAdd; insilmaril@2: lmo=mc; insilmaril@2: } insilmaril@0: if (lmo && (typeid(*lmo) == typeid(BranchObj) ) insilmaril@0: || (typeid(*lmo) == typeid(MapCenterObj) ) ) insilmaril@0: { insilmaril@0: lastBranch=(BranchObj*)(lmo); insilmaril@2: if (eName=="branch") insilmaril@0: { insilmaril@2: state=StateBranch; insilmaril@2: if (loadMode==ImportAdd) insilmaril@2: { insilmaril@2: lastBranch->addBranch(); insilmaril@2: lastBranch=lastBranch->getLastBranch(); insilmaril@2: insilmaril@2: } else insilmaril@2: lastBranch->clear(); insilmaril@2: branchDepth=1; insilmaril@2: readBranchAttr (atts); insilmaril@2: } else if (eName=="floatimage") insilmaril@2: { insilmaril@2: state=StateFloatImage; insilmaril@2: lastBranch->addFloatImage(); insilmaril@2: lastFloat=lastBranch->getLastFloatImage(); insilmaril@2: if (!readFloatImageAttr(atts)) return false; insilmaril@2: } else return false; insilmaril@2: } else return false; insilmaril@0: } else if ( eName == "branch" && state == StateMapCenter) insilmaril@0: { insilmaril@0: state=StateBranch; insilmaril@0: branchDepth=1; insilmaril@0: lastBranch->addBranch(); insilmaril@0: lastBranch=lastBranch->getLastBranch(); insilmaril@0: readBranchAttr (atts); insilmaril@0: } else if ( (eName=="standardflag" ||eName == "standardFlag") && state == StateBranch) insilmaril@0: { insilmaril@0: state=StateBranchStandardFlag; insilmaril@0: } else if ( eName == "heading" && state == StateBranch) insilmaril@0: { insilmaril@0: state=StateBranchHeading; insilmaril@0: if (!atts.value( "textColor").isEmpty() ) insilmaril@0: { insilmaril@0: col.setNamedColor(atts.value("textColor")); insilmaril@2: lastBranch->setColor(col ); insilmaril@0: } insilmaril@0: } else if ( eName == "note" && state == StateBranch) insilmaril@0: { insilmaril@0: state=StateBranchNote; insilmaril@0: if (!readNoteAttr (atts) ) return false; insilmaril@0: } else if ( eName == "htmlnote" && state == StateBranch) insilmaril@0: { insilmaril@0: laststate=state; insilmaril@0: state=StateHtmlNote; insilmaril@0: no.clear(); insilmaril@0: if (!atts.value( "fonthint").isEmpty() ) insilmaril@0: no.setFontHint(atts.value ("fonthint") ); insilmaril@0: } else if ( eName == "floatimage" && state == StateBranch ) insilmaril@0: { insilmaril@0: state=StateBranchFloatImage; insilmaril@0: lastBranch->addFloatImage(); insilmaril@0: lastFloat=lastBranch->getLastFloatImage(); insilmaril@0: if (!readFloatImageAttr(atts)) return false; insilmaril@2: } else if ( eName == "xlink" && state == StateBranch ) insilmaril@2: { insilmaril@2: state=StateBranchXLink; insilmaril@2: if (!readXLinkAttr (atts)) return false; insilmaril@0: } else if ( eName == "branch" && state == StateBranch ) insilmaril@0: { insilmaril@0: lastBranch->addBranch(); insilmaril@0: lastBranch=lastBranch->getLastBranch(); insilmaril@0: branchDepth++; insilmaril@0: readBranchAttr (atts); insilmaril@0: } else if ( eName == "html" && state == StateHtmlNote ) insilmaril@0: { insilmaril@0: state=StateHtml; insilmaril@0: htmldata="<"+eName; insilmaril@0: readHtmlAttr(atts); insilmaril@0: htmldata+=">"; insilmaril@0: } else if ( state == StateHtml ) insilmaril@0: { insilmaril@0: // accept all while in html mode, insilmaril@0: htmldata+="<"+eName; insilmaril@0: readHtmlAttr(atts); insilmaril@0: htmldata+=">"; insilmaril@0: } else insilmaril@0: return false; // Error insilmaril@0: return true; insilmaril@0: } insilmaril@0: insilmaril@0: bool mapBuilderHandler::endElement ( const QString&, const QString&, const QString &eName) insilmaril@0: { insilmaril@0: // cout << "endElement state="<"; insilmaril@0: if (eName=="html") insilmaril@0: { insilmaril@0: state=StateHtmlNote; insilmaril@0: htmldata.replace ("

","
"); insilmaril@0: no.setNote (htmldata); insilmaril@0: lastBranch->setNote (no); insilmaril@0: return true; insilmaril@0: } else insilmaril@0: { insilmaril@0: return true; insilmaril@0: } insilmaril@0: case StateMap: state=StateInit; return true; insilmaril@0: default : insilmaril@0: // even for HTML includes, this should never be reached insilmaril@0: return false; insilmaril@0: } insilmaril@0: } insilmaril@0: insilmaril@0: bool mapBuilderHandler::characters ( const QString& ch) insilmaril@0: { insilmaril@0: //cout << "characters \""<"); insilmaril@2: errorProt+=s; insilmaril@2: } insilmaril@0: return QXmlDefaultHandler::fatalError( exception ); insilmaril@0: } insilmaril@0: insilmaril@0: void mapBuilderHandler::setMapEditor (MapEditor* e) insilmaril@0: { insilmaril@0: me=e; insilmaril@0: mc=me->getMapCenter(); insilmaril@0: } insilmaril@0: insilmaril@0: void mapBuilderHandler::setTmpDir (QString tp) insilmaril@0: { insilmaril@0: tmpDir=tp; insilmaril@0: } insilmaril@0: insilmaril@2: void mapBuilderHandler::setInputFile (QString f) insilmaril@2: { insilmaril@2: inputFile=f; insilmaril@2: } insilmaril@2: insilmaril@0: void mapBuilderHandler::setLoadMode (const LoadMode &lm) insilmaril@0: { insilmaril@0: loadMode=lm; insilmaril@0: } insilmaril@0: insilmaril@0: bool mapBuilderHandler::readBranchAttr (const QXmlAttributes& a) insilmaril@0: { insilmaril@2: lastOO=lastBranch; insilmaril@2: if (!readOOAttr(a)) return false; insilmaril@2: insilmaril@0: if (!a.value( "scrolled").isEmpty() ) insilmaril@0: lastBranch->toggleScroll(); insilmaril@0: if (!a.value( "frameType").isEmpty() ) insilmaril@0: lastBranch->setFrameType (a.value("frameType")); insilmaril@2: insilmaril@2: if (!a.value( "incImgV").isEmpty() ) insilmaril@2: { insilmaril@2: if (a.value("incImgV")=="true") insilmaril@2: lastBranch->setIncludeImagesVer(true); insilmaril@2: else insilmaril@2: lastBranch->setIncludeImagesVer(false); insilmaril@2: } insilmaril@2: if (!a.value( "incImgH").isEmpty() ) insilmaril@2: { insilmaril@2: if (a.value("incImgH")=="true") insilmaril@2: lastBranch->setIncludeImagesHor(true); insilmaril@2: else insilmaril@2: lastBranch->setIncludeImagesHor(false); insilmaril@2: } insilmaril@2: return true; insilmaril@2: } insilmaril@2: insilmaril@2: bool mapBuilderHandler::readOOAttr (const QXmlAttributes& a) insilmaril@2: { insilmaril@2: if (lastOO) insilmaril@2: { insilmaril@2: bool okx,oky; insilmaril@2: int x,y; insilmaril@2: if (!a.value( "absPosX").isEmpty() && loadMode==NewMap && branchDepth<2) insilmaril@2: { insilmaril@2: if (!a.value( "absPosY").isEmpty() ) insilmaril@2: { insilmaril@2: x=a.value("absPosX").toInt (&okx, 10); insilmaril@2: y=a.value("absPosY").toInt (&oky, 10); insilmaril@2: if (okx && oky ) insilmaril@2: lastOO->move(x,y); insilmaril@2: else insilmaril@2: return false; // Couldn't read absPos insilmaril@2: } insilmaril@2: } insilmaril@2: if (!a.value( "url").isEmpty() ) insilmaril@2: lastOO->setURL (a.value ("url")); insilmaril@2: if (!a.value( "vymLink").isEmpty() ) insilmaril@2: lastOO->setVymLink (a.value ("vymLink")); insilmaril@2: if (!a.value( "hideInExport").isEmpty() ) insilmaril@2: if (a.value("hideInExport")=="true") insilmaril@2: lastOO->setHideInExport(true); insilmaril@2: insilmaril@2: if (!a.value( "hideLink").isEmpty()) insilmaril@2: { insilmaril@2: if (a.value ("hideLink") =="true") insilmaril@2: lastOO->setHideLinkUnselected(true); insilmaril@2: else insilmaril@2: lastOO->setHideLinkUnselected(false); insilmaril@2: } insilmaril@2: } insilmaril@0: return true; insilmaril@0: } insilmaril@0: insilmaril@0: bool mapBuilderHandler::readNoteAttr (const QXmlAttributes& a) insilmaril@0: { // only for backward compatibility (<1.4.6). Use htmlnote now. insilmaril@0: no.clear(); insilmaril@0: QString fn; insilmaril@0: if (!a.value( "href").isEmpty() ) insilmaril@0: { insilmaril@0: // Load note insilmaril@0: fn=parseHREF(a.value ("href") ); insilmaril@0: QFile file (fn); insilmaril@0: QString s; // Reading a note insilmaril@0: insilmaril@2: if ( !file.open( QIODevice::ReadOnly) ) insilmaril@0: { insilmaril@0: qWarning ("mapBuilderHandler::readNoteAttr: Couldn't load "+fn); insilmaril@0: return false; insilmaril@0: } insilmaril@0: QTextStream stream( &file ); insilmaril@0: QString lines; insilmaril@2: while ( !stream.atEnd() ) { insilmaril@0: lines += stream.readLine()+"\n"; insilmaril@0: } insilmaril@0: file.close(); insilmaril@0: // Convert to richtext insilmaril@2: if ( !Q3StyleSheet::mightBeRichText( lines ) ) insilmaril@0: { insilmaril@0: // Here we are workarounding the QT conversion method: insilmaril@0: // convertFromPlainText does not generate valid xml, needed insilmaril@0: // for the parser, but just

and
without closing tags. insilmaril@0: // So we have to add those by ourselves insilmaril@0: //lines=quotemeta (lines); insilmaril@2: lines = Q3StyleSheet::convertFromPlainText( lines, Q3StyleSheetItem::WhiteSpaceNormal ); insilmaril@0: lines.replace ("
","
"); insilmaril@0: } insilmaril@0: insilmaril@0: lines =""+lines + "

"; insilmaril@0: no.setNote (lines); insilmaril@0: } insilmaril@0: if (!a.value( "fonthint").isEmpty() ) insilmaril@0: no.setFontHint(a.value ("fonthint") ); insilmaril@0: if (state == StateMapCenterNote) insilmaril@0: mc->setNote(no); insilmaril@0: else insilmaril@0: lastBranch->setNote(no); insilmaril@0: return true; insilmaril@0: } insilmaril@0: insilmaril@0: bool mapBuilderHandler::readFloatImageAttr (const QXmlAttributes& a) insilmaril@0: { insilmaril@2: lastOO=lastFloat; insilmaril@2: insilmaril@2: //if (!readOOAttr(a)) return false; insilmaril@2: insilmaril@0: if (!a.value( "useOrientation").isEmpty() ) insilmaril@0: { insilmaril@0: if (a.value ("useOrientation") =="true") insilmaril@0: lastFloat->setUseOrientation (true); insilmaril@0: else insilmaril@0: lastFloat->setUseOrientation (false); insilmaril@0: } insilmaril@0: if (!a.value( "href").isEmpty() ) insilmaril@0: { insilmaril@0: // Load FloatImage insilmaril@0: if (!lastFloat->load (parseHREF(a.value ("href") ) )) insilmaril@0: { insilmaril@0: QMessageBox::warning( 0, "Warning: " , insilmaril@0: "Couldn't load float image\n"+parseHREF(a.value ("href") )); insilmaril@0: lastBranch->removeFloatImage(((FloatImageObj*)(lastFloat))); insilmaril@0: lastFloat=NULL; insilmaril@0: return true; insilmaril@0: } insilmaril@0: insilmaril@0: } insilmaril@0: if (!a.value( "floatExport").isEmpty() ) insilmaril@0: { insilmaril@2: // Only for compatibility. THis is not used since 1.7.11 insilmaril@2: if (a.value ("floatExport") =="true") insilmaril@2: lastFloat->setFloatExport(true); insilmaril@0: else insilmaril@0: lastFloat->setFloatExport (false); insilmaril@0: } insilmaril@0: if (!a.value( "zPlane").isEmpty() ) insilmaril@0: lastFloat->setZ (a.value("zPlane").toInt ()); insilmaril@0: int x,y; insilmaril@0: bool okx,oky; insilmaril@0: if (!a.value( "relPosX").isEmpty() ) insilmaril@0: { insilmaril@0: if (!a.value( "relPosY").isEmpty() ) insilmaril@0: { insilmaril@0: // read relPos insilmaril@0: x=a.value("relPosX").toInt (&okx, 10); insilmaril@0: y=a.value("relPosY").toInt (&oky, 10); insilmaril@0: if (okx && oky) insilmaril@2: insilmaril@2: { insilmaril@2: lastFloat->setRelPos (QPoint (x,y) ); insilmaril@2: // make sure floats in mapcenter are repositioned to relative pos insilmaril@2: if (mc==lastBranch) mc->positionContents(); insilmaril@2: } insilmaril@0: else insilmaril@0: // Couldn't read relPos insilmaril@0: return false; insilmaril@0: } insilmaril@0: } insilmaril@2: insilmaril@2: if (!readOOAttr(a)) return false; insilmaril@2: insilmaril@2: if (!a.value ("orgName").isEmpty() ) insilmaril@2: { insilmaril@2: ((FloatImageObj*)(lastFloat))->setOriginalFilename (a.value("orgName")); insilmaril@2: } insilmaril@0: return true; insilmaril@0: } insilmaril@0: insilmaril@2: bool mapBuilderHandler::readXLinkAttr (const QXmlAttributes& a) insilmaril@2: { insilmaril@2: QColor col; insilmaril@2: bool okx; insilmaril@2: bool success=false; insilmaril@2: XLinkObj *xlo=new XLinkObj (mc->getCanvas()); insilmaril@2: if (!a.value( "color").isEmpty() ) insilmaril@2: { insilmaril@2: col.setNamedColor(a.value("color")); insilmaril@2: xlo->setColor (col); insilmaril@2: } insilmaril@2: insilmaril@2: if (!a.value( "width").isEmpty() ) insilmaril@2: { insilmaril@2: xlo->setWidth(a.value ("width").toInt (&okx, 10)); insilmaril@2: } insilmaril@2: insilmaril@2: if (!a.value( "beginBranch").isEmpty() ) insilmaril@2: { insilmaril@2: if (!a.value( "endBranch").isEmpty() ) insilmaril@2: { insilmaril@2: LinkableMapObj *lmo=mc->findObjBySelect (a.value( "beginBranch")); insilmaril@2: if (lmo && typeid (*lmo)==typeid (BranchObj)) insilmaril@2: { insilmaril@2: xlo->setBegin ((BranchObj*)(lmo)); insilmaril@2: lmo=mc->findObjBySelect (a.value( "endBranch")); insilmaril@2: if (lmo && typeid (*lmo)==typeid (BranchObj)) insilmaril@2: { insilmaril@2: xlo->setEnd ((BranchObj*)(lmo)); insilmaril@2: xlo->activate(); insilmaril@2: } insilmaril@2: } insilmaril@2: success=true; // Not all branches there yet, no error insilmaril@2: } insilmaril@2: } insilmaril@2: if (!success) delete (xlo); insilmaril@2: return success; insilmaril@2: } insilmaril@2: insilmaril@0: bool mapBuilderHandler::readHtmlAttr (const QXmlAttributes& a) insilmaril@0: { insilmaril@0: for (int i=1; i<=a.count(); i++) insilmaril@0: htmldata+=" "+a.localName(i-1)+"=\""+a.value(i-1)+"\""; insilmaril@0: return true; insilmaril@0: } insilmaril@0: insilmaril@0: bool mapBuilderHandler::readSettingAttr (const QXmlAttributes& a) insilmaril@0: { insilmaril@0: if (!a.value( "key").isEmpty() ) insilmaril@0: { insilmaril@0: if (!a.value( "value").isEmpty() ) insilmaril@0: settings.setLocalEntry (me->getDestPath(), a.value ("key"), a.value ("value")); insilmaril@0: else insilmaril@0: return false; insilmaril@0: insilmaril@0: } else insilmaril@0: return false; insilmaril@0: insilmaril@0: return true; insilmaril@0: }