diff -r 39aa64b24375 -r d42881c25fb6 mapeditor.cpp --- a/mapeditor.cpp Mon Oct 30 12:39:37 2006 +0000 +++ b/mapeditor.cpp Thu Nov 16 10:07:11 2006 +0000 @@ -91,13 +91,18 @@ linkstyle=StylePolyParabel; // Create bitmap cursors, platform dependant - #if defined(Q_OS_MACX) - handOpenCursor=QCursor ( QPixmap(iconPath+"cursorhandopen16.png"),1,1 ); - pickColorCursor=QCursor ( QPixmap (iconPath+"cursorcolorpicker16.png"), 1,15 ); - #else - handOpenCursor=QCursor (QPixmap(iconPath+"cursorhandopen.png"),1,1); - pickColorCursor=QCursor ( QPixmap(iconPath+"cursorcolorpicker.png"), 5,27 ); - #endif + // FIXME should now work also on Mac... + //#if defined(Q_OS_MACX) + // HandOpenCursor=QCursor ( QPixmap(iconPath+"cursorhandopen16.png"),1,1 ); + // PickColorCursor=QCursor ( QPixmap (iconPath+"cursorcolorpicker16.png"), 1,15 ); + //#else + HandOpenCursor=QCursor (QPixmap(iconPath+"cursorhandopen.png"),1,1); + PickColorCursor=QCursor ( QPixmap(iconPath+"cursorcolorpicker.png"), 5,27 ); + CopyCursor=QCursor ( QPixmap(iconPath+"cursorcopy.png"), 5,5 ); + XLinkCursor=QCursor ( QPixmap(iconPath+"cursorxlink.png"), 5,27 ); + //#endif + + setFocusPolicy (Qt::StrongFocus); pickingColor=false; drawingLink=false; @@ -122,7 +127,7 @@ fileName=tr("unnamed"); mapName=""; - stepsTotal=settings.readNumEntry("/mapeditor/stepsTotal",50); + stepsTotal=settings.readNumEntry("/mapeditor/stepsTotal",100); undoSet.setEntry ("/history/stepsTotal",QString::number(stepsTotal)); // Initialize find routine @@ -162,11 +167,6 @@ //cout <<"Destructor MapEditor\n"; } -QColor MapEditor::getBackgroundColor() -{ - return mapCanvas->backgroundColor(); -} - MapCenterObj* MapEditor::getMapCenter() { return mapCenter; @@ -304,7 +304,7 @@ colhint=attribut("linkColorHint","HeadingColor"); QString mapAttr=attribut("version",__VYM_VERSION); - if (!saveSel) + if (!saveSel || saveSel==mapCenter) mapAttr+= attribut("author",mapCenter->getAuthor()) + attribut("comment",mapCenter->getComment()) + attribut("date",mapCenter->getDate()) + @@ -324,7 +324,7 @@ FloatImageObj (mapCanvas).resetSaveCounter(); // Build xml recursivly - if (!saveSel) + if (!saveSel || typeid (*saveSel) == typeid (MapCenterObj)) // Save complete map, if saveSel not set s+=mapCenter->saveToDir(tmpdir,prefix,writeflags,offset); else @@ -338,6 +338,7 @@ else if (selection && typeid(*selection)==typeid(BranchObj)) // Save selected branch is saved from mainwindow //FIXME maybe use "subtree" above? + // FIXME is this possible at all? BO is already above... s+=((BranchObj*)selection)->saveToDir(tmpdir,prefix,offset); } @@ -356,16 +357,6 @@ return s; } -void MapEditor::saveStateComplete(const QString &comment) -{ - // Save complete map, Undo will replace whole map - saveState (CompleteMap, - "", "", - "", "", - comment, - mapCenter); -} - void MapEditor::saveStateChangingPart(LinkableMapObj *undoSel, LinkableMapObj* redoSel, const QString &rc, const QString &comment) { // save the selected part of the map, Undo will replace part of map @@ -382,7 +373,7 @@ saveState (PartOfMap, - undoSelection, "", + undoSelection, "addMapReplace (\"PATH\")", redoSelection, rc, comment, undoSel); @@ -397,7 +388,7 @@ } QString undoSelection=redoSel->getParObj()->getSelectString(); QString redoSelection=redoSel->getSelectString(); - if (typeid(*redoSel) == typeid(BranchObj) && redoSel->getDepth()>1 ) + if (typeid(*redoSel) == typeid(BranchObj) ) { // save the selected branch of the map, Undo will insert part of map saveState (PartOfMap, @@ -405,15 +396,6 @@ redoSelection, "delete ()", comment, redoSel); - } else if (typeid(*redoSel) == typeid(BranchObj) ) - { - // save the selected mainbranch of the map, Undo will insert part of map - saveState (PartOfMap, - undoSelection, QString("addMapInsert (\"PATH\",%1)").arg(((BranchObj*)redoSel)->getNum()), - redoSelection, "delete ()", - comment, - redoSel); - } } @@ -467,7 +449,7 @@ curStep++; if (curStep>stepsTotal) curStep=1; - QString backupXML; + QString backupXML=""; QString bakMapName=QDir::convertSeparators (QString("history-%1").arg(curStep)); QString bakMapDir=QDir::convertSeparators (tmpMapDir +"/"+bakMapName); QString bakMapPath=QDir::convertSeparators(bakMapDir+"/map.xml"); @@ -478,9 +460,7 @@ makeSubDirs (bakMapDir); // Save depending on how much needs to be saved - if (!saveSel) - backupXML=""; - else + if (saveSel) backupXML=saveToDir (bakMapDir,mapName+"-",false, QPoint (),saveSel); QString undoCommand=""; @@ -492,10 +472,8 @@ { undoCommand=undoCom; undoCommand.replace ("PATH",bakMapPath); - } else - { - undoCommand="undoMap (\""+bakMapPath+"\")"; } + if (!backupXML.isEmpty()) // Write XML Data to disk saveStringToDisk (QString(bakMapPath),backupXML); @@ -529,6 +507,7 @@ cout << " undoSel="<getSelectString(),t); } } else if (com==QString("addMapInsert")) { @@ -818,6 +797,62 @@ { paste(); } + } else if (com=="select") + { + if (api.checkParamCount(1)) + { + s=api.parString(ok,0); + if (ok) select (s); + } + } else if (com=="setMapAuthor") + { + if (api.checkParamCount(1)) + { + s=api.parString(ok,0); + if (ok) setMapAuthor (s); + } + } else if (com=="setMapComment") + { + if (api.checkParamCount(1)) + { + s=api.parString(ok,0); + if (ok) setMapComment(s); + } + } else if (com=="setMapBackgroundColor") + { + if (!selection) + { + api.setError (Aborted,"Nothing selected"); + } else if ( (typeid(*selection) != typeid(BranchObj) && + typeid(*selection) != typeid(MapCenterObj)) ) + { + api.setError (Aborted,"Type of selection is not a branch"); + } else if (api.checkParamCount(1)) + { + QColor c=api.parColor (ok,0); + if (ok) setMapBackgroundColor (c); + } + } else if (com=="setMapDefLinkColor") + { + if (!selection) + { + api.setError (Aborted,"Nothing selected"); + } else if ( (typeid(*selection) != typeid(BranchObj) && + typeid(*selection) != typeid(MapCenterObj)) ) + { + api.setError (Aborted,"Type of selection is not a branch"); + } else if (api.checkParamCount(1)) + { + QColor c=api.parColor (ok,0); + if (ok) setMapDefLinkColor (c); + } + } else if (com=="setMapLinkStyle") + { + if (api.checkParamCount(1)) + { + s=api.parString (ok,0); + if (ok) setMapLinkStyle(s); + } } else if (com=="setHeading") { if (!selection) @@ -915,20 +950,7 @@ bo->updateFlagsToolbar(); } } - // Internal commands - } else if (com==QString("undoMap")) - { - if (api.checkParamCount(1)) - addMapReplaceInt("",api.parString (ok,0)); - } else if (com=="select") - { - if (api.checkParamCount(1)) - { - s=api.parString(ok,0); - if (ok) select (s); - } - } - else + } else { api.setError (Aborted,"Unknown command"); } @@ -1126,9 +1148,6 @@ { int returnCode=0; - // The SaveMode UndoCommand is not supported here - if (savemode==UndoCommand) return 1; - // Create mapName and fileDir makeSubDirs (fileDir); QString fname; @@ -2454,18 +2473,29 @@ } } -void MapEditor::selectBackgroundColor() +void MapEditor::selectMapBackgroundColor() { QColor col = QColorDialog::getColor( mapCanvas->backgroundColor(), this ); if ( !col.isValid() ) return; setBackgroundColor( col ); - //TODO undocomm - saveStateComplete(QString("Set background color of map to %1").arg(col.name())); } -void MapEditor::setBackgroundColor(QColor c) + +void MapEditor::setMapBackgroundColor(QColor col) { - mapCanvas->setBackgroundColor (c); + QColor oldcol=mapCanvas->backgroundColor(); + saveState( + selection, + QString ("setMapBackgroundColor (%1)").arg(oldcol.name()), + selection, + QString ("setMapBackgroundColor (%1)").arg(col.name()), + QString("Set background color of map to %1").arg(col.name())); + mapCanvas->setBackgroundColor (col); +} + +QColor MapEditor::getMapBackgroundColor() +{ + return mapCanvas->backgroundColor(); } QColor MapEditor::getCurrentHeadingColor() @@ -2492,12 +2522,13 @@ typeid(*selection) == typeid(MapCenterObj)) { BranchObj *bo=(BranchObj*)selection; - saveStateChangingPart( + saveState( selection, + QString ("colorItem (%1)").arg(bo->getColor().name()), selection, QString ("colorItem (%1)").arg(c.name()), QString("Set color of %1 to %2").arg(getName(bo)).arg(c.name()) - ); //TODO with complete API: undoCommand + ); bo->setColor(c); // color branch } } @@ -2918,9 +2949,8 @@ // Finally show dialog if (dia.exec() == QDialog::Accepted) { - saveStateComplete("Edit info about map"); //TODO undoCommand - mapCenter->setAuthor (dia.getAuthor() ); - mapCenter->setComment (dia.getComment() ); + setMapAuthor (dia.getAuthor() ); + setMapComment (dia.getComment() ); } } @@ -2938,11 +2968,48 @@ ((BranchObj*)selection)->updateNoteFlag(); } -void MapEditor::setLinkStyle (LinkStyle ls) +void MapEditor::setMapAuthor (const QString &s) { - linkstyle=ls; - - saveStateComplete("Set link style"); // TODO undoCommand + saveState ( + selection, + QString ("setMapAuthor (\"%1\")").arg(mapCenter->getAuthor()), + selection, + QString ("setMapAuthor (\"%1\")").arg(s), + QString ("Set author of map to \"%1\"").arg(s) + ); + mapCenter->setAuthor (s); +} + +void MapEditor::setMapComment (const QString &s) +{ + saveState ( + selection, + QString ("setMapComment (\"%1\")").arg(mapCenter->getComment()), + selection, + QString ("setMapComment (\"%1\")").arg(s), + QString ("Set comment of map") + ); + mapCenter->setComment (s); +} + +void MapEditor::setMapLinkStyle (const QString & s) +{ + saveStateChangingPart ( + mapCenter, + mapCenter, + QString("setMapLinkStyle (\"%1\")").arg(s), + QString("Set map link style (\"%1\")").arg(s) + ); + + if (s=="StyleLine") + linkstyle=StyleLine; + else if (s=="StyleParabel") + linkstyle=StyleParabel; + else if (s=="StylePolyLine") + linkstyle=StylePolyLine; + else + linkstyle=StylePolyParabel; + BranchObj *bo; bo=mapCenter->first(); bo=bo->next(); @@ -2954,20 +3021,20 @@ mapCenter->reposition(); } -LinkStyle MapEditor::getLinkStyle () +LinkStyle MapEditor::getMapLinkStyle () { return linkstyle; } -void MapEditor::setLinkColor(QColor c) +void MapEditor::setMapDefLinkColor(QColor c) { defLinkColor=c; updateActions(); } -void MapEditor::setLinkColorHint() +void MapEditor::setMapLinkColorHintInt() { - // called from setLinkColorHint(lch) or at end of parse + // called from setMapLinkColorHint(lch) or at end of parse BranchObj *bo; bo=mapCenter->first(); while (bo) @@ -2977,13 +3044,13 @@ } } -void MapEditor::setLinkColorHint(LinkColorHint lch) +void MapEditor::setMapLinkColorHint(LinkColorHint lch) { linkcolorhint=lch; - setLinkColorHint(); + setMapLinkColorHintInt(); } -void MapEditor::toggleLinkColorHint() +void MapEditor::toggleMapLinkColorHint() { if (linkcolorhint==HeadingColor) linkcolorhint=DefaultColor; @@ -2998,42 +3065,48 @@ } } -LinkColorHint MapEditor::getLinkColorHint() +LinkColorHint MapEditor::getMapLinkColorHint() { return linkcolorhint; } -QColor MapEditor::getDefLinkColor() +QColor MapEditor::getMapDefLinkColor() { return defLinkColor; } -void MapEditor::setDefXLinkColor(QColor col) +void MapEditor::setMapDefXLinkColor(QColor col) { defXLinkColor=col; } -QColor MapEditor::getDefXLinkColor() +QColor MapEditor::getMapDefXLinkColor() { return defXLinkColor; } -void MapEditor::setDefXLinkWidth (int w) +void MapEditor::setMapDefXLinkWidth (int w) { defXLinkWidth=w; } -int MapEditor::getDefXLinkWidth() +int MapEditor::getMapDefXLinkWidth() { return defXLinkWidth; } -void MapEditor::selectLinkColor() +void MapEditor::selectMapLinkColor() { QColor col = QColorDialog::getColor( defLinkColor, this ); if ( !col.isValid() ) return; - setLinkColor( col ); - saveStateComplete(QString("Set link color to %1").arg(col.name())); //TODO undoCommand + saveState ( + selection, + QString("setMapDefLinkColor (\"%1\")").arg(getMapDefLinkColor().name()), + selection, + QString("setMapDefLinkColor (\"%1\")").arg(col.name()), + QString("Set link color to %1").arg(col.name()) + ); + setMapDefLinkColor( col ); } @@ -3326,12 +3399,12 @@ { if (dia.useSettingsGlobal() ) { - setDefXLinkColor (xlo->getColor() ); - setDefXLinkWidth (xlo->getWidth() ); + setMapDefXLinkColor (xlo->getColor() ); + setMapDefXLinkWidth (xlo->getWidth() ); } if (dia.deleteXLink()) ((BranchObj*)selection)->deleteXLinkAt(i); - saveStateComplete("Edit xLink"); //TODO undoCommand + //saveStateComplete("Edit xLink"); //FIXME undoCommand } } } @@ -3459,6 +3532,34 @@ e->accept(); } +void MapEditor::keyPressEvent(QKeyEvent* e) +{ + if (e->modifiers() && Qt::ControlModifier) + { + switch (mainWindow->getModMode()) + { + case ModModeColor: + setCursor (PickColorCursor); + break; + case ModModeCopy: + setCursor (CopyCursor); + break; + case ModModeXLink: + setCursor (XLinkCursor); + break; + default : + setCursor (Qt::ArrowCursor); + break; + } + } +} + +void MapEditor::keyReleaseEvent(QKeyEvent* e) +{ + if (!(e->modifiers() && Qt::ControlModifier)) + setCursor (Qt::ArrowCursor); +} + void MapEditor::contentsMousePressEvent(QMouseEvent* e) { // Ignore right clicks, these will go to context menus @@ -3510,7 +3611,7 @@ if (mainWindow->getModMode()==ModModeColor) { pickingColor=true; - setCursor (pickColorCursor); + setCursor (PickColorCursor); return; } if (mainWindow->getModMode()==ModModeXLink) @@ -3582,7 +3683,7 @@ movingObj_start=e->globalPos(); movingCont_start=QPoint (contentsX(), contentsY() ); movingVec=QPoint(0,0); - setCursor(handOpenCursor); + setCursor(HandOpenCursor); } } } @@ -3629,7 +3730,7 @@ if (typeid(*fo) == typeid(FloatImageObj)) { //TODO undocom - saveStateComplete(QString("Relink %1 to %2").arg(getName(fo)).arg(getName(lmo) ) ); + //saveStateComplete(QString("Relink %1 to %2").arg(getName(fo)).arg(getName(lmo) ) ); FloatImageObj *fio=(FloatImageObj*)(fo); ((BranchObj*)(lmo))->addFloatImage (fio); fio->unselect(); @@ -3756,7 +3857,7 @@ tmpXLink->setEnd ( ((BranchObj*)(dst)) ); tmpXLink->updateXLink(); tmpXLink->activate(); - saveStateComplete(QString("Activate xLink from %1 to %2").arg(getName(tmpXLink->getBegin())).arg(getName(tmpXLink->getEnd())) ); //TODO undoCommand + //saveStateComplete(QString("Activate xLink from %1 to %2").arg(getName(tmpXLink->getBegin())).arg(getName(tmpXLink->getEnd())) ); //FIXME undoCommand } else { delete(tmpXLink); @@ -4064,7 +4165,7 @@ if (update) { //FIXME saveState has to be called earlier for each of the drops... - saveStateComplete("Drop Event"); //TODO undo Command + //saveStateComplete("Drop Event"); //TODO undo Command mapCenter->reposition(); adjustCanvasSize(); canvas()->update();