insilmaril@70: #include "xml-vym.h" insilmaril@70: insilmaril@70: #include insilmaril@70: #include insilmaril@70: #include insilmaril@70: #include insilmaril@70: #include insilmaril@70: insilmaril@70: #include "misc.h" insilmaril@70: #include "settings.h" insilmaril@70: #include "linkablemapobj.h" insilmaril@70: #include "version.h" insilmaril@70: insilmaril@70: static BranchObj *lastBranch; insilmaril@70: static FloatObj *lastFloat; insilmaril@70: static OrnamentedObj *lastOO; insilmaril@70: insilmaril@70: extern Settings settings; insilmaril@70: extern QString vymVersion; insilmaril@70: insilmaril@70: /* insilmaril@70: parseVYMHandler::parseVYMHandler() {} insilmaril@70: insilmaril@70: parseVYMHandler::~parseVYMHandler() {} insilmaril@70: insilmaril@70: QString parseVYMHandler::errorProtocol() { return errorProt; } insilmaril@70: insilmaril@70: */ insilmaril@70: insilmaril@70: bool parseVYMHandler::startDocument() insilmaril@70: { insilmaril@70: errorProt = ""; insilmaril@70: state = StateInit; insilmaril@70: laststate = StateInit; insilmaril@70: stateStack.clear(); insilmaril@70: stateStack.append(StateInit); insilmaril@70: htmldata=""; insilmaril@70: isVymPart=false; insilmaril@70: return true; insilmaril@70: } insilmaril@70: insilmaril@70: insilmaril@70: /* insilmaril@70: QString parseVYMHandler::parseHREF(QString href) insilmaril@70: { insilmaril@70: QString type=href.section(":",0,0); insilmaril@70: QString path=href.section(":",1,1); insilmaril@70: if (!tmpDir.endsWith("/")) insilmaril@70: return tmpDir + "/" + path; insilmaril@70: else insilmaril@70: return tmpDir + path; insilmaril@70: } insilmaril@70: */ insilmaril@70: bool parseVYMHandler::startElement ( const QString&, const QString&, insilmaril@70: const QString& eName, const QXmlAttributes& atts ) insilmaril@70: { insilmaril@70: QColor col; insilmaril@70: /* Testing insilmaril@70: cout << "startElement <"<< qPrintable(eName) insilmaril@70: <<"> state="<clear(); // remove existing mapCenter insilmaril@70: insilmaril@70: // Check version insilmaril@70: if (!atts.value( "version").isEmpty() ) insilmaril@70: { insilmaril@70: if (!checkVersion(atts.value("version"))) insilmaril@70: QMessageBox::warning( 0, "Warning: Version Problem" , insilmaril@70: "

Map is newer than VYM

" insilmaril@70: "

The map you are just trying to load was " insilmaril@70: "saved using vym " +atts.value("version")+". " insilmaril@70: "The version of this vym is " + vymVersion + insilmaril@70: ". If you run into problems after pressing " insilmaril@70: "the ok-button below, updating vym should help."); insilmaril@70: else insilmaril@70: model->setVersion(atts.value( "version" )); insilmaril@70: insilmaril@70: } insilmaril@70: insilmaril@70: if (loadMode==NewMap ) insilmaril@70: { insilmaril@70: // Create mapCenter insilmaril@70: model->clear(); insilmaril@70: lastBranch=model->first(); // avoid empty pointer insilmaril@70: insilmaril@70: if (!atts.value( "author").isEmpty() ) insilmaril@70: model->setAuthor(atts.value( "author" ) ); insilmaril@70: if (!atts.value( "comment").isEmpty() ) insilmaril@70: model->setComment (atts.value( "comment" ) ); insilmaril@70: if (!atts.value( "backgroundColor").isEmpty() ) insilmaril@70: { insilmaril@70: col.setNamedColor(atts.value("backgroundColor")); insilmaril@70: model->getScene()->setBackgroundBrush(col); insilmaril@70: } insilmaril@70: if (!atts.value( "selectionColor").isEmpty() ) insilmaril@70: { insilmaril@70: col.setNamedColor(atts.value("selectionColor")); insilmaril@70: model->getMapEditor()->setSelectionColor(col); insilmaril@70: } insilmaril@70: if (!atts.value( "linkColorHint").isEmpty() ) insilmaril@70: { insilmaril@70: if (atts.value("linkColorHint")=="HeadingColor") insilmaril@70: model->getMapEditor()->setMapLinkColorHint(LinkableMapObj::HeadingColor); insilmaril@70: else insilmaril@70: model->getMapEditor()->setMapLinkColorHint(LinkableMapObj::DefaultColor); insilmaril@70: } insilmaril@70: if (!atts.value( "linkStyle").isEmpty() ) insilmaril@70: model->getMapEditor()->setMapLinkStyle(atts.value("linkStyle")); insilmaril@70: if (!atts.value( "linkColor").isEmpty() ) insilmaril@70: { insilmaril@70: col.setNamedColor(atts.value("linkColor")); insilmaril@70: model->getMapEditor()->setMapDefLinkColor(col); insilmaril@70: } insilmaril@70: if (!atts.value( "defXLinkColor").isEmpty() ) insilmaril@70: { insilmaril@70: col.setNamedColor(atts.value("defXLinkColor")); insilmaril@70: model->getMapEditor()->setMapDefXLinkColor(col); insilmaril@70: } insilmaril@70: if (!atts.value( "defXLinkWidth").isEmpty() ) insilmaril@70: model->getMapEditor()->setMapDefXLinkWidth(atts.value("defXLinkWidth").toInt ()); insilmaril@70: } insilmaril@70: } else if ( eName == "select" && state == StateMap ) insilmaril@70: { insilmaril@70: state=StateMapSelect; insilmaril@70: } else if ( eName == "setting" && state == StateMap ) insilmaril@70: { insilmaril@70: state=StateMapSetting; insilmaril@70: if (loadMode==NewMap) insilmaril@70: readSettingAttr (atts); insilmaril@70: } else if ( eName == "mapcenter" && state == StateMap ) insilmaril@70: { insilmaril@70: state=StateMapCenter; insilmaril@70: if (loadMode==NewMap) insilmaril@70: { insilmaril@70: // Really use the found mapcenter as MCO in a new map insilmaril@70: insilmaril@70: lastBranch=model->addMapCenter(); insilmaril@70: } else insilmaril@70: { insilmaril@70: // Treat the found mapcenter as a branch insilmaril@70: // in an existing map insilmaril@70: LinkableMapObj* lmo=model->getSelection(); insilmaril@70: if (lmo && ((typeid(*lmo) == typeid(BranchObj) ) insilmaril@70: || typeid(*lmo) == typeid(MapCenterObj) ) ) insilmaril@70: { insilmaril@70: lastBranch=(BranchObj*)lmo; insilmaril@70: if (loadMode==ImportAdd) insilmaril@70: { insilmaril@70: lastBranch->addBranch(); insilmaril@70: lastBranch=lastBranch->getLastBranch(); insilmaril@70: } else insilmaril@70: lastBranch->clear(); insilmaril@70: } else insilmaril@70: return false; insilmaril@70: } insilmaril@70: readBranchAttr (atts); insilmaril@70: } else if ( insilmaril@70: (eName == "standardflag" ||eName == "standardFlag") && insilmaril@70: (state == StateMapCenter || state==StateBranch)) insilmaril@70: { insilmaril@70: state=StateStandardFlag; insilmaril@70: } else if ( eName == "heading" && (state == StateMapCenter||state==StateBranch)) insilmaril@70: { insilmaril@70: laststate=state; insilmaril@70: state=StateHeading; insilmaril@70: if (!atts.value( "textColor").isEmpty() ) insilmaril@70: { insilmaril@70: col.setNamedColor(atts.value("textColor")); insilmaril@70: lastBranch->setColor(col ); insilmaril@70: } insilmaril@70: } else if ( eName == "note" && insilmaril@70: (state == StateMapCenter ||state==StateBranch)) insilmaril@70: { // only for backward compatibility (<1.4.6). Use htmlnote now. insilmaril@70: state=StateNote; insilmaril@70: if (!readNoteAttr (atts) ) return false; insilmaril@70: } else if ( eName == "htmlnote" && state == StateMapCenter) insilmaril@70: { insilmaril@70: laststate=state; insilmaril@70: state=StateHtmlNote; insilmaril@70: } else if ( eName == "floatimage" && insilmaril@70: (state == StateMapCenter ||state==StateBranch)) insilmaril@70: { insilmaril@70: state=StateFloatImage; insilmaril@70: lastBranch->addFloatImage(); insilmaril@70: lastFloat=lastBranch->getLastFloatImage(); insilmaril@70: if (!readFloatImageAttr(atts)) return false; insilmaril@70: } else if ( (eName == "branch"||eName=="floatimage") && state == StateMap) insilmaril@70: { insilmaril@70: // This is used in vymparts, which have no mapcenter! insilmaril@70: isVymPart=true; insilmaril@70: LinkableMapObj* lmo=model->getSelection(); insilmaril@70: if (!lmo) insilmaril@70: { insilmaril@70: // If a vym part is _loaded_ (not imported), insilmaril@70: // selection==lmo==NULL insilmaril@70: // Treat it like ImportAdd then... insilmaril@70: loadMode=ImportAdd; insilmaril@70: lmo=model->first(); // FIXME this used to be lmo=mc before insilmaril@70: } insilmaril@70: if (lmo && ((typeid(*lmo) == typeid(BranchObj) ) insilmaril@70: || typeid(*lmo) == typeid(MapCenterObj) ) ) insilmaril@70: { insilmaril@70: lastBranch=(BranchObj*)(lmo); insilmaril@70: if (eName=="branch") insilmaril@70: { insilmaril@70: state=StateBranch; insilmaril@70: if (loadMode==ImportAdd) insilmaril@70: { insilmaril@70: lastBranch->addBranch(); insilmaril@70: lastBranch=lastBranch->getLastBranch(); insilmaril@70: insilmaril@70: } else insilmaril@70: lastBranch->clear(); insilmaril@70: readBranchAttr (atts); insilmaril@70: } else if (eName=="floatimage") insilmaril@70: { insilmaril@70: state=StateFloatImage; insilmaril@70: lastBranch->addFloatImage(); insilmaril@70: lastFloat=lastBranch->getLastFloatImage(); insilmaril@70: if (!readFloatImageAttr(atts)) return false; insilmaril@70: } else return false; insilmaril@70: } else return false; insilmaril@70: } else if ( eName == "branch" && state == StateMapCenter) insilmaril@70: { insilmaril@70: state=StateBranch; insilmaril@70: lastBranch->addBranch(); insilmaril@70: lastBranch=lastBranch->getLastBranch(); insilmaril@70: readBranchAttr (atts); insilmaril@70: } else if ( eName == "htmlnote" && state == StateBranch) insilmaril@70: { insilmaril@70: laststate=state; insilmaril@70: state=StateHtmlNote; insilmaril@70: no.clear(); insilmaril@70: if (!atts.value( "fonthint").isEmpty() ) insilmaril@70: no.setFontHint(atts.value ("fonthint") ); insilmaril@70: } else if ( eName == "frame" && (state == StateBranch||state==StateMapCenter)) insilmaril@70: { insilmaril@70: laststate=state; insilmaril@70: state=StateFrame; insilmaril@70: if (!readFrameAttr(atts)) return false; insilmaril@70: } else if ( eName == "xlink" && state == StateBranch ) insilmaril@70: { insilmaril@70: state=StateBranchXLink; insilmaril@70: if (!readXLinkAttr (atts)) return false; insilmaril@70: } else if ( eName == "branch" && state == StateBranch ) insilmaril@70: { insilmaril@70: lastBranch->addBranch(); insilmaril@70: lastBranch=lastBranch->getLastBranch(); insilmaril@70: readBranchAttr (atts); insilmaril@70: } else if ( eName == "html" && state == StateHtmlNote ) insilmaril@70: { insilmaril@70: state=StateHtml; insilmaril@70: htmldata="<"+eName; insilmaril@70: readHtmlAttr(atts); insilmaril@70: htmldata+=">"; insilmaril@70: } else if ( state == StateHtml ) insilmaril@70: { insilmaril@70: // accept all while in html mode, insilmaril@70: htmldata+="<"+eName; insilmaril@70: readHtmlAttr(atts); insilmaril@70: htmldata+=">"; insilmaril@70: } else insilmaril@70: return false; // Error insilmaril@70: return true; insilmaril@70: } insilmaril@70: insilmaril@70: bool parseVYMHandler::endElement ( const QString&, const QString&, const QString &eName) insilmaril@70: { insilmaril@70: /* Testing insilmaril@70: cout << "endElement state=" <"; insilmaril@70: if (eName=="html") insilmaril@70: { insilmaril@70: state=StateHtmlNote; insilmaril@70: htmldata.replace ("

","
"); insilmaril@70: no.setNote (htmldata); insilmaril@70: lastBranch->setNote (no); insilmaril@70: } insilmaril@70: break; insilmaril@70: default: insilmaril@70: break; insilmaril@70: } insilmaril@70: state=stateStack.takeLast(); insilmaril@70: return true; insilmaril@70: } insilmaril@70: insilmaril@70: bool parseVYMHandler::characters ( const QString& ch) insilmaril@70: { insilmaril@70: //cout << "characters \""<toggleScroll(); insilmaril@70: if (!a.value( "frameType").isEmpty() ) insilmaril@70: lastOO->setFrameType (a.value("frameType")); //Compatibility 1.8.1 insilmaril@70: insilmaril@70: if (!a.value( "incImgV").isEmpty() ) insilmaril@70: { insilmaril@70: if (a.value("incImgV")=="true") insilmaril@70: lastBranch->setIncludeImagesVer(true); insilmaril@70: else insilmaril@70: lastBranch->setIncludeImagesVer(false); insilmaril@70: } insilmaril@70: if (!a.value( "incImgH").isEmpty() ) insilmaril@70: { insilmaril@70: if (a.value("incImgH")=="true") insilmaril@70: lastBranch->setIncludeImagesHor(true); insilmaril@70: else insilmaril@70: lastBranch->setIncludeImagesHor(false); insilmaril@70: } insilmaril@70: return true; insilmaril@70: } insilmaril@70: insilmaril@70: bool parseVYMHandler::readFrameAttr (const QXmlAttributes& a) insilmaril@70: { insilmaril@70: bool ok; insilmaril@70: int x; insilmaril@70: if (lastOO) insilmaril@70: { insilmaril@70: if (!a.value( "frameType").isEmpty() ) insilmaril@70: lastOO->setFrameType (a.value("frameType")); insilmaril@70: if (!a.value( "penColor").isEmpty() ) insilmaril@70: lastOO->setFramePenColor (a.value("penColor")); insilmaril@70: if (!a.value( "brushColor").isEmpty() ) insilmaril@70: lastOO->setFrameBrushColor (a.value("brushColor")); insilmaril@70: if (!a.value( "padding").isEmpty() ) insilmaril@70: { insilmaril@70: x=a.value("padding").toInt(&ok); insilmaril@70: if (ok) lastOO->setFramePadding(x); insilmaril@70: } insilmaril@70: if (!a.value( "borderWidth").isEmpty() ) insilmaril@70: { insilmaril@70: x=a.value("borderWidth").toInt(&ok); insilmaril@70: if (ok) lastOO->setFrameBorderWidth(x); insilmaril@70: } insilmaril@70: } insilmaril@70: return true; insilmaril@70: } insilmaril@70: insilmaril@70: bool parseVYMHandler::readOOAttr (const QXmlAttributes& a) insilmaril@70: { insilmaril@70: if (lastOO) insilmaril@70: { insilmaril@70: bool okx,oky; insilmaril@70: float x,y; insilmaril@70: if (!a.value( "relPosX").isEmpty() ) insilmaril@70: { insilmaril@70: if (!a.value( "relPosY").isEmpty() ) insilmaril@70: { insilmaril@70: x=a.value("relPosX").toFloat (&okx); insilmaril@70: y=a.value("relPosY").toFloat (&oky); insilmaril@70: if (okx && oky ) insilmaril@70: { insilmaril@70: lastOO->setUseRelPos (true); insilmaril@70: lastOO->move2RelPos (x,y); insilmaril@70: } insilmaril@70: else insilmaril@70: return false; // Couldn't read relPos insilmaril@70: } insilmaril@70: } insilmaril@70: if (!a.value( "absPosX").isEmpty() && loadMode==NewMap ) insilmaril@70: { insilmaril@70: if (!a.value( "absPosY").isEmpty() ) insilmaril@70: { insilmaril@70: x=a.value("absPosX").toFloat (&okx); insilmaril@70: y=a.value("absPosY").toFloat (&oky); insilmaril@70: if (okx && oky ) insilmaril@70: lastOO->move(x,y); insilmaril@70: else insilmaril@70: return false; // Couldn't read absPos insilmaril@70: } insilmaril@70: } insilmaril@70: if (!a.value( "id").isEmpty() ) insilmaril@70: lastOO->setID (a.value ("id")); insilmaril@70: if (!a.value( "url").isEmpty() ) insilmaril@70: lastOO->setURL (a.value ("url")); insilmaril@70: if (!a.value( "vymLink").isEmpty() ) insilmaril@70: lastOO->setVymLink (a.value ("vymLink")); insilmaril@70: if (!a.value( "hideInExport").isEmpty() ) insilmaril@70: if (a.value("hideInExport")=="true") insilmaril@70: lastOO->setHideInExport(true); insilmaril@70: insilmaril@70: if (!a.value( "hideLink").isEmpty()) insilmaril@70: { insilmaril@70: if (a.value ("hideLink") =="true") insilmaril@70: lastOO->setHideLinkUnselected(true); insilmaril@70: else insilmaril@70: lastOO->setHideLinkUnselected(false); insilmaril@70: } insilmaril@70: } insilmaril@70: return true; insilmaril@70: } insilmaril@70: insilmaril@70: bool parseVYMHandler::readNoteAttr (const QXmlAttributes& a) insilmaril@70: { // only for backward compatibility (<1.4.6). Use htmlnote now. insilmaril@70: no.clear(); insilmaril@70: QString fn; insilmaril@70: if (!a.value( "href").isEmpty() ) insilmaril@70: { insilmaril@70: // Load note insilmaril@70: fn=parseHREF(a.value ("href") ); insilmaril@70: QFile file (fn); insilmaril@70: QString s; // Reading a note insilmaril@70: insilmaril@70: if ( !file.open( QIODevice::ReadOnly) ) insilmaril@70: { insilmaril@70: qWarning ("parseVYMHandler::readNoteAttr: Couldn't load "+fn); insilmaril@70: return false; insilmaril@70: } insilmaril@70: QTextStream stream( &file ); insilmaril@70: QString lines; insilmaril@70: while ( !stream.atEnd() ) { insilmaril@70: lines += stream.readLine()+"\n"; insilmaril@70: } insilmaril@70: file.close(); insilmaril@70: insilmaril@70: lines =""+lines + "

"; insilmaril@70: no.setNote (lines); insilmaril@70: } insilmaril@70: if (!a.value( "fonthint").isEmpty() ) insilmaril@70: no.setFontHint(a.value ("fonthint") ); insilmaril@70: lastBranch->setNote(no); insilmaril@70: return true; insilmaril@70: } insilmaril@70: insilmaril@70: bool parseVYMHandler::readFloatImageAttr (const QXmlAttributes& a) insilmaril@70: { insilmaril@70: lastOO=lastFloat; insilmaril@70: insilmaril@70: //if (!readOOAttr(a)) return false; insilmaril@70: insilmaril@70: if (!a.value( "useOrientation").isEmpty() ) insilmaril@70: { insilmaril@70: if (a.value ("useOrientation") =="true") insilmaril@70: lastFloat->setUseOrientation (true); insilmaril@70: else insilmaril@70: lastFloat->setUseOrientation (false); insilmaril@70: } insilmaril@70: if (!a.value( "href").isEmpty() ) insilmaril@70: { insilmaril@70: // Load FloatImage insilmaril@70: if (!lastFloat->load (parseHREF(a.value ("href") ) )) insilmaril@70: { insilmaril@70: QMessageBox::warning( 0, "Warning: " , insilmaril@70: "Couldn't load float image\n"+parseHREF(a.value ("href") )); insilmaril@70: lastBranch->removeFloatImage(((FloatImageObj*)(lastFloat))); insilmaril@70: lastFloat=NULL; insilmaril@70: return true; insilmaril@70: } insilmaril@70: insilmaril@70: } insilmaril@70: if (!a.value( "floatExport").isEmpty() ) insilmaril@70: { insilmaril@70: // Only for compatibility. THis is not used since 1.7.11 insilmaril@70: if (a.value ("floatExport") =="true") insilmaril@70: lastFloat->setFloatExport(true); insilmaril@70: else insilmaril@70: lastFloat->setFloatExport (false); insilmaril@70: } insilmaril@70: if (!a.value( "zPlane").isEmpty() ) insilmaril@70: lastFloat->setZValue (a.value("zPlane").toInt ()); insilmaril@70: float x,y; insilmaril@70: bool okx,oky; insilmaril@70: if (!a.value( "relPosX").isEmpty() ) insilmaril@70: { insilmaril@70: if (!a.value( "relPosY").isEmpty() ) insilmaril@70: { insilmaril@70: // read relPos insilmaril@70: x=a.value("relPosX").toFloat (&okx); insilmaril@70: y=a.value("relPosY").toFloat (&oky); insilmaril@70: if (okx && oky) insilmaril@70: insilmaril@70: { insilmaril@70: lastFloat->setRelPos (QPointF (x,y) ); insilmaril@70: // make sure floats in mapcenter are repositioned to relative pos insilmaril@70: if (lastBranch->getDepth()==0) lastBranch->positionContents(); insilmaril@70: } insilmaril@70: else insilmaril@70: // Couldn't read relPos insilmaril@70: return false; insilmaril@70: } insilmaril@70: } insilmaril@70: insilmaril@70: if (!readOOAttr(a)) return false; insilmaril@70: insilmaril@70: if (!a.value ("orgName").isEmpty() ) insilmaril@70: { insilmaril@70: ((FloatImageObj*)(lastFloat))->setOriginalFilename (a.value("orgName")); insilmaril@70: } insilmaril@70: return true; insilmaril@70: } insilmaril@70: insilmaril@70: bool parseVYMHandler::readXLinkAttr (const QXmlAttributes& a) insilmaril@70: { insilmaril@70: QColor col; insilmaril@70: bool okx; insilmaril@70: bool success=false; insilmaril@70: XLinkObj *xlo=new XLinkObj (model->getScene()); insilmaril@70: if (!a.value( "color").isEmpty() ) insilmaril@70: { insilmaril@70: col.setNamedColor(a.value("color")); insilmaril@70: xlo->setColor (col); insilmaril@70: } insilmaril@70: insilmaril@70: if (!a.value( "width").isEmpty() ) insilmaril@70: { insilmaril@70: xlo->setWidth(a.value ("width").toInt (&okx, 10)); insilmaril@70: } insilmaril@70: insilmaril@70: // Connecting by select string for compatibility with version < 1.8.76 insilmaril@70: if (!a.value( "beginBranch").isEmpty() ) insilmaril@70: { insilmaril@70: if (!a.value( "endBranch").isEmpty() ) insilmaril@70: { insilmaril@70: LinkableMapObj *lmo=model->findObjBySelect (a.value( "beginBranch")); insilmaril@70: if (lmo && typeid (*lmo)==typeid (BranchObj)) insilmaril@70: { insilmaril@70: xlo->setBegin ((BranchObj*)lmo); insilmaril@70: lmo=model->findObjBySelect (a.value( "endBranch")); insilmaril@70: if (lmo && typeid (*lmo)==typeid (BranchObj)) insilmaril@70: { insilmaril@70: xlo->setEnd ((BranchObj*)(lmo)); insilmaril@70: xlo->activate(); insilmaril@70: success=true; insilmaril@70: } insilmaril@70: } insilmaril@70: } insilmaril@70: } insilmaril@70: insilmaril@70: // object ID is used starting in version 1.8.76 insilmaril@70: if (!a.value( "beginID").isEmpty() ) insilmaril@70: { insilmaril@70: if (!a.value( "endID").isEmpty() ) insilmaril@70: { insilmaril@70: LinkableMapObj *lmo=model->findID (a.value( "beginID")); insilmaril@70: if (lmo && typeid (*lmo)==typeid (BranchObj)) insilmaril@70: { insilmaril@70: xlo->setBegin ((BranchObj*)lmo); insilmaril@70: lmo=model->findID (a.value( "endID")); insilmaril@70: if (lmo && typeid (*lmo)==typeid (BranchObj)) insilmaril@70: { insilmaril@70: xlo->setEnd ((BranchObj*)(lmo)); insilmaril@70: xlo->activate(); insilmaril@70: success=true; insilmaril@70: } insilmaril@70: } insilmaril@70: } insilmaril@70: } insilmaril@70: if (!success) delete (xlo); insilmaril@70: return true; // xLinks can only be established at the "end branch", return true insilmaril@70: } insilmaril@70: insilmaril@70: bool parseVYMHandler::readHtmlAttr (const QXmlAttributes& a) insilmaril@70: { insilmaril@70: for (int i=1; i<=a.count(); i++) insilmaril@70: htmldata+=" "+a.localName(i-1)+"=\""+a.value(i-1)+"\""; insilmaril@70: return true; insilmaril@70: } insilmaril@70: insilmaril@70: bool parseVYMHandler::readSettingAttr (const QXmlAttributes& a) insilmaril@70: { insilmaril@70: if (!a.value( "key").isEmpty() ) insilmaril@70: { insilmaril@70: if (!a.value( "value").isEmpty() ) insilmaril@70: settings.setLocalEntry (model->getMapEditor()->getDestPath(), a.value ("key"), a.value ("value")); insilmaril@70: else insilmaril@70: return false; insilmaril@70: insilmaril@70: } else insilmaril@70: return false; insilmaril@70: insilmaril@70: return true; insilmaril@70: }