1.1 --- a/mapeditor.cpp Wed May 31 12:27:39 2006 +0000
1.2 +++ b/mapeditor.cpp Tue Sep 05 11:53:54 2006 +0000
1.3 @@ -1,24 +1,34 @@
1.4 #include "mapeditor.h"
1.5
1.6 #include <qstatusbar.h>
1.7 -#include <qmessagebox.h>
1.8 +#include <QMessageBox>
1.9 #include <qapplication.h>
1.10 #include <qpainter.h>
1.11 -#include <qpopupmenu.h>
1.12 +#include <q3popupmenu.h>
1.13 #include <qprinter.h>
1.14 -#include <qpaintdevicemetrics.h>
1.15 -#include <qfile.h>
1.16 -#include <qfiledialog.h>
1.17 -#include <qdir.h>
1.18 -#include <qcolor.h>
1.19 -#include <qcolordialog.h>
1.20 -#include <qbitmap.h>
1.21 -#include <qprocess.h>
1.22 +#include <q3paintdevicemetrics.h>
1.23 +#include <QFile>
1.24 +#include <q3filedialog.h>
1.25 +#include <QDir>
1.26 +#include <QColor>
1.27 +#include <QColorDialog>
1.28 +#include <QBitmap>
1.29 #include <qinputdialog.h>
1.30 -#include <qdragobject.h>
1.31 -#include <qurloperator.h>
1.32 -#include <qnetworkprotocol.h>
1.33 -#include <qregexp.h>
1.34 +#include <q3dragobject.h>
1.35 +#include <q3urloperator.h>
1.36 +#include <q3networkprotocol.h>
1.37 +#include <QRegExp>
1.38 +//Added by qt3to4:
1.39 +#include <QResizeEvent>
1.40 +#include <QContextMenuEvent>
1.41 +#include <Q3StrList>
1.42 +#include <QPixmap>
1.43 +#include <QMouseEvent>
1.44 +#include <QDragEnterEvent>
1.45 +#include <QTextStream>
1.46 +#include <QDropEvent>
1.47 +#include <QActionGroup>
1.48 +#include <Q3PtrList>
1.49
1.50 #include <iostream>
1.51 #include <cstdlib>
1.52 @@ -34,7 +44,6 @@
1.53 #include "linkablemapobj.h"
1.54 #include "mainwindow.h"
1.55 #include "misc.h"
1.56 -#include "settings.h"
1.57 #include "texteditor.h"
1.58 #include "warningdialog.h"
1.59 #include "xml.h"
1.60 @@ -49,10 +58,11 @@
1.61 extern FlagRowObj *systemFlagsDefault;
1.62 extern FlagRowObj *standardFlagsDefault;
1.63
1.64 -extern QPtrList <QAction> actionListBranches;
1.65 +extern Q3PtrList <QAction> actionListBranches;
1.66
1.67 extern QAction *actionFileSave;
1.68 extern QAction *actionEditUndo;
1.69 +extern QAction *actionEditRedo;
1.70 extern QAction *actionEditCopy;
1.71 extern QAction *actionEditCut;
1.72 extern QAction *actionEditPaste;
1.73 @@ -113,44 +123,51 @@
1.74 extern QAction *actionSettingsAutoedit;
1.75 extern QAction *actionSettingsAutoselectHeading;
1.76 extern QAction *actionSettingsAutoselectText;
1.77 -extern QAction *actionSettingsPasteNewHeading;
1.78 extern QAction *actionSettingsUseFlagGroups;
1.79
1.80 -extern QPopupMenu *branchContextMenu;
1.81 -extern QPopupMenu *branchLinksContextMenu;
1.82 -extern QPopupMenu *branchLinksContextMenuDup;
1.83 -extern QPopupMenu *floatimageContextMenu;
1.84 -extern QPopupMenu *saveImageFormatMenu;
1.85 -extern QPopupMenu *exportImageFormatMenu;
1.86 -extern QPopupMenu *canvasContextMenu;
1.87 +extern QMenu* branchContextMenu;
1.88 +extern QMenu* branchAddContextMenu;
1.89 +extern QMenu* branchRemoveContextMenu;
1.90 +extern QMenu* branchLinksContextMenu;
1.91 +extern QMenu* branchXLinksContextMenuEdit;
1.92 +extern QMenu* branchXLinksContextMenuFollow;
1.93 +extern QMenu* floatimageContextMenu;
1.94 +extern QMenu* saveImageFormatMenu;
1.95 +extern QMenu* canvasContextMenu;
1.96 +extern QMenu* lastMapsMenu;
1.97 +extern QMenu* importMenu;
1.98 +extern QMenu* exportMenu;
1.99 +
1.100
1.101 extern Settings settings;
1.102 +extern ImageIO imageIO;
1.103
1.104 extern QString iconPath;
1.105 extern QDir vymBaseDir;
1.106 +extern QDir lastImageDir;
1.107
1.108 int MapEditor::mapNum=0; // make instance
1.109
1.110 ///////////////////////////////////////////////////////////////////////
1.111 ///////////////////////////////////////////////////////////////////////
1.112 MapEditor::MapEditor(
1.113 - QWidget* parent, bool interactive, const char* name, WFlags f) :
1.114 - QCanvasView(parent,name,f), urlOperator(0), imageBuffer(0)
1.115 + QWidget* parent, bool interactive, const char* name, Qt::WFlags f) :
1.116 + Q3CanvasView(parent,name,f), urlOperator(0), imageBuffer(0)
1.117 {
1.118 //cout << "Constructor ME "<<this<<endl;
1.119 mapNum++;
1.120
1.121 viewport()->setAcceptDrops(true);
1.122
1.123 - mapCanvas = new QCanvas(1000,800);
1.124 + mapCanvas = new Q3Canvas(width(),height());
1.125 mapCanvas->setAdvancePeriod(30);
1.126 - mapCanvas->setBackgroundColor (white);
1.127 + mapCanvas->setBackgroundColor (Qt::white);
1.128
1.129 setCanvas (mapCanvas);
1.130
1.131 // Always show scroll bars (automatic would flicker sometimes)
1.132 - setVScrollBarMode ( QScrollView::AlwaysOn );
1.133 - setHScrollBarMode ( QScrollView::AlwaysOn );
1.134 + setVScrollBarMode ( Q3ScrollView::AlwaysOn );
1.135 + setHScrollBarMode ( Q3ScrollView::AlwaysOn );
1.136
1.137 mapCenter = new MapCenterObj(mapCanvas);
1.138 mapCenter->setVisibility (true);
1.139 @@ -160,24 +177,18 @@
1.140
1.141 printer=NULL;
1.142
1.143 - lineedit = new QLineEdit(this, "lineedit" );
1.144 - connect( lineedit, SIGNAL( returnPressed() ), SLOT( finishedLineEdit() ) );
1.145 - lineedit->hide();
1.146 -
1.147 - actColor=black; setColor (actColor);
1.148 + actColor=Qt::black; setColor (actColor);
1.149 defLinkColor=QColor (0,0,255);
1.150 defXLinkColor=QColor (180,180,180);
1.151 linkcolorhint=DefaultColor;
1.152 linkstyle=StylePolyParabel;
1.153
1.154 - // Create bitmap cursors, patform dependant
1.155 + // Create bitmap cursors, platform dependant
1.156 #if defined(Q_OS_MACX)
1.157 - handOpenCursor=QCursor ( QPixmap(iconPath+"cursorhandopen16.png") );
1.158 - // set hot spot to tip of picker
1.159 + handOpenCursor=QCursor ( QPixmap(iconPath+"cursorhandopen16.png"),1,1 );
1.160 pickColorCursor=QCursor ( QPixmap (iconPath+"cursorcolorpicker16.png"), 1,15 );
1.161 #else
1.162 - handOpenCursor=QCursor (QPixmap(iconPath+"cursorhandopen16.png"));
1.163 - // set hot spot to tip of picker
1.164 + handOpenCursor=QCursor (QPixmap(iconPath+"cursorhandopen.png"),1,1);
1.165 pickColorCursor=QCursor ( QPixmap(iconPath+"cursorcolorpicker.png"), 5,27 );
1.166 #endif
1.167
1.168 @@ -190,6 +201,8 @@
1.169 selectionLast=NULL;
1.170 movingObj=NULL;
1.171
1.172 + xelection.setMapCenter (mapCenter);
1.173 +
1.174 defXLinkWidth=1;
1.175 defXLinkColor=QColor (230,230,230);
1.176
1.177 @@ -202,9 +215,7 @@
1.178 fileName=tr("unnamed");
1.179 mapName="";
1.180
1.181 - undosTotal=settings.readNumEntry("/vym/mapeditor/undoLevels",50);
1.182 - undosAvail=0;
1.183 - undoNum=0;
1.184 + undosTotal=settings.readNumEntry("/mapeditor/undoLevels",50);
1.185
1.186 // Initialize find routine
1.187 itFind=NULL;
1.188 @@ -231,6 +242,8 @@
1.189 historyWindow->setCaption (fileName);
1.190
1.191 mapCenter->reposition(); // for positioning heading
1.192 +
1.193 +
1.194 }
1.195
1.196 MapEditor::~MapEditor()
1.197 @@ -244,7 +257,7 @@
1.198 //cout <<"Destructor MapEditor\n";
1.199
1.200 // Save Settings
1.201 - //settings.writeEntry( "/vym/mapeditor/editmode/autoselect", );
1.202 + //settings.writeEntry( "/mapeditor/editmode/autoselect", );
1.203
1.204 }
1.205
1.206 @@ -263,7 +276,7 @@
1.207 return mapCenter;
1.208 }
1.209
1.210 -QCanvas* MapEditor::getCanvas()
1.211 +Q3Canvas* MapEditor::getCanvas()
1.212 {
1.213 return mapCanvas;
1.214 }
1.215 @@ -355,12 +368,13 @@
1.216 void MapEditor::makeTmpDirs()
1.217 {
1.218 // Create unique temporary directories
1.219 - tmpMapDir=tmpVymDir+QString("/mapeditor-%1").arg(mapNum);
1.220 + tmpMapDir=QDir::convertSeparators (tmpVymDir+QString("/mapeditor-%1").arg(mapNum));
1.221 + histPath=QDir::convertSeparators (tmpMapDir+"/history");
1.222 QDir d;
1.223 d.mkdir (tmpMapDir,true);
1.224 }
1.225
1.226 -QString MapEditor::saveToDir(const QString &tmpdir, const QString &prefix, bool writeflags, const QPoint &offset, LinkableMapObj *saveSelection)
1.227 +QString MapEditor::saveToDir(const QString &tmpdir, const QString &prefix, bool writeflags, const QPoint &offset, LinkableMapObj *saveSel)
1.228 {
1.229 // tmpdir temporary directory to which data will be written
1.230 // prefix mapname, which will be appended to images etc.
1.231 @@ -392,7 +406,7 @@
1.232 colhint=attribut("linkColorHint","HeadingColor");
1.233
1.234 QString mapAttr=attribut("version",__VYM_VERSION);
1.235 - if (!saveSelection)
1.236 + if (!saveSel)
1.237 mapAttr+= attribut("author",mapCenter->getAuthor()) +
1.238 attribut("comment",mapCenter->getComment()) +
1.239 attribut("date",mapCenter->getDate()) +
1.240 @@ -412,25 +426,28 @@
1.241 FloatImageObj (mapCanvas).resetSaveCounter();
1.242
1.243 // Build xml recursivly
1.244 - if (!saveSelection)
1.245 + if (!saveSel)
1.246 + // Save complete map, if saveSel not set
1.247 s+=mapCenter->saveToDir(tmpdir,prefix,writeflags,offset);
1.248 else
1.249 {
1.250 - if ( typeid(*saveSelection) == typeid(BranchObj) )
1.251 - s+=((BranchObj*)(saveSelection))->saveToDir(tmpdir,prefix,offset);
1.252 - else if ( typeid(*saveSelection) == typeid(FloatImageObj) )
1.253 - s+=((FloatImageObj*)(saveSelection))->saveToDir(tmpdir,prefix,offset);
1.254 + if ( typeid(*saveSel) == typeid(BranchObj) )
1.255 + // Save Subtree
1.256 + s+=((BranchObj*)(saveSel))->saveToDir(tmpdir,prefix,offset);
1.257 + else if ( typeid(*saveSel) == typeid(FloatImageObj) )
1.258 + // Save image
1.259 + s+=((FloatImageObj*)(saveSel))->saveToDir(tmpdir,prefix,offset);
1.260
1.261 else if (selection && typeid(*selection)==typeid(BranchObj))
1.262 - // This is used if selected branch is saved from mainwindow
1.263 - s+=((BranchObj*)selection)->saveToDir(tmpdir,prefix,offset);
1.264 + // Save selected branch is saved from mainwindow //FIXME maybe use "subtree" above?
1.265 + s+=((BranchObj*)selection)->saveToDir(tmpdir,prefix,offset);
1.266 }
1.267
1.268 // Save local settings
1.269 s+=settings.getXMLData (destPath);
1.270
1.271 // Save selection
1.272 - if (selection && !saveSelection )
1.273 + if (selection && !saveSel )
1.274 s+=valueElement("select",selection->getSelectString());
1.275
1.276 decIndent();
1.277 @@ -441,60 +458,112 @@
1.278 return s;
1.279 }
1.280
1.281 -void MapEditor::saveState(const QString &comment)
1.282 +void MapEditor::saveStateComplete(const QString &comment)
1.283 {
1.284 - // Save complete map
1.285 - saveState (CompleteMap,"",NULL,"",NULL, comment);
1.286 + // Save complete map, Undo will replace whole map
1.287 + saveState (CompleteMap,
1.288 + "", "",
1.289 + "", "",
1.290 + comment,
1.291 + mapCenter);
1.292 }
1.293
1.294 -void MapEditor::saveState(LinkableMapObj *undoSel, const QString &comment)
1.295 +void MapEditor::saveStatePart(LinkableMapObj *undoSel, const QString &comment)
1.296 {
1.297 - // save the given part of the map
1.298 - saveState (PartOfMap,"",undoSel,"",NULL, comment);
1.299 + // save the selected part of the map, Undo will replace part of map
1.300 + QString undoSelection="";
1.301 + if (undoSel) undoSelection=undoSel->getSelectString();
1.302 +
1.303 + saveState (PartOfMap,
1.304 + undoSelection, "",
1.305 + "", "",
1.306 + comment,
1.307 + undoSel);
1.308 }
1.309
1.310 -void MapEditor::saveState(const QString &uc, const QString &rc, const QString &comment)
1.311 +void MapEditor::saveStateConstSelection(const QString &uc, const QString &rc, const QString &comment)
1.312 {
1.313 // selection does not change during action,
1.314 // so just save commands for undo and redo
1.315 - LinkableMapObj *unsel;
1.316 - if (selection)
1.317 - unsel=selection;
1.318 - else
1.319 - unsel=NULL;
1.320 - saveState (UndoCommand,uc,unsel,rc,unsel, comment);
1.321 + // and use current selection
1.322 +
1.323 + QString sel;
1.324 + if (selection) sel=selection->getSelectString();
1.325 +
1.326 + saveState (UndoCommand,
1.327 + sel, uc,
1.328 + sel, rc,
1.329 + comment,
1.330 + NULL);
1.331 }
1.332
1.333 -void MapEditor::saveState(const QString & uncom, LinkableMapObj *unsel, const QString &comment)
1.334 +void MapEditor::saveStateComData(LinkableMapObj *undoSel, const QString &uc, LinkableMapObj *redoSel, const QString &rc, const QString &comment, LinkableMapObj *saveSel)
1.335 {
1.336 - saveState (UndoCommand,uncom,unsel,"FIXME-redoCom",NULL, comment);
1.337 + QString redoSelection="";
1.338 + if (redoSel) redoSelection=redoSel->getSelectString();
1.339 + QString undoSelection="";
1.340 + if (undoSel) undoSelection=undoSel->getSelectString();
1.341 +
1.342 + saveState (UndoCommand,
1.343 + undoSelection, uc,
1.344 + redoSelection, "FIXME-redoCom", //FIXME
1.345 + comment,
1.346 + saveSel);
1.347 }
1.348
1.349 -void MapEditor::saveState(const SaveMode &savemode, const QString &undoCom, LinkableMapObj *undoSel, const QString &redoCom, LinkableMapObj *redoSel, const QString &comment)
1.350 +void MapEditor::saveState(LinkableMapObj *undoSel, const QString &uc, LinkableMapObj *redoSel, const QString &rc, const QString &comment)
1.351 +{
1.352 + // "Normal" savestate: save commands, selections and comment
1.353 + // so just save commands for undo and redo
1.354 + // and use current selection
1.355 +
1.356 + QString redoSelection="";
1.357 + if (redoSel) redoSelection=redoSel->getSelectString();
1.358 + QString undoSelection="";
1.359 + if (undoSel) undoSelection=undoSel->getSelectString();
1.360 +
1.361 + saveState (UndoCommand,
1.362 + undoSelection, uc,
1.363 + redoSelection, rc,
1.364 + comment,
1.365 + NULL);
1.366 +}
1.367 +
1.368 +void MapEditor::saveState(const QString &undoSel, const QString &uc, const QString &redoSel, const QString &rc, const QString &comment)
1.369 +{
1.370 + // "Normal" savestate: save commands, selections and comment
1.371 + // so just save commands for undo and redo
1.372 + // and use current selection
1.373 + saveState (UndoCommand,
1.374 + undoSel, uc,
1.375 + redoSel, rc,
1.376 + comment,
1.377 + NULL);
1.378 +}
1.379 +
1.380 +
1.381 +void MapEditor::saveState(const SaveMode &savemode, const QString &undoSelection, const QString &undoCom, const QString &redoSelection, const QString &redoCom, const QString &comment, LinkableMapObj *saveSel)
1.382 {
1.383 // Main saveState
1.384
1.385 if (blockSaveState) return;
1.386
1.387 /* TODO remove after testing
1.388 - cout << "ME::saveState() begin\n"<<endl;
1.389 - cout << " undosTotal="<<undosTotal<<endl;
1.390 - cout << " undosAvail="<<undosAvail<<endl;
1.391 - cout << " undoNum="<<undoNum<<endl;
1.392 - cout << " ---------------------------"<<endl;
1.393 */
1.394 -
1.395 + cout << "ME::saveState() begin"<<endl;
1.396 historyWindow->append (comment);
1.397
1.398 setChanged();
1.399
1.400 + int undosAvail=undoSet.readNumEntry ("/history/undosAvail",0);
1.401 + int curStep=undoSet.readNumEntry ("/history/curStep",0);
1.402 // Find out current undo directory
1.403 if (undosAvail<undosTotal) undosAvail++;
1.404 - undoNum++;
1.405 - if (undoNum>undosTotal) undoNum=1;
1.406 + curStep++;
1.407 + if (curStep>undosTotal) curStep=1;
1.408
1.409 QString backupXML;
1.410 - QString bakMapDir=QDir::convertSeparators (QString(tmpMapDir+"/undo-%1").arg(undoNum));
1.411 + QString bakMapDir=QDir::convertSeparators (QString(tmpMapDir+"/undo-%1").arg(curStep));
1.412 QString bakMapPath=QDir::convertSeparators(bakMapDir+"/map.xml");
1.413
1.414 // Create bakMapDir if not available
1.415 @@ -502,59 +571,50 @@
1.416 if (!d.exists())
1.417 makeSubDirs (bakMapDir);
1.418
1.419 - // Save current selection
1.420 - QString redoSelection="";
1.421 - if (redoSel)
1.422 - redoSelection=redoSel->getSelectString();
1.423 -
1.424 - // Save the object, which should be undone
1.425 - QString undoSelection="";
1.426 - if (undoSel)
1.427 - undoSelection=undoSel->getSelectString();
1.428 + // Save depending on how much needs to be saved
1.429 + if (!saveSel)
1.430 + backupXML="";
1.431 + else
1.432 + backupXML=saveToDir (bakMapDir,mapName+"-",false, QPoint (),saveSel);
1.433
1.434 - // Save depending on how much needs to be saved
1.435 QString undoCommand="";
1.436 if (savemode==UndoCommand)
1.437 {
1.438 undoCommand=undoCom;
1.439 - backupXML="";
1.440 }
1.441 - else if (savemode==PartOfMap && undoSel)
1.442 + else if (savemode==PartOfMap )
1.443 {
1.444 undoCommand="undoPart (\""+ undoSelection+"\",\""+bakMapPath+"\")";
1.445 - backupXML=saveToDir (bakMapDir,mapName+"-",false, QPoint (),undoSel);
1.446 } else
1.447 {
1.448 undoCommand="undoMap (\""+bakMapPath+"\")";
1.449 - backupXML=saveToDir (bakMapDir,mapName+"-",false, QPoint (),NULL);
1.450 - undoSelection="";
1.451 }
1.452 if (!backupXML.isEmpty())
1.453 // Write XML Data to disk
1.454 saveStringToDisk (QString(bakMapPath),backupXML);
1.455
1.456 - SimpleSettings set;
1.457 - set.setEntry (QString("undoCommand"),undoCommand);
1.458 - set.setEntry (QString("undoSelection"),undoSelection);
1.459 - set.setEntry (QString("redoCommand"),redoCom);
1.460 - set.setEntry (QString("redoSelection"),redoSelection);
1.461 - set.setEntry (QString("comment"),comment);
1.462 - set.writeSettings(QString(bakMapDir+"/commands"));
1.463 + undoSet.setEntry ("/history/undosAvail",QString::number(undosAvail));
1.464 + undoSet.setEntry ("/history/curStep",QString::number(curStep));
1.465 + undoSet.setEntry (QString("/history/step-%1/undoCommand").arg(curStep),undoCommand);
1.466 + undoSet.setEntry (QString("/history/step-%1/undoSelection").arg(curStep),undoSelection);
1.467 + undoSet.setEntry (QString("/history/step-%1/redoCommand").arg(curStep),redoCom);
1.468 + undoSet.setEntry (QString("/history/step-%1/redoSelection").arg(curStep),redoSelection);
1.469 + undoSet.setEntry (QString("/history/step-%1/comment").arg(curStep),comment);
1.470 + undoSet.writeSettings(histPath);
1.471
1.472 /* TODO remove after testing
1.473 - cout << " into="<< bakMapDir<<endl;
1.474 - cout << " undosAvail="<<undosAvail<<endl;
1.475 - cout << " undoNum="<<undoNum<<endl;
1.476 + */
1.477 + //cout << " into="<< histPath.toStdString()<<endl;
1.478 + cout << " undosTotal="<<undosTotal<<
1.479 + ", undosAvail="<<undosAvail<<
1.480 + ", curStep="<<curStep<<endl;
1.481 cout << " ---------------------------"<<endl;
1.482 - cout << " comment="<<comment<<endl;
1.483 + cout << " comment="<<comment.toStdString()<<endl;
1.484 + cout << " undoCom="<<undoCommand.toStdString()<<endl;
1.485 + cout << " undoSel="<<undoSelection.toStdString()<<endl;
1.486 + cout << " redoCom="<<redoCom.toStdString()<<endl;
1.487 + cout << " redoSel="<<redoSelection.toStdString()<<endl;
1.488 cout << " ---------------------------"<<endl;
1.489 - cout << " undoCom="<<undoCommand<<endl;
1.490 - cout << " undoSel="<<undoSelection<<endl;
1.491 - cout << " ---------------------------"<<endl;
1.492 - cout << " redoCom="<<redoCom<<endl;
1.493 - cout << " redoSel="<<redoSelection<<endl;
1.494 - cout << " ---------------------------"<<endl<<endl;
1.495 - */
1.496 }
1.497
1.498 void MapEditor::parseAtom(const QString &atom)
1.499 @@ -585,12 +645,43 @@
1.500 }
1.501 }
1.502 }
1.503 + else if (com=="moveRel")
1.504 + {
1.505 + if (api.checkParamCount(2) && selection )
1.506 + {
1.507 + x=api.parInt (ok,0);
1.508 + if (ok)
1.509 + {
1.510 + y=api.parInt (ok,1);
1.511 + if (ok) moveRel (x,y);
1.512 + }
1.513 + }
1.514 + }
1.515 + else if (com=="delete")
1.516 + {
1.517 + if (api.checkParamCount(1) && selection )
1.518 + {
1.519 + s=api.parString(ok,0);
1.520 + if (ok &&select (s)) deleteSelection();
1.521 + }
1.522 + }
1.523 + else if (com=="addBranch")
1.524 + {
1.525 + if (api.checkParamCount(1) && selection )
1.526 + {
1.527 + y=api.parInt (ok,0);
1.528 + if (ok ) addNewBranchInt (y);
1.529 + }
1.530 + }
1.531 else if (com=="linkBranchToPos")
1.532 {
1.533 if (selection && typeid(*selection) == typeid(BranchObj) )
1.534 {
1.535 if (api.checkParamCount(4))
1.536 {
1.537 + // 0 selectstring of parent
1.538 + // 1 num in parent (for branches)
1.539 + // 2,3 x,y of mainbranch or mapcenter
1.540 s=api.parString(ok,0);
1.541 LinkableMapObj *dst=mapCenter->findObjBySelect (s);
1.542 if (dst)
1.543 @@ -620,23 +711,56 @@
1.544 if (api.checkParamCount(1))
1.545 {
1.546 s=api.parString (ok,0);
1.547 - if (ok) setHeading (s);
1.548 + if (ok)
1.549 + setHeading (s);
1.550 }
1.551 } else if (com=="setURL")
1.552 {
1.553 if (api.checkParamCount(1))
1.554 {
1.555 s=api.parString (ok,0);
1.556 - if (ok) setURL(s);
1.557 + if (ok) setURLInt(s);
1.558 }
1.559 } else if (com=="setVymLink")
1.560 {
1.561 if (api.checkParamCount(1))
1.562 {
1.563 s=api.parString (ok,0);
1.564 - if (ok) setVymLink(s);
1.565 + if (ok) setVymLinkInt(s);
1.566 }
1.567 }
1.568 + else if (com=="setFlag")
1.569 + {
1.570 + if (selection && typeid(*selection) == typeid(BranchObj) )
1.571 + {
1.572 + if (api.checkParamCount(1) )
1.573 + {
1.574 + s=api.parString(ok,0);
1.575 + if (ok)
1.576 + {
1.577 + BranchObj* bo=(BranchObj*)selection;
1.578 + bo->activateStandardFlag(s);
1.579 + bo->updateFlagsToolbar();
1.580 + }
1.581 + }
1.582 + }
1.583 + }
1.584 + else if (com=="unsetFlag")
1.585 + {
1.586 + if (selection && typeid(*selection) == typeid(BranchObj) )
1.587 + {
1.588 + if (api.checkParamCount(1) )
1.589 + {
1.590 + s=api.parString(ok,0);
1.591 + if (ok)
1.592 + {
1.593 + BranchObj* bo=(BranchObj*)selection;
1.594 + bo->deactivateStandardFlag(s);
1.595 + bo->updateFlagsToolbar();
1.596 + }
1.597 + }
1.598 + }
1.599 + }
1.600 // Internal commands, used for undo etc.
1.601 else if (com==QString("undoMap"))
1.602 {
1.603 @@ -646,55 +770,32 @@
1.604 {
1.605 if (api.checkParamCount(2))
1.606 {
1.607 - s=api.parString (ok,0);
1.608 - t=api.parString (ok,1);
1.609 + s=api.parString (ok,0); // undo selection
1.610 + t=api.parString (ok,1); // backup dir
1.611 undoXML(s,t);
1.612 }
1.613 } else if (com=="select")
1.614 + {
1.615 if (api.checkParamCount(1))
1.616 {
1.617 s=api.parString(ok,0);
1.618 if (ok) select (s);
1.619 }
1.620 + }
1.621 else
1.622 {
1.623 api.setError ("Unknown command in: "+atom);
1.624 - cout << "ME::parse api should have error now...\n";
1.625 }
1.626
1.627 // Any errors?
1.628 if (api.error())
1.629 {
1.630 - cout << "MapEditor::parseAtom: Error!\n";
1.631 - cout << " "<<api.errorDesc()<<endl;
1.632 + // TODO Error handling
1.633 + qWarning("MapEditor::parseAtom: Error!");
1.634 + qWarning(api.errorDesc());
1.635 }
1.636 }
1.637
1.638 -
1.639 -void MapEditor::finishedLineEdit()
1.640 -{
1.641 - // This is called by finishedLineEdit or any MapEditor method,
1.642 - // which wants to assure, that lineedits finish, before e.g. a branch is
1.643 - // deleted
1.644 -
1.645 - // After calling LineEdit and using the clipboard, the
1.646 - // focus is not any longer on the main widget, we
1.647 - // have to restore it using parentWidget()->setFocus()
1.648 -
1.649 - if (editingBO!=NULL)
1.650 - {
1.651 - saveState("setHeading (\""+editingBO->getHeading()+"\")",editingBO, QString("Set heading of %1 to \"%2\"").arg(getName(editingBO)).arg(lineedit->text()) );
1.652 - editingBO->setHeading(lineedit->text() );
1.653 - editingBO=NULL;
1.654 - lineedit->releaseKeyboard();
1.655 - lineedit->hide();
1.656 - parentWidget()->setFocus();
1.657 - mapCenter->reposition();
1.658 - adjustCanvasSize();
1.659 - ensureSelectionVisible();
1.660 - }
1.661 -}
1.662 -
1.663 void MapEditor::toggleHistoryWindow()
1.664 {
1.665 if (historyWindow->isVisible())
1.666 @@ -731,9 +832,6 @@
1.667
1.668 void MapEditor::closeMap()
1.669 {
1.670 - // Finish open lineEdits
1.671 - if (lineedit) finishedLineEdit();
1.672 -
1.673 // Unselect before disabling the toolbar actions
1.674 if (selection) selection->unselect();
1.675 selection=NULL;
1.676 @@ -799,9 +897,6 @@
1.677
1.678 ErrorCode MapEditor::load (QString fname, LoadMode lmode)
1.679 {
1.680 - // Finish open lineEdits
1.681 - if (lineedit) finishedLineEdit();
1.682 -
1.683 ErrorCode err=success;
1.684
1.685 if (lmode==NewMap)
1.686 @@ -813,7 +908,7 @@
1.687 // (map state is set later at end of load...)
1.688 } else
1.689 {
1.690 - saveState(selection,"Load map");
1.691 + saveStatePart(selection,"Load map");
1.692 }
1.693
1.694
1.695 @@ -868,9 +963,6 @@
1.696
1.697 int MapEditor::save (const SaveMode &savemode)
1.698 {
1.699 - // Finish open lineEdits
1.700 - if (lineedit) finishedLineEdit();
1.701 -
1.702 int returnCode=0;
1.703
1.704 // The SaveMode UndoCommand is not supported here
1.705 @@ -918,14 +1010,11 @@
1.706
1.707 void MapEditor::print()
1.708 {
1.709 - // Finish open lineEdits
1.710 - if (lineedit) finishedLineEdit();
1.711 -
1.712 if ( !printer )
1.713 {
1.714 printer = new QPrinter;
1.715 printer->setColorMode (QPrinter::Color);
1.716 - printer->setPrinterName (settings.readEntry("/vym/mainwindow/printerName",printer->printerName()));
1.717 + printer->setPrinterName (settings.value("/mainwindow/printerName",printer->printerName()).toString());
1.718 }
1.719
1.720 QRect totalBBox=mapCenter->getTotalBBox();
1.721 @@ -962,15 +1051,15 @@
1.722 // e.g. (0,50,700,700) is upper part on A4
1.723 // see also /usr/lib/qt3/doc/html/coordsys.html
1.724
1.725 - QPaintDeviceMetrics metrics (printer);
1.726 + Q3PaintDeviceMetrics metrics (printer);
1.727
1.728 double paperAspect = (double)metrics.width() / (double)metrics.height();
1.729 double mapAspect = (double)totalBBox.width() / (double)totalBBox.height();
1.730
1.731 QRect mapRect=totalBBox;
1.732 - QCanvasRectangle *frame=NULL;
1.733 - QCanvasText *footerFN=NULL;
1.734 - QCanvasText *footerDate=NULL;
1.735 + Q3CanvasRectangle *frame=NULL;
1.736 + Q3CanvasText *footerFN=NULL;
1.737 + Q3CanvasText *footerDate=NULL;
1.738 if (printFrame || printFooter)
1.739 {
1.740
1.741 @@ -979,9 +1068,9 @@
1.742 // Print frame around map
1.743 mapRect.setRect (totalBBox.x()-10, totalBBox.y()-10,
1.744 totalBBox.width()+20, totalBBox.height()+20);
1.745 - frame=new QCanvasRectangle (mapRect,mapCanvas);
1.746 - frame->setBrush (QColor(white));
1.747 - frame->setPen (QColor(black));
1.748 + frame=new Q3CanvasRectangle (mapRect,mapCanvas);
1.749 + frame->setBrush (QColor(Qt::white));
1.750 + frame->setPen (QColor(Qt::black));
1.751 frame->setZ(0);
1.752 frame->show();
1.753 }
1.754 @@ -998,13 +1087,13 @@
1.755 // Print footer below map
1.756 QFont font;
1.757 font.setPointSize(10);
1.758 - footerFN=new QCanvasText (mapCanvas);
1.759 + footerFN=new Q3CanvasText (mapCanvas);
1.760 footerFN->setText ("VYM - " + fileName);
1.761 footerFN->setFont(font);
1.762 footerFN->move (mapRect.x(), mapRect.y() + mapRect.height() );
1.763 footerFN->setZ(Z_TEXT);
1.764 footerFN->show();
1.765 - footerDate=new QCanvasText (mapCanvas);
1.766 + footerDate=new Q3CanvasText (mapCanvas);
1.767 footerDate->setText (QDate::currentDate().toString(Qt::TextDate));
1.768 footerDate->setFont(font);
1.769 footerDate->move (mapRect.x()+mapRect.width()-footerDate->boundingRect().width(), mapRect.y() + mapRect.height() );
1.770 @@ -1045,7 +1134,7 @@
1.771 }
1.772
1.773 // Save settings in vymrc
1.774 - settings.writeEntry("/vym/mainwindow/printerName",printer->printerName());
1.775 + settings.writeEntry("/mainwindow/printerName",printer->printerName());
1.776 }
1.777 }
1.778
1.779 @@ -1094,9 +1183,6 @@
1.780
1.781 void MapEditor::exportImage(QString fn)
1.782 {
1.783 - // Finish open lineEdits
1.784 - if (lineedit) finishedLineEdit();
1.785 -
1.786 setExportMode (true);
1.787 QPixmap pix (getPixmap());
1.788 pix.save(fn, "PNG");
1.789 @@ -1107,20 +1193,17 @@
1.790 {
1.791 // should be called before and after exports
1.792 // depending on the settings
1.793 - if (b && settings.readEntry("/vym/export/useHideExport","yes"))
1.794 + if (b && settings.value("/export/useHideExport","yes")=="yes")
1.795 setHideTmpMode (HideExport);
1.796 else
1.797 setHideTmpMode (HideNone);
1.798 }
1.799
1.800 -void MapEditor::exportImage(QString fn, int item)
1.801 +void MapEditor::exportImage(QString fn, QString format)
1.802 {
1.803 - // Finish open lineEdits
1.804 - if (lineedit) finishedLineEdit();
1.805 -
1.806 setExportMode (true);
1.807 QPixmap pix (getPixmap());
1.808 - pix.save(fn, exportImageFormatMenu->text(item) );
1.809 + pix.save(fn, format);
1.810 setExportMode (false);
1.811 }
1.812
1.813 @@ -1152,7 +1235,7 @@
1.814 QFile file;
1.815
1.816 file.setName ( dir + "/"+mapName+".xml");
1.817 - if ( !file.open( IO_WriteOnly ) )
1.818 + if ( !file.open( QIODevice::WriteOnly ) )
1.819 {
1.820 // This should neverever happen
1.821 QMessageBox::critical (0,tr("Critical Export Error"),tr("MapEditor::exportXML couldn't open %1").arg(file.name()));
1.822 @@ -1184,9 +1267,6 @@
1.823
1.824 void MapEditor::copy()
1.825 {
1.826 - // Finish open lineEdits
1.827 - if (lineedit) finishedLineEdit();
1.828 -
1.829 if (selection)
1.830 {
1.831 // write to directory
1.832 @@ -1195,7 +1275,7 @@
1.833 QFile file;
1.834
1.835 file.setName ( clipboardDir + "/"+clipfile+".xml");
1.836 - if ( !file.open( IO_WriteOnly ) )
1.837 + if ( !file.open( QIODevice::WriteOnly ) )
1.838 {
1.839 // This should neverever happen
1.840 QMessageBox::critical (0,tr("Critical Export Error"),tr("MapEditor::exportXML couldn't open %1").arg(file.name()));
1.841 @@ -1215,124 +1295,126 @@
1.842
1.843 void MapEditor::redo()
1.844 {
1.845 - // Finish open lineEdits
1.846 - if (lineedit) finishedLineEdit();
1.847 -
1.848 blockSaveState=true;
1.849
1.850 + // Restore variables
1.851 + int curStep=undoSet.readNumEntry (QString("/history/curStep"));
1.852 + int undosAvail=undoSet.readNumEntry (QString("/history/undosAvail"));
1.853 + int redosAvail=undoSet.readNumEntry (QString("/history/redosAvail"));
1.854 + if (redosAvail>0) redosAvail--;
1.855 + if (undosAvail<undosTotal) undosAvail++;
1.856 + curStep++;
1.857 + if (curStep>undosTotal) curStep=1;
1.858 + QString undoCommand= undoSet.readEntry (QString("/history/step-%1/undoCommand").arg(curStep));
1.859 + QString undoSelection=undoSet.readEntry (QString("/history/step-%1/undoSelection").arg(curStep));
1.860 + QString redoCommand= undoSet.readEntry (QString("/history/step-%1/redoCommand").arg(curStep));
1.861 + QString redoSelection=undoSet.readEntry (QString("/history/step-%1/redoSelection").arg(curStep));
1.862 + QString comment=undoSet.readEntry (QString("/history/step-%1/comment").arg(curStep));
1.863 +
1.864 // Find out current undo directory
1.865 - QString bakMapDir=QDir::convertSeparators (QString(tmpMapDir+"/undo-%1").arg(undoNum));
1.866 -
1.867 - // Restore variables
1.868 - QString undoCommand;
1.869 - QString undoSelection;
1.870 - QString redoCommand;
1.871 - QString redoSelection;
1.872 - SimpleSettings set;
1.873 - set.readSettings(QString(bakMapDir+"/commands"));
1.874 - undoCommand=set.readEntry ("undoCommand");
1.875 - undoSelection=set.readEntry ("undoSelection");
1.876 - redoCommand=set.readEntry ("redoCommand");
1.877 - redoSelection=set.readEntry ("redoSelection");
1.878 + QString bakMapDir=QDir::convertSeparators (QString(tmpMapDir+"/undo-%1").arg(curStep));
1.879 +
1.880 +/* TODO remove testing
1.881 +*/
1.882 + cout << "ME::redo() begin\n";
1.883 + cout << " undosAvail="<<undosAvail<<endl;
1.884 + cout << " redosAvail="<<redosAvail<<endl;
1.885 + cout << " curStep="<<curStep<<endl;
1.886 + cout << " ---------------------------"<<endl;
1.887 + cout << " comment="<<comment.toStdString()<<endl;
1.888 + cout << " undoCom="<<undoCommand.toStdString()<<endl;
1.889 + cout << " undoSel="<<undoSelection.toStdString()<<endl;
1.890 + cout << " redoCom="<<redoCommand.toStdString()<<endl;
1.891 + cout << " redoSel="<<redoSelection.toStdString()<<endl;
1.892 + cout << " ---------------------------"<<endl<<endl;
1.893
1.894 // select object before redo
1.895 + // FIXME better give up if no selection there...
1.896 if (!redoSelection.isEmpty())
1.897 select (redoSelection);
1.898
1.899 -/* TODO remove testing
1.900 - cout << "ME::redo() begin\n";
1.901 - cout << " undosTotal="<<undosTotal<<endl;
1.902 - cout << " undosAvail="<<undosAvail<<endl;
1.903 - cout << " undoNum="<<undoNum<<endl;
1.904 - cout << " ---------------------------"<<endl;
1.905 - cout << " undoCom="<<undoCommand<<endl;
1.906 - cout << " undoSel="<<undoSelection<<endl;
1.907 - cout << " ---------------------------"<<endl;
1.908 - cout << " redoCom="<<redoCommand<<endl;
1.909 - cout << " redoSel="<<redoSelection<<endl;
1.910 - cout << " ---------------------------"<<endl;
1.911 +
1.912 + parseAtom (redoCommand);
1.913 + mapCenter->reposition();
1.914 +
1.915 + blockSaveState=false;
1.916 +
1.917 + undoSet.setEntry ("/history/undosAvail",QString::number(undosAvail));
1.918 + undoSet.setEntry ("/history/redosAvail",QString::number(redosAvail));
1.919 + undoSet.setEntry ("/history/curStep",QString::number(curStep));
1.920 + undoSet.writeSettings(histPath);
1.921 +
1.922 + updateActions();
1.923 +
1.924 + /* TODO remove testing
1.925 */
1.926 - parseAtom (undoCommand);
1.927 - mapCenter->reposition();
1.928 -
1.929 - //if (!redoSelection.isEmpty())
1.930 - // select (redoSelection);
1.931 -
1.932 - undosAvail--;
1.933 - if (undosAvail<1)
1.934 - // Undo not longer available now
1.935 - actionEditUndo->setEnabled (false);
1.936 - else
1.937 - undoNum--; if (undoNum<1) undoNum=undosTotal;
1.938 -
1.939 - blockSaveState=false;
1.940 -/* TODO remove testing
1.941 cout << "ME::redo() end\n";
1.942 cout << " undosAvail="<<undosAvail<<endl;
1.943 - cout << " undoNum="<<undoNum<<endl;
1.944 + cout << " redosAvail="<<redosAvail<<endl;
1.945 + cout << " curStep="<<curStep<<endl;
1.946 cout << " ---------------------------"<<endl<<endl;
1.947 -*/
1.948 +
1.949 +
1.950 }
1.951
1.952 void MapEditor::undo()
1.953 {
1.954 - // Finish open lineEdits
1.955 - if (lineedit) finishedLineEdit();
1.956 -
1.957 blockSaveState=true;
1.958
1.959 + // Restore variables
1.960 + int curStep=undoSet.readNumEntry (QString("/history/curStep"));
1.961 + int undosAvail=undoSet.readNumEntry (QString("/history/undosAvail"));
1.962 + int redosAvail=undoSet.readNumEntry (QString("/history/redosAvail"));
1.963 + QString undoCommand= undoSet.readEntry (QString("/history/step-%1/undoCommand").arg(curStep));
1.964 + QString undoSelection=undoSet.readEntry (QString("/history/step-%1/undoSelection").arg(curStep));
1.965 + QString redoCommand= undoSet.readEntry (QString("/history/step-%1/redoCommand").arg(curStep));
1.966 + QString redoSelection=undoSet.readEntry (QString("/history/step-%1/redoSelection").arg(curStep));
1.967 + QString comment=undoSet.readEntry (QString("/history/step-%1/comment").arg(curStep));
1.968 +
1.969 // Find out current undo directory
1.970 - QString bakMapDir=QDir::convertSeparators (QString(tmpMapDir+"/undo-%1").arg(undoNum));
1.971 -
1.972 - // Restore variables
1.973 - QString undoCommand;
1.974 - QString undoSelection;
1.975 - QString redoCommand;
1.976 - QString redoSelection;
1.977 - SimpleSettings set;
1.978 - set.readSettings(QString(bakMapDir+"/commands"));
1.979 - undoCommand= set.readEntry ("undoCommand");
1.980 - undoSelection=set.readEntry ("undoSelection");
1.981 - redoCommand= set.readEntry ("redoCommand");
1.982 - redoSelection=set.readEntry ("redoSelection");
1.983 + QString bakMapDir=QDir::convertSeparators (QString(tmpMapDir+"/undo-%1").arg(curStep));
1.984
1.985 // select object before undo
1.986 if (!undoSelection.isEmpty())
1.987 select (undoSelection);
1.988
1.989 /* TODO testing
1.990 +*/
1.991 cout << "ME::undo() begin\n";
1.992 - cout << " undosTotal="<<undosTotal<<endl;
1.993 cout << " undosAvail="<<undosAvail<<endl;
1.994 - cout << " undoNum="<<undoNum<<endl;
1.995 + cout << " redosAvail="<<redosAvail<<endl;
1.996 + cout << " curStep="<<curStep<<endl;
1.997 cout << " ---------------------------"<<endl;
1.998 - cout << " undoCom="<<undoCommand<<endl;
1.999 - cout << " undoSel="<<undoSelection<<endl;
1.1000 - cout << " ---------------------------"<<endl;
1.1001 - cout << " redoCom="<<redoCommand<<endl;
1.1002 - cout << " redoSel="<<redoSelection<<endl;
1.1003 - cout << " ---------------------------"<<endl;
1.1004 -*/
1.1005 + cout << " comment="<<comment.toStdString()<<endl;
1.1006 + cout << " undoCom="<<undoCommand.toStdString()<<endl;
1.1007 + cout << " undoSel="<<undoSelection.toStdString()<<endl;
1.1008 + cout << " redoCom="<<redoCommand.toStdString()<<endl;
1.1009 + cout << " redoSel="<<redoSelection.toStdString()<<endl;
1.1010 + cout << " ---------------------------"<<endl<<endl;
1.1011 parseAtom (undoCommand);
1.1012 mapCenter->reposition();
1.1013
1.1014 - //if (!redoSelection.isEmpty())
1.1015 - // select (redoSelection);
1.1016 -
1.1017 undosAvail--;
1.1018 - if (undosAvail<1)
1.1019 - // Undo not longer available now
1.1020 - actionEditUndo->setEnabled (false);
1.1021 - else
1.1022 - undoNum--; if (undoNum<1) undoNum=undosTotal;
1.1023 + curStep--;
1.1024 + if (curStep<1) curStep=undosTotal;
1.1025 +
1.1026 + redosAvail++;
1.1027
1.1028 blockSaveState=false;
1.1029 /* TODO remove testing
1.1030 +*/
1.1031 cout << "ME::undo() end\n";
1.1032 cout << " undosAvail="<<undosAvail<<endl;
1.1033 - cout << " undoNum="<<undoNum<<endl;
1.1034 + cout << " redosAvail="<<redosAvail<<endl;
1.1035 + cout << " curStep="<<curStep<<endl;
1.1036 cout << " ---------------------------"<<endl<<endl;
1.1037 -*/
1.1038 +
1.1039 + undoSet.setEntry ("/history/undosAvail",QString::number(undosAvail));
1.1040 + undoSet.setEntry ("/history/redosAvail",QString::number(redosAvail));
1.1041 + undoSet.setEntry ("/history/curStep",QString::number(curStep));
1.1042 + undoSet.writeSettings(histPath);
1.1043 +
1.1044 + updateActions();
1.1045 }
1.1046
1.1047 void MapEditor::undoXML(const QString &undoSel, const QString &bakMapPath)
1.1048 @@ -1383,9 +1465,6 @@
1.1049
1.1050 void MapEditor::pasteNoSave()
1.1051 {
1.1052 - // Finish open lineEdits
1.1053 - if (lineedit) finishedLineEdit();
1.1054 -
1.1055 load (clipboardDir+"/part.xml",ImportAdd);
1.1056 }
1.1057
1.1058 @@ -1400,7 +1479,7 @@
1.1059 if (selection && (typeid(*selection) == typeid(BranchObj) ||
1.1060 typeid(*selection) == typeid(MapCenterObj)))
1.1061 {
1.1062 - saveState(selection,QString("Paste to %1").arg( getName(selection)));
1.1063 + saveStatePart(selection,QString("Paste to %1").arg( getName(selection)));
1.1064 pasteNoSave();
1.1065 mapCenter->reposition();
1.1066 adjustCanvasSize();
1.1067 @@ -1409,7 +1488,7 @@
1.1068
1.1069 void MapEditor::cut()
1.1070 {
1.1071 - saveState(selection->getParObj(),QString("Cut %1").arg(getName(selection)));
1.1072 + saveStatePart(selection->getParObj(),QString("Cut %1").arg(getName(selection)));
1.1073 copy();
1.1074 cutNoSave();
1.1075 mapCenter->reposition();
1.1076 @@ -1418,17 +1497,39 @@
1.1077
1.1078 void MapEditor::move(const int &x, const int &y)
1.1079 {
1.1080 - // TODO no saveState, because this is only internal at undo so far
1.1081 - if (selection) selection->move(x,y);
1.1082 - if (typeid(*selection) == typeid(FloatImageObj))
1.1083 - ((FloatImageObj*)selection)->setRelPos();
1.1084 + if (selection)
1.1085 + {
1.1086 + QString ps=qpointToString (selection->getAbsPos());
1.1087 + QString s=selection->getSelectString();
1.1088 + saveState(
1.1089 + s, "move "+ps,
1.1090 + s, "move "+qpointToString (QPoint (x,y)),
1.1091 + QString("Move %1 to %2").arg(getName(selection)).arg(ps));
1.1092 + selection->move(x,y);
1.1093 + mapCenter->reposition();
1.1094 + adjustCanvasSize();
1.1095 + }
1.1096 +
1.1097 +}
1.1098 +
1.1099 +void MapEditor::moveRel (const int &x, const int &y)
1.1100 +{
1.1101 + if (selection)
1.1102 + {
1.1103 + QString ps=qpointToString (selection->getRelPos());
1.1104 + QString s=selection->getSelectString();
1.1105 + saveState(
1.1106 + s, "moveRel "+ps,
1.1107 + s, "moveRel "+qpointToString (QPoint (x,y)),
1.1108 + QString("Move %1 to relativ position %2").arg(getName(selection)).arg(ps));
1.1109 + selection->setRelPos (QPoint(x,y));
1.1110 + mapCenter->reposition();
1.1111 + adjustCanvasSize();
1.1112 + }
1.1113 }
1.1114
1.1115 void MapEditor::moveBranchUp()
1.1116 {
1.1117 - // Finish open lineEdits
1.1118 - if (lineedit) finishedLineEdit();
1.1119 -
1.1120 BranchObj* bo;
1.1121 BranchObj* par;
1.1122 if (typeid(*selection) == typeid(BranchObj) )
1.1123 @@ -1437,9 +1538,9 @@
1.1124 if (!bo->canMoveBranchUp()) return;
1.1125 par=(BranchObj*)(bo->getParObj());
1.1126 selection->unselect();
1.1127 - selection=par->moveBranchUp (bo);
1.1128 + bo=par->moveBranchUp (bo); // bo will be the one below selection
1.1129 selection->select();
1.1130 - saveState("moveBranchDown ()",bo,QString("Move up %1").arg(getName(bo)));
1.1131 + saveState (selection,"moveBranchDown ()",bo,"moveBranchUp ()",QString("Move up %1").arg(getName(bo)));
1.1132 mapCenter->reposition();
1.1133 ensureSelectionVisible();
1.1134 }
1.1135 @@ -1447,9 +1548,6 @@
1.1136
1.1137 void MapEditor::moveBranchDown()
1.1138 {
1.1139 - // Finish open lineEdits
1.1140 - if (lineedit) finishedLineEdit();
1.1141 -
1.1142 BranchObj* bo;
1.1143 BranchObj* par;
1.1144 if (typeid(*selection) == typeid(BranchObj) )
1.1145 @@ -1458,54 +1556,51 @@
1.1146 if (!bo->canMoveBranchDown()) return;
1.1147 par=(BranchObj*)(bo->getParObj());
1.1148 selection->unselect();
1.1149 - selection=par->moveBranchDown(bo);
1.1150 + bo=par->moveBranchDown(bo); // bo will be the one above selection
1.1151 selection->select();
1.1152 - saveState("moveBranchUp ()",bo,QString("Move down %1").arg(getName(bo)));
1.1153 + saveState(selection,"moveBranchUp ()",bo,"moveBranchDown ()",QString("Move down %1").arg(getName(bo)));
1.1154 mapCenter->reposition();
1.1155 ensureSelectionVisible();
1.1156 }
1.1157 }
1.1158
1.1159 -void MapEditor::editHeading()
1.1160 +QString MapEditor::getHeading(bool &ok, QPoint &p)
1.1161 {
1.1162 - // Finish open lineEdits
1.1163 - if (lineedit) finishedLineEdit();
1.1164 -
1.1165 + if (selection &&
1.1166 + (typeid(*selection) == typeid(BranchObj) ||
1.1167 + typeid(*selection) == typeid(MapCenterObj) ) )
1.1168 + {
1.1169 + ok=true;
1.1170 + ensureSelectionVisible();
1.1171 + p = ((BranchObj*)selection)->getAbsPos();
1.1172 + p.setX (p.x() - contentsX());
1.1173 + p.setY (p.y() - contentsY() + ((BranchObj*)selection)->height()/2);
1.1174 + return ((BranchObj*)selection)->getHeading();
1.1175 + }
1.1176 + ok=false;
1.1177 + return QString();
1.1178 +}
1.1179 +
1.1180 +void MapEditor::setHeading(const QString &s)
1.1181 +{
1.1182 if (selection &&
1.1183 (typeid(*selection) == typeid(BranchObj) ||
1.1184 typeid(*selection) == typeid(MapCenterObj) ) )
1.1185 {
1.1186 editingBO=(BranchObj*)selection;
1.1187 -
1.1188 - ensureSelectionVisible();
1.1189 - QPoint p = worldMatrix().map(QPoint (editingBO->x(),editingBO->y()));
1.1190 - lineedit->setGeometry(p.x()-contentsX(),p.y()-contentsY(),200,25);
1.1191 - QString s=editingBO->getHeading();
1.1192 - lineedit->setText(s);
1.1193 - lineedit->setCursorPosition(1);
1.1194 - if (actionSettingsAutoselectText->isOn() && !s.isEmpty() && actionSettingsPasteNewHeading->isOn() )
1.1195 - lineedit->selectAll();
1.1196 - lineedit->show();
1.1197 - lineedit->grabKeyboard();
1.1198 - lineedit->setFocus();
1.1199 - }
1.1200 -}
1.1201 -
1.1202 -void MapEditor::setHeading(const QString &s)
1.1203 -{
1.1204 - // Internal function, no saveState needed
1.1205 - if (selection &&
1.1206 - (typeid(*selection) == typeid(BranchObj) ||
1.1207 - typeid(*selection) == typeid(MapCenterObj) ) )
1.1208 - {
1.1209 - ((BranchObj*)selection)->setHeading(s);
1.1210 + saveStateConstSelection(
1.1211 + "setHeading (\""+editingBO->getHeading()+"\")",
1.1212 + "setHeading (\""+s+"\")",
1.1213 + QString("Set heading of %1 to \"%2\"").arg(getName(editingBO)).arg(s) );
1.1214 + editingBO->setHeading(s );
1.1215 + editingBO=NULL;
1.1216 mapCenter->reposition();
1.1217 adjustCanvasSize();
1.1218 ensureSelectionVisible();
1.1219 }
1.1220 }
1.1221
1.1222 -void MapEditor::setURL (const QString &s)
1.1223 +void MapEditor::setURLInt (const QString &s)
1.1224 {
1.1225 // Internal function, no saveState needed
1.1226 if (selection &&
1.1227 @@ -1519,7 +1614,20 @@
1.1228 }
1.1229 }
1.1230
1.1231 -void MapEditor::setVymLink (const QString &s)
1.1232 +void MapEditor::setHeadingInt(const QString &s)
1.1233 +{
1.1234 + if (selection &&
1.1235 + (typeid(*selection) == typeid(BranchObj) ||
1.1236 + typeid(*selection) == typeid(MapCenterObj) ) )
1.1237 + {
1.1238 + ((BranchObj*)selection)->setHeading(s);
1.1239 + mapCenter->reposition();
1.1240 + adjustCanvasSize();
1.1241 + ensureSelectionVisible();
1.1242 + }
1.1243 +}
1.1244 +
1.1245 +void MapEditor::setVymLinkInt (const QString &s)
1.1246 {
1.1247 // Internal function, no saveState needed
1.1248 if (selection &&
1.1249 @@ -1533,44 +1641,107 @@
1.1250 }
1.1251 }
1.1252
1.1253 -void MapEditor::addNewBranch(int pos)
1.1254 +BranchObj* MapEditor::addNewBranchInt(int num)
1.1255 {
1.1256 - // Finish open lineEdits
1.1257 - if (lineedit) finishedLineEdit();
1.1258 -
1.1259 + // Depending on pos:
1.1260 + // -3 insert in childs of parent above selection
1.1261 + // -2 add branch to selection
1.1262 + // -1 insert in childs of parent below selection
1.1263 + // 0..n insert in childs of parent at pos
1.1264 + BranchObj *newbo=NULL;
1.1265 if (selection &&
1.1266 (typeid(*selection) == typeid(BranchObj) ||
1.1267 typeid(*selection) == typeid(MapCenterObj) ) )
1.1268 {
1.1269 - BranchObj* bo1 = (BranchObj*) selection;
1.1270 - saveState(selection, QString("Add new branch to %1").arg(getName(bo1))); //TODO undoCommand
1.1271 -
1.1272 - bool wasScrolled=false;
1.1273 - BranchObj *newbo=NULL;
1.1274 - if (pos==0)
1.1275 + BranchObj* bo = (BranchObj*) selection;
1.1276 + if (num==-2)
1.1277 {
1.1278 // save scroll state. If scrolled, automatically select
1.1279 // new branch in order to tmp unscroll parent...
1.1280 - wasScrolled=bo1->isScrolled();
1.1281 - newbo=bo1->addBranch();
1.1282 - } else
1.1283 + return bo->addBranch();
1.1284 +
1.1285 + }else if (num==-1)
1.1286 {
1.1287 - BranchObj *parbo=(BranchObj*)(selection->getParObj());
1.1288 - if (parbo)
1.1289 + num=bo->getNum()+1;
1.1290 + bo=(BranchObj*)bo->getParObj();
1.1291 + }else if (num==-3)
1.1292 + {
1.1293 + num=bo->getNum();
1.1294 + bo=(BranchObj*)bo->getParObj();
1.1295 + }
1.1296 + if (!bo) return bo;
1.1297 + newbo=bo->insertBranch(num);
1.1298 + }
1.1299 + return newbo;
1.1300 +}
1.1301 +
1.1302 +void MapEditor::addNewBranch(int pos)
1.1303 +{
1.1304 + // Different meaning than num in addNewBranchInt!
1.1305 + // -1 add above
1.1306 + // 0 add as child
1.1307 + // +1 add below
1.1308 + if (selection &&
1.1309 + (typeid(*selection) == typeid(BranchObj) ||
1.1310 + typeid(*selection) == typeid(MapCenterObj) ) )
1.1311 + {
1.1312 + BranchObj *bo = (BranchObj*) selection;
1.1313 + BranchObj *newbo;
1.1314 + newbo=addNewBranchInt (pos-2);
1.1315 +
1.1316 + if (newbo)
1.1317 + {
1.1318 + saveStateConstSelection (
1.1319 + QString ("delete (\"%1\")").arg(newbo->getSelectString()),
1.1320 + QString ("addBranch (%1)").arg(pos-2),
1.1321 + QString ("Add new branch to %1").arg(getName(bo))); //TODO undoCommand
1.1322 +
1.1323 + LinkableMapObj *oldselection=selection;
1.1324 +
1.1325 + mapCenter->reposition();
1.1326 + adjustCanvasSize();
1.1327 +
1.1328 +
1.1329 + if (actionSettingsAutoedit->isOn() ||
1.1330 + actionSettingsAutoselectHeading->isOn() )
1.1331 {
1.1332 - if (pos<0)
1.1333 - // add above selection
1.1334 - newbo=parbo->insertBranch(bo1->getNum());
1.1335 - else
1.1336 - // add below selection
1.1337 - newbo=parbo->insertBranch(bo1->getNum()+1);
1.1338 - } else
1.1339 - // This should not happen...
1.1340 - return;
1.1341 -
1.1342 - }
1.1343 + selection->unselect();
1.1344 + selection=newbo;
1.1345 + selection->select();
1.1346 + if (actionSettingsAutoedit->isOn() )
1.1347 + mainWindow->editHeading();
1.1348 + if (!actionSettingsAutoselectHeading->isOn()
1.1349 + )//&& !wasScrolled) //FIXME wasScrolled was moved to addNewBranchInt
1.1350 + {
1.1351 + selection->unselect();
1.1352 + selection=oldselection;
1.1353 + selection->select();
1.1354 + }
1.1355 + }
1.1356 + }
1.1357 + }
1.1358 +}
1.1359 +
1.1360 +
1.1361 +void MapEditor::addNewBranchHere()
1.1362 +{
1.1363 + if (selection &&
1.1364 + (typeid(*selection) == typeid(BranchObj) ) )
1.1365 + {
1.1366 + BranchObj* bo1 = (BranchObj*) selection;
1.1367 + saveStatePart(selection, QString("Add new branch here").arg(getName(bo1)));
1.1368 +
1.1369 + bool wasScrolled=false;
1.1370 + BranchObj *newbo=NULL;
1.1371 + BranchObj *parbo=(BranchObj*)(selection->getParObj());
1.1372 + if (parbo)
1.1373 + {
1.1374 + // add below selection
1.1375 + newbo=parbo->insertBranch(bo1->getNum()+1);
1.1376 + }
1.1377
1.1378 LinkableMapObj *oldselection=selection;
1.1379 + ((BranchObj*)selection)->moveBranchTo (newbo,-1);
1.1380
1.1381 mapCenter->reposition();
1.1382 adjustCanvasSize();
1.1383 @@ -1580,13 +1751,8 @@
1.1384 selection->unselect();
1.1385 selection=newbo;
1.1386 selection->select();
1.1387 - if (actionSettingsPasteNewHeading->isOn() )
1.1388 - {
1.1389 - BranchObj *bo2= (BranchObj*)selection;
1.1390 - bo2->setHeading("");
1.1391 - }
1.1392 if (actionSettingsAutoedit->isOn() )
1.1393 - editHeading();
1.1394 + mainWindow->editHeading();
1.1395 if (!actionSettingsAutoselectHeading->isOn()
1.1396 && !wasScrolled)
1.1397 {
1.1398 @@ -1598,74 +1764,22 @@
1.1399 }
1.1400 }
1.1401
1.1402 -
1.1403 -void MapEditor::addNewBranchHere()
1.1404 -{
1.1405 - // Finish open lineEdits
1.1406 - if (lineedit) finishedLineEdit();
1.1407 -
1.1408 - if (selection &&
1.1409 - (typeid(*selection) == typeid(BranchObj) ) )
1.1410 - {
1.1411 - BranchObj* bo1 = (BranchObj*) selection;
1.1412 - saveState(selection, QString("Add new branch here").arg(getName(bo1)));
1.1413 -
1.1414 - bool wasScrolled=false;
1.1415 - BranchObj *newbo=NULL;
1.1416 - BranchObj *parbo=(BranchObj*)(selection->getParObj());
1.1417 - if (parbo)
1.1418 - {
1.1419 - // add below selection
1.1420 - newbo=parbo->insertBranch(bo1->getNum()+1);
1.1421 - }
1.1422 -
1.1423 - LinkableMapObj *oldselection=selection;
1.1424 - ((BranchObj*)selection)->moveBranchTo (newbo,-1);
1.1425 -
1.1426 - mapCenter->reposition();
1.1427 - adjustCanvasSize();
1.1428 - if (actionSettingsAutoedit->isOn() ||
1.1429 - actionSettingsAutoselectHeading->isOn() )
1.1430 - {
1.1431 - selection->unselect();
1.1432 - selection=newbo;
1.1433 - selection->select();
1.1434 - if (actionSettingsPasteNewHeading->isOn() )
1.1435 - {
1.1436 - BranchObj *bo2= (BranchObj*)selection;
1.1437 - bo2->setHeading("");
1.1438 - }
1.1439 - if (actionSettingsAutoedit->isOn() )
1.1440 - editHeading();
1.1441 - if (!actionSettingsAutoselectHeading->isOn()
1.1442 - && !wasScrolled)
1.1443 - {
1.1444 - selection->unselect();
1.1445 - selection=oldselection;
1.1446 - selection->select();
1.1447 - }
1.1448 - }
1.1449 - }
1.1450 -}
1.1451 -
1.1452 void MapEditor::deleteSelection()
1.1453 {
1.1454 - // Finish open lineEdits
1.1455 - if (lineedit) finishedLineEdit();
1.1456 -
1.1457 if (selection && typeid(*selection) ==typeid(BranchObj) )
1.1458 {
1.1459 - BranchObj* bo=dynamic_cast <BranchObj*> (selection);
1.1460 + BranchObj* bo=(BranchObj*)selection;
1.1461 BranchObj* par=(BranchObj*)(bo->getParObj());
1.1462 bo->unselect();
1.1463 if (selection->getDepth()>1)
1.1464 // Normal branch, save parent with childs
1.1465 - saveState(par,QString("Delete %1").arg(getName(bo)));
1.1466 + saveStatePart(par,QString("Delete %1").arg(getName(bo)));
1.1467 + // naveState (UndoCom, par, QString("insertBranchAt (%1)", bo, "", QString ("Delete %1").arg(getName(bo))));
1.1468 else
1.1469 // Mainbranch, save whole map
1.1470 // TODO Better would be to insert mainbranch again at pos
1.1471 // But undoCommand is missing right now
1.1472 - saveState(QString("Delete %1").arg(getName(bo)));
1.1473 + saveStateComplete(QString("Delete %1").arg(getName(bo)));
1.1474 selection=NULL;
1.1475 par->removeBranch(bo);
1.1476 selection=par;
1.1477 @@ -1676,9 +1790,9 @@
1.1478 }
1.1479 if (selection && typeid(*selection) ==typeid(FloatImageObj) )
1.1480 {
1.1481 - FloatImageObj* fio=dynamic_cast <FloatImageObj*> (selection);
1.1482 + FloatImageObj* fio=(FloatImageObj*)selection;
1.1483 BranchObj* par=(BranchObj*)(fio->getParObj());
1.1484 - saveState(par, QString("Delete %1").arg(getName(fio)));
1.1485 + saveStatePart(par, QString("Delete %1").arg(getName(fio)));
1.1486 fio->unselect();
1.1487 selection=NULL;
1.1488 par->removeFloatImage(fio);
1.1489 @@ -1732,7 +1846,13 @@
1.1490 return false;
1.1491 }
1.1492
1.1493 -void MapEditor::select (LinkableMapObj *lmo)
1.1494 +QString MapEditor::getSelectString()
1.1495 +{
1.1496 + if (selection) return selection->getSelectString();
1.1497 + return QString();
1.1498 +}
1.1499 +
1.1500 +void MapEditor::selectInt (LinkableMapObj *lmo)
1.1501 {
1.1502 if (lmo && selection != lmo)
1.1503 {
1.1504 @@ -1743,10 +1863,9 @@
1.1505
1.1506 adjustCanvasSize();
1.1507 }
1.1508 -
1.1509 }
1.1510
1.1511 -void MapEditor::selectNextBranch()
1.1512 +void MapEditor::selectNextBranchInt()
1.1513 {
1.1514 // Increase number of branch
1.1515 if (selection)
1.1516 @@ -1826,7 +1945,7 @@
1.1517 }
1.1518 }
1.1519
1.1520 -void MapEditor::selectPrevBranch()
1.1521 +void MapEditor::selectPrevBranchInt()
1.1522 {
1.1523 // Decrease number of branch
1.1524 if (selection)
1.1525 @@ -1907,40 +2026,34 @@
1.1526
1.1527 void MapEditor::selectUpperBranch()
1.1528 {
1.1529 - // Finish open lineEdits
1.1530 - if (lineedit) finishedLineEdit();
1.1531 -
1.1532 if (selection)
1.1533 {
1.1534 if (typeid(*selection) == typeid(BranchObj))
1.1535 {
1.1536 if (selection->getOrientation()==OrientRightOfCenter)
1.1537 - selectPrevBranch();
1.1538 + selectPrevBranchInt();
1.1539 else
1.1540 if (selection->getDepth()==1)
1.1541 - selectNextBranch();
1.1542 + selectNextBranchInt();
1.1543 else
1.1544 - selectPrevBranch();
1.1545 + selectPrevBranchInt();
1.1546 }
1.1547 }
1.1548 }
1.1549
1.1550 void MapEditor::selectLowerBranch()
1.1551 {
1.1552 - // Finish open lineEdits
1.1553 - if (lineedit) finishedLineEdit();
1.1554 -
1.1555 if (selection)
1.1556 {
1.1557 if (typeid(*selection) == typeid(BranchObj))
1.1558 {
1.1559 if (selection->getOrientation()==OrientRightOfCenter)
1.1560 - selectNextBranch();
1.1561 + selectNextBranchInt();
1.1562 else
1.1563 if (selection->getDepth()==1)
1.1564 - selectPrevBranch();
1.1565 + selectPrevBranchInt();
1.1566 else
1.1567 - selectNextBranch();
1.1568 + selectNextBranchInt();
1.1569 }
1.1570 }
1.1571 }
1.1572 @@ -1948,9 +2061,6 @@
1.1573
1.1574 void MapEditor::selectLeftBranch()
1.1575 {
1.1576 - // Finish open lineEdits
1.1577 - if (lineedit) finishedLineEdit();
1.1578 -
1.1579 BranchObj* bo;
1.1580 BranchObj* par;
1.1581 if (selection)
1.1582 @@ -2010,9 +2120,6 @@
1.1583
1.1584 void MapEditor::selectRightBranch()
1.1585 {
1.1586 - // Finish open lineEdits
1.1587 - if (lineedit) finishedLineEdit();
1.1588 -
1.1589 BranchObj* bo;
1.1590 BranchObj* par;
1.1591
1.1592 @@ -2024,7 +2131,7 @@
1.1593 bo=par->getLastSelectedBranch();
1.1594 if (bo)
1.1595 {
1.1596 - // Workaround for relecting on left and right side
1.1597 + // Workaround for reselecting on left and right side
1.1598 if (bo->getOrientation()==OrientLeftOfCenter)
1.1599 bo=par->getFirstBranch();
1.1600 if (bo)
1.1601 @@ -2070,9 +2177,6 @@
1.1602
1.1603 void MapEditor::selectFirstBranch()
1.1604 {
1.1605 - // Finish open lineEdits
1.1606 - if (lineedit) finishedLineEdit();
1.1607 -
1.1608 BranchObj *bo1;
1.1609 BranchObj *bo2;
1.1610 BranchObj* par;
1.1611 @@ -2095,9 +2199,6 @@
1.1612
1.1613 void MapEditor::selectLastBranch()
1.1614 {
1.1615 - // Finish open lineEdits
1.1616 - if (lineedit) finishedLineEdit();
1.1617 -
1.1618 BranchObj *bo1;
1.1619 BranchObj *bo2;
1.1620 BranchObj* par;
1.1621 @@ -2125,13 +2226,11 @@
1.1622
1.1623 void MapEditor::selectBackgroundColor()
1.1624 {
1.1625 - // Finish open lineEdits
1.1626 - if (lineedit) finishedLineEdit();
1.1627 -
1.1628 QColor col = QColorDialog::getColor( mapCanvas->backgroundColor(), this );
1.1629 if ( !col.isValid() ) return;
1.1630 setBackgroundColor( col );
1.1631 - saveState(QString("Set background color of map to %1").arg(col.name()));
1.1632 + //TODO undocomm
1.1633 + saveStateComplete(QString("Set background color of map to %1").arg(col.name()));
1.1634 }
1.1635
1.1636 void MapEditor::setBackgroundColor(QColor c)
1.1637 @@ -2161,7 +2260,7 @@
1.1638 typeid(*selection) == typeid(MapCenterObj))
1.1639 {
1.1640 BranchObj *bo=(BranchObj*)selection;
1.1641 - saveState(selection, QString("Set color of %1 to %2").arg(getName(bo)).arg(actColor.name())); //TODO undoCommand
1.1642 + saveStatePart(selection, QString("Set color of %1 to %2").arg(getName(bo)).arg(actColor.name())); //TODO undoCommand
1.1643 bo->setColor(actColor); // color branch
1.1644 }
1.1645 }
1.1646 @@ -2175,7 +2274,7 @@
1.1647 typeid(*selection) == typeid(MapCenterObj))
1.1648 {
1.1649 BranchObj *bo=(BranchObj*)selection;
1.1650 - saveState(selection, QString ("Set color of %1 and childs to %2").arg(getName(bo)).arg(actColor.name())); //TODO undoCommand
1.1651 + saveStatePart(selection, QString ("Set color of %1 and childs to %2").arg(getName(bo)).arg(actColor.name())); //TODO undoCommand
1.1652 bo->setColorChilds(actColor); // color links, color childs
1.1653 }
1.1654 }
1.1655 @@ -2186,15 +2285,27 @@
1.1656 {
1.1657 if (selection)
1.1658 {
1.1659 - BranchObj *bo=(BranchObj*)selection;
1.1660 - QString s;
1.1661 - if (bo->isSetStandardFlag(f))
1.1662 - s="Unset";
1.1663 - else
1.1664 - s="Set";
1.1665 - saveState(selection, QString("%1 standard flag \"%2\" of %3").arg(s).arg(f).arg(getName(bo)));// TODO undoCommand
1.1666 - bo->toggleStandardFlag (f,actionSettingsUseFlagGroups->isOn());
1.1667 - adjustCanvasSize();
1.1668 + if (typeid(*selection) == typeid(BranchObj) ||
1.1669 + typeid(*selection) == typeid(MapCenterObj))
1.1670 + {
1.1671 + BranchObj *bo=(BranchObj*)selection;
1.1672 + QString u,r;
1.1673 + if (bo->isSetStandardFlag(f))
1.1674 + {
1.1675 + r="unsetFlag";
1.1676 + u="setFlag";
1.1677 + }
1.1678 + else
1.1679 + {
1.1680 + u="unsetFlag";
1.1681 + r="setFlag";
1.1682 + }
1.1683 + saveStateConstSelection(QString("%1 (\"%2\")").arg(u).arg(f),
1.1684 + QString("%1 (\"%2\")").arg(r).arg(f),
1.1685 + QString("Toggling standard flag \"%1\" of %2").arg(f).arg(getName(bo)));
1.1686 + bo->toggleStandardFlag (f,actionSettingsUseFlagGroups->isOn());
1.1687 + adjustCanvasSize();
1.1688 + }
1.1689 }
1.1690 }
1.1691
1.1692 @@ -2208,6 +2319,9 @@
1.1693
1.1694 BranchObj* MapEditor::findText (QString s, bool cs)
1.1695 {
1.1696 + QTextDocument::FindFlags flags=0;
1.1697 + if (cs) flags=QTextDocument::FindCaseSensitively;
1.1698 +
1.1699 if (!itFind)
1.1700 { // Nothing found or new find process
1.1701 if (EOFind)
1.1702 @@ -2232,7 +2346,7 @@
1.1703 adjustCanvasSize();
1.1704 ensureSelectionVisible();
1.1705 }
1.1706 - if (textEditor->findText(s,cs))
1.1707 + if (textEditor->findText(s,flags))
1.1708 {
1.1709 searching=false;
1.1710 foundNote=true;
1.1711 @@ -2282,7 +2396,7 @@
1.1712 if ( ok)
1.1713 {
1.1714 // user entered something and pressed OK
1.1715 - saveState("setURL (\""+bo->getURL()+"\")","setURL (\""+text+"\")", QString("Set URL of %1 to %21").arg(getName(bo)).arg(text));
1.1716 + saveStateConstSelection("setURL (\""+bo->getURL()+"\")","setURL (\""+text+"\")", QString("Set URL of %1 to %21").arg(getName(bo)).arg(text));
1.1717 bo->setURL (text);
1.1718 updateActions();
1.1719 }
1.1720 @@ -2298,13 +2412,31 @@
1.1721 return "";
1.1722 }
1.1723
1.1724 +QStringList MapEditor::getURLs()
1.1725 +{
1.1726 + QStringList urls;
1.1727 + if (selection && (typeid(*selection) == typeid(BranchObj) ||
1.1728 + typeid(*selection) == typeid(MapCenterObj)) )
1.1729 + {
1.1730 + BranchObj *bo=(BranchObj*)selection;
1.1731 + bo=bo->first();
1.1732 + while (bo)
1.1733 + {
1.1734 + if (!bo->getURL().isEmpty()) urls.append( bo->getURL());
1.1735 + bo=bo->next();
1.1736 + }
1.1737 + }
1.1738 + return urls;
1.1739 +}
1.1740 +
1.1741 +
1.1742 void MapEditor::editHeading2URL()
1.1743 {
1.1744 if (selection && (typeid(*selection) == typeid(BranchObj) ||
1.1745 typeid(*selection) == typeid(MapCenterObj)) )
1.1746 {
1.1747 BranchObj *bo=(BranchObj*)selection;
1.1748 - saveState("setURL (\""+bo->getURL()+"\")","setURL (\""+bo->getHeading()+"\")",QString("Copy heading of %1 to URL").arg(getName(bo)));
1.1749 + saveStateConstSelection("setURL (\""+bo->getURL()+"\")","setURL (\""+bo->getHeading()+"\")",QString("Copy heading of %1 to URL").arg(getName(bo)));
1.1750 bo->setURL (bo->getHeading());
1.1751 updateActions();
1.1752 }
1.1753 @@ -2317,7 +2449,7 @@
1.1754 {
1.1755 BranchObj *bo=(BranchObj*)selection;
1.1756 QString url= "https://bugzilla.novell.com/show_bug.cgi?id="+bo->getHeading();
1.1757 - saveState("setURL (\""+bo->getURL()+"\")","setURL (\""+url+"\")",QString("Use heading of %1 as link to Novell Bugzilla").arg(getName(bo)));
1.1758 + saveStateConstSelection("setURL (\""+bo->getURL()+"\")","setURL (\""+url+"\")",QString("Use heading of %1 as link to Novell Bugzilla").arg(getName(bo)));
1.1759 bo->setURL (url);
1.1760 updateActions();
1.1761 }
1.1762 @@ -2330,7 +2462,7 @@
1.1763 {
1.1764 BranchObj *bo=(BranchObj*)selection;
1.1765 QString url= "http://keeper.suse.de:8080/webfate/match/id?value=ID"+bo->getHeading();
1.1766 - saveState("setURL (\""+bo->getURL()+"\")","setURL (\""+url+"\")",QString("Use heading of %1 as link to FATE").arg(getName(bo)));
1.1767 + saveStateConstSelection("setURL (\""+bo->getURL()+"\")","setURL (\""+url+"\")",QString("Use heading of %1 as link to FATE").arg(getName(bo)));
1.1768 bo->setURL (url);
1.1769 updateActions();
1.1770 }
1.1771 @@ -2342,7 +2474,7 @@
1.1772 typeid(*selection) == typeid(MapCenterObj)) )
1.1773 {
1.1774 BranchObj *bo=(BranchObj*)selection;
1.1775 - QFileDialog *fd=new QFileDialog( this,__VYM " - " +tr("Link to another map"));
1.1776 + Q3FileDialog *fd=new Q3FileDialog( this,__VYM " - " +tr("Link to another map"));
1.1777 fd->addFilter (QString (tr("vym map") + " (*.vym)"));
1.1778 fd->setCaption(__VYM " - " +tr("Link to another map"));
1.1779 if (! bo->getVymLink().isEmpty() )
1.1780 @@ -2352,7 +2484,7 @@
1.1781 QString fn;
1.1782 if ( fd->exec() == QDialog::Accepted )
1.1783 {
1.1784 - saveState("setVymLink (\""+bo->getVymLink()+"\")","setVymLink (\""+fd->selectedFile()+"\")",QString("Set vymlink of %1 to %2").arg(getName(bo)).arg(fd->selectedFile()));
1.1785 + saveStateConstSelection("setVymLink (\""+bo->getVymLink()+"\")","setVymLink (\""+fd->selectedFile()+"\")",QString("Set vymlink of %1 to %2").arg(getName(bo)).arg(fd->selectedFile()));
1.1786 bo->setVymLink (fd->selectedFile() );
1.1787 updateActions();
1.1788 mapCenter->reposition();
1.1789 @@ -2368,7 +2500,7 @@
1.1790 typeid(*selection) == typeid(MapCenterObj)) )
1.1791 {
1.1792 BranchObj *bo=(BranchObj*)selection;
1.1793 - saveState("setVymLink (\""+bo->getVymLink()+"\")","setVymLink (\"\")",QString("Unset vymlink of %1").arg(getName(bo)));
1.1794 + saveStateConstSelection("setVymLink (\""+bo->getVymLink()+"\")","setVymLink (\"\")",QString("Unset vymlink of %1").arg(getName(bo)));
1.1795 bo->setVymLink ("" );
1.1796 updateActions();
1.1797 mapCenter->reposition();
1.1798 @@ -2396,7 +2528,7 @@
1.1799 oo->setHideInExport(true);
1.1800 s="Set";
1.1801 }
1.1802 - saveState(QString ("%1 hide export flag of %2").arg(s).arg(getName(selection))); //TODO undoCommand
1.1803 + saveStateComplete(QString ("%1 hide export flag of %2").arg(s).arg(getName(selection))); //TODO undoCommand
1.1804 actionEditToggleHideExport->setOn (oo->hideInExport());
1.1805 updateActions();
1.1806 mapCenter->reposition();
1.1807 @@ -2416,6 +2548,24 @@
1.1808
1.1809 }
1.1810
1.1811 +QStringList MapEditor::getVymLinks()
1.1812 +{
1.1813 + QStringList links;
1.1814 + if (selection && (typeid(*selection) == typeid(BranchObj) ||
1.1815 + typeid(*selection) == typeid(MapCenterObj)) )
1.1816 + {
1.1817 + BranchObj *bo=(BranchObj*)selection;
1.1818 + bo=bo->first();
1.1819 + while (bo)
1.1820 + {
1.1821 + if (!bo->getVymLink().isEmpty()) links.append( bo->getVymLink());
1.1822 + bo=bo->next();
1.1823 + }
1.1824 + }
1.1825 + return links;
1.1826 +}
1.1827 +
1.1828 +
1.1829 void MapEditor::removeBranchKeepChilds()
1.1830 {
1.1831 if (selection && (typeid(*selection) == typeid(BranchObj) ))
1.1832 @@ -2424,9 +2574,9 @@
1.1833 BranchObj* par=(BranchObj*)(bo->getParObj());
1.1834 QString s=QString("Remove %1 and keep its childs").arg(getName(bo));
1.1835 if (bo->getDepth()==1)
1.1836 - saveState(s);
1.1837 + saveStateComplete(s);
1.1838 else
1.1839 - saveState(selection->getParObj(),s); // TODO undoCommand
1.1840 + saveStatePart(selection->getParObj(),s); // TODO undoCommand
1.1841 QString sel=selection->getSelectString();
1.1842 unselect();
1.1843 par->removeBranchHere(bo);
1.1844 @@ -2439,7 +2589,7 @@
1.1845 {
1.1846 if (selection && (typeid(*selection) == typeid(BranchObj) ))
1.1847 {
1.1848 - saveState(selection->getParObj(), QString("Remove childs of branch %1").arg(getName(selection)));
1.1849 + saveStatePart(selection->getParObj(), QString("Remove childs of branch %1").arg(getName(selection)));
1.1850 ((BranchObj*)selection)->removeChilds();
1.1851 mapCenter->reposition();
1.1852 }
1.1853 @@ -2455,8 +2605,8 @@
1.1854 // Calc some stats
1.1855 QString stats;
1.1856 int i=0;
1.1857 - QCanvasItemList l=canvas()->allItems();
1.1858 - for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it)
1.1859 + Q3CanvasItemList l=canvas()->allItems();
1.1860 + for (Q3CanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it)
1.1861 i++;
1.1862 stats+=QString ("%1 items on canvas\n").arg (i,6);
1.1863
1.1864 @@ -2483,7 +2633,7 @@
1.1865 // Finally show dialog
1.1866 if (dia.exec() == QDialog::Accepted)
1.1867 {
1.1868 - saveState("Edit info about map"); //TODO undoCommand
1.1869 + saveStateComplete("Edit info about map"); //TODO undoCommand
1.1870 mapCenter->setAuthor (dia.getAuthor() );
1.1871 mapCenter->setComment (dia.getComment() );
1.1872 }
1.1873 @@ -2521,8 +2671,16 @@
1.1874 pix.fill( defLinkColor );
1.1875 actionFormatLinkColor->setIconSet( pix );
1.1876
1.1877 - actionEditUndo->setEnabled( mapChanged );
1.1878 actionFileSave->setEnabled( mapUnsaved );
1.1879 + if (undoSet.readNumEntry("/history/undosAvail",0)>0)
1.1880 + actionEditUndo->setEnabled( true);
1.1881 + else
1.1882 + actionEditUndo->setEnabled( false);
1.1883 +
1.1884 + if (undoSet.readNumEntry("/history/redosAvail",0)>0)
1.1885 + actionEditRedo->setEnabled( true);
1.1886 + else
1.1887 + actionEditRedo->setEnabled( false);
1.1888
1.1889 if (selection)
1.1890 {
1.1891 @@ -2533,17 +2691,14 @@
1.1892 // Take care of links
1.1893 if (bo->countXLinks()==0)
1.1894 {
1.1895 - branchLinksContextMenu->clear();
1.1896 - branchLinksContextMenu->insertItem ("No xLink available");
1.1897 - branchLinksContextMenuDup->clear();
1.1898 - branchLinksContextMenuDup->insertItem ("No xLink available");
1.1899 -
1.1900 + branchXLinksContextMenuEdit->clear();
1.1901 + branchXLinksContextMenuFollow->clear();
1.1902 } else
1.1903 {
1.1904 BranchObj *bot;
1.1905 QString s;
1.1906 - branchLinksContextMenu->clear();
1.1907 - branchLinksContextMenuDup->clear();
1.1908 + branchXLinksContextMenuEdit->clear();
1.1909 + branchXLinksContextMenuFollow->clear();
1.1910 for (int i=0; i<=bo->countXLinks();i++)
1.1911 {
1.1912 bot=bo->XLinkTargetAt(i);
1.1913 @@ -2552,8 +2707,8 @@
1.1914 s=bot->getHeading();
1.1915 if (s.length()>25)
1.1916 s=s.left(25)+"...";
1.1917 - branchLinksContextMenu->insertItem (s);
1.1918 - branchLinksContextMenuDup->insertItem (s);
1.1919 + branchXLinksContextMenuFollow->addAction (s);
1.1920 + branchXLinksContextMenuEdit->addAction (s);
1.1921 }
1.1922 }
1.1923 }
1.1924 @@ -2629,7 +2784,7 @@
1.1925 if ( (typeid(*selection) == typeid(FloatImageObj)) )
1.1926 {
1.1927 FloatObj *fo=(FloatImageObj*)selection;
1.1928 - standardFlagsDefault->setEnabled (false);
1.1929 +//FIXME do this in mainwindow standardFlagsDefault->setEnabled (false);
1.1930
1.1931 actionEditOpenURL->setEnabled (false);
1.1932 actionEditOpenVymLink->setEnabled (false);
1.1933 @@ -2652,7 +2807,7 @@
1.1934
1.1935 } else
1.1936 {
1.1937 - standardFlagsDefault->setEnabled (false);
1.1938 +//FIXME do this in mainwindow standardFlagsDefault->setEnabled (false);
1.1939
1.1940 actionEditCopy->setEnabled (false);
1.1941 actionEditCut->setEnabled (false);
1.1942 @@ -2684,7 +2839,7 @@
1.1943 {
1.1944 linkstyle=ls;
1.1945
1.1946 - saveState("Set link style"); // TODO undoCommand
1.1947 + saveStateComplete("Set link style"); // TODO undoCommand
1.1948 BranchObj *bo;
1.1949 bo=mapCenter->first();
1.1950 bo=bo->next();
1.1951 @@ -2772,13 +2927,10 @@
1.1952
1.1953 void MapEditor::selectLinkColor()
1.1954 {
1.1955 - // Finish open lineEdits
1.1956 - if (lineedit) finishedLineEdit();
1.1957 -
1.1958 QColor col = QColorDialog::getColor( defLinkColor, this );
1.1959 if ( !col.isValid() ) return;
1.1960 setLinkColor( col );
1.1961 - saveState(QString("Set link color to %1").arg(col.name())); //TODO undoCommand
1.1962 + saveStateComplete(QString("Set link color to %1").arg(col.name())); //TODO undoCommand
1.1963
1.1964 }
1.1965
1.1966 @@ -2794,7 +2946,7 @@
1.1967 s="Unscroll";
1.1968 else
1.1969 s="Scroll";
1.1970 - saveState(selection, QString ("%1 %2").arg(s).arg(getName(bo)));
1.1971 + saveStatePart(selection, QString ("%1 %2").arg(s).arg(getName(bo)));
1.1972 bo->toggleScroll();
1.1973 adjustCanvasSize();
1.1974 canvas()->update();
1.1975 @@ -2820,13 +2972,13 @@
1.1976 {
1.1977 BranchObj *bo=((BranchObj*)selection);
1.1978
1.1979 - QFileDialog *fd=new QFileDialog( this);
1.1980 - fd->setMode (QFileDialog::ExistingFiles);
1.1981 + Q3FileDialog *fd=new Q3FileDialog( this);
1.1982 + fd->setMode (Q3FileDialog::ExistingFiles);
1.1983 fd->addFilter (QString (tr("Images") + " (*.png *.bmp *.xbm *.jpg *.png *.xpm *.gif *.pnm)"));
1.1984 ImagePreview *p =new ImagePreview (fd);
1.1985 fd->setContentsPreviewEnabled( TRUE );
1.1986 fd->setContentsPreview( p, p );
1.1987 - fd->setPreviewMode( QFileDialog::Contents );
1.1988 + fd->setPreviewMode( Q3FileDialog::Contents );
1.1989 fd->setCaption(__VYM " - " +tr("Load image"));
1.1990 fd->setDir (lastImageDir);
1.1991 fd->show();
1.1992 @@ -2834,8 +2986,9 @@
1.1993 QString fn;
1.1994 if ( fd->exec() == QDialog::Accepted )
1.1995 {
1.1996 - saveState(selection, QString("Add floatimage to %1").arg(getName(selection)));
1.1997 - lastImageDir=fn.left(fn.findRev ("/"));
1.1998 + saveStatePart(selection, QString("Add floatimage to %1").arg(getName(selection)));
1.1999 + // FIXME in QT4 use: lastImageDir=fd->directory();
1.2000 + lastImageDir=QDir (fd->dirPath());
1.2001 QStringList flist = fd->selectedFiles();
1.2002 QStringList::Iterator it = flist.begin();
1.2003 while( it != flist.end() )
1.2004 @@ -2857,26 +3010,18 @@
1.2005 }
1.2006 }
1.2007
1.2008 -void MapEditor::saveFloatImage (int item)
1.2009 +void MapEditor::saveFloatImage ()
1.2010 {
1.2011 if (selection &&
1.2012 (typeid(*selection) == typeid(FloatImageObj)) )
1.2013 {
1.2014 FloatImageObj *fio=((FloatImageObj*)selection);
1.2015 - const char* fmt = saveImageFormatMenu->text(item);
1.2016 -
1.2017 - QFileDialog *fd=new QFileDialog( this, tr("vym - save image as") + fmt);
1.2018 - fd->addFilter ("PNG (*.png)");
1.2019 - fd->addFilter ("BMP (*.bmp)");
1.2020 - fd->addFilter ("XBM (*.xbm)");
1.2021 - fd->addFilter ("JPG (*.jpg)");
1.2022 - fd->addFilter ("XPM (*.xpm)");
1.2023 - fd->addFilter ("GIF (*.gif)");
1.2024 - fd->addFilter ("PNM (*.pnm)");
1.2025 - fd->addFilter (QString (tr("Images") + " (*.png *.bmp *.xbm *.jpg *.png *.xpm *.gif *.pnm)"));
1.2026 - fd->setCaption(__VYM " - " +tr("Save image as %1").arg(fmt));
1.2027 - fd->setMode( QFileDialog::AnyFile );
1.2028 - fd->setSelection (fio->getOriginalFilename());
1.2029 + QFileDialog *fd=new QFileDialog( this);
1.2030 + fd->setFilters (imageIO.getFilters());
1.2031 + fd->setCaption(__VYM " - " +tr("Save image"));
1.2032 + fd->setFileMode( QFileDialog::AnyFile );
1.2033 + fd->setDirectory (lastImageDir);
1.2034 +// fd->setSelection (fio->getOriginalFilename());
1.2035 fd->show();
1.2036
1.2037 QString fn;
1.2038 @@ -2905,7 +3050,7 @@
1.2039 break;
1.2040 }
1.2041 }
1.2042 - fio->save (fd->selectedFile(),fmt);
1.2043 + fio->save (fd->selectedFile(),imageIO.getType (fd->selectedFilter() ) );
1.2044 }
1.2045 }
1.2046 }
1.2047 @@ -2949,7 +3094,7 @@
1.2048 selection->setHideLinkUnselected(b);
1.2049 }
1.2050
1.2051 -void MapEditor::importDir(BranchObj *dst, QDir d)
1.2052 +void MapEditor::importDirInt(BranchObj *dst, QDir d)
1.2053 {
1.2054 if (selection &&
1.2055 (typeid(*selection) == typeid(BranchObj)) ||
1.2056 @@ -2959,45 +3104,42 @@
1.2057
1.2058 // Traverse directories
1.2059 d.setFilter( QDir::Dirs| QDir::Hidden | QDir::NoSymLinks );
1.2060 - const QFileInfoList *dirlist = d.entryInfoList();
1.2061 - QFileInfoListIterator itdir( *dirlist );
1.2062 - QFileInfo *fi;
1.2063 -
1.2064 - while ( (fi = itdir.current()) != 0 )
1.2065 + QFileInfoList list = d.entryInfoList();
1.2066 + QFileInfo fi;
1.2067 +
1.2068 + for (int i = 0; i < list.size(); ++i)
1.2069 {
1.2070 - if (fi->fileName() != "." && fi->fileName() != ".." )
1.2071 + fi=list.at(i);
1.2072 + if (fi.fileName() != "." && fi.fileName() != ".." )
1.2073 {
1.2074 dst->addBranch();
1.2075 bo=dst->getLastBranch();
1.2076 - bo->setHeading (fi->fileName() );
1.2077 + bo->setHeading (fi.fileName() );
1.2078 bo->setColor (QColor("blue"));
1.2079 bo->toggleScroll();
1.2080 - if ( !d.cd(fi->fileName()) )
1.2081 - QMessageBox::critical (0,tr("Critical Import Error"),tr("Cannot find the directory %1").arg(fi->fileName()));
1.2082 + if ( !d.cd(fi.fileName()) )
1.2083 + QMessageBox::critical (0,tr("Critical Import Error"),tr("Cannot find the directory %1").arg(fi.fileName()));
1.2084 else
1.2085 {
1.2086 // Recursively add subdirs
1.2087 - importDir (bo,d);
1.2088 + importDirInt (bo,d);
1.2089 d.cdUp();
1.2090 }
1.2091 }
1.2092 - ++itdir;
1.2093 }
1.2094 // Traverse files
1.2095 d.setFilter( QDir::Files| QDir::Hidden | QDir::NoSymLinks );
1.2096 - const QFileInfoList *filelist = d.entryInfoList();
1.2097 - QFileInfoListIterator itfile( *filelist );
1.2098 -
1.2099 - while ( (fi = itfile.current()) != 0 )
1.2100 + list = d.entryInfoList();
1.2101 +
1.2102 + for (int i = 0; i < list.size(); ++i)
1.2103 {
1.2104 + fi=list.at(i);
1.2105 dst->addBranch();
1.2106 bo=dst->getLastBranch();
1.2107 - bo->setHeading (fi->fileName() );
1.2108 + bo->setHeading (fi.fileName() );
1.2109 bo->setColor (QColor("black"));
1.2110 - if (fi->fileName().right(4) == ".vym" )
1.2111 - bo->setVymLink (fi->filePath());
1.2112 -
1.2113 - ++itfile;
1.2114 + if (fi.fileName().right(4) == ".vym" )
1.2115 + bo->setVymLink (fi.filePath());
1.2116 }
1.2117 }
1.2118 }
1.2119 @@ -3008,8 +3150,8 @@
1.2120 (typeid(*selection) == typeid(BranchObj)) ||
1.2121 (typeid(*selection) == typeid(MapCenterObj)) )
1.2122 {
1.2123 - QFileDialog *fd=new QFileDialog( this,__VYM " - " +tr("Choose directory structure to import"));
1.2124 - fd->setMode (QFileDialog::DirectoryOnly);
1.2125 + Q3FileDialog *fd=new Q3FileDialog( this,__VYM " - " +tr("Choose directory structure to import"));
1.2126 + fd->setMode (Q3FileDialog::DirectoryOnly);
1.2127 fd->addFilter (QString (tr("vym map") + " (*.vym)"));
1.2128 fd->setCaption(__VYM " - " +tr("Choose directory structure to import"));
1.2129 fd->show();
1.2130 @@ -3018,7 +3160,7 @@
1.2131 if ( fd->exec() == QDialog::Accepted )
1.2132 {
1.2133 BranchObj *bo=((BranchObj*)selection);
1.2134 - importDir (bo,QDir(fd->selectedFile()) );
1.2135 + importDirInt (bo,QDir(fd->selectedFile()) );
1.2136 mapCenter->reposition();
1.2137 adjustCanvasSize();
1.2138 canvas()->update();
1.2139 @@ -3045,6 +3187,7 @@
1.2140
1.2141 void MapEditor::editXLink(int i)
1.2142 {
1.2143 + qDebug ("ko."); //FIXME Huh?
1.2144 if (selection &&
1.2145 (typeid(*selection) == typeid(BranchObj)) ||
1.2146 (typeid(*selection) == typeid(MapCenterObj)) )
1.2147 @@ -3064,7 +3207,7 @@
1.2148 }
1.2149 if (dia.deleteXLink())
1.2150 ((BranchObj*)selection)->deleteXLinkAt(i);
1.2151 - saveState("Edit xLink"); //TODO undoCommand
1.2152 + saveStateComplete("Edit xLink"); //TODO undoCommand
1.2153 }
1.2154 }
1.2155 }
1.2156 @@ -3074,33 +3217,44 @@
1.2157 {
1.2158 cout << "MapEditor::testFunction() called\n";
1.2159
1.2160 - mapCenter->positionBBox();
1.2161 +/*
1.2162 + bool ok;
1.2163 + QString text = QInputDialog::getText(
1.2164 + this,
1.2165 + tr("QInputDialog::getText()"),
1.2166 + tr("User name:"), QLineEdit::Normal,
1.2167 + QDir::home().dirName(), &ok, Qt::FramelessWindowHint);
1.2168 +*/
1.2169 +
1.2170 + QDialog *d =new QDialog(NULL);
1.2171 + QLineEdit *le=new QLineEdit (d);
1.2172 +// d->setModal (true);
1.2173 + d->setWindowFlags (Qt::FramelessWindowHint);
1.2174 + le->setFocus();
1.2175 + le->setText ("Foo");
1.2176 + le->selectAll();
1.2177 + connect (le, SIGNAL (returnPressed()), d, SLOT (accept()));
1.2178 + d->exec();
1.2179 + qWarning( le->text());
1.2180 return;
1.2181 -
1.2182 +
1.2183 +
1.2184 +
1.2185 +/*
1.2186 WarningDialog dia;
1.2187 dia.setCancelButton (true);
1.2188 dia.setText("This is a longer \nWarning");
1.2189 dia.setCaption("Warning: Flux problem");
1.2190 - dia.setShowAgainName("/vym/warnings/mapeditor");
1.2191 + dia.setShowAgainName("/warnings/mapeditor");
1.2192 + dia.setWindowFlags (Qt::FramelessWindowHint);
1.2193 if (dia.exec()==QDialog::Accepted)
1.2194 cout << "accepted!\n";
1.2195 else
1.2196 cout << "canceled!\n";
1.2197 return;
1.2198 -
1.2199 - QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
1.2200 - QProcess *proc = new QProcess( this );
1.2201 - proc->addArgument(ub);
1.2202 -
1.2203 - if ( !proc->start() )
1.2204 - {
1.2205 - QMessageBox::warning(0,
1.2206 - tr("Warning"),
1.2207 - tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
1.2208 - }
1.2209 -
1.2210 -
1.2211 -/*
1.2212 +*/
1.2213 +
1.2214 +/* Hide hidden stuff temporary, maybe add this as regular function somewhere
1.2215 if (hidemode==HideNone)
1.2216 {
1.2217 setHideTmpMode (HideExport);
1.2218 @@ -3199,15 +3353,12 @@
1.2219 void MapEditor::contentsMousePressEvent(QMouseEvent* e)
1.2220 {
1.2221 // Ignore right clicks, these will go to context menus
1.2222 - if (e->button() == QMouseEvent::RightButton )
1.2223 + if (e->button() == Qt::RightButton )
1.2224 {
1.2225 e->ignore();
1.2226 return;
1.2227 }
1.2228
1.2229 - // Finish open lineEdits
1.2230 - if (lineedit) finishedLineEdit();
1.2231 -
1.2232 QPoint p = inverseWorldMatrix().map(e->pos());
1.2233 LinkableMapObj* lmo=mapCenter->findMapObj(p, NULL);
1.2234
1.2235 @@ -3222,10 +3373,10 @@
1.2236 if (!foname.isEmpty())
1.2237 {
1.2238 // systemFlag clicked
1.2239 - select (lmo);
1.2240 + selectInt (lmo);
1.2241 if (foname=="url")
1.2242 {
1.2243 - if (e->state() & QMouseEvent::ControlButton)
1.2244 + if (e->state() & Qt::ControlModifier)
1.2245 mainWindow->editOpenURLTab();
1.2246 else
1.2247 mainWindow->editOpenURL();
1.2248 @@ -3245,7 +3396,7 @@
1.2249 // No system flag clicked, take care of modmodes
1.2250
1.2251 // Special case: CTRL is pressed
1.2252 - if (e->state() & QMouseEvent::ControlButton)
1.2253 + if (e->state() & Qt::ControlModifier)
1.2254 {
1.2255 if (actionModModeColor->isOn())
1.2256 {
1.2257 @@ -3280,19 +3431,20 @@
1.2258 }
1.2259 if (lmo)
1.2260 {
1.2261 - select (lmo);
1.2262 + selectInt (lmo);
1.2263 // Left Button Move Branches
1.2264 - if (e->button() == QMouseEvent::LeftButton )
1.2265 + if (e->button() == Qt::LeftButton )
1.2266 {
1.2267 movingObj_start.setX( p.x() - selection->x() );
1.2268 movingObj_start.setY( p.y() - selection->y() );
1.2269 movingObj_orgPos.setX (lmo->x() );
1.2270 movingObj_orgPos.setY (lmo->y() );
1.2271 + movingObj_orgRelPos=lmo->getRelPos();
1.2272
1.2273 // If modMode==copy, then we want to "move" the _new_ object around
1.2274 // then we need the offset from p to the _old_ selection, because of tmp
1.2275 if (actionModModeCopy->isOn() &&
1.2276 - e->state() & QMouseEvent::ControlButton)
1.2277 + e->state() & Qt::ControlModifier)
1.2278 {
1.2279 if (typeid(*selection)==typeid(BranchObj) )
1.2280 {
1.2281 @@ -3309,13 +3461,13 @@
1.2282 // Middle Button Toggle Scroll
1.2283 // (On Mac OS X this won't work, but we still have
1.2284 // a button in the toolbar)
1.2285 - if (e->button() == QMouseEvent::MidButton )
1.2286 + if (e->button() == Qt::MidButton )
1.2287 toggleScroll();
1.2288 updateActions();
1.2289 } else
1.2290 { // No MapObj found, we are on the Canvas itself
1.2291 // Left Button move Pos of CanvasView
1.2292 - if (e->button() == QMouseEvent::LeftButton )
1.2293 + if (e->button() == Qt::LeftButton )
1.2294 {
1.2295 movingObj=NULL; // move Content not Obj
1.2296 movingObj_start=e->globalPos();
1.2297 @@ -3353,16 +3505,13 @@
1.2298 if (typeid(*selection) == typeid(FloatImageObj))
1.2299 {
1.2300 FloatObj *fo=(FloatObj*)selection;
1.2301 - saveState(
1.2302 - "move "+qpointToString(movingObj_orgPos),fo->getSelectString() ,
1.2303 - QString("Move %1").arg(getName(selection)));
1.2304 fo->move (p.x() -movingObj_start.x(), p.y()-movingObj_start.y() );
1.2305 fo->setRelPos();
1.2306 fo->reposition();
1.2307
1.2308 // Relink float to new mapcenter or branch, if shift is pressed
1.2309 // Only relink, if selection really has a new parent
1.2310 - if ( (e->state() & QMouseEvent::ShiftButton) && lmo &&
1.2311 + if ( (e->state() & Qt::ShiftModifier) && lmo &&
1.2312 ( (typeid(*lmo)==typeid(BranchObj)) ||
1.2313 (typeid(*lmo)==typeid(MapCenterObj)) ) &&
1.2314 ( lmo != fo->getParObj())
1.2315 @@ -3370,7 +3519,8 @@
1.2316 {
1.2317 if (typeid(*fo) == typeid(FloatImageObj))
1.2318 {
1.2319 - saveState(QString("Relink %1 to %2").arg(getName(fo)).arg(getName(lmo) ) );
1.2320 + //TODO undocom
1.2321 + saveStateComplete(QString("Relink %1 to %2").arg(getName(fo)).arg(getName(lmo) ) );
1.2322 FloatImageObj *fio=(FloatImageObj*)(fo);
1.2323 ((BranchObj*)(lmo))->addFloatImage (fio);
1.2324 fio->unselect();
1.2325 @@ -3387,7 +3537,7 @@
1.2326 {
1.2327 if (lmosel->getDepth()==0)
1.2328 {
1.2329 - if (e->state() == (LeftButton | !ShiftButton))
1.2330 + if (e->state() == Qt::LeftButton && e->modifiers()==Qt::ShiftModifier)
1.2331 // If mapCenter is moved, move all the rest by default, too.
1.2332 mapCenter->moveAll(p.x() -movingObj_start.x(), p.y()-movingObj_start.y() );
1.2333 else
1.2334 @@ -3417,12 +3567,12 @@
1.2335 (typeid(*lmo) == typeid(MapCenterObj) )
1.2336 ) )
1.2337 {
1.2338 - if (e->state() & QMouseEvent::ControlButton)
1.2339 + if (e->state() & Qt::ControlModifier)
1.2340 {
1.2341 // Special case: CTRL to link below lmo
1.2342 lmosel->setParObjTmp (lmo,p,+1);
1.2343 }
1.2344 - else if (e->state() & QMouseEvent::ShiftButton)
1.2345 + else if (e->state() & Qt::ShiftModifier)
1.2346 lmosel->setParObjTmp (lmo,p,-1);
1.2347 else
1.2348 lmosel->setParObjTmp (lmo,p,0);
1.2349 @@ -3466,12 +3616,12 @@
1.2350 if (pickingColor)
1.2351 {
1.2352 pickingColor=false;
1.2353 - setCursor (ArrowCursor);
1.2354 + setCursor (Qt::ArrowCursor);
1.2355 // Check if we are over another branch
1.2356 dst=mapCenter->findMapObj(inverseWorldMatrix().map(e->pos() ), NULL);
1.2357 if (dst && selection)
1.2358 {
1.2359 - if (e->state() & QMouseEvent::ShiftButton)
1.2360 + if (e->state() & Qt::ShiftModifier)
1.2361 {
1.2362 ((BranchObj*)selection)->setColor (((BranchObj*)(dst))->getColor());
1.2363 ((BranchObj*)selection)->setLinkColor ();
1.2364 @@ -3496,7 +3646,7 @@
1.2365 tmpXLink->setEnd ( ((BranchObj*)(dst)) );
1.2366 tmpXLink->updateXLink();
1.2367 tmpXLink->activate();
1.2368 - saveState(QString("Activate xLink from %1 to %2").arg(getName(tmpXLink->getBegin())).arg(getName(tmpXLink->getEnd())) ); //TODO undoCommand
1.2369 + saveStateComplete(QString("Activate xLink from %1 to %2").arg(getName(tmpXLink->getBegin())).arg(getName(tmpXLink->getEnd())) ); //TODO undoCommand
1.2370 } else
1.2371 {
1.2372 delete(tmpXLink);
1.2373 @@ -3511,6 +3661,14 @@
1.2374 // Moved FloatObj? Maybe we need to reposition
1.2375 if(typeid(*selection)==typeid (FloatImageObj))
1.2376 {
1.2377 + FloatImageObj *fo=(FloatImageObj*)selection;
1.2378 + QString pold=qpointToString(movingObj_orgRelPos);
1.2379 + QString pnow=qpointToString(fo->getRelPos());
1.2380 + saveStateConstSelection(
1.2381 + "moveRel "+pold,
1.2382 + "moveRel "+pnow,
1.2383 + QString("Move %1 to relativ position %2").arg(getName(selection)).arg(pnow));
1.2384 +
1.2385 selection->getParObj()->requestReposition();
1.2386 mapCenter->reposition();
1.2387 }
1.2388 @@ -3532,41 +3690,64 @@
1.2389 // Reset the temporary drawn link to the original one
1.2390 ((LinkableMapObj*)selection)->unsetParObjTmp();
1.2391
1.2392 + // For Redo we may need to save original selection
1.2393 + QString preSelStr=selection->getSelectString();
1.2394
1.2395 copyingObj=false;
1.2396 if (dst )
1.2397 {
1.2398 - BranchObj* bs=((BranchObj*)selection);
1.2399 + BranchObj* bsel=(BranchObj*)selection;
1.2400 + BranchObj* bdst=(BranchObj*)dst;
1.2401 +
1.2402 + QString preParStr=(bsel->getParObj())->getSelectString();
1.2403 + QString preNum=QString::number (bsel->getNum(),10);
1.2404 + QString preDstParStr;
1.2405 +
1.2406 + if (e->state() & Qt::ShiftModifier && dst->getParObj())
1.2407 + { // Link above dst
1.2408 + preDstParStr=dst->getParObj()->getSelectString();
1.2409 + bsel->moveBranchTo ( (BranchObj*)(bdst->getParObj()), bdst->getNum());
1.2410 + } else
1.2411 + if (e->state() & Qt::ControlModifier && dst->getParObj())
1.2412 + {
1.2413 + // Link below dst
1.2414 + preDstParStr=dst->getParObj()->getSelectString();
1.2415 + bsel->moveBranchTo ( (BranchObj*)(bdst->getParObj()), bdst->getNum()+1);
1.2416 + } else
1.2417 + { // Append to dst
1.2418 + preDstParStr=dst->getSelectString();
1.2419 + bsel->moveBranchTo (bdst,-1);
1.2420 + if (dst->getDepth()==0) bsel->move (savePos);
1.2421 + }
1.2422 + QString postSelStr=selection->getSelectString();
1.2423 + QString postNum=QString::number (bsel->getNum(),10);
1.2424 +
1.2425 QString undoCom="linkBranchToPos (\""+
1.2426 - (bs->getParObj())->getSelectString()+
1.2427 - "\","+
1.2428 - QString("%1").arg(bs->getNum())+
1.2429 - ","+
1.2430 - QString ("%1,%2").arg(movingObj_orgPos.x()).arg(movingObj_orgPos.y())+
1.2431 - ")";
1.2432 - // TODO we also could check, if dest and src are on same branch,
1.2433 - // then it would be sufficient to saveState of this branch
1.2434 -
1.2435 - // Modifiers allow to insert above/below dst
1.2436 - if (e->state() & QMouseEvent::ShiftButton)
1.2437 - {
1.2438 - bs->moveBranchTo ( (BranchObj*)(dst->getParObj()), ((BranchObj*)(dst))->getNum());
1.2439 - } else
1.2440 - if (e->state() & QMouseEvent::ControlButton)
1.2441 - {
1.2442 - bs->moveBranchTo ( (BranchObj*)(dst->getParObj()), ((BranchObj*)(dst))->getNum()+1);
1.2443 - } else
1.2444 - {
1.2445 - bs->moveBranchTo ((BranchObj*)(dst),-1);
1.2446 - if (dst->getDepth()==0)
1.2447 - bs->move (savePos);
1.2448 - }
1.2449 - saveState (undoCom,bs->getSelectString(),QString("Relink %1 to %2").arg(getName(bs)).arg(getName(dst)) );
1.2450 + preParStr+ "\"," + preNum +"," +
1.2451 + QString ("%1,%2").arg(movingObj_orgPos.x()).arg(movingObj_orgPos.y())+ ")";
1.2452 +
1.2453 + QString redoCom="linkBranchToPos (\""+
1.2454 + preDstParStr + "\"," + postNum + "," +
1.2455 + QString ("%1,%2").arg(savePos.x()).arg(savePos.y())+ ")";
1.2456 +
1.2457 + saveState (
1.2458 + postSelStr,undoCom,
1.2459 + preSelStr, redoCom,
1.2460 + QString("Relink %1 to %2").arg(getName(bsel)).arg(getName(dst)) );
1.2461 } else
1.2462 if (selection->getDepth()==1)
1.2463 - // If we have moved mainbranch only save endposition
1.2464 - saveState("move "+qpointToString(movingObj_orgPos), selection->getSelectString(), QString("Move %1 to %2").arg(getName(selection)).arg(qpointToString(movingObj_orgPos)));
1.2465 + {
1.2466 + // The select string might be different _after_ moving around.
1.2467 + // Therefor reposition and then use string of old selection, too
1.2468 + mapCenter->reposition();
1.2469 +
1.2470 + QString ps=qpointToString ( ((BranchObj*)selection)->getRelPos() );
1.2471 + saveState(
1.2472 + selection->getSelectString(), "moveRel "+qpointToString(movingObj_orgRelPos),
1.2473 + preSelStr, "moveRel "+ps,
1.2474 + QString("Move %1 to relative position %2").arg(getName(selection)).arg(ps));
1.2475
1.2476 + }
1.2477 // Draw the original link, before selection was moved around
1.2478 mapCenter->reposition();
1.2479 }
1.2480 @@ -3574,18 +3755,18 @@
1.2481 adjustCanvasSize();
1.2482 canvas()->update();
1.2483 movingObj=NULL;
1.2484 +
1.2485 + // Just make sure, that actions are still ok,e.g. the move branch up/down buttons...
1.2486 + updateActions();
1.2487 } else
1.2488 // maybe we moved View: set old cursor
1.2489 - setCursor (ArrowCursor);
1.2490 + setCursor (Qt::ArrowCursor);
1.2491
1.2492 }
1.2493
1.2494 void MapEditor::contentsMouseDoubleClickEvent(QMouseEvent* e)
1.2495 {
1.2496 - // Finish open lineEdits
1.2497 - if (lineedit) finishedLineEdit();
1.2498 -
1.2499 - if (e->button() == QMouseEvent::LeftButton )
1.2500 + if (e->button() == Qt::LeftButton )
1.2501 {
1.2502 QPoint p = inverseWorldMatrix().map(e->pos());
1.2503 LinkableMapObj *lmo=mapCenter->findMapObj(p, NULL);
1.2504 @@ -3594,14 +3775,14 @@
1.2505 if (selection) selection->unselect();
1.2506 selection=lmo;
1.2507 selection->select();
1.2508 - editHeading();
1.2509 + mainWindow->editHeading();
1.2510 }
1.2511 }
1.2512 }
1.2513
1.2514 void MapEditor::resizeEvent (QResizeEvent* e)
1.2515 {
1.2516 - QCanvasView::resizeEvent( e );
1.2517 + Q3CanvasView::resizeEvent( e );
1.2518 adjustCanvasSize();
1.2519 }
1.2520
1.2521 @@ -3616,7 +3797,7 @@
1.2522 (typeid(*selection) == typeid(MapCenterObj))) {
1.2523
1.2524 // If QImageDrag can decode mime type
1.2525 - if (QImageDrag::canDecode(event)) {
1.2526 + if (Q3ImageDrag::canDecode(event)) {
1.2527 event->accept();
1.2528 return;
1.2529 }
1.2530 @@ -3629,7 +3810,7 @@
1.2531 }
1.2532
1.2533 // If QUriDrag can decode mime type
1.2534 - if (QUriDrag::canDecode(event)) {
1.2535 + if (Q3UriDrag::canDecode(event)) {
1.2536 event->accept();
1.2537 return;
1.2538 }
1.2539 @@ -3641,7 +3822,7 @@
1.2540 }
1.2541
1.2542 // If QTextDrag can decode mime type
1.2543 - if (QTextDrag::canDecode(event)) {
1.2544 + if (Q3TextDrag::canDecode(event)) {
1.2545 event->accept();
1.2546 return;
1.2547 }
1.2548 @@ -3667,12 +3848,12 @@
1.2549 (typeid(*selection) == typeid(MapCenterObj)))
1.2550 {
1.2551 bool update=false;
1.2552 - QStrList uris;
1.2553 + Q3StrList uris;
1.2554 QString heading;
1.2555 if (event->provides("image/png"))
1.2556 {
1.2557 QPixmap pix;
1.2558 - if (QImageDrag::decode(event, pix))
1.2559 + if (Q3ImageDrag::decode(event, pix))
1.2560 {
1.2561 addFloatImage(pix);
1.2562 event->accept();
1.2563 @@ -3691,7 +3872,7 @@
1.2564 update=true;
1.2565 } else if (event->provides ("text/uri-list"))
1.2566 { // Uris provided e.g. by konqueror
1.2567 - QUriDrag::decode (event,uris);
1.2568 + Q3UriDrag::decode (event,uris);
1.2569 } else if (event->provides ("_NETSCAPE_URL"))
1.2570 { // Uris provided by Mozilla
1.2571 QStringList l = QStringList::split("\n", event->encodedData("_NETSCAPE_URL"));
1.2572 @@ -3737,8 +3918,9 @@
1.2573 bo=((BranchObj*)selection)->addBranch();
1.2574 if (bo)
1.2575 {
1.2576 - s=QUriDrag::uriToLocalFile(u);
1.2577 - if (s) {
1.2578 + s=Q3UriDrag::uriToLocalFile(u);
1.2579 + if (!s.isEmpty())
1.2580 + {
1.2581 QString file = QDir::convertSeparators(s);
1.2582 heading = QFileInfo(file).baseName();
1.2583 files.append(file);
1.2584 @@ -3746,12 +3928,13 @@
1.2585 bo->setVymLink(file);
1.2586 else
1.2587 bo->setURL(u);
1.2588 - } else {
1.2589 + } else
1.2590 + {
1.2591 urls.append (u);
1.2592 bo->setURL(u);
1.2593 }
1.2594
1.2595 - if (heading)
1.2596 + if (!heading.isEmpty())
1.2597 bo->setHeading(heading);
1.2598 else
1.2599 bo->setHeading(u);
1.2600 @@ -3763,7 +3946,7 @@
1.2601 if (update)
1.2602 {
1.2603 //FIXME saveState has to be called earlier for each of the drops...
1.2604 - saveState("Drop Event"); //TODO undo Command
1.2605 + saveStateComplete("Drop Event"); //TODO undo Command
1.2606 mapCenter->reposition();
1.2607 adjustCanvasSize();
1.2608 canvas()->update();
1.2609 @@ -3778,7 +3961,7 @@
1.2610 (typeid(*selection) == typeid(MapCenterObj)) )
1.2611 {
1.2612 BranchObj *bo=((BranchObj*)selection);
1.2613 - saveState(selection,QString("Add floatimage to %1").arg(getName(bo)));
1.2614 + saveStatePart(selection,QString("Add floatimage to %1").arg(getName(bo)));
1.2615 //QString fn=fd->selectedFile();
1.2616 //lastImageDir=fn.left(fn.findRev ("/"));
1.2617 bo->addFloatImage();
1.2618 @@ -3792,19 +3975,19 @@
1.2619 }
1.2620
1.2621
1.2622 -void MapEditor::imageDataFetched(const QByteArray &a, QNetworkOperation */*nop*/)
1.2623 +void MapEditor::imageDataFetched(const QByteArray &a, Q3NetworkOperation */*nop*/)
1.2624 {
1.2625 if (!imageBuffer) imageBuffer = new QBuffer();
1.2626 if (!imageBuffer->isOpen()) {
1.2627 - imageBuffer->open(IO_WriteOnly | IO_Append);
1.2628 + imageBuffer->open(QIODevice::WriteOnly | QIODevice::Append);
1.2629 }
1.2630 imageBuffer->at(imageBuffer->at()+imageBuffer->writeBlock(a));
1.2631 }
1.2632
1.2633
1.2634 -void MapEditor::imageDataFinished(QNetworkOperation *nop)
1.2635 +void MapEditor::imageDataFinished(Q3NetworkOperation *nop)
1.2636 {
1.2637 - if (nop->state()==QNetworkProtocol::StDone) {
1.2638 + if (nop->state()==Q3NetworkProtocol::StDone) {
1.2639 QPixmap img(imageBuffer->buffer());
1.2640 addFloatImage(img);
1.2641 }
1.2642 @@ -3827,11 +4010,11 @@
1.2643 delete urlOperator;
1.2644 }
1.2645
1.2646 - urlOperator = new QUrlOperator(url);
1.2647 - connect(urlOperator, SIGNAL(finished(QNetworkOperation *)),
1.2648 - this, SLOT(imageDataFinished(QNetworkOperation*)));
1.2649 -
1.2650 - connect(urlOperator, SIGNAL(data(const QByteArray &, QNetworkOperation *)),
1.2651 - this, SLOT(imageDataFetched(const QByteArray &, QNetworkOperation *)));
1.2652 + urlOperator = new Q3UrlOperator(url);
1.2653 + connect(urlOperator, SIGNAL(finished(Q3NetworkOperation *)),
1.2654 + this, SLOT(imageDataFinished(Q3NetworkOperation*)));
1.2655 +
1.2656 + connect(urlOperator, SIGNAL(data(const QByteArray &, Q3NetworkOperation *)),
1.2657 + this, SLOT(imageDataFetched(const QByteArray &, Q3NetworkOperation *)));
1.2658 urlOperator->get();
1.2659 }