1.1 --- a/aboutdialog.cpp Wed Jul 16 10:44:44 2008 +0000
1.2 +++ b/aboutdialog.cpp Wed Jul 16 10:46:14 2008 +0000
1.3 @@ -54,10 +54,7 @@
1.4 " <ul>"
1.5 " <li>Spanish: <a href=\"http://ieee.udistrital.edu.co/aclibre\">"
1.6 " ACLibre (Academia y Conocimiento Libre)</a> </li>"
1.7 - " <li>French: Philippe Caillaud and Claude </li>"
1.8 - " <li>Italian: Seyed Puria Nafisi Azizi </li>"
1.9 - " <li>Brasilian: Amadeu Júnior</li>"
1.10 - " <li>Russion: Anton Olenev</li>"
1.11 + " <li>French: Philippe Caillaud, Claude ?</li>"
1.12 " </ul>"
1.13 "</li>"
1.14 "<li> Patches"
2.1 --- a/animpoint.cpp Wed Jul 16 10:44:44 2008 +0000
2.2 +++ b/animpoint.cpp Wed Jul 16 10:46:14 2008 +0000
2.3 @@ -88,7 +88,7 @@
2.4
2.5 uint AnimPoint::getTicks()
2.6 {
2.7 - return animTicks;
2.8 + return (uint) animTicks;
2.9 }
2.10
2.11 void AnimPoint::setAnimated(bool b)
2.12 @@ -110,15 +110,13 @@
2.13 {
2.14 vector=QPointF(0,0);
2.15 animated=false;
2.16 + setX (destPos.x() );
2.17 + setY (destPos.y() );
2.18 return animated;
2.19 }
2.20 -
2.21 setX (startPos.x() + vector.x()*sqrt(n/animTicks) );
2.22 setY (startPos.y() + vector.y()*sqrt(n/animTicks) );
2.23 - /*
2.24 - setX (startPos.x() + vector.x()*(n/animTicks) );
2.25 - setY (startPos.y() + vector.y()*(n/animTicks) );
2.26 - */
2.27 +
2.28 return animated;
2.29 }
2.30
3.1 --- a/branchobj.cpp Wed Jul 16 10:44:44 2008 +0000
3.2 +++ b/branchobj.cpp Wed Jul 16 10:46:14 2008 +0000
3.3 @@ -21,7 +21,7 @@
3.4 BranchObj* BranchObj::itFirst=NULL;
3.5
3.6
3.7 -BranchObj::BranchObj () :OrnamentedObj()
3.8 +BranchObj::BranchObj () :OrnamentedObj() // FIXME needed at all?
3.9 {
3.10 // cout << "Const BranchObj ()\n";
3.11 setParObj (this);
3.12 @@ -103,7 +103,7 @@
3.13 branch.clear();
3.14 for (int i=0; i<other->branch.size(); ++i)
3.15 // Make deep copy of b
3.16 - // Because addBranch again calls copy for the childs,
3.17 + // Because addBranch again calls copy for the children,
3.18 // Those will get a deep copy, too
3.19 addBranch(other->branch.at(i) );
3.20
3.21 @@ -214,7 +214,7 @@
3.22 if (off==0)
3.23 {
3.24 // new parent is just a branch, link to it
3.25 - QRectF t=o->getBBoxSizeWithChilds();
3.26 + QRectF t=o->getBBoxSizeWithChildren();
3.27 if (o->getLastBranch())
3.28 y=t.y() + t.height() ;
3.29 else
3.30 @@ -343,10 +343,10 @@
3.31 standardFlags->setVisibility(v);
3.32 LinkableMapObj::setVisibility (v);
3.33
3.34 - // Only change childs, if I am not scrolled
3.35 + // Only change children, if I am not scrolled
3.36 if (!scrolled && (depth < toDepth))
3.37 {
3.38 - // Now go recursivly through all childs
3.39 + // Now go recursivly through all children
3.40 int i;
3.41 for (i=0; i<branch.size(); ++i)
3.42 branch.at(i)->setVisibility (v,toDepth);
3.43 @@ -370,9 +370,9 @@
3.44 // Overloaded from LinkableMapObj
3.45 // BranchObj can use color of heading
3.46
3.47 - if (mapEditor)
3.48 + if (model)
3.49 {
3.50 - if (mapEditor->getMapLinkColorHint()==HeadingColor)
3.51 + if (model->getMapLinkColorHint()==HeadingColor)
3.52 LinkableMapObj::setLinkColor (heading->getColor() );
3.53 else
3.54 LinkableMapObj::setLinkColor ();
3.55 @@ -409,13 +409,13 @@
3.56 // no itLast, we are just beginning
3.57 if (bo)
3.58 {
3.59 - // we have childs, return first one
3.60 + // we have children, return first one
3.61 itLast=this;
3.62 return bo;
3.63 }
3.64 else
3.65 {
3.66 - // No childs, so there is no next
3.67 + // No children, so there is no next
3.68 itLast=this;
3.69 return NULL;
3.70 }
3.71 @@ -426,12 +426,12 @@
3.72 { // We come from parent
3.73 if (bo)
3.74 {
3.75 - // there are childs, go there
3.76 + // there are children, go there
3.77 itLast=this;
3.78 return bo;
3.79 }
3.80 else
3.81 - { // no childs, try to go up again
3.82 + { // no children, try to go up again
3.83 if (po)
3.84 {
3.85 // go back to parent and try to find next there
3.86 @@ -450,17 +450,17 @@
3.87 }
3.88 }
3.89
3.90 - // We don't come from parent, but from brother or childs
3.91 + // We don't come from parent, but from brother or children
3.92
3.93 - // Try to find last child, where we came from, in my own childs
3.94 + // Try to find last child, where we came from, in my own children
3.95 bool searching=true;
3.96 int i=0;
3.97 while (i<branch.size())
3.98 {
3.99 - // Try to find itLast in my own childs
3.100 + // Try to find itLast in my own children
3.101 if (itLast==branch.at(i))
3.102 {
3.103 - // ok, we come from my own childs
3.104 + // ok, we come from my own children
3.105 if (i<branch.size()-1)
3.106 bo=branch.at(i+1);
3.107 else
3.108 @@ -471,7 +471,7 @@
3.109 ++i;
3.110 }
3.111 if (!searching)
3.112 - { // found itLast in my childs
3.113 + { // found itLast in my children
3.114 if (bo)
3.115 {
3.116 // found a brother of lastLMO
3.117 @@ -756,7 +756,7 @@
3.118 hidden=false;
3.119 }
3.120
3.121 - // And take care of my childs
3.122 + // And take care of my children
3.123 for (int i=0; i<branch.size(); ++i)
3.124 branch.at(i)->setHideTmp (mode);
3.125 }
3.126 @@ -1114,7 +1114,7 @@
3.127 void BranchObj::removeBranchHere(BranchObj* borem)
3.128 {
3.129 // This removes the branch bo from list, but
3.130 - // inserts its childs at the place of bo
3.131 + // inserts its children at the place of bo
3.132 BranchObj *bo;
3.133 bo=borem->getLastBranch();
3.134 int pos=borem->getNum();
3.135 @@ -1126,7 +1126,7 @@
3.136 removeBranch (borem);
3.137 }
3.138
3.139 -void BranchObj::removeChilds()
3.140 +void BranchObj::removeChildren()
3.141 {
3.142 clear();
3.143 }
3.144 @@ -1302,7 +1302,7 @@
3.145 }
3.146 }
3.147
3.148 -void BranchObj::alignRelativeTo (QPointF ref)
3.149 +void BranchObj::alignRelativeTo (QPointF ref,bool alignSelf)
3.150 {
3.151 qreal th = bboxTotal.height();
3.152 // TODO testing
3.153 @@ -1313,9 +1313,11 @@
3.154 " ref="<<ref<<
3.155 // " bbox.topLeft="<<bboxTotal.topLeft()<<
3.156 " absPos="<<absPos<<
3.157 - " relPos="<<relPos<<
3.158 - " parPos="<<pp<<
3.159 +// " relPos="<<relPos<<
3.160 +// " parPos="<<pp<<
3.161 + " width="<<bbox.width()<<
3.162 " orient="<<orientation<<
3.163 + " alignSelf="<<alignSelf<<
3.164 // " pad="<<topPad<<","<<botPad<<","<<leftPad<<","<<rightPad<<
3.165 // " hidden="<<hidden<<
3.166 // " th="<<th<<
3.167 @@ -1351,24 +1353,26 @@
3.168 {
3.169 LinkableMapObj::Orientation o;
3.170 o=parObj->getOrientation();
3.171 - switch (orientation)
3.172 - {
3.173 - case LinkableMapObj::LeftOfCenter:
3.174 - move (ref.x() - bbox.width(), ref.y() + (th-bbox.height())/2 );
3.175 - break;
3.176 - case LinkableMapObj::RightOfCenter:
3.177 - move (ref.x() , ref.y() + (th-bbox.height())/2 );
3.178 - break;
3.179 - default:
3.180 - qWarning ("LMO::alignRelativeTo: oops, no orientation given...");
3.181 - break;
3.182 - }
3.183 + if (alignSelf)
3.184 + switch (orientation)
3.185 + {
3.186 + case LinkableMapObj::LeftOfCenter:
3.187 + move (ref.x() - bbox.width(), ref.y() + (th-bbox.height())/2 );
3.188 + //move (ref.x() , ref.y() + (th-bbox.height())/2 );
3.189 + break;
3.190 + case LinkableMapObj::RightOfCenter:
3.191 + move (ref.x() , ref.y() + (th-bbox.height())/2 );
3.192 + break;
3.193 + default:
3.194 + qWarning ("LMO::alignRelativeTo: oops, no orientation given...");
3.195 + break;
3.196 + }
3.197 }
3.198 }
3.199
3.200 if (scrolled) return;
3.201
3.202 - // Set reference point for alignment of childs
3.203 + // Set reference point for alignment of children
3.204 QPointF ref2;
3.205 if (orientation==LinkableMapObj::LeftOfCenter)
3.206 ref2.setX(bbox.topLeft().x() - linkwidth);
3.207 @@ -1380,13 +1384,15 @@
3.208 else
3.209 ref2.setY(ref.y() );
3.210
3.211 - // Align the childs depending on reference point
3.212 + // Align the children depending on reference point
3.213 for (int i=0; i<branch.size(); ++i)
3.214 {
3.215 if (!branch.at(i)->isHidden())
3.216 {
3.217 - branch.at(i)->alignRelativeTo (ref2);
3.218 - ref2.setY(ref2.y() + branch.at(i)->getBBoxSizeWithChilds().height() );
3.219 + branch.at(i)->alignRelativeTo (ref2,true);
3.220 +
3.221 + // append next branch below current one
3.222 + ref2.setY(ref2.y() + branch.at(i)->getBBoxSizeWithChildren().height() );
3.223 }
3.224 }
3.225 }
3.226 @@ -1408,7 +1414,7 @@
3.227 // only calculate the sizes once. If the deepest LMO
3.228 // changes its height,
3.229 // all upper LMOs have to change, too.
3.230 - calcBBoxSizeWithChilds();
3.231 + calcBBoxSizeWithChildren();
3.232 updateLink(); // This update is needed if the scene is resized
3.233 // due to excessive moving of a FIO
3.234
3.235 @@ -1472,12 +1478,12 @@
3.236 return r;
3.237 }
3.238
3.239 -QRectF BranchObj::getBBoxSizeWithChilds()
3.240 +QRectF BranchObj::getBBoxSizeWithChildren()
3.241 {
3.242 return bboxTotal;
3.243 }
3.244
3.245 -void BranchObj::calcBBoxSizeWithChilds()
3.246 +void BranchObj::calcBBoxSizeWithChildren()
3.247 {
3.248 // This is initially called only from reposition and
3.249 // and only for mapcenter. So it won't be
3.250 @@ -1485,11 +1491,11 @@
3.251 // action
3.252
3.253
3.254 - // Calculate size of LMO including all childs (to align them later)
3.255 + // Calculate size of LMO including all children (to align them later)
3.256 bboxTotal.setX(bbox.x() );
3.257 bboxTotal.setY(bbox.y() );
3.258
3.259 - // if branch is scrolled, ignore childs, but still consider floatimages
3.260 + // if branch is scrolled, ignore children, but still consider floatimages
3.261 if (scrolled)
3.262 {
3.263 bboxTotal.setWidth (bbox.width());
3.264 @@ -1523,8 +1529,8 @@
3.265 {
3.266 if (!branch.at(i)->isHidden())
3.267 {
3.268 - branch.at(i)->calcBBoxSizeWithChilds();
3.269 - br=branch.at(i)->getBBoxSizeWithChilds();
3.270 + branch.at(i)->calcBBoxSizeWithChildren();
3.271 + br=branch.at(i)->getBBoxSizeWithChildren();
3.272 r.setWidth( max (br.width(), r.width() ));
3.273 r.setHeight(br.height() + r.height() );
3.274 if (br.y()<bboxTotal.y()) bboxTotal.setY(br.y());
3.275 @@ -1573,14 +1579,14 @@
3.276 updateFlagsToolbar();
3.277
3.278 // Update actions
3.279 - mapEditor->updateActions();
3.280 + model->updateActions();
3.281 }
3.282
3.283 void BranchObj::unselect()
3.284 {
3.285 LinkableMapObj::unselect();
3.286 // Delete any messages like vymLink in StatusBar
3.287 - mainWindow->statusMessage ("");
3.288 + mainWindow->statusMessage (""); //FIXME this causes segfault, when MainWindow is already gone in global destructor on quitting vym
3.289
3.290 // Save current note
3.291 if (isNoteInEditor) getNoteFromTextEditor();
3.292 @@ -1609,7 +1615,11 @@
3.293 bool BranchObj::animate()
3.294 {
3.295 anim.animate ();
3.296 - setRelPos (anim);
3.297 - return anim.isAnimated();
3.298 + if ( anim.isAnimated() )
3.299 + {
3.300 + setRelPos (anim);
3.301 + return true;
3.302 + }
3.303 + return false;
3.304 }
3.305
4.1 --- a/branchobj.h Wed Jul 16 10:44:44 2008 +0000
4.2 +++ b/branchobj.h Wed Jul 16 10:46:14 2008 +0000
4.3 @@ -11,7 +11,7 @@
4.4
4.5 /*! \brief A branch visible in the map */
4.6
4.7 -/*! If HideExport is used, this branch and its childs will be hidden in export */
4.8 +/*! If HideExport is used, this branch and its children will be hidden in export */
4.9 enum HideTmpMode {HideNone, HideExport};
4.10
4.11
4.12 @@ -102,7 +102,7 @@
4.13 virtual BranchObj* insertBranch(BranchObj*,int);
4.14 virtual BranchObj* insertBranchPtr (BranchObj*,int);
4.15 virtual void removeBranchHere(BranchObj*);
4.16 - virtual void removeChilds();
4.17 + virtual void removeChildren();
4.18 virtual void removeBranch(BranchObj*);
4.19 virtual void removeBranchPtr (BranchObj*);
4.20 virtual void setLastSelectedBranch(BranchObj*);
4.21 @@ -116,14 +116,14 @@
4.22 virtual BranchObj* moveBranchDown(BranchObj*);
4.23 virtual void sortChildren();
4.24 virtual BranchObj* linkTo (BranchObj*, int);
4.25 - virtual void alignRelativeTo(const QPointF );
4.26 + virtual void alignRelativeTo(const QPointF, bool alignSelf=false );
4.27 virtual void reposition();
4.28 virtual void unsetAllRepositionRequests();
4.29
4.30 virtual QPolygonF shape(); //!< Returns arbitrary bounding polygon
4.31 - virtual QRectF getTotalBBox(); // return BBox including childs
4.32 - virtual QRectF getBBoxSizeWithChilds(); // return size of BBox including childs
4.33 - virtual void calcBBoxSizeWithChilds(); // calc size of BBox including childs recursivly
4.34 + virtual QRectF getTotalBBox(); // return BBox including children
4.35 + virtual QRectF getBBoxSizeWithChildren(); // return size of BBox including children
4.36 + virtual void calcBBoxSizeWithChildren(); // calc size of BBox including children recursivly
4.37
4.38 virtual void select();
4.39 virtual void unselect();
4.40 @@ -144,7 +144,7 @@
4.41 float angle; // used in mainbranch to reorder mainbranches
4.42 protected:
4.43 int lastSelectedBranch; // for going deeper into tree
4.44 - bool scrolled; // true if all childs are scrolled and thus invisible
4.45 + bool scrolled; // true if all children are scrolled and thus invisible
4.46 bool tmpUnscrolled; // can only be true (temporary) for a scrolled subtree
4.47 bool includeImagesVer; // include floatimages in bbox vertically
4.48 bool includeImagesHor; // include floatimages in bbox horizontally
5.1 --- a/branchpropwindow.cpp Wed Jul 16 10:44:44 2008 +0000
5.2 +++ b/branchpropwindow.cpp Wed Jul 16 10:46:14 2008 +0000
5.3 @@ -16,7 +16,7 @@
5.4 setCaption(vymName +" - " +tr ("Property Editor","Window caption"));
5.5
5.6 branch=NULL;
5.7 - mapEditor=NULL;
5.8 + model=NULL;
5.9
5.10 ui.tabWidget->setEnabled(false);
5.11
5.12 @@ -125,7 +125,8 @@
5.13 // Attributes
5.14 attributeModel->removeRows(0, attributeModel->rowCount(), QModelIndex());
5.15
5.16 - // FIXME some samples for testing
5.17 +/*
5.18 + // FIXME some samples for attribute testing
5.19 QStringList attrTypes=mapEditor->attributeTable()->getTypes();
5.20 for (int i=0; i<attrTypes.count()-1;i++)
5.21 {
5.22 @@ -141,7 +142,7 @@
5.23 // Initialize Delegate
5.24 delegate.setAttributeTable (mapEditor->attributeTable());
5.25 ui.attributeTableView->setItemDelegate (&delegate);
5.26 -
5.27 +*/
5.28
5.29 // Finally activate signals
5.30 connectSignals();
5.31 @@ -151,11 +152,11 @@
5.32 }
5.33 }
5.34
5.35 -void BranchPropertyWindow::setMapEditor (MapEditor *me)
5.36 +void BranchPropertyWindow::setModel (VymModel *m)
5.37 {
5.38 - mapEditor=me;
5.39 - if (mapEditor)
5.40 - setBranch (mapEditor->getSelectedBranch() );
5.41 + model=m;
5.42 + if (model)
5.43 + setBranch (model->getSelectedBranch() );
5.44 else
5.45 ui.tabWidget->setEnabled (false);
5.46
5.47 @@ -163,17 +164,17 @@
5.48
5.49 void BranchPropertyWindow::frameTypeChanged (int i)
5.50 {
5.51 - if (mapEditor)
5.52 + if (model)
5.53 {
5.54 switch (i)
5.55 {
5.56 - case 0: mapEditor->setFrameType (FrameObj::NoFrame); break;
5.57 + case 0: model->setFrameType (FrameObj::NoFrame); break;
5.58 case 1:
5.59 - mapEditor->setFrameType (FrameObj::Rectangle);
5.60 + model->setFrameType (FrameObj::Rectangle);
5.61 break;
5.62 case 2:
5.63 - mapEditor->setFrameType (FrameObj::Ellipse);
5.64 - mapEditor->setFramePadding (5);
5.65 + model->setFrameType (FrameObj::Ellipse);
5.66 + model->setFramePadding (5);
5.67 break;
5.68 }
5.69 setBranch (branch);
5.70 @@ -182,54 +183,54 @@
5.71
5.72 void BranchPropertyWindow::framePenColorClicked()
5.73 {
5.74 - if (mapEditor)
5.75 + if (model)
5.76 {
5.77 QColor col = QColorDialog::getColor( penColor, this );
5.78 if ( col.isValid() )
5.79 {
5.80 penColor=col;
5.81 - mapEditor->setFramePenColor (penColor);
5.82 + model->setFramePenColor (penColor);
5.83 }
5.84 }
5.85 }
5.86
5.87 void BranchPropertyWindow::frameBrushColorClicked()
5.88 {
5.89 - if (mapEditor)
5.90 + if (model)
5.91 {
5.92 QColor col = QColorDialog::getColor( brushColor, this );
5.93 if ( col.isValid() )
5.94 {
5.95 brushColor=col;
5.96 - mapEditor->setFrameBrushColor (brushColor);
5.97 + model->setFrameBrushColor (brushColor);
5.98 }
5.99 }
5.100 }
5.101
5.102 void BranchPropertyWindow::framePaddingChanged(int i)
5.103 {
5.104 - if (mapEditor) mapEditor->setFramePadding (i);
5.105 + if (model) model->setFramePadding (i);
5.106 }
5.107
5.108 void BranchPropertyWindow::frameBorderWidthChanged(int i)
5.109 {
5.110 - if (mapEditor) mapEditor->setFrameBorderWidth(i);
5.111 + if (model) model->setFrameBorderWidth(i);
5.112 }
5.113
5.114 void BranchPropertyWindow::linkHideUnselectedChanged (int i)
5.115 {
5.116 if (!branch) return;
5.117 - mapEditor->setHideLinkUnselected(i);
5.118 + model->setHideLinkUnselected(i);
5.119 }
5.120
5.121 void BranchPropertyWindow::incImgVerChanged (int i)
5.122 {
5.123 - if (mapEditor) mapEditor->setIncludeImagesVer (i);
5.124 + if (model) model->setIncludeImagesVer (i);
5.125 }
5.126
5.127 void BranchPropertyWindow::incImgHorChanged (int i)
5.128 {
5.129 - if (mapEditor) mapEditor->setIncludeImagesHor (i);
5.130 + if (model) model->setIncludeImagesHor (i);
5.131 }
5.132
5.133 void BranchPropertyWindow::closeEvent( QCloseEvent* ce )
5.134 @@ -262,7 +263,7 @@
5.135
5.136 void BranchPropertyWindow::deleteAttributeClicked()
5.137 {
5.138 - cout << "BPW::delete\n";
5.139 + //FIXME cout << "BPW::delete\n";
5.140 }
5.141
5.142 void BranchPropertyWindow::connectSignals()
6.1 --- a/branchpropwindow.h Wed Jul 16 10:44:44 2008 +0000
6.2 +++ b/branchpropwindow.h Wed Jul 16 10:46:14 2008 +0000
6.3 @@ -10,8 +10,7 @@
6.4
6.5 #include "attributedelegate.h"
6.6 #include "branchobj.h"
6.7 -#include "mapeditor.h"
6.8 -
6.9 +#include "vymmodel.h"
6.10
6.11 class QAbstractItemModel;
6.12
6.13 @@ -22,7 +21,7 @@
6.14 BranchPropertyWindow (QWidget *parent=0);
6.15 ~BranchPropertyWindow ();
6.16 void setBranch (BranchObj *);
6.17 - void setMapEditor (MapEditor *);
6.18 + void setModel (VymModel *);
6.19
6.20 private slots:
6.21 void frameTypeChanged (int);
6.22 @@ -49,7 +48,7 @@
6.23 Ui::BranchPropertyWindow ui;
6.24
6.25 BranchObj *branch;
6.26 - MapEditor *mapEditor;
6.27 + VymModel *model;
6.28
6.29 QColor penColor;
6.30 QColor brushColor;
7.1 Binary file demos/math.vym has changed
8.1 Binary file demos/vym-projectplan.vym has changed
9.1 --- a/editxlinkdialog.cpp Wed Jul 16 10:44:44 2008 +0000
9.2 +++ b/editxlinkdialog.cpp Wed Jul 16 10:46:14 2008 +0000
9.3 @@ -62,8 +62,8 @@
9.4 if (xlo)
9.5 {
9.6 if (selection &&
9.7 - ((typeid(*selection) == typeid(BranchObj)) ||
9.8 - (typeid(*selection) == typeid(MapCenterObj))) )
9.9 + (typeid(*selection) == typeid(BranchObj)) ||
9.10 + (typeid(*selection) == typeid(MapCenterObj)) )
9.11 {
9.12 QColor col=((BranchObj*)(selection))->getColor();
9.13 xlo->setColor(col);
10.1 --- a/exports.cpp Wed Jul 16 10:44:44 2008 +0000
10.2 +++ b/exports.cpp Wed Jul 16 10:46:14 2008 +0000
10.3 @@ -251,92 +251,77 @@
10.4 ////////////////////////////////////////////////////////////////////////
10.5 void ExportKDEBookmarks::doExport()
10.6 {
10.7 - MapEditor *me=model->getMapEditor();
10.8 - if (me)
10.9 + WarningDialog dia;
10.10 + dia.showCancelButton (true);
10.11 + dia.setText(QObject::tr("Exporting the %1 bookmarks will overwrite\nyour existing bookmarks file.").arg("KDE"));
10.12 + dia.setCaption(QObject::tr("Warning: Overwriting %1 bookmarks").arg("KDE"));
10.13 + dia.setShowAgainName("/exports/KDE/overwriteKDEBookmarks");
10.14 + if (dia.exec()==QDialog::Accepted)
10.15 {
10.16 - WarningDialog dia;
10.17 - dia.showCancelButton (true);
10.18 - dia.setText(QObject::tr("Exporting the %1 bookmarks will overwrite\nyour existing bookmarks file.").arg("KDE"));
10.19 - dia.setCaption(QObject::tr("Warning: Overwriting %1 bookmarks").arg("KDE"));
10.20 - dia.setShowAgainName("/exports/KDE/overwriteKDEBookmarks");
10.21 - if (dia.exec()==QDialog::Accepted)
10.22 + model->exportXML(tmpDir.path(),false);
10.23 +
10.24 + XSLTProc p;
10.25 + p.setInputFile (tmpDir.path()+"/"+model->getMapName()+".xml");
10.26 + p.setOutputFile (tmpDir.home().path()+"/.kde/share/apps/konqueror/bookmarks.xml");
10.27 + p.setXSLFile (vymBaseDir.path()+"/styles/vym2kdebookmarks.xsl");
10.28 + p.process();
10.29 +
10.30 + QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
10.31 + QProcess *proc= new QProcess ;
10.32 + proc->start( ub);
10.33 + if (!proc->waitForStarted())
10.34 {
10.35 - me->exportXML(tmpDir.path(),false);
10.36 -
10.37 - XSLTProc p;
10.38 - p.setInputFile (tmpDir.path()+"/"+me->getMapName()+".xml");
10.39 - p.setOutputFile (tmpDir.home().path()+"/.kde/share/apps/konqueror/bookmarks.xml");
10.40 - p.setXSLFile (vymBaseDir.path()+"/styles/vym2kdebookmarks.xsl");
10.41 - p.process();
10.42 -
10.43 - QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
10.44 - QProcess *proc= new QProcess ;
10.45 - proc->start( ub);
10.46 - if (!proc->waitForStarted())
10.47 - {
10.48 - QMessageBox::warning(0,
10.49 - QObject::tr("Warning"),
10.50 - QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
10.51 - }
10.52 - }
10.53 + QMessageBox::warning(0,
10.54 + QObject::tr("Warning"),
10.55 + QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
10.56 + }
10.57 }
10.58 -
10.59 }
10.60
10.61 ////////////////////////////////////////////////////////////////////////
10.62 void ExportFirefoxBookmarks::doExport()
10.63 {
10.64 - MapEditor *me=model->getMapEditor();
10.65 - if (me)
10.66 + WarningDialog dia;
10.67 + dia.showCancelButton (true);
10.68 + dia.setText(QObject::tr("Exporting the %1 bookmarks will overwrite\nyour existing bookmarks file.").arg("Firefox"));
10.69 + dia.setCaption(QObject::tr("Warning: Overwriting %1 bookmarks").arg("Firefox"));
10.70 + dia.setShowAgainName("/vym/warnings/overwriteImportBookmarks");
10.71 + if (dia.exec()==QDialog::Accepted)
10.72 {
10.73 - WarningDialog dia;
10.74 - dia.showCancelButton (true);
10.75 - dia.setText(QObject::tr("Exporting the %1 bookmarks will overwrite\nyour existing bookmarks file.").arg("Firefox"));
10.76 - dia.setCaption(QObject::tr("Warning: Overwriting %1 bookmarks").arg("Firefox"));
10.77 - dia.setShowAgainName("/vym/warnings/overwriteImportBookmarks");
10.78 - if (dia.exec()==QDialog::Accepted)
10.79 - {
10.80 - me->exportXML(tmpDir.path(),false);
10.81 + model->exportXML(tmpDir.path(),false);
10.82
10.83 /*
10.84 - XSLTProc p;
10.85 - p.setInputFile (tmpDir.path()+"/"+me->getMapName()+".xml");
10.86 - p.setOutputFile (tmpDir.home().path()+"/.kde/share/apps/konqueror/bookmarks.xml");
10.87 - p.setXSLFile (vymBaseDir.path()+"/styles/vym2kdebookmarks.xsl");
10.88 - p.process();
10.89 + XSLTProc p;
10.90 + p.setInputFile (tmpDir.path()+"/"+me->getMapName()+".xml");
10.91 + p.setOutputFile (tmpDir.home().path()+"/.kde/share/apps/konqueror/bookmarks.xml");
10.92 + p.setXSLFile (vymBaseDir.path()+"/styles/vym2kdebookmarks.xsl");
10.93 + p.process();
10.94
10.95 - QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
10.96 - QProcess *proc = new QProcess( );
10.97 - proc->addArgument(ub);
10.98 + QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
10.99 + QProcess *proc = new QProcess( );
10.100 + proc->addArgument(ub);
10.101
10.102 - if ( !proc->start() )
10.103 - {
10.104 - QMessageBox::warning(0,
10.105 - QObject::tr("Warning"),
10.106 - QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
10.107 - }
10.108 + if ( !proc->start() )
10.109 + {
10.110 + QMessageBox::warning(0,
10.111 + QObject::tr("Warning"),
10.112 + QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
10.113 + }
10.114
10.115 */
10.116 -
10.117 - }
10.118 }
10.119 }
10.120
10.121 ////////////////////////////////////////////////////////////////////////
10.122 void ExportTaskjuggler::doExport()
10.123 {
10.124 - MapEditor *me=model->getMapEditor();
10.125 - if (me)
10.126 - {
10.127 - me->exportXML(tmpDir.path(),false);
10.128 + model->exportXML(tmpDir.path(),false);
10.129
10.130 - XSLTProc p;
10.131 - p.setInputFile (tmpDir.path()+"/"+me->getMapName()+".xml");
10.132 - p.setOutputFile (outputFile);
10.133 - p.setXSLFile (vymBaseDir.path()+"/styles/vym2taskjuggler.xsl");
10.134 - p.process();
10.135 - }
10.136 -
10.137 + XSLTProc p;
10.138 + p.setInputFile (tmpDir.path()+"/"+model->getMapName()+".xml");
10.139 + p.setOutputFile (outputFile);
10.140 + p.setXSLFile (vymBaseDir.path()+"/styles/vym2taskjuggler.xsl");
10.141 + p.process();
10.142 }
10.143
10.144 ////////////////////////////////////////////////////////////////////////
11.1 --- a/file.cpp Wed Jul 16 10:44:44 2008 +0000
11.2 +++ b/file.cpp Wed Jul 16 10:46:14 2008 +0000
11.3 @@ -354,8 +354,6 @@
11.4 // Set up members of the STARTUPINFO structure.
11.5 ::ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
11.6 siStartInfo.cb = sizeof(STARTUPINFO);
11.7 - siStartInfo.dwFlags = STARTF_USESHOWWINDOW;
11.8 - siStartInfo.wShowWindow = SW_MINIMIZE;
11.9
11.10 // Create command line.
11.11 QString argv("unzip -o ");
11.12 @@ -364,32 +362,26 @@
11.13 argv.append(QDir::convertSeparators(zipDir.path()));
11.14
11.15 // Create the child process.
11.16 - if (!::CreateProcess(NULL,
11.17 - (LPWSTR) argv.unicode(), // command line
11.18 - NULL, // process security attributes
11.19 - NULL, // primary thread security attributes
11.20 - TRUE, // handles are inherited
11.21 - 0, // creation flags
11.22 - NULL, // use parent's environment
11.23 - NULL, // use parent's current directory
11.24 - &siStartInfo, // STARTUPINFO pointer
11.25 - &piProcInfo) ) // receives PROCESS_INFORMATION
11.26 + if( !::CreateProcess(NULL,
11.27 + (LPWSTR)argv.unicode(), // command line
11.28 + NULL, // process security attributes
11.29 + NULL, // primary thread security attributes
11.30 + TRUE, // handles are inherited
11.31 + 0, // creation flags
11.32 + NULL, // use parent's environment
11.33 + NULL, // use parent's current directory
11.34 + &siStartInfo, // STARTUPINFO pointer
11.35 + &piProcInfo) ) // receives PROCESS_INFORMATION
11.36 {
11.37 - QMessageBox::critical( 0, QObject::tr( "Critical Error" ),
11.38 - QObject::tr("Couldn't start unzip to decompress data."));
11.39 err = aborted;
11.40 }
11.41 else
11.42 {
11.43 // Wait for it to finish.
11.44 - ::WaitForSingleObject( piProcInfo.hProcess, INFINITE );
11.45 -
11.46 - // Clean up handles.
11.47 - CloseHandle(piProcInfo.hThread);
11.48 - CloseHandle(piProcInfo.hProcess);
11.49 + ::WaitForSingleObject( piProcInfo.hProcess, 10000 );
11.50 }
11.51 #endif
11.52 - return err;
11.53 + return err;
11.54 }
11.55
11.56 bool loadStringFromDisk (const QString &fname, QString &s)
11.57 @@ -503,3 +495,5 @@
11.58 if (imageFilters.at(i)==filter) return imageTypes.at(i);
11.59 return QString();
11.60 }
11.61 +
11.62 +
12.1 --- a/floatimageobj.cpp Wed Jul 16 10:44:44 2008 +0000
12.2 +++ b/floatimageobj.cpp Wed Jul 16 10:46:14 2008 +0000
12.3 @@ -214,13 +214,13 @@
12.4 return bbox;
12.5 }
12.6
12.7 -QRectF FloatImageObj::getBBoxSizeWithChilds()
12.8 +QRectF FloatImageObj::getBBoxSizeWithChildren()
12.9 {
12.10 //TODO abstract in linkablemapobj.h, not calculated
12.11 return bboxTotal;
12.12 }
12.13
12.14 -void FloatImageObj::calcBBoxSizeWithChilds()
12.15 +void FloatImageObj::calcBBoxSizeWithChildren()
12.16 {
12.17 //TODO abstract in linkablemapobj.h
12.18 }
13.1 --- a/floatimageobj.h Wed Jul 16 10:44:44 2008 +0000
13.2 +++ b/floatimageobj.h Wed Jul 16 10:46:14 2008 +0000
13.3 @@ -30,9 +30,9 @@
13.4 virtual void move (QPointF);
13.5 virtual void positionBBox();
13.6 virtual void calcBBoxSize();
13.7 - virtual QRectF getTotalBBox(); // return BBox including childs
13.8 - virtual QRectF getBBoxSizeWithChilds(); // return size of BBox including childs
13.9 - virtual void calcBBoxSizeWithChilds(); // calc size of BBox including childs recursivly
13.10 + virtual QRectF getTotalBBox(); // return BBox including children
13.11 + virtual QRectF getBBoxSizeWithChildren(); // return size of BBox including children
13.12 + virtual void calcBBoxSizeWithChildren(); // calc size of BBox including children recursivly
13.13 virtual QString saveToDir(const QString &,const QString&);
13.14 virtual void resetSaveCounter();
13.15
14.1 --- a/floatobj.cpp Wed Jul 16 10:44:44 2008 +0000
14.2 +++ b/floatobj.cpp Wed Jul 16 10:46:14 2008 +0000
14.3 @@ -97,7 +97,7 @@
14.4 return bbox;
14.5 }
14.6
14.7 -QRectF FloatObj::getBBoxSizeWithChilds()
14.8 +QRectF FloatObj::getBBoxSizeWithChildren()
14.9 {
14.10 return bboxTotal;
14.11 }
15.1 --- a/floatobj.h Wed Jul 16 10:44:44 2008 +0000
15.2 +++ b/floatobj.h Wed Jul 16 10:46:14 2008 +0000
15.3 @@ -26,8 +26,8 @@
15.4 virtual void setDockPos();
15.5 virtual void reposition();
15.6
15.7 - virtual QRectF getTotalBBox(); // return BBox including childs
15.8 - virtual QRectF getBBoxSizeWithChilds(); // return size of BBox including childs
15.9 + virtual QRectF getTotalBBox(); // return BBox including children
15.10 + virtual QRectF getBBoxSizeWithChildren(); // return size of BBox including children
15.11
15.12 virtual void resetSaveCounter()=0;
15.13
16.1 --- a/lang/vym_de.ts Wed Jul 16 10:44:44 2008 +0000
16.2 +++ b/lang/vym_de.ts Wed Jul 16 10:46:14 2008 +0000
16.3 @@ -1838,7 +1838,7 @@
16.4 <source>This map does not exist:
16.5 %1
16.6 Do you want to create a new one?</source>
16.7 - <translation>Diese Map gibt es nicht:
16.8 + <translation>Diese Map gibt es nich:
16.9 %1
16.10 Wollen Sie eine neue anlegen?</translation>
16.11 </message>
17.1 --- a/lang/vym_it.ts Wed Jul 16 10:44:44 2008 +0000
17.2 +++ b/lang/vym_it.ts Wed Jul 16 10:46:14 2008 +0000
17.3 @@ -1,6 +1,5 @@
17.4 <?xml version="1.0" encoding="utf-8"?>
17.5 <!DOCTYPE TS><TS version="1.1" language="it">
17.6 -<defaultcodec></defaultcodec>
17.7 <context>
17.8 <name>AboutDialog</name>
17.9 <message>
17.10 @@ -59,17 +58,17 @@
17.11 <message>
17.12 <location filename="../attributedialog.cpp" line="48"/>
17.13 <source>Attributes</source>
17.14 - <translation>Attributi</translation>
17.15 + <translation type="unfinished"></translation>
17.16 </message>
17.17 <message>
17.18 <location filename="../attributedialog.cpp" line="49"/>
17.19 <source>Add key</source>
17.20 - <translation>Aggiungi chiave</translation>
17.21 + <translation type="unfinished"></translation>
17.22 </message>
17.23 <message>
17.24 <location filename="../attributedialog.cpp" line="50"/>
17.25 <source>Close</source>
17.26 - <translation>Chiudi</translation>
17.27 + <translation type="unfinished">Chiudi</translation>
17.28 </message>
17.29 </context>
17.30 <context>
17.31 @@ -77,7 +76,7 @@
17.32 <message>
17.33 <location filename="../attributewidget.ui" line="13"/>
17.34 <source>Form</source>
17.35 - <translation>Form</translation>
17.36 + <translation type="unfinished"></translation>
17.37 </message>
17.38 </context>
17.39 <context>
17.40 @@ -86,55 +85,55 @@
17.41 <location filename="../branchpropwindow.cpp" line="16"/>
17.42 <source>Property Editor</source>
17.43 <comment>Window caption</comment>
17.44 - <translation>Editor di proprietà</translation>
17.45 + <translation type="unfinished"></translation>
17.46 </message>
17.47 <message>
17.48 <location filename="../branchpropwindow.cpp" line="32"/>
17.49 <source>Name</source>
17.50 <comment>Branchprop window: Attribute name</comment>
17.51 - <translation>Nome</translation>
17.52 + <translation type="unfinished"></translation>
17.53 </message>
17.54 <message>
17.55 <location filename="../branchpropwindow.cpp" line="33"/>
17.56 <source>Value</source>
17.57 <comment>Branchprop window: Attribute value</comment>
17.58 - <translation>Valore</translation>
17.59 + <translation type="unfinished"></translation>
17.60 </message>
17.61 <message>
17.62 <location filename="../branchpropwindow.cpp" line="34"/>
17.63 <source>Type</source>
17.64 <comment>Branchprop window: Attribute type</comment>
17.65 - <translation>Tipo</translation>
17.66 + <translation type="unfinished"></translation>
17.67 </message>
17.68 <message>
17.69 <location filename="../branchpropwindow.ui" line="19"/>
17.70 <source>Branch Property Editor</source>
17.71 - <translation>Editor di proprietà del Ramo</translation>
17.72 + <translation type="unfinished"></translation>
17.73 </message>
17.74 <message>
17.75 <location filename="../branchpropwindow.ui" line="29"/>
17.76 <source>Frame</source>
17.77 - <translation>Frame</translation>
17.78 + <translation type="unfinished"></translation>
17.79 </message>
17.80 <message>
17.81 <location filename="../branchpropwindow.ui" line="50"/>
17.82 <source>Geometry</source>
17.83 - <translation>Geometria</translation>
17.84 + <translation type="unfinished"></translation>
17.85 </message>
17.86 <message>
17.87 <location filename="../branchpropwindow.ui" line="63"/>
17.88 <source>No Frame</source>
17.89 - <translation>Senza Frame</translation>
17.90 + <translation type="unfinished">Senza Frame</translation>
17.91 </message>
17.92 <message>
17.93 <location filename="../branchpropwindow.ui" line="68"/>
17.94 <source>Rectangle</source>
17.95 - <translation>Rettangolo</translation>
17.96 + <translation type="unfinished">Rettangolo</translation>
17.97 </message>
17.98 <message>
17.99 <location filename="../branchpropwindow.ui" line="73"/>
17.100 <source>Ellipse</source>
17.101 - <translation>Ellisse</translation>
17.102 + <translation type="unfinished"></translation>
17.103 </message>
17.104 <message>
17.105 <location filename="../branchpropwindow.ui" line="94"/>
17.106 @@ -144,67 +143,67 @@
17.107 <message>
17.108 <location filename="../branchpropwindow.ui" line="101"/>
17.109 <source>Borderline width</source>
17.110 - <translation>Spessore contorno</translation>
17.111 + <translation type="unfinished"></translation>
17.112 </message>
17.113 <message>
17.114 <location filename="../branchpropwindow.ui" line="151"/>
17.115 <source>Colors</source>
17.116 - <translation>Colori</translation>
17.117 + <translation type="unfinished"></translation>
17.118 </message>
17.119 <message>
17.120 <location filename="../branchpropwindow.ui" line="194"/>
17.121 <source>Borderline color</source>
17.122 - <translation>Colore Contorno</translation>
17.123 + <translation type="unfinished"></translation>
17.124 </message>
17.125 <message>
17.126 <location filename="../branchpropwindow.ui" line="217"/>
17.127 <source>Background color</source>
17.128 - <translation>Colore di sfondo</translation>
17.129 + <translation type="unfinished"></translation>
17.130 </message>
17.131 <message>
17.132 <location filename="../branchpropwindow.ui" line="246"/>
17.133 <source>Layout</source>
17.134 - <translation>Layout</translation>
17.135 + <translation type="unfinished"></translation>
17.136 </message>
17.137 <message>
17.138 <location filename="../branchpropwindow.ui" line="254"/>
17.139 <source>Include images horizontally</source>
17.140 - <translation>Includi immagini orizzontalmente</translation>
17.141 + <translation type="unfinished">Includi immagini orizzontalmente</translation>
17.142 </message>
17.143 <message>
17.144 <location filename="../branchpropwindow.ui" line="261"/>
17.145 <source>Include images vertically</source>
17.146 - <translation>Includi immagini verticalmente</translation>
17.147 + <translation type="unfinished">Includi immagini verticalmente</translation>
17.148 </message>
17.149 <message>
17.150 <location filename="../branchpropwindow.ui" line="284"/>
17.151 <source>Link</source>
17.152 - <translation>Puntatore</translation>
17.153 + <translation type="unfinished"></translation>
17.154 </message>
17.155 <message>
17.156 <location filename="../branchpropwindow.ui" line="290"/>
17.157 <source>Hide link if unselected</source>
17.158 - <translation>Nascondi puntatori se non seleionati</translation>
17.159 + <translation type="unfinished"></translation>
17.160 </message>
17.161 <message>
17.162 <location filename="../branchpropwindow.ui" line="311"/>
17.163 <source>Attributes</source>
17.164 - <translation>Attributi</translation>
17.165 + <translation type="unfinished"></translation>
17.166 </message>
17.167 <message>
17.168 <location filename="../branchpropwindow.ui" line="337"/>
17.169 <source>+</source>
17.170 - <translation>+</translation>
17.171 + <translation type="unfinished"></translation>
17.172 </message>
17.173 <message>
17.174 <location filename="../branchpropwindow.ui" line="344"/>
17.175 <source>-</source>
17.176 - <translation>-</translation>
17.177 + <translation type="unfinished"></translation>
17.178 </message>
17.179 <message>
17.180 <location filename="../branchpropwindow.ui" line="413"/>
17.181 <source>Close</source>
17.182 - <translation>Chiudi</translation>
17.183 + <translation type="unfinished">Chiudi</translation>
17.184 </message>
17.185 </context>
17.186 <context>
17.187 @@ -529,7 +528,7 @@
17.188 <message>
17.189 <location filename="../exportxhtmldialog.ui" line="165"/>
17.190 <source>show warnings of xslt processor</source>
17.191 - <translation>mostra avvertimenti del processore xslt</translation>
17.192 + <translation type="unfinished"></translation>
17.193 </message>
17.194 </context>
17.195 <context>
17.196 @@ -603,7 +602,7 @@
17.197 <message>
17.198 <location filename="../vymmodel.cpp" line="105"/>
17.199 <source>New map</source>
17.200 - <translation>Nuova Mappa</translation>
17.201 + <translation type="unfinished">Nuova Mappa</translation>
17.202 </message>
17.203 </context>
17.204 <context>
17.205 @@ -1132,7 +1131,7 @@
17.206 <message>
17.207 <location filename="../mainwindow.cpp" line="974"/>
17.208 <source>Set &Link Color</source>
17.209 - <translation>Specifica Co&lore dei Collegamenti</translation>
17.210 + <translation type="unfinished">Specifica Co&lore dei Collegamenti</translation>
17.211 </message>
17.212 <message>
17.213 <location filename="../mainwindow.cpp" line="987"/>
17.214 @@ -2773,149 +2772,149 @@
17.215 <location filename="../mainwindow.cpp" line="301"/>
17.216 <source>&New map</source>
17.217 <comment>File menu</comment>
17.218 - <translation>&Nuova mappa</translation>
17.219 + <translation type="unfinished"></translation>
17.220 </message>
17.221 <message>
17.222 <location filename="../mainwindow.cpp" line="308"/>
17.223 <source>&Copy to new map</source>
17.224 <comment>File menu</comment>
17.225 - <translation>&Copia in una nuova mappa</translation>
17.226 + <translation type="unfinished"></translation>
17.227 </message>
17.228 <message>
17.229 <location filename="../mainwindow.cpp" line="309"/>
17.230 <source>Copy selection to mapcenter of a new map</source>
17.231 <comment>Status tip File menu</comment>
17.232 - <translation>Copia la selezione nel centro di una nuova mappa</translation>
17.233 + <translation type="unfinished"></translation>
17.234 </message>
17.235 <message>
17.236 <location filename="../mainwindow.cpp" line="532"/>
17.237 <source>Add mapcenter</source>
17.238 <comment>Canvas context menu</comment>
17.239 - <translation>Aggiungi centro mappa</translation>
17.240 + <translation type="unfinished"></translation>
17.241 </message>
17.242 <message>
17.243 <location filename="../mainwindow.cpp" line="631"/>
17.244 <source>Sort children</source>
17.245 <comment>Edit menu</comment>
17.246 - <translation>Ordina i figli</translation>
17.247 + <translation type="unfinished"></translation>
17.248 </message>
17.249 <message>
17.250 <location filename="../mainwindow.cpp" line="661"/>
17.251 <source>Unscroll childs</source>
17.252 <comment>Edit menu</comment>
17.253 - <translation>Mostra i figli</translation>
17.254 + <translation type="unfinished"></translation>
17.255 </message>
17.256 <message>
17.257 <location filename="../mainwindow.cpp" line="662"/>
17.258 <source>Unscroll all scrolled branches in selected subtree</source>
17.259 - <translation>Mostra tutti i rami in sottorami selezionati</translation>
17.260 + <translation type="unfinished"></translation>
17.261 </message>
17.262 <message>
17.263 <location filename="../mainwindow.cpp" line="707"/>
17.264 <source>Edit local URL...</source>
17.265 <comment>Edit menu</comment>
17.266 - <translation>Modifical URL locale...</translation>
17.267 + <translation type="unfinished"></translation>
17.268 </message>
17.269 <message>
17.270 <location filename="../mainwindow.cpp" line="708"/>
17.271 <source>Edit local URL</source>
17.272 - <translation>Modifica URL locale</translation>
17.273 + <translation type="unfinished"></translation>
17.274 </message>
17.275 <message>
17.276 <location filename="../mainwindow.cpp" line="723"/>
17.277 <source>Create URL to Novell Bugzilla</source>
17.278 <comment>Edit menu</comment>
17.279 - <translation>Crea un URL al Novell Bugzilla</translation>
17.280 + <translation type="unfinished"></translation>
17.281 </message>
17.282 <message>
17.283 <location filename="../mainwindow.cpp" line="724"/>
17.284 <source>Create URL to Novell Bugzilla</source>
17.285 - <translation>Crea un URL al Novell Bugzilla</translation>
17.286 + <translation type="unfinished"></translation>
17.287 </message>
17.288 <message>
17.289 <location filename="../mainwindow.cpp" line="730"/>
17.290 <source>Create URL to Novell FATE</source>
17.291 <comment>Edit menu</comment>
17.292 - <translation>Crea un URL al Novell FATE</translation>
17.293 + <translation type="unfinished"></translation>
17.294 </message>
17.295 <message>
17.296 <location filename="../mainwindow.cpp" line="731"/>
17.297 <source>Create URL to Novell FATE</source>
17.298 - <translation>Crea un URL al Novell FATE</translation>
17.299 + <translation type="unfinished"></translation>
17.300 </message>
17.301 <message>
17.302 <location filename="../mainwindow.cpp" line="874"/>
17.303 <source>Property window</source>
17.304 <comment>Dialog to edit properties of selection</comment>
17.305 - <translation>Finestra di proprietà</translation>
17.306 + <translation type="unfinished"></translation>
17.307 </message>
17.308 <message>
17.309 <location filename="../mainwindow.cpp" line="875"/>
17.310 <source>Set properties for selection</source>
17.311 - <translation>Imposta le proprietà per la selezione</translation>
17.312 + <translation type="unfinished"></translation>
17.313 </message>
17.314 <message>
17.315 <location filename="../mainwindow.cpp" line="939"/>
17.316 <source>Linkstyle Curve</source>
17.317 - <translation>Collegamenti Curvilinei</translation>
17.318 + <translation type="unfinished"></translation>
17.319 </message>
17.320 <message>
17.321 <location filename="../mainwindow.cpp" line="951"/>
17.322 <source>Linkstyle Thick Curve</source>
17.323 - <translation>Collegamenti Curvilinei Spessi</translation>
17.324 + <translation type="unfinished"></translation>
17.325 </message>
17.326 <message>
17.327 <location filename="../mainwindow.cpp" line="980"/>
17.328 <source>Set &Selection Color</source>
17.329 - <translation>Scegli Colore di &Selezione</translation>
17.330 + <translation type="unfinished"></translation>
17.331 </message>
17.332 <message>
17.333 <location filename="../mainwindow.cpp" line="981"/>
17.334 <source>Set Selection Color</source>
17.335 - <translation>Scegli Colore di Selezione</translation>
17.336 + <translation type="unfinished"></translation>
17.337 </message>
17.338 <message>
17.339 <location filename="../mainwindow.cpp" line="992"/>
17.340 <source>Set &Background image</source>
17.341 - <translation>Scegli immagine di S&fondo</translation>
17.342 + <translation type="unfinished"></translation>
17.343 </message>
17.344 <message>
17.345 <location filename="../mainwindow.cpp" line="993"/>
17.346 <source>Set Background image</source>
17.347 - <translation>Scegli immagine di Sfondo</translation>
17.348 + <translation type="unfinished"></translation>
17.349 </message>
17.350 <message>
17.351 <location filename="../mainwindow.cpp" line="1029"/>
17.352 <source>Show selection</source>
17.353 <comment>View action</comment>
17.354 - <translation>Mostra selezione</translation>
17.355 + <translation type="unfinished"></translation>
17.356 </message>
17.357 <message>
17.358 <location filename="../mainwindow.cpp" line="1030"/>
17.359 <source>Show selection</source>
17.360 - <translation>Mostra selezione</translation>
17.361 + <translation type="unfinished"></translation>
17.362 </message>
17.363 <message>
17.364 <location filename="../mainwindow.cpp" line="1047"/>
17.365 <source>History Window</source>
17.366 <comment>View action</comment>
17.367 - <translation>Finestra di Cronologia</translation>
17.368 + <translation type="unfinished"></translation>
17.369 </message>
17.370 <message>
17.371 <location filename="../mainwindow.cpp" line="1048"/>
17.372 <source>Show History Window</source>
17.373 - <translation>Mostra la finestra di Cronologia</translation>
17.374 + <translation type="unfinished"></translation>
17.375 </message>
17.376 <message>
17.377 <location filename="../mainwindow.cpp" line="1060"/>
17.378 <source>Antialiasing</source>
17.379 <comment>View action</comment>
17.380 - <translation>Antialiasing</translation>
17.381 + <translation type="unfinished"></translation>
17.382 </message>
17.383 <message>
17.384 <location filename="../mainwindow.cpp" line="1061"/>
17.385 <source>Antialiasing</source>
17.386 - <translation>Antialiasing</translation>
17.387 + <translation type="unfinished"></translation>
17.388 </message>
17.389 <message>
17.390 <location filename="../mainwindow.cpp" line="1068"/>
17.391 @@ -2927,127 +2926,127 @@
17.392 <location filename="../mainwindow.cpp" line="1076"/>
17.393 <source>Next Map</source>
17.394 <comment>View action</comment>
17.395 - <translation>Mappa successiva</translation>
17.396 + <translation type="unfinished"></translation>
17.397 </message>
17.398 <message>
17.399 <location filename="../mainwindow.cpp" line="1082"/>
17.400 <source>Previous Map</source>
17.401 <comment>View action</comment>
17.402 - <translation>Mappa precedente</translation>
17.403 + <translation type="unfinished"></translation>
17.404 </message>
17.405 <message>
17.406 <location filename="../mainwindow.cpp" line="1136"/>
17.407 <source>Note</source>
17.408 <comment>SystemFlag</comment>
17.409 - <translation>Note</translation>
17.410 + <translation type="unfinished">Note</translation>
17.411 </message>
17.412 <message>
17.413 <location filename="../mainwindow.cpp" line="1139"/>
17.414 <source>URL to Document </source>
17.415 <comment>SystemFlag</comment>
17.416 - <translation>URL al Documento </translation>
17.417 + <translation type="unfinished"></translation>
17.418 </message>
17.419 <message>
17.420 <location filename="../mainwindow.cpp" line="1142"/>
17.421 <source>Link to another vym map</source>
17.422 <comment>SystemFlag</comment>
17.423 - <translation>Collega ad un'altra mappa vym</translation>
17.424 + <translation type="unfinished">Collega ad un'altra mappa vym</translation>
17.425 </message>
17.426 <message>
17.427 <location filename="../mainwindow.cpp" line="1145"/>
17.428 <source>subtree is scrolled</source>
17.429 <comment>SystemFlag</comment>
17.430 - <translation>sottoalbero è espanso</translation>
17.431 + <translation type="unfinished">sottoalbero è espanso</translation>
17.432 </message>
17.433 <message>
17.434 <location filename="../mainwindow.cpp" line="1148"/>
17.435 <source>subtree is temporary scrolled</source>
17.436 <comment>SystemFlag</comment>
17.437 - <translation>sottoalbero è temporaneamente espanso</translation>
17.438 + <translation type="unfinished">sottoalbero è temporaneamente espanso</translation>
17.439 </message>
17.440 <message>
17.441 <location filename="../mainwindow.cpp" line="1151"/>
17.442 <source>Hide object in exported maps</source>
17.443 <comment>SystemFlag</comment>
17.444 - <translation>Nascondi oggetto nelle mappe esportate</translation>
17.445 + <translation type="unfinished">Nascondi oggetto nelle mappe esportate</translation>
17.446 </message>
17.447 <message>
17.448 <location filename="../mainwindow.cpp" line="1235"/>
17.449 <source>I just love...</source>
17.450 <comment>Standardflag</comment>
17.451 - <translation> Lo amo... </translation>
17.452 + <translation type="unfinished"></translation>
17.453 </message>
17.454 <message>
17.455 <location filename="../mainwindow.cpp" line="1256"/>
17.456 <source>Important</source>
17.457 <comment>Freemind-Flag</comment>
17.458 - <translation>Importante</translation>
17.459 + <translation type="unfinished">Importante</translation>
17.460 </message>
17.461 <message>
17.462 <location filename="../mainwindow.cpp" line="1261"/>
17.463 <source>Priority</source>
17.464 <comment>Freemind-Flag</comment>
17.465 - <translation>Priorità</translation>
17.466 + <translation type="unfinished"></translation>
17.467 </message>
17.468 <message>
17.469 <location filename="../mainwindow.cpp" line="1265"/>
17.470 <source>Back</source>
17.471 <comment>Freemind-Flag</comment>
17.472 - <translation>Indietro</translation>
17.473 + <translation type="unfinished"></translation>
17.474 </message>
17.475 <message>
17.476 <location filename="../mainwindow.cpp" line="1268"/>
17.477 <source>Forward</source>
17.478 <comment>Freemind-Flag</comment>
17.479 - <translation>Avanti</translation>
17.480 + <translation type="unfinished"></translation>
17.481 </message>
17.482 <message>
17.483 <location filename="../mainwindow.cpp" line="1271"/>
17.484 <source>Look here</source>
17.485 <comment>Freemind-Flag</comment>
17.486 - <translation>Guardami</translation>
17.487 + <translation type="unfinished"></translation>
17.488 </message>
17.489 <message>
17.490 <location filename="../mainwindow.cpp" line="1274"/>
17.491 <source>Dangerous</source>
17.492 <comment>Freemind-Flag</comment>
17.493 - <translation>Pericoloso</translation>
17.494 + <translation type="unfinished">Pericoloso</translation>
17.495 </message>
17.496 <message>
17.497 <location filename="../mainwindow.cpp" line="1277"/>
17.498 <source>Don't forget</source>
17.499 <comment>Freemind-Flag</comment>
17.500 - <translation>Non Trascurare</translation>
17.501 + <translation type="unfinished"></translation>
17.502 </message>
17.503 <message>
17.504 <location filename="../mainwindow.cpp" line="1280"/>
17.505 <source>Flag</source>
17.506 <comment>Freemind-Flag</comment>
17.507 - <translation>Flag</translation>
17.508 + <translation type="unfinished"></translation>
17.509 </message>
17.510 <message>
17.511 <location filename="../mainwindow.cpp" line="1284"/>
17.512 <source>Home</source>
17.513 <comment>Freemind-Flag</comment>
17.514 - <translation>Principio</translation>
17.515 + <translation type="unfinished"></translation>
17.516 </message>
17.517 <message>
17.518 <location filename="../mainwindow.cpp" line="1288"/>
17.519 <source>Telephone</source>
17.520 <comment>Freemind-Flag</comment>
17.521 - <translation>Telefono</translation>
17.522 + <translation type="unfinished"></translation>
17.523 </message>
17.524 <message>
17.525 <location filename="../mainwindow.cpp" line="1291"/>
17.526 <source>Music</source>
17.527 <comment>Freemind-Flag</comment>
17.528 - <translation>Musica</translation>
17.529 + <translation type="unfinished"></translation>
17.530 </message>
17.531 <message>
17.532 <location filename="../mainwindow.cpp" line="1294"/>
17.533 <source>Mailbox</source>
17.534 <comment>Freemind-Flag</comment>
17.535 - <translation>Casella di Posta</translation>
17.536 + <translation type="unfinished"></translation>
17.537 </message>
17.538 <message>
17.539 <location filename="../mainwindow.cpp" line="1297"/>
17.540 @@ -3059,208 +3058,206 @@
17.541 <location filename="../mainwindow.cpp" line="1300"/>
17.542 <source>Password</source>
17.543 <comment>Freemind-Flag</comment>
17.544 - <translation>Password</translation>
17.545 + <translation type="unfinished"></translation>
17.546 </message>
17.547 <message>
17.548 <location filename="../mainwindow.cpp" line="1303"/>
17.549 <source>To be improved</source>
17.550 <comment>Freemind-Flag</comment>
17.551 - <translation>Da migliorare</translation>
17.552 + <translation type="unfinished"></translation>
17.553 </message>
17.554 <message>
17.555 <location filename="../mainwindow.cpp" line="1306"/>
17.556 <source>Stop</source>
17.557 <comment>Freemind-Flag</comment>
17.558 - <translation>Stop</translation>
17.559 + <translation type="unfinished"></translation>
17.560 </message>
17.561 <message>
17.562 <location filename="../mainwindow.cpp" line="1309"/>
17.563 <source>Magic</source>
17.564 <comment>Freemind-Flag</comment>
17.565 - <translation>Magico</translation>
17.566 + <translation type="unfinished"></translation>
17.567 </message>
17.568 <message>
17.569 <location filename="../mainwindow.cpp" line="1312"/>
17.570 <source>To be discussed</source>
17.571 <comment>Freemind-Flag</comment>
17.572 - <translation>Da discutere</translation>
17.573 + <translation type="unfinished"></translation>
17.574 </message>
17.575 <message>
17.576 <location filename="../mainwindow.cpp" line="1315"/>
17.577 <source>Reminder</source>
17.578 <comment>Freemind-Flag</comment>
17.579 - <translation>Appunto</translation>
17.580 + <translation type="unfinished"></translation>
17.581 </message>
17.582 <message>
17.583 <location filename="../mainwindow.cpp" line="1318"/>
17.584 <source>Excellent</source>
17.585 <comment>Freemind-Flag</comment>
17.586 - <translation>Eccellente</translation>
17.587 + <translation type="unfinished"></translation>
17.588 </message>
17.589 <message>
17.590 <location filename="../mainwindow.cpp" line="1321"/>
17.591 <source>Linux</source>
17.592 <comment>Freemind-Flag</comment>
17.593 - <translation>Linux</translation>
17.594 + <translation type="unfinished"></translation>
17.595 </message>
17.596 <message>
17.597 <location filename="../mainwindow.cpp" line="1324"/>
17.598 <source>Sweet</source>
17.599 <comment>Freemind-Flag</comment>
17.600 - <translation>Dolce</translation>
17.601 + <translation type="unfinished"></translation>
17.602 </message>
17.603 <message>
17.604 <location filename="../mainwindow.cpp" line="1390"/>
17.605 <source>Set path for macros</source>
17.606 <comment>Settings action</comment>
17.607 - <translation>Seleziona percorso per le macro</translation>
17.608 + <translation type="unfinished"></translation>
17.609 </message>
17.610 <message>
17.611 <location filename="../mainwindow.cpp" line="1391"/>
17.612 <source>Set path for macros</source>
17.613 - <translation>Seleziona percorso per le macro</translation>
17.614 + <translation type="unfinished"></translation>
17.615 </message>
17.616 <message>
17.617 <location filename="../mainwindow.cpp" line="1395"/>
17.618 <source>Set number of undo levels</source>
17.619 <comment>Settings action</comment>
17.620 - <translation>Imposta numero di livelli Annulla</translation>
17.621 + <translation type="unfinished"></translation>
17.622 </message>
17.623 <message>
17.624 <location filename="../mainwindow.cpp" line="1396"/>
17.625 <source>Set number of undo levels</source>
17.626 - <translation>Imposta numero di livelli Annulla</translation>
17.627 + <translation type="unfinished"></translation>
17.628 </message>
17.629 <message>
17.630 <location filename="../mainwindow.cpp" line="1402"/>
17.631 <source>Autosave</source>
17.632 <comment>Settings action</comment>
17.633 - <translation>Salva Automatico</translation>
17.634 + <translation type="unfinished"></translation>
17.635 </message>
17.636 <message>
17.637 <location filename="../mainwindow.cpp" line="1403"/>
17.638 <source>Autosave</source>
17.639 - <translation>Salva Automatico</translation>
17.640 + <translation type="unfinished"></translation>
17.641 </message>
17.642 <message>
17.643 <location filename="../mainwindow.cpp" line="1410"/>
17.644 <source>Autosave time</source>
17.645 <comment>Settings action</comment>
17.646 - <translation>Tempo per salva automativo</translation>
17.647 + <translation type="unfinished"></translation>
17.648 </message>
17.649 <message>
17.650 <location filename="../mainwindow.cpp" line="1411"/>
17.651 <source>Autosave time</source>
17.652 - <translation>Tempo per salva automativo</translation>
17.653 + <translation type="unfinished"></translation>
17.654 </message>
17.655 <message>
17.656 <location filename="../mainwindow.cpp" line="1416"/>
17.657 <source>Write backup file on save</source>
17.658 <comment>Settings action</comment>
17.659 - <translation>Scrivi un file di backup al Salvataggio</translation>
17.660 + <translation type="unfinished"></translation>
17.661 </message>
17.662 <message>
17.663 <location filename="../mainwindow.cpp" line="1417"/>
17.664 <source>Write backup file on save</source>
17.665 - <translation>Scrivi un file di backup al Salvataggio</translation>
17.666 + <translation type="unfinished"></translation>
17.667 </message>
17.668 <message>
17.669 <location filename="../mainwindow.cpp" line="1469"/>
17.670 <source>Animation</source>
17.671 <comment>Settings action</comment>
17.672 - <translation>Animazione</translation>
17.673 + <translation type="unfinished"></translation>
17.674 </message>
17.675 <message>
17.676 <location filename="../mainwindow.cpp" line="1470"/>
17.677 <source>Animation</source>
17.678 - <translation>Animazione</translation>
17.679 + <translation type="unfinished"></translation>
17.680 </message>
17.681 <message>
17.682 <location filename="../mainwindow.cpp" line="1514"/>
17.683 <source>Open VYM example maps </source>
17.684 <comment>Help action</comment>
17.685 - <translation>Apri mappe VYM di esempio</translation>
17.686 + <translation type="unfinished"></translation>
17.687 </message>
17.688 <message>
17.689 <location filename="../mainwindow.cpp" line="1515"/>
17.690 <source>Open VYM example maps </source>
17.691 - <translation>Apri mappe VYM di esempio </translation>
17.692 + <translation type="unfinished"></translation>
17.693 </message>
17.694 <message>
17.695 <location filename="../mainwindow.cpp" line="1569"/>
17.696 <source>References (URLs, vymLinks, ...)</source>
17.697 <comment>Context menu name</comment>
17.698 - <translation>Referenze (URL, LinkVYM, ...)</translation>
17.699 + <translation type="unfinished"></translation>
17.700 </message>
17.701 <message>
17.702 <location filename="../mainwindow.cpp" line="1645"/>
17.703 <source>&%1 %2</source>
17.704 - <translation>&%1 %2</translation>
17.705 + <translation type="unfinished"></translation>
17.706 </message>
17.707 <message>
17.708 <location filename="../mainwindow.cpp" line="2108"/>
17.709 <source>Load Freemind map</source>
17.710 - <translation>Carica mappa Freemind</translation>
17.711 + <translation type="unfinished"></translation>
17.712 </message>
17.713 <message>
17.714 <location filename="../mainwindow.cpp" line="2202"/>
17.715 <source>Export as CSV</source>
17.716 - <translation>Esporta in CSV</translation>
17.717 + <translation type="unfinished"></translation>
17.718 </message>
17.719 <message>
17.720 <location filename="../mainwindow.cpp" line="3268"/>
17.721 <source>Directory with vym macros:</source>
17.722 - <translation>Cartella con macro vym:</translation>
17.723 + <translation type="unfinished"></translation>
17.724 </message>
17.725 <message>
17.726 <location filename="../mainwindow.cpp" line="3300"/>
17.727 <source>QInputDialog::getInteger()</source>
17.728 - <translation>QInputDialog::getInteger()</translation>
17.729 + <translation type="unfinished"></translation>
17.730 </message>
17.731 <message>
17.732 <location filename="../mainwindow.cpp" line="3281"/>
17.733 <source>Number of undo/redo levels:</source>
17.734 - <translation>Numero di livelli annulla/rifai:</translation>
17.735 + <translation type="unfinished"></translation>
17.736 </message>
17.737 <message>
17.738 <location filename="../mainwindow.cpp" line="3286"/>
17.739 <source>Settings have been changed. The next map opened will have "%1" undo/redo levels</source>
17.740 - <translation>Le impostazione sono state salvate. La prossima mappa avra "%1" livelli di annulla/rifai</translation>
17.741 + <translation type="unfinished"></translation>
17.742 </message>
17.743 <message>
17.744 <location filename="../mainwindow.cpp" line="3301"/>
17.745 <source>Number of seconds before autosave:</source>
17.746 - <translation>Numero di secondi prima del salvataggio automatico:</translation>
17.747 + <translation type="unfinished"></translation>
17.748 </message>
17.749 <message>
17.750 <location filename="../mainwindow.cpp" line="3411"/>
17.751 <source>History for %1</source>
17.752 <comment>Window Caption</comment>
17.753 - <translation>Cronologia per %1</translation>
17.754 + <translation type="unfinished"></translation>
17.755 </message>
17.756 <message>
17.757 <location filename="../mainwindow.cpp" line="3735"/>
17.758 <source>Couldn't find the documentation %1 in:
17.759 %2</source>
17.760 - <translation>Non è possibile trovare la documentazione %1 in:
17.761 -%2</translation>
17.762 + <translation type="unfinished"></translation>
17.763 </message>
17.764 <message>
17.765 <location filename="../mainwindow.cpp" line="3771"/>
17.766 <source>Load vym example map</source>
17.767 - <translation>Carica mappa di esempio vym</translation>
17.768 + <translation type="unfinished"></translation>
17.769 </message>
17.770 <message>
17.771 <location filename="../mainwindow.cpp" line="3820"/>
17.772 <source>Couldn't find a macro at %1.
17.773 </source>
17.774 - <translation>Non è possibile trovare la macro in %1.
17.775 -</translation>
17.776 + <translation type="unfinished"></translation>
17.777 </message>
17.778 <message>
17.779 <location filename="../mainwindow.cpp" line="3821"/>
17.780 <source>Set directory for vym macros</source>
17.781 - <translation>Imposta la cartella con le macro vym</translation>
17.782 + <translation type="unfinished"></translation>
17.783 </message>
17.784 </context>
17.785 <context>
17.786 @@ -3612,20 +3609,19 @@
17.787 <message>
17.788 <location filename="../mapeditor.cpp" line="1795"/>
17.789 <source>Critical Load Error</source>
17.790 - <translation>Errore Critico di Caricamento</translation>
17.791 + <translation type="unfinished">Errore Critico di Caricamento</translation>
17.792 </message>
17.793 <message>
17.794 <location filename="../mapeditor.cpp" line="1602"/>
17.795 <source>Couldn't create temporary directory before load
17.796 </source>
17.797 - <translation>Non è possibile creare una cartella temporanea prima di caricare
17.798 -</translation>
17.799 + <translation type="unfinished">Non è possibile creare una cartella temporanea prima di caricare</translation>
17.800 </message>
17.801 <message>
17.802 <location filename="../mapeditor.cpp" line="1645"/>
17.803 <source>Couldn't find a map (*.xml) in .vym archive.
17.804 </source>
17.805 - <translation>Non è possibile trovare una mappa (*.xml) nell'archivio .vym.
17.806 + <translation type="unfinished">Non è possibile trovare una mappa (*.xml) nell'archivio .vym.
17.807 </translation>
17.808 </message>
17.809 <message>
17.810 @@ -3636,7 +3632,7 @@
17.811 and flags and thus may overwrite files in the given directory
17.812
17.813 Do you want to write the map</source>
17.814 - <translation>La mappa %1
17.815 + <translation type="unfinished">La mappa %1
17.816 non usa il formato di compressione vym.
17.817 Salvandolo in modo non compresso, salva anche le immagini
17.818 e le flag e quindi potrebbe sovvrascrivere dei file in questa cartella
17.819 @@ -3645,94 +3641,92 @@
17.820 <message>
17.821 <location filename="../mapeditor.cpp" line="1746"/>
17.822 <source>compressed (vym default)</source>
17.823 - <translation>compresso (predefinito in vym)</translation>
17.824 + <translation type="unfinished">compresso (predefinito in vym)</translation>
17.825 </message>
17.826 <message>
17.827 <location filename="../mapeditor.cpp" line="1747"/>
17.828 <source>uncompressed</source>
17.829 - <translation>non compresso</translation>
17.830 + <translation type="unfinished">non compresso</translation>
17.831 </message>
17.832 <message>
17.833 <location filename="../mapeditor.cpp" line="1782"/>
17.834 <source>Save Error</source>
17.835 - <translation>Errore di Salvataggio</translation>
17.836 + <translation type="unfinished">Errore di Salvataggio</translation>
17.837 </message>
17.838 <message>
17.839 <location filename="../mapeditor.cpp" line="1778"/>
17.840 <source>%1
17.841 could not be removed before saving</source>
17.842 - <translation>%1
17.843 -non può essere rimosso prima del salvataggio</translation>
17.844 + <translation type="unfinished"></translation>
17.845 </message>
17.846 <message>
17.847 <location filename="../mapeditor.cpp" line="1783"/>
17.848 <source>%1
17.849 could not be renamed before saving</source>
17.850 - <translation>%1
17.851 -non può essere rinominato prima del salvataggio</translation>
17.852 + <translation type="unfinished"></translation>
17.853 </message>
17.854 <message>
17.855 <location filename="../mapeditor.cpp" line="1796"/>
17.856 <source>Couldn't create temporary directory before save
17.857 </source>
17.858 - <translation>Non è possibile creare una cartella temporanea prima di salvare
17.859 + <translation type="unfinished">Non è possibile creare una cartella temporanea prima di salvare
17.860 </translation>
17.861 </message>
17.862 <message>
17.863 <location filename="../mapeditor.cpp" line="2033"/>
17.864 <source>Export map as image</source>
17.865 - <translation>Esporta mappa come immagine</translation>
17.866 + <translation type="unfinished">Esporta mappa come immagine</translation>
17.867 </message>
17.868 <message>
17.869 <location filename="../mapeditor.cpp" line="2110"/>
17.870 <source>Export XML to directory</source>
17.871 - <translation>Esporta XML in una cartella</translation>
17.872 + <translation type="unfinished">Esporta XML in una cartella</translation>
17.873 </message>
17.874 <message>
17.875 <location filename="../mapeditor.cpp" line="2260"/>
17.876 <source>Autosave disabled during undo.</source>
17.877 - <translation>Salvataggio automatico disabilitato durante annullamento.</translation>
17.878 + <translation type="unfinished"></translation>
17.879 </message>
17.880 <message>
17.881 <location filename="../mapeditor.cpp" line="3268"/>
17.882 <source>Load background image</source>
17.883 - <translation>Carica immagine di sfondo</translation>
17.884 + <translation type="unfinished"></translation>
17.885 </message>
17.886 <message>
17.887 <location filename="../mapeditor.cpp" line="3489"/>
17.888 <source>Text</source>
17.889 <comment>Filedialog</comment>
17.890 - <translation>Testo</translation>
17.891 + <translation type="unfinished"></translation>
17.892 </message>
17.893 <message>
17.894 <location filename="../mapeditor.cpp" line="3490"/>
17.895 <source>Spreadsheet</source>
17.896 <comment>Filedialog</comment>
17.897 - <translation>Foglio di calcolo</translation>
17.898 + <translation type="unfinished"></translation>
17.899 </message>
17.900 <message>
17.901 <location filename="../mapeditor.cpp" line="3491"/>
17.902 <source>Textdocument</source>
17.903 <comment>Filedialog</comment>
17.904 - <translation>Documento di testo</translation>
17.905 + <translation type="unfinished"></translation>
17.906 </message>
17.907 <message>
17.908 <location filename="../mapeditor.cpp" line="3492"/>
17.909 <source>Images</source>
17.910 <comment>Filedialog</comment>
17.911 - <translation>Immagini</translation>
17.912 + <translation type="unfinished">Immagini</translation>
17.913 </message>
17.914 <message>
17.915 <location filename="../mapeditor.cpp" line="3495"/>
17.916 <source>Set URL to a local file</source>
17.917 - <translation>Imposta URL come file locale</translation>
17.918 + <translation type="unfinished"></translation>
17.919 </message>
17.920 <message>
17.921 <location filename="../mapeditor.cpp" line="3727"/>
17.922 <source>%1 items on map
17.923 </source>
17.924 <comment>Info about map</comment>
17.925 - <translation>%1 oggetti nella mappa</translation>
17.926 + <translation type="unfinished"></translation>
17.927 </message>
17.928 <message>
17.929 <location filename="../mapeditor.cpp" line="5291"/>
17.930 @@ -3746,12 +3740,12 @@
17.931 <message>
17.932 <location filename="../mapeditor.cpp" line="5297"/>
17.933 <source>Reload</source>
17.934 - <translation>Ricarica</translation>
17.935 + <translation type="unfinished"></translation>
17.936 </message>
17.937 <message>
17.938 <location filename="../mapeditor.cpp" line="5298"/>
17.939 <source>Ignore</source>
17.940 - <translation>Ignora</translation>
17.941 + <translation type="unfinished"></translation>
17.942 </message>
17.943 </context>
17.944 <context>
17.945 @@ -3885,27 +3879,26 @@
17.946 <message>
17.947 <location filename="../exports.cpp" line="131"/>
17.948 <source>Export as ASCII</source>
17.949 - <translation>Esporta in ASCII</translation>
17.950 + <translation type="unfinished">Esporta in ASCII</translation>
17.951 </message>
17.952 <message>
17.953 <location filename="../exports.cpp" line="131"/>
17.954 <source>(still experimental)</source>
17.955 - <translation>(in via di sperimentazione)</translation>
17.956 + <translation type="unfinished">(in via di sperimentazione)</translation>
17.957 </message>
17.958 <message>
17.959 <location filename="../file.cpp" line="99"/>
17.960 <source>The directory %1 is not empty.
17.961 Do you risk to overwrite its contents?</source>
17.962 <comment>write directory</comment>
17.963 - <translation>La cartella %1 non è vuota.
17.964 + <translation type="unfinished">La cartella %1 non è vuota.
17.965 Si rischia di sovvrascrivere i contenuti?</translation>
17.966 </message>
17.967 <message>
17.968 <location filename="../main.cpp" line="193"/>
17.969 <source>Couldn't open %1.
17.970 </source>
17.971 - <translation>Non è possibile aprire %1.
17.972 -</translation>
17.973 + <translation type="unfinished"></translation>
17.974 </message>
17.975 </context>
17.976 <context>
17.977 @@ -3931,7 +3924,7 @@
17.978 <message>
17.979 <location filename="../simplescripteditor.cpp" line="61"/>
17.980 <source>Save script</source>
17.981 - <translation>Salva script</translation>
17.982 + <translation type="unfinished"></translation>
17.983 </message>
17.984 <message>
17.985 <location filename="../simplescripteditor.cpp" line="73"/>
17.986 @@ -3939,81 +3932,80 @@
17.987 exists already.
17.988 Do you want to overwrite it?</source>
17.989 <comment>dialog 'save as'</comment>
17.990 - <translation>Il file %1
17.991 + <translation type="unfinished">Il file %1
17.992 esiste già.
17.993 Vuoi sovvrascriverlo?</translation>
17.994 </message>
17.995 <message>
17.996 <location filename="../simplescripteditor.cpp" line="78"/>
17.997 <source>Overwrite</source>
17.998 - <translation>Sovvrascrivi</translation>
17.999 + <translation type="unfinished">Sovvrascrivi</translation>
17.1000 </message>
17.1001 <message>
17.1002 <location filename="../simplescripteditor.cpp" line="79"/>
17.1003 <source>Cancel</source>
17.1004 - <translation>Cancella</translation>
17.1005 + <translation type="unfinished">Cancella</translation>
17.1006 </message>
17.1007 <message>
17.1008 <location filename="../simplescripteditor.cpp" line="105"/>
17.1009 <source>Load script</source>
17.1010 - <translation>Carica script</translation>
17.1011 + <translation type="unfinished"></translation>
17.1012 </message>
17.1013 <message>
17.1014 <location filename="../simplescripteditor.cpp" line="116"/>
17.1015 <source>Error</source>
17.1016 - <translation>Errore</translation>
17.1017 + <translation type="unfinished">Errore</translation>
17.1018 </message>
17.1019 <message>
17.1020 <location filename="../simplescripteditor.cpp" line="117"/>
17.1021 <source>Couldn't open %1.
17.1022 </source>
17.1023 - <translation>Non è possibile aprire %1.
17.1024 -</translation>
17.1025 + <translation type="unfinished"></translation>
17.1026 </message>
17.1027 <message>
17.1028 <location filename="../simplescripteditor.ui" line="13"/>
17.1029 <source>Simple Script Editor</source>
17.1030 - <translation>Editor semplice di script</translation>
17.1031 + <translation type="unfinished"></translation>
17.1032 </message>
17.1033 <message>
17.1034 <location filename="../simplescripteditor.ui" line="38"/>
17.1035 <source>Save as</source>
17.1036 - <translation>Salva come</translation>
17.1037 + <translation type="unfinished"></translation>
17.1038 </message>
17.1039 <message>
17.1040 <location filename="../simplescripteditor.ui" line="48"/>
17.1041 <source>Save</source>
17.1042 - <translation>Salva</translation>
17.1043 + <translation type="unfinished">Salva</translation>
17.1044 </message>
17.1045 <message>
17.1046 <location filename="../simplescripteditor.ui" line="51"/>
17.1047 <source>Qt::CTRL + Qt::Key_S</source>
17.1048 - <translation>Qt::CTRL + Qt::Key_S</translation>
17.1049 + <translation type="unfinished"></translation>
17.1050 </message>
17.1051 <message>
17.1052 <location filename="../simplescripteditor.ui" line="58"/>
17.1053 <source>Open</source>
17.1054 - <translation>Apri</translation>
17.1055 + <translation type="unfinished">Apri</translation>
17.1056 </message>
17.1057 <message>
17.1058 <location filename="../simplescripteditor.ui" line="61"/>
17.1059 <source>Qt::CTRL +Qt::Key_O</source>
17.1060 - <translation>Qt::CTRL + Qt::Key_O</translation>
17.1061 + <translation type="unfinished"></translation>
17.1062 </message>
17.1063 <message>
17.1064 <location filename="../simplescripteditor.ui" line="68"/>
17.1065 <source>Run</source>
17.1066 - <translation>Avvia</translation>
17.1067 + <translation type="unfinished"></translation>
17.1068 </message>
17.1069 <message>
17.1070 <location filename="../simplescripteditor.ui" line="71"/>
17.1071 <source>Qt::CTRL + Qt::Key_R</source>
17.1072 - <translation>Qt::CTRL + Qt::Key_R</translation>
17.1073 + <translation type="unfinished"></translation>
17.1074 </message>
17.1075 <message>
17.1076 <location filename="../simplescripteditor.ui" line="78"/>
17.1077 <source>Close</source>
17.1078 - <translation>Chiudi</translation>
17.1079 + <translation type="unfinished">Chiudi</translation>
17.1080 </message>
17.1081 </context>
17.1082 <context>
17.1083 @@ -4495,7 +4487,7 @@
17.1084 <message>
17.1085 <location filename="../warningdialog.cpp" line="15"/>
17.1086 <source>Show this message again</source>
17.1087 - <translation>Mostra ancora questo messaggio</translation>
17.1088 + <translation type="unfinished"></translation>
17.1089 </message>
17.1090 </context>
17.1091 </TS>
18.1 --- a/linkablemapobj.cpp Wed Jul 16 10:44:44 2008 +0000
18.2 +++ b/linkablemapobj.cpp Wed Jul 16 10:46:14 2008 +0000
18.3 @@ -1,8 +1,12 @@
18.4 +#include <iostream>
18.5 #include <math.h>
18.6
18.7 #include "linkablemapobj.h"
18.8 #include "branchobj.h"
18.9 -#include "mapeditor.h"
18.10 +#include "mapeditor.h" // FIXME needed?
18.11 +#include "vymmodel.h"
18.12 +
18.13 +using namespace std;
18.14
18.15 /////////////////////////////////////////////////////////////////
18.16 // LinkableMapObj
18.17 @@ -54,6 +58,8 @@
18.18
18.19 void LinkableMapObj::init ()
18.20 {
18.21 + model=NULL;
18.22 +
18.23 depth=-1;
18.24 mapEditor=NULL;
18.25 childObj=NULL;
18.26 @@ -99,6 +105,7 @@
18.27 void LinkableMapObj::copy (LinkableMapObj* other)
18.28 {
18.29 MapObj::copy(other);
18.30 + model=other->model;
18.31 bboxTotal=other->bboxTotal;
18.32 setLinkStyle(other->style);
18.33 setLinkColor (other->linkcolor);
18.34 @@ -107,6 +114,16 @@
18.35 objID=other->objID;
18.36 }
18.37
18.38 +void LinkableMapObj::setModel (VymModel *vm)
18.39 +{
18.40 + model=vm;
18.41 +}
18.42 +
18.43 +VymModel* LinkableMapObj::getModel()
18.44 +{
18.45 + return model;
18.46 +}
18.47 +
18.48 void LinkableMapObj::setChildObj(LinkableMapObj* o)
18.49 {
18.50 childObj=o;
18.51 @@ -116,13 +133,14 @@
18.52 {
18.53 parObj=o;
18.54 mapEditor=parObj->getMapEditor();
18.55 + model=parObj->getModel(); // FIXME makes painting slow, but that's obvious because there are no links to paint, hmmm....
18.56 }
18.57
18.58 -void LinkableMapObj::setParObjTmp(LinkableMapObj*,QPointF,int)
18.59 +void LinkableMapObj::setParObjTmp(LinkableMapObj*,QPointF,int) // FIXME make pure virtual
18.60 {
18.61 }
18.62
18.63 -void LinkableMapObj::unsetParObjTmp()
18.64 +void LinkableMapObj::unsetParObjTmp() // FIXME make pure virtual
18.65 {
18.66 }
18.67
18.68 @@ -180,8 +198,12 @@
18.69
18.70 LinkableMapObj::Style LinkableMapObj::getDefLinkStyle ()
18.71 {
18.72 - if (!mapEditor) return UndefinedStyle;
18.73 - Style ls=mapEditor->getMapLinkStyle();
18.74 + if (!model)
18.75 + {
18.76 + qWarning ("LMO::getDefLinkStyle model=NULL");
18.77 + return UndefinedStyle;
18.78 + }
18.79 + Style ls=model->getMapLinkStyle();
18.80 switch (ls)
18.81 {
18.82 case Line:
18.83 @@ -309,10 +331,10 @@
18.84
18.85 void LinkableMapObj::setLinkColor()
18.86 {
18.87 - // Overloaded in BranchObj and childs
18.88 + // Overloaded in BranchObj and children
18.89 // here only set default color
18.90 - if (mapEditor)
18.91 - setLinkColor (mapEditor->getMapDefLinkColor());
18.92 + if (model)
18.93 + setLinkColor (model->getMapDefLinkColor());
18.94 }
18.95
18.96 void LinkableMapObj::setLinkColor(QColor col)
18.97 @@ -606,6 +628,7 @@
18.98 void LinkableMapObj::setMapEditor (MapEditor *me)
18.99 {
18.100 mapEditor=me;
18.101 + model=mapEditor->getModel();
18.102 }
18.103
18.104 MapEditor* LinkableMapObj::getMapEditor ()
18.105 @@ -646,7 +669,7 @@
18.106 // we want to block expensive repositioning, but just do it once at
18.107 // the end, thus check first:
18.108
18.109 - if (mapEditor->isRepositionBlocked()) return;
18.110 + if (mapEditor->getModel()->isRepositionBlocked()) return; // FIXME better go to model directly, maybe via a signal
18.111
18.112 // Pass on the request to parental objects, if this hasn't been done yet
18.113
19.1 --- a/linkablemapobj.h Wed Jul 16 10:44:44 2008 +0000
19.2 +++ b/linkablemapobj.h Wed Jul 16 10:46:14 2008 +0000
19.3 @@ -9,6 +9,7 @@
19.4 #define MAX_DEPTH 999
19.5
19.6 class MapEditor;
19.7 +class VymModel;
19.8
19.9
19.10
19.11 @@ -55,6 +56,10 @@
19.12 virtual void delLink();
19.13 virtual void init ();
19.14 virtual void copy (LinkableMapObj*);
19.15 +
19.16 + virtual void setModel (VymModel *vm);
19.17 + virtual VymModel* getModel ();
19.18 +
19.19 void setChildObj (LinkableMapObj*);
19.20 virtual void setParObj (LinkableMapObj*);
19.21 virtual void setParObjTmp (LinkableMapObj*,QPointF,int); // Only for moving Obj around
19.22 @@ -94,12 +99,12 @@
19.23 LinkableMapObj* getParObj(); // returns pointer to toObj
19.24 virtual LinkableMapObj* findObjBySelect(QString s); // find obj by selectstring
19.25 virtual void setDockPos()=0; // sets childPos and parPos
19.26 - QPointF getChildPos(); // returns pos where childs dock
19.27 + QPointF getChildPos(); // returns pos where children dock
19.28 QPointF getParPos(); // returns pos where parents dock
19.29 Orientation getOrientation(); // get orientation
19.30 virtual int getDepth(); // return depth
19.31 - virtual void setMapEditor(MapEditor*); // set MapEditor (needed in LMO::updateNoteFlag)
19.32 - virtual MapEditor* getMapEditor(); // get MapEditor (usually from parent);
19.33 + virtual void setMapEditor(MapEditor*); // set MapEditor (needed in LMO::updateNoteFlag) FIXME not needed
19.34 + virtual MapEditor* getMapEditor(); // get MapEditor (usually from parent); FIXME not needed
19.35 virtual QPointF getRandPos(); // make randomised position
19.36
19.37 virtual void reposition();
19.38 @@ -108,7 +113,7 @@
19.39 // of mapeditor e.g. in noteeditor
19.40 virtual bool repositionRequested();
19.41
19.42 - virtual void calcBBoxSizeWithChilds()=0;// calc size of BBox including childs recursivly
19.43 + virtual void calcBBoxSizeWithChildren()=0;// calc size of BBox including children recursivly
19.44
19.45 virtual void select();
19.46 virtual void unselect();
19.47 @@ -120,13 +125,15 @@
19.48 QPointF childPos;
19.49 QPointF parPos;
19.50 bool link2ParPos; // While moving around, sometimes link to parent
19.51 - MapEditor* mapEditor; // for and toggleScroll(), get default styles
19.52 + MapEditor* mapEditor; // for and toggleScroll(), get default styles FIXME should not be needed with model available
19.53 // and mapEditor->updateActions()
19.54 // and mapEditor->updateSelection()
19.55 +
19.56 + VymModel* model;
19.57 Orientation orientation;
19.58 qreal linkwidth; // width of a link
19.59 int depth; // depth: undef=-1 mapCenter=0 branch=1..n
19.60 - QRectF bboxTotal; // bounding box including childs
19.61 + QRectF bboxTotal; // bounding box including children
19.62
19.63 LinkableMapObj* childObj;
19.64 LinkableMapObj* parObj;
20.1 --- a/main.cpp Wed Jul 16 10:44:44 2008 +0000
20.2 +++ b/main.cpp Wed Jul 16 10:46:14 2008 +0000
20.3 @@ -1,5 +1,8 @@
20.4 #include <QApplication>
20.5
20.6 +#include <iostream>
20.7 +using namespace std;
20.8 +
20.9 #include "flagrowobj.h"
20.10 #include "mainwindow.h"
20.11 #include "options.h"
21.1 --- a/mainwindow.cpp Wed Jul 16 10:44:44 2008 +0000
21.2 +++ b/mainwindow.cpp Wed Jul 16 10:46:14 2008 +0000
21.3 @@ -79,8 +79,6 @@
21.4 {
21.5 mainWindow=this;
21.6
21.7 - setObjectName ("MainWindow");
21.8 -
21.9 setCaption ("VYM - View Your Mind");
21.10
21.11 // Load window settings
21.12 @@ -496,6 +494,7 @@
21.13 editMenu->addAction (a);
21.14 actionEditPaste=a;
21.15
21.16 +/*
21.17 // Shortcuts to modify heading:
21.18 a = new QAction(tr( "Edit heading","Edit menu" ),this);
21.19 a->setStatusTip ( tr( "edit Heading" ));
21.20 @@ -513,6 +512,8 @@
21.21 actionListBranches.append(a);
21.22 editMenu->addAction (a);
21.23 actionEditHeading=a;
21.24 +
21.25 +*/
21.26 a = new QAction( tr( "Edit heading","Edit menu" ), this);
21.27 a->setStatusTip (tr( "edit Heading" ));
21.28 //a->setShortcut ( Qt::Key_F2 ); //Edit heading
21.29 @@ -660,10 +661,10 @@
21.30 addAction (alt);
21.31 actionListBranches.append(actionEditToggleScroll);
21.32
21.33 - a = new QAction( tr( "Unscroll childs","Edit menu" ), this);
21.34 + a = new QAction( tr( "Unscroll children","Edit menu" ), this);
21.35 a->setStatusTip (tr( "Unscroll all scrolled branches in selected subtree" ));
21.36 editMenu->addAction (a);
21.37 - connect( a, SIGNAL( triggered() ), this, SLOT( editUnscrollChilds() ) );
21.38 + connect( a, SIGNAL( triggered() ), this, SLOT( editUnscrollChildren() ) );
21.39
21.40 editMenu->addSeparator();
21.41
21.42 @@ -803,24 +804,24 @@
21.43 actionListBranches.append(a);
21.44 actionEditSaveBranch=a;
21.45
21.46 - // Only remove branch, not its childs
21.47 + // Only remove branch, not its children
21.48 a = new QAction(tr( "Remove only branch ","Edit menu" ), this);
21.49 - a->setStatusTip ( tr( "Remove only branch and keep its childs" ));
21.50 + a->setStatusTip ( tr( "Remove only branch and keep its children" ));
21.51 a->setShortcut (Qt::ALT + Qt::Key_Delete );
21.52 - connect( a, SIGNAL( triggered() ), this, SLOT( editDeleteKeepChilds() ) );
21.53 + connect( a, SIGNAL( triggered() ), this, SLOT( editDeleteKeepChildren() ) );
21.54 a->setEnabled (false);
21.55 addAction (a);
21.56 actionListBranches.append(a);
21.57 - actionEditDeleteKeepChilds=a;
21.58 -
21.59 - // Only remove childs of a branch
21.60 - a = new QAction( tr( "Remove childs","Edit menu" ), this);
21.61 - a->setStatusTip (tr( "Remove childs of branch" ));
21.62 + actionEditDeleteKeepChildren=a;
21.63 +
21.64 + // Only remove children of a branch
21.65 + a = new QAction( tr( "Remove children","Edit menu" ), this);
21.66 + a->setStatusTip (tr( "Remove children of branch" ));
21.67 a->setShortcut (Qt::SHIFT + Qt::Key_Delete );
21.68 - connect( a, SIGNAL( triggered() ), this, SLOT( editDeleteChilds() ) );
21.69 + connect( a, SIGNAL( triggered() ), this, SLOT( editDeleteChildren() ) );
21.70 a->setEnabled (false);
21.71 actionListBranches.append(a);
21.72 - actionEditDeleteChilds=a;
21.73 + actionEditDeleteChildren=a;
21.74
21.75 // Shortcuts for navigating with cursor:
21.76 a = new QAction(tr( "Select upper branch","Edit menu" ), this);
21.77 @@ -1554,8 +1555,8 @@
21.78 branchRemoveContextMenu =branchContextMenu->addMenu (tr ("Remove","Context menu name"));
21.79 branchRemoveContextMenu->addAction (actionEditCut);
21.80 branchRemoveContextMenu->addAction ( actionEditDelete );
21.81 - branchRemoveContextMenu->addAction ( actionEditDeleteKeepChilds );
21.82 - branchRemoveContextMenu->addAction ( actionEditDeleteChilds );
21.83 + branchRemoveContextMenu->addAction ( actionEditDeleteKeepChildren );
21.84 + branchRemoveContextMenu->addAction ( actionEditDeleteChildren );
21.85
21.86
21.87 actionEditSaveBranch->addTo( branchContextMenu );
21.88 @@ -1690,12 +1691,24 @@
21.89
21.90 MapEditor* Main::currentMapEditor() const
21.91 {
21.92 + // FIXME currentMapEditor should return the latest used editor for a model, or NULL if no editor is open
21.93 if ( tabWidget->currentPage() &&
21.94 tabWidget->currentPage()->inherits( "MapEditor" ) )
21.95 return (MapEditor*)tabWidget->currentPage();
21.96 return NULL;
21.97 }
21.98
21.99 +VymModel* Main::currentModel() const
21.100 +{
21.101 + // FIXME better get currentModel from a maintained list,
21.102 + // just in case we allow other views in tabs later
21.103 + MapEditor *me=currentMapEditor();
21.104 + if (me)
21.105 + return me->getModel();
21.106 + else
21.107 + return NULL;
21.108 +}
21.109 +
21.110
21.111 void Main::editorChanged(QWidget *)
21.112 {
21.113 @@ -1704,11 +1717,11 @@
21.114 MapEditor *me;
21.115 for (int i=0;i<=tabWidget->count() -1;i++)
21.116 {
21.117 +
21.118 me=(MapEditor*)tabWidget->page(i);
21.119 - me->unselect();
21.120 + me->getModel()->unselect();
21.121 }
21.122 - me=currentMapEditor();
21.123 - if (me) me->reselect();
21.124 + currentModel()->reselect();
21.125
21.126 // Update actions to in menus and toolbars according to editor
21.127 updateActions();
21.128 @@ -1716,8 +1729,10 @@
21.129
21.130 void Main::fileNew()
21.131 {
21.132 + VymModel *m=new VymModel;
21.133 + models.append (m);
21.134 + MapEditor* me = new MapEditor (m);
21.135 QString fn="unnamed";
21.136 - MapEditor* me = new MapEditor ( NULL);
21.137 tabWidget->addTab (me,fn);
21.138 tabWidget->showPage(me);
21.139 me->viewport()->setFocus();
21.140 @@ -1725,7 +1740,7 @@
21.141 me->setSmoothPixmap(actionViewToggleSmoothPixmapTransform->isOn());
21.142
21.143 // For the very first map we do not have flagrows yet...
21.144 - me->select("mc:");
21.145 + currentModel()->select("mc:");
21.146 }
21.147
21.148 void Main::fileNewCopy()
21.149 @@ -1734,8 +1749,10 @@
21.150 MapEditor* oldME =currentMapEditor();
21.151 if (oldME)
21.152 {
21.153 - oldME->copy();
21.154 - MapEditor* newME = new MapEditor ( NULL);
21.155 + oldME->getModel()->copy();
21.156 + VymModel *m=new VymModel;
21.157 + models.append (m);
21.158 + MapEditor* newME = new MapEditor ( m);
21.159 if (newME)
21.160 {
21.161 tabWidget->addTab (newME,fn);
21.162 @@ -1744,8 +1761,8 @@
21.163 newME->setAntiAlias (actionViewToggleAntiAlias->isOn());
21.164 newME->setSmoothPixmap(actionViewToggleSmoothPixmapTransform->isOn());
21.165 // For the very first map we do not have flagrows yet...
21.166 - newME->select("mc:");
21.167 - newME->load (clipboardDir+"/"+clipboardFile,ImportReplace, VymMap);
21.168 + m->select("mc:");
21.169 + m->load (clipboardDir+"/"+clipboardFile,ImportReplace, VymMap);
21.170 }
21.171
21.172 }
21.173 @@ -1770,7 +1787,7 @@
21.174 while (i<=tabWidget->count() -1)
21.175 {
21.176 me=(MapEditor*)tabWidget->page(i);
21.177 - if (me->getFilePath() == fn)
21.178 + if (me->getModel()->getFilePath() == fn)
21.179 {
21.180 // Already there, ask for confirmation
21.181 QMessageBox mb( vymName,
21.182 @@ -1809,9 +1826,11 @@
21.183 // Check first, if mapeditor exists
21.184 // If it is not default AND we want a new map,
21.185 // create a new mapeditor in a new tab
21.186 - if ( lmode==NewMap && (!me || !me->isDefault() ) )
21.187 + if ( lmode==NewMap && (!me || !me->getModel()->isDefault() ) )
21.188 {
21.189 - me= new MapEditor ( NULL);
21.190 + VymModel *m=new VymModel;
21.191 + models.append (m);
21.192 + me= new MapEditor ( m);
21.193 tabWidget->addTab (me,fn);
21.194 tabIndex=tabWidget->indexOf (me);
21.195 tabWidget->setCurrentPage (tabIndex);
21.196 @@ -1821,8 +1840,6 @@
21.197
21.198 // Check, if file exists (important for creating new files
21.199 // from command line
21.200 - /*
21.201 - */
21.202 if (!QFile(fn).exists() )
21.203 {
21.204 QMessageBox mb( vymName,
21.205 @@ -1838,9 +1855,9 @@
21.206 {
21.207 case QMessageBox::Yes:
21.208 // Create new map
21.209 - currentMapEditor()->setFilePath(fn);
21.210 + currentMapEditor()->getModel()->setFilePath(fn);
21.211 tabWidget->setTabLabel (currentMapEditor(),
21.212 - currentMapEditor()->getFileName() );
21.213 + currentMapEditor()->getModel()->getFileName() );
21.214 statusBar()->message( "Created " + fn , statusbarTime );
21.215 return success;
21.216
21.217 @@ -1852,6 +1869,7 @@
21.218 }
21.219 }
21.220
21.221 +
21.222 //tabWidget->currentPage() won't be NULL here, because of above...
21.223 tabWidget->showPage(me);
21.224 me->viewport()->setFocus();
21.225 @@ -1859,15 +1877,15 @@
21.226 if (err!=aborted)
21.227 {
21.228 // Save existing filename in case we import
21.229 - QString fn_org=me->getFilePath();
21.230 + QString fn_org=me->getModel()->getFilePath();
21.231
21.232 // Finally load map into mapEditor
21.233 - me->setFilePath (fn);
21.234 - err=me->load(fn,lmode,ftype);
21.235 + me->getModel()->setFilePath (fn);
21.236 + err=me->getModel()->load(fn,lmode,ftype);
21.237
21.238 // Restore old (maybe empty) filepath, if this is an import
21.239 if (lmode!=NewMap)
21.240 - me->setFilePath (fn_org);
21.241 + me->getModel()->setFilePath (fn_org);
21.242 }
21.243
21.244 // Finally check for errors and go home
21.245 @@ -1879,13 +1897,13 @@
21.246 {
21.247 if (lmode==NewMap)
21.248 {
21.249 - me->setFilePath (fn);
21.250 - tabWidget->changeTab(tabWidget->page(tabIndex), me->getFileName());
21.251 + me->getModel()->setFilePath (fn);
21.252 + tabWidget->changeTab(tabWidget->page(tabIndex), me->getModel()->getFileName());
21.253 if (!isInTmpDir (fn))
21.254 {
21.255 // Only append to lastMaps if not loaded from a tmpDir
21.256 // e.g. imported bookmarks are in a tmpDir
21.257 - addRecentMap(me->getFilePath() );
21.258 + addRecentMap(me->getModel()->getFilePath() );
21.259 }
21.260 actionFilePrint->setEnabled (true);
21.261 }
21.262 @@ -1960,40 +1978,40 @@
21.263 setupRecentMapsMenu();
21.264 }
21.265
21.266 -void Main::fileSave(MapEditor *me, const SaveMode &savemode)
21.267 +void Main::fileSave(VymModel *m, const SaveMode &savemode)
21.268 {
21.269 - if (!me) return;
21.270 -
21.271 - if ( me->getFilePath().isEmpty() )
21.272 + if (!m) return;
21.273 +
21.274 + if ( m->getFilePath().isEmpty() )
21.275 {
21.276 // We have no filepath yet,
21.277 // call fileSaveAs() now, this will call fileSave()
21.278 // again.
21.279 // First switch to editor
21.280 - tabWidget->setCurrentWidget (me);
21.281 + tabWidget->setCurrentWidget (m->getMapEditor());
21.282 fileSaveAs(savemode);
21.283 }
21.284
21.285 - if (me->save (savemode)==success)
21.286 + if (m->save (savemode)==success)
21.287 {
21.288 statusBar()->message(
21.289 - tr("Saved %1").arg(me->getFilePath()),
21.290 + tr("Saved %1").arg(m->getFilePath()),
21.291 statusbarTime );
21.292 - addRecentMap (me->getFilePath() );
21.293 + addRecentMap (m->getFilePath() );
21.294 } else
21.295 statusBar()->message(
21.296 - tr("Couldn't save ").arg(me->getFilePath()),
21.297 + tr("Couldn't save ").arg(m->getFilePath()),
21.298 statusbarTime );
21.299 }
21.300
21.301 void Main::fileSave()
21.302 {
21.303 - fileSave (currentMapEditor(), CompleteMap);
21.304 + fileSave (currentModel(), CompleteMap);
21.305 }
21.306
21.307 -void Main::fileSave(MapEditor *me)
21.308 +void Main::fileSave(VymModel *m)
21.309 {
21.310 - fileSave (me,CompleteMap);
21.311 + fileSave (m,CompleteMap);
21.312 }
21.313
21.314 void Main::fileSaveAs(const SaveMode& savemode)
21.315 @@ -2048,13 +2066,13 @@
21.316
21.317
21.318 // Save now
21.319 - currentMapEditor()->setFilePath(fn);
21.320 - fileSave(currentMapEditor(), savemode);
21.321 + currentModel()->setFilePath(fn);
21.322 + fileSave(currentModel(), savemode);
21.323
21.324 // Set name of tab
21.325 if (savemode==CompleteMap)
21.326 tabWidget->setTabLabel (currentMapEditor(),
21.327 - currentMapEditor()->getFileName() );
21.328 + currentModel()->getFileName() );
21.329 return;
21.330 }
21.331 }
21.332 @@ -2070,7 +2088,7 @@
21.333 ImportKDEBookmarks im;
21.334 im.transform();
21.335 if (success==fileLoad (im.getTransformedFile(),NewMap) && currentMapEditor() )
21.336 - currentMapEditor()->setFilePath ("");
21.337 + currentMapEditor()->getModel()->setFilePath ("");
21.338 }
21.339
21.340 void Main::fileImportFirefoxBookmarks()
21.341 @@ -2093,7 +2111,7 @@
21.342 if (im.transform() &&
21.343 success==fileLoad (im.getTransformedFile(),NewMap,FreemindMap) &&
21.344 currentMapEditor() )
21.345 - currentMapEditor()->setFilePath ("");
21.346 + currentMapEditor()->getModel()->setFilePath ("");
21.347 ++it;
21.348 }
21.349 }
21.350 @@ -2122,7 +2140,7 @@
21.351 fn = *it;
21.352 if ( fileLoad (fn,NewMap, FreemindMap) )
21.353 {
21.354 - currentMapEditor()->setFilePath ("");
21.355 + currentMapEditor()->getModel()->setFilePath ("");
21.356 }
21.357 ++it;
21.358 }
21.359 @@ -2153,80 +2171,78 @@
21.360 if (im.transform() &&
21.361 success==fileLoad (im.getTransformedFile(),NewMap) &&
21.362 currentMapEditor() )
21.363 - currentMapEditor()->setFilePath ("");
21.364 -
21.365 + currentMapEditor()->getModel()->setFilePath ("");
21.366 ++it;
21.367 }
21.368 }
21.369 delete (fd);
21.370 -
21.371 }
21.372
21.373 void Main::fileImportDir()
21.374 {
21.375 - if (currentMapEditor())
21.376 - currentMapEditor()->importDir();
21.377 + VymModel *m=currentModel();
21.378 + if (m) m->importDir();
21.379 }
21.380
21.381 void Main::fileExportXML()
21.382 {
21.383 - MapEditor *me=currentMapEditor();
21.384 - if (me) me->exportXML();
21.385 + VymModel *m=currentModel();
21.386 + if (m) m->exportXML();
21.387 }
21.388
21.389
21.390 void Main::fileExportXHTML()
21.391 {
21.392 - MapEditor *me=currentMapEditor();
21.393 - if (me) me->exportXHTML();
21.394 + VymModel *m=currentModel();
21.395 + if (m) m->exportXHTML();
21.396 }
21.397
21.398 void Main::fileExportImage()
21.399 {
21.400 - MapEditor *me=currentMapEditor();
21.401 - if (me) me->exportImage();
21.402 + VymModel *m=currentModel();
21.403 + if (m) m->exportImage();
21.404 }
21.405
21.406 void Main::fileExportASCII()
21.407 {
21.408 - MapEditor *me=currentMapEditor();
21.409 - if (me) me->exportASCII();
21.410 + VymModel *m=currentModel();
21.411 + if (m) m->exportASCII();
21.412 }
21.413
21.414 void Main::fileExportCSV() //FIXME not scriptable yet
21.415 {
21.416 - MapEditor *me=currentMapEditor();
21.417 - if (me)
21.418 + VymModel *m=currentModel();
21.419 + if (m)
21.420 {
21.421 ExportCSV ex;
21.422 - ex.setModel (me->getModel());
21.423 + ex.setModel (m);
21.424 ex.addFilter ("CSV (*.csv)");
21.425 ex.setDir(lastImageDir);
21.426 ex.setCaption(vymName+ " -" +tr("Export as CSV")+" "+tr("(still experimental)"));
21.427 if (ex.execDialog() )
21.428 {
21.429 - me->setExportMode(true);
21.430 + m->setExportMode(true);
21.431 ex.doExport();
21.432 - me->setExportMode(false);
21.433 + m->setExportMode(false);
21.434 }
21.435 }
21.436 }
21.437
21.438 void Main::fileExportLaTeX() //FIXME not scriptable yet
21.439 {
21.440 - MapEditor *me=currentMapEditor();
21.441 - if (me)
21.442 + VymModel *m=currentModel();
21.443 + if (m)
21.444 {
21.445 ExportLaTeX ex;
21.446 - ex.setModel (me->getModel());
21.447 + ex.setModel (m);
21.448 ex.addFilter ("Tex (*.tex)");
21.449 ex.setDir(lastImageDir);
21.450 ex.setCaption(vymName+ " -" +tr("Export as LaTeX")+" "+tr("(still experimental)"));
21.451 if (ex.execDialog() )
21.452 {
21.453 - me->setExportMode(true);
21.454 + m->setExportMode(true);
21.455 ex.doExport();
21.456 - me->setExportMode(false);
21.457 + m->setExportMode(false);
21.458 }
21.459 }
21.460 }
21.461 @@ -2234,10 +2250,10 @@
21.462 void Main::fileExportKDEBookmarks() //FIXME not scriptable yet
21.463 {
21.464 ExportKDEBookmarks ex;
21.465 - MapEditor *me=currentMapEditor();
21.466 - if (me)
21.467 + VymModel *m=currentModel();
21.468 + if (m)
21.469 {
21.470 - ex.setModel (me->getModel());
21.471 + ex.setModel (m);
21.472 ex.doExport();
21.473 }
21.474 }
21.475 @@ -2245,18 +2261,18 @@
21.476 void Main::fileExportTaskjuggler() //FIXME not scriptable yet
21.477 {
21.478 ExportTaskjuggler ex;
21.479 - MapEditor *me=currentMapEditor();
21.480 - if (me)
21.481 + VymModel *m=currentModel();
21.482 + if (m)
21.483 {
21.484 - ex.setModel (me->getModel());
21.485 + ex.setModel (m);
21.486 ex.setCaption ( vymName+" - "+tr("Export to")+" Taskjuggler"+tr("(still experimental)"));
21.487 ex.setDir(lastImageDir);
21.488 ex.addFilter ("Taskjuggler (*.tjp)");
21.489 if (ex.execDialog() )
21.490 {
21.491 - me->setExportMode(true);
21.492 + m->setExportMode(true);
21.493 ex.doExport();
21.494 - me->setExportMode(false);
21.495 + m->setExportMode(false);
21.496 }
21.497 }
21.498 }
21.499 @@ -2282,8 +2298,8 @@
21.500 fn +=".odp";
21.501
21.502 //lastImageDir=fn.left(fn.findRev ("/"));
21.503 - if (currentMapEditor())
21.504 - currentMapEditor()->exportOOPresentation(fn,fd->selectedConfig());
21.505 + VymModel *m=currentModel();
21.506 + if (m) m->exportOOPresentation(fn,fd->selectedConfig());
21.507 }
21.508 } else
21.509 {
21.510 @@ -2296,12 +2312,13 @@
21.511 void Main::fileCloseMap()
21.512 {
21.513 MapEditor *me = currentMapEditor();
21.514 - if (me)
21.515 + VymModel *m=currentModel();
21.516 + if (m)
21.517 {
21.518 - if (me->hasChanged())
21.519 + if (m->hasChanged())
21.520 {
21.521 QMessageBox mb( vymName,
21.522 - tr("The map %1 has been modified but not saved yet. Do you want to").arg(me->getFileName()),
21.523 + tr("The map %1 has been modified but not saved yet. Do you want to").arg(me->getModel()->getFileName()),
21.524 QMessageBox::Warning,
21.525 QMessageBox::Yes | QMessageBox::Default,
21.526 QMessageBox::No,
21.527 @@ -2312,7 +2329,7 @@
21.528 {
21.529 case QMessageBox::Yes:
21.530 // save and close
21.531 - fileSave(me, CompleteMap);
21.532 + fileSave(m, CompleteMap);
21.533 break;
21.534 case QMessageBox::No:
21.535 // close without saving
21.536 @@ -2322,13 +2339,12 @@
21.537 return;
21.538 }
21.539 }
21.540 - //me->closeMap();
21.541 - tabWidget->removePage(me);
21.542 + //me->closeMap(); FIXME should not be necessary any longer
21.543 + me->close();
21.544 + tabWidget->removePage(m->getMapEditor());
21.545 if (tabWidget->count()==0)
21.546 actionFilePrint->setEnabled (false);
21.547 -
21.548 - //delete me;
21.549 - me->clear();
21.550 + delete me;
21.551 }
21.552 }
21.553
21.554 @@ -2349,7 +2365,7 @@
21.555 me=(MapEditor*)tabWidget->page(i);
21.556
21.557 // If something changed, ask what to do
21.558 - if (me->hasChanged())
21.559 + if (me->getModel()->hasChanged())
21.560 {
21.561 tabWidget->setCurrentPage(i);
21.562 QMessageBox mb( vymName,
21.563 @@ -2366,7 +2382,7 @@
21.564 switch( mb.exec() ) {
21.565 case QMessageBox::Yes:
21.566 // save (the changed editors) and exit
21.567 - fileSave(currentMapEditor(), CompleteMap);
21.568 + fileSave(currentModel(), CompleteMap);
21.569 break;
21.570 case QMessageBox::No:
21.571 // exit without saving
21.572 @@ -2382,38 +2398,38 @@
21.573
21.574 void Main::editUndo()
21.575 {
21.576 - if (currentMapEditor())
21.577 - currentMapEditor()->undo();
21.578 + VymModel *m=currentModel();
21.579 + if (m) m->undo();
21.580 }
21.581
21.582 void Main::editRedo()
21.583 {
21.584 - if (currentMapEditor())
21.585 - currentMapEditor()->redo();
21.586 + VymModel *m=currentModel();
21.587 + if (m) m->redo();
21.588 }
21.589
21.590 void Main::gotoHistoryStep (int i)
21.591 {
21.592 - if (currentMapEditor())
21.593 - currentMapEditor()->gotoHistoryStep (i);
21.594 + VymModel *m=currentModel();
21.595 + if (m) m->gotoHistoryStep(i);
21.596 }
21.597
21.598 void Main::editCopy()
21.599 {
21.600 - if (currentMapEditor())
21.601 - currentMapEditor()->copy();
21.602 + VymModel *m=currentModel();
21.603 + if (m) m->copy();
21.604 }
21.605
21.606 void Main::editPaste()
21.607 {
21.608 - if (currentMapEditor())
21.609 - currentMapEditor()->paste();
21.610 + VymModel *m=currentModel();
21.611 + if (m) m->paste();
21.612 }
21.613
21.614 void Main::editCut()
21.615 {
21.616 - if (currentMapEditor())
21.617 - currentMapEditor()->cut();
21.618 + VymModel *m=currentModel();
21.619 + if (m) m->cut();
21.620 }
21.621
21.622 void Main::editOpenFindWindow()
21.623 @@ -2425,21 +2441,26 @@
21.624
21.625 void Main::editFind(QString s)
21.626 {
21.627 - bool cs=false;
21.628 - BranchObj *bo=currentMapEditor()->findText(s, cs);
21.629 - if (bo)
21.630 - {
21.631 - statusBar()->message( "Found: " + bo->getHeading(), statusbarTime );
21.632 - } else
21.633 + VymModel *m=currentModel();
21.634 + if (m)
21.635 {
21.636 - QMessageBox::information( findWindow, tr( "VYM -Information:" ),
21.637 - tr("No matches found for \"%1\"").arg(s));
21.638 - }
21.639 + bool cs=false;
21.640 + BranchObj *bo=m->findText(s, cs);
21.641 + if (bo)
21.642 + {
21.643 + statusBar()->message( "Found: " + bo->getHeading(), statusbarTime );
21.644 + } else
21.645 + {
21.646 + QMessageBox::information( findWindow, tr( "VYM -Information:" ),
21.647 + tr("No matches found for \"%1\"").arg(s));
21.648 + }
21.649 + }
21.650 }
21.651
21.652 void Main::editFindChanged()
21.653 { // Notify editor, to abort the current find process
21.654 - currentMapEditor()->findReset();
21.655 + VymModel *m=currentModel();
21.656 + if (m) m->findReset();
21.657 }
21.658
21.659 void Main::openTabs(QStringList urls)
21.660 @@ -2527,9 +2548,10 @@
21.661 void Main::editOpenURL()
21.662 {
21.663 // Open new browser
21.664 - if (currentMapEditor())
21.665 + VymModel *m=currentModel();
21.666 + if (m)
21.667 {
21.668 - QString url=currentMapEditor()->getURL();
21.669 + QString url=m->getURL();
21.670 QStringList args;
21.671 if (url=="") return;
21.672 QString browser=settings.value("/mainwindow/readerURL" ).toString();
21.673 @@ -2549,19 +2571,21 @@
21.674 }
21.675 void Main::editOpenURLTab()
21.676 {
21.677 - if (currentMapEditor())
21.678 + VymModel *m=currentModel();
21.679 + if (m)
21.680 {
21.681 QStringList urls;
21.682 - urls.append(currentMapEditor()->getURL());
21.683 + urls.append(m->getURL());
21.684 openTabs (urls);
21.685 }
21.686 }
21.687 void Main::editOpenMultipleURLTabs()
21.688 {
21.689 - if (currentMapEditor())
21.690 + VymModel *m=currentModel();
21.691 + if (m)
21.692 {
21.693 QStringList urls;
21.694 - urls=currentMapEditor()->getURLs();
21.695 + urls=m->getURLs();
21.696 openTabs (urls);
21.697 }
21.698 }
21.699 @@ -2569,49 +2593,58 @@
21.700
21.701 void Main::editURL()
21.702 {
21.703 - if (currentMapEditor())
21.704 - currentMapEditor()->editURL();
21.705 + VymModel *m=currentModel();
21.706 + if (m) m->editURL();
21.707 }
21.708
21.709 void Main::editLocalURL()
21.710 {
21.711 - if (currentMapEditor())
21.712 - currentMapEditor()->editLocalURL();
21.713 + VymModel *m=currentModel();
21.714 + if (m) m->editLocalURL();
21.715 }
21.716
21.717 void Main::editHeading2URL()
21.718 {
21.719 - if (currentMapEditor())
21.720 - currentMapEditor()->editHeading2URL();
21.721 + VymModel *m=currentModel();
21.722 + if (m) m->editHeading2URL();
21.723 }
21.724
21.725 void Main::editBugzilla2URL()
21.726 {
21.727 - if (currentMapEditor())
21.728 - currentMapEditor()->editBugzilla2URL();
21.729 + VymModel *m=currentModel();
21.730 + if (m) m->editBugzilla2URL();
21.731 }
21.732
21.733 void Main::editFATE2URL()
21.734 {
21.735 - if (currentMapEditor())
21.736 - currentMapEditor()->editFATE2URL();
21.737 + VymModel *m=currentModel();
21.738 + if (m) m->editFATE2URL();
21.739 }
21.740
21.741 -void Main::editHeadingFinished()
21.742 +void Main::editHeadingFinished(VymModel *m)
21.743 {
21.744 + if (m)
21.745 + {
21.746 + if (!actionSettingsAutoSelectNewBranch->isOn() &&
21.747 + !prevSelection.isEmpty())
21.748 + m->select(prevSelection);
21.749 + prevSelection="";
21.750 + }
21.751 +
21.752 +/* FIXME old code, remove now
21.753 // only called from editHeading(), so there is a currentME
21.754 - MapEditor *me=currentMapEditor();
21.755 - if (me)
21.756 + VymModel *m=currentModel();
21.757 + if (m)
21.758 {
21.759 - me->setStateEditHeading (false);
21.760 + m->setSelectionBlocked (false);
21.761 QPoint p; //Not used here, only to find out pos of branch
21.762 bool ok;
21.763 - QString s=me->getHeading(ok,p);
21.764 + QString s=m->getHeading(ok,p);
21.765
21.766 #if defined(Q_OS_MACX) || defined(Q_OS_WIN32)
21.767 #else
21.768 if (ok && s!=lineedit->text())
21.769 - me->setHeading(lineedit->text());
21.770 + m->setHeading(lineedit->text());
21.771
21.772 lineedit->releaseKeyboard();
21.773 lineedit->hide();
21.774 @@ -2619,17 +2652,20 @@
21.775 #endif
21.776 if (!actionSettingsAutoSelectNewBranch->isOn() &&
21.777 !prevSelection.isEmpty())
21.778 - me->select(prevSelection);
21.779 + m->select(prevSelection);
21.780 prevSelection="";
21.781 }
21.782 +*/
21.783 }
21.784
21.785 +/*
21.786 void Main::editHeading()
21.787 {
21.788 - if (currentMapEditor())
21.789 + MapEditor *me=currentMapEditor();
21.790 + VymModel *m=currentModel();
21.791 + if (me && m)
21.792 {
21.793 - MapEditor *me=currentMapEditor();
21.794 - QString oldSel=me->getSelectString();
21.795 + QString oldSel=m->getSelectString();
21.796
21.797 if (lineedit->isVisible())
21.798 editHeadingFinished();
21.799 @@ -2637,11 +2673,11 @@
21.800 {
21.801 bool ok;
21.802 QPoint p;
21.803 - QString s=me->getHeading(ok,p);
21.804 + QString s=m->getHeading(ok,p);
21.805
21.806 if (ok)
21.807 {
21.808 - me->setStateEditHeading (true);
21.809 + m->setSelectionBlocked(true);
21.810 #if defined(Q_OS_MACX) || defined(Q_OS_WIN32)
21.811 p=me->mapToGlobal (p);
21.812 QDialog *d =new QDialog(NULL);
21.813 @@ -2654,7 +2690,7 @@
21.814 connect (le, SIGNAL (returnPressed()), d, SLOT (accept()));
21.815 d->activateWindow();
21.816 d->exec();
21.817 - me->setHeading (le->text());
21.818 + m->setHeading (le->text());
21.819 delete (le);
21.820 delete (d);
21.821 editHeadingFinished();
21.822 @@ -2670,8 +2706,9 @@
21.823 #endif
21.824 }
21.825 }
21.826 - } // currentMapEditor()
21.827 + }
21.828 }
21.829 +*/
21.830
21.831 void Main::editAttributeFinished()
21.832 {
21.833 @@ -2707,10 +2744,11 @@
21.834 #include "attributedialog.h"
21.835 void Main::editAttribute()
21.836 {
21.837 +/*
21.838 MapEditor *me=currentMapEditor();
21.839 if (me)
21.840 {
21.841 - BranchObj *bo=me->getSelectedBranch();
21.842 + BranchObj *bo=me->getModel()->getSelectedBranch();
21.843 if (bo)
21.844 {
21.845 AttributeDialog dia(this);
21.846 @@ -2721,6 +2759,7 @@
21.847 dia.exec();
21.848 }
21.849 }
21.850 + */
21.851 /*
21.852 if (currentMapEditor())
21.853 {
21.854 @@ -2782,7 +2821,7 @@
21.855 for (i=0;i<=tabWidget->count() -1;i++)
21.856 {
21.857 me=(MapEditor*)tabWidget->page(i);
21.858 - if (vl.at(j)==me->getFilePath() )
21.859 + if (vl.at(j)==me->getModel()->getFilePath() )
21.860 {
21.861 index=i;
21.862 break;
21.863 @@ -2807,10 +2846,11 @@
21.864
21.865 void Main::editOpenVymLink()
21.866 {
21.867 - if (currentMapEditor())
21.868 + VymModel *m=currentModel();
21.869 + if (m)
21.870 {
21.871 QStringList vl;
21.872 - vl.append(currentMapEditor()->getVymLink());
21.873 + vl.append(m->getVymLink());
21.874 openVymLinks (vl);
21.875 }
21.876 }
21.877 @@ -2818,168 +2858,204 @@
21.878 void Main::editOpenMultipleVymLinks()
21.879 {
21.880 QString currentVymLink;
21.881 - if (currentMapEditor())
21.882 + VymModel *m=currentModel();
21.883 + if (m)
21.884 {
21.885 - QStringList vl=currentMapEditor()->getVymLinks();
21.886 + QStringList vl=m->getVymLinks();
21.887 openVymLinks (vl);
21.888 }
21.889 }
21.890
21.891 void Main::editVymLink()
21.892 {
21.893 - if (currentMapEditor())
21.894 - currentMapEditor()->editVymLink();
21.895 + VymModel *m=currentModel();
21.896 + if (m)
21.897 + m->editVymLink();
21.898 }
21.899
21.900 void Main::editDeleteVymLink()
21.901 {
21.902 - if (currentMapEditor())
21.903 - currentMapEditor()->deleteVymLink();
21.904 + VymModel *m=currentModel();
21.905 + if (m) m->deleteVymLink();
21.906 }
21.907
21.908 void Main::editToggleHideExport()
21.909 {
21.910 - if (currentMapEditor())
21.911 - currentMapEditor()->toggleHideExport();
21.912 + VymModel *m=currentModel();
21.913 + if (m) m->toggleHideExport();
21.914 }
21.915
21.916 void Main::editMapInfo()
21.917 {
21.918 - if (currentMapEditor())
21.919 - currentMapEditor()->editMapInfo();
21.920 + VymModel *m=currentModel();
21.921 +
21.922 + ExtraInfoDialog dia;
21.923 + dia.setMapName (m->getFileName() );
21.924 + dia.setAuthor (m->getAuthor() );
21.925 + dia.setComment(m->getComment() );
21.926 +
21.927 +/* FIXME no stats at the moment (view dependent...)
21.928 + // Calc some stats
21.929 + QString stats;
21.930 + stats+=tr("%1 items on map\n","Info about map").arg (mapScene->items().size(),6);
21.931 +
21.932 + uint b=0;
21.933 + uint f=0;
21.934 + uint n=0;
21.935 + uint xl=0;
21.936 + BranchObj *bo;
21.937 + bo=m->first();
21.938 + while (bo)
21.939 + {
21.940 + if (!bo->getNote().isEmpty() ) n++;
21.941 + f+= bo->countFloatImages();
21.942 + b++;
21.943 + xl+=bo->countXLinks();
21.944 + bo=m->next(bo);
21.945 + }
21.946 + stats+=QString ("%1 branches\n").arg (b-1,6);
21.947 + stats+=QString ("%1 xLinks \n").arg (xl,6);
21.948 + stats+=QString ("%1 notes\n").arg (n,6);
21.949 + stats+=QString ("%1 images\n").arg (f,6);
21.950 + dia.setStats (stats);
21.951 +
21.952 +*/
21.953 + // Finally show dialog
21.954 + if (dia.exec() == QDialog::Accepted)
21.955 + {
21.956 + m->setAuthor (dia.getAuthor() );
21.957 + m->setComment (dia.getComment() );
21.958 + }
21.959 }
21.960
21.961 void Main::editMoveUp()
21.962 {
21.963 - if (currentMapEditor())
21.964 - currentMapEditor()->moveBranchUp();
21.965 + VymModel *m=currentModel();
21.966 + if (m) m->moveBranchUp();
21.967 }
21.968
21.969 void Main::editMoveDown()
21.970 {
21.971 - if (currentMapEditor())
21.972 - currentMapEditor()->moveBranchDown();
21.973 + VymModel *m=currentModel();
21.974 + if (m) m->moveBranchDown();
21.975 }
21.976
21.977 void Main::editSortChildren()
21.978 {
21.979 - if (currentMapEditor())
21.980 - currentMapEditor()->sortChildren();
21.981 + VymModel *m=currentModel();
21.982 + if (m) m->sortChildren();
21.983 }
21.984
21.985 void Main::editToggleScroll()
21.986 {
21.987 - if (currentMapEditor())
21.988 + VymModel *m=currentModel();
21.989 + if (m) m->toggleScroll();
21.990 +}
21.991 +
21.992 +void Main::editUnscrollChildren()
21.993 +{
21.994 + VymModel *m=currentModel();
21.995 + if (m) m->unscrollChildren();
21.996 +}
21.997 +
21.998 +void Main::editAddMapCenter()
21.999 +{
21.1000 + VymModel *m=currentModel();
21.1001 + if (!lineedit->isVisible() && m)
21.1002 {
21.1003 - currentMapEditor()->toggleScroll();
21.1004 + m->addMapCenter ();
21.1005 }
21.1006 }
21.1007
21.1008 -void Main::editUnscrollChilds()
21.1009 -{
21.1010 - if (currentMapEditor())
21.1011 - currentMapEditor()->unscrollChilds();
21.1012 -}
21.1013 -
21.1014 -void Main::editAddMapCenter()
21.1015 -{
21.1016 - MapEditor *me=currentMapEditor();
21.1017 - if (!lineedit->isVisible() && me)
21.1018 - {
21.1019 - me->addMapCenter ();
21.1020 - }
21.1021 -}
21.1022 -
21.1023 void Main::editNewBranch()
21.1024 {
21.1025 - MapEditor *me=currentMapEditor();
21.1026 - if (!lineedit->isVisible() && me)
21.1027 + VymModel *m=currentModel();
21.1028 + if (!lineedit->isVisible() && m)
21.1029 {
21.1030 - BranchObj *bo=(BranchObj*)me->getSelection();
21.1031 - BranchObj *newbo=me->addNewBranch(0);
21.1032 -
21.1033 - prevSelection=me->getModel()->getSelectString(bo);
21.1034 + BranchObj *bo=(BranchObj*)m->getSelection();
21.1035 + BranchObj *newbo=m->addNewBranch(0);
21.1036 +
21.1037 + prevSelection=m->getSelectString(bo);
21.1038 if (newbo)
21.1039 - me->select (newbo);
21.1040 + m->select (newbo);
21.1041 else
21.1042 return;
21.1043
21.1044 if (actionSettingsAutoEditNewBranch->isOn())
21.1045 {
21.1046 - editHeading();
21.1047 + currentMapEditor()->editHeading();
21.1048 return;
21.1049 }
21.1050 if (!prevSelection.isEmpty())
21.1051 {
21.1052 - me->select(prevSelection);
21.1053 + m->select(prevSelection);
21.1054 prevSelection="";
21.1055 }
21.1056 -
21.1057 }
21.1058 }
21.1059
21.1060 void Main::editNewBranchBefore()
21.1061 {
21.1062 - MapEditor *me=currentMapEditor();
21.1063 - if (!lineedit->isVisible() && me)
21.1064 + VymModel *m=currentModel();
21.1065 + if (!lineedit->isVisible() && m)
21.1066 {
21.1067 - BranchObj *bo=(BranchObj*)me->getSelection();
21.1068 - BranchObj *newbo=me->addNewBranchBefore();
21.1069 + BranchObj *bo=(BranchObj*)m->getSelection();
21.1070 + BranchObj *newbo=m->addNewBranchBefore();
21.1071
21.1072 if (newbo)
21.1073 - me->select (newbo);
21.1074 + m->select (newbo);
21.1075 else
21.1076 return;
21.1077
21.1078 if (actionSettingsAutoEditNewBranch->isOn())
21.1079 {
21.1080 if (!actionSettingsAutoSelectNewBranch->isOn())
21.1081 - prevSelection=me->getModel()->getSelectString(bo); //TODO access directly
21.1082 - editHeading();
21.1083 + prevSelection=m->getSelectString(bo);
21.1084 + currentMapEditor()->editHeading();
21.1085 }
21.1086 }
21.1087 }
21.1088
21.1089 void Main::editNewBranchAbove()
21.1090 {
21.1091 - MapEditor *me=currentMapEditor();
21.1092 - if (!lineedit->isVisible() && me)
21.1093 + VymModel *m=currentModel();
21.1094 + if (!lineedit->isVisible() && m)
21.1095 {
21.1096 - BranchObj *bo=(BranchObj*)me->getSelection();
21.1097 - BranchObj *newbo=me->addNewBranch (-1);
21.1098 + BranchObj *bo=(BranchObj*)m->getSelection();
21.1099 + BranchObj *newbo=m->addNewBranch (-1);
21.1100
21.1101 if (newbo)
21.1102 - me->select (newbo);
21.1103 + m->select (newbo);
21.1104 else
21.1105 return;
21.1106
21.1107 if (actionSettingsAutoEditNewBranch->isOn())
21.1108 {
21.1109 if (!actionSettingsAutoSelectNewBranch->isOn())
21.1110 - prevSelection=me->getModel()->getSelectString (bo); // TODO access directly
21.1111 - editHeading();
21.1112 + prevSelection=m->getSelectString (bo);
21.1113 + currentMapEditor()->editHeading();
21.1114 }
21.1115 }
21.1116 }
21.1117
21.1118 void Main::editNewBranchBelow()
21.1119 {
21.1120 - MapEditor *me=currentMapEditor();
21.1121 - if (!lineedit->isVisible() && me)
21.1122 + VymModel *m=currentModel();
21.1123 + if (!lineedit->isVisible() && m)
21.1124 {
21.1125 - BranchObj *bo=(BranchObj*)me->getSelection();
21.1126 - BranchObj *newbo=me->addNewBranch (1);
21.1127 + BranchObj *bo=(BranchObj*)m->getSelection();
21.1128 + BranchObj *newbo=m->addNewBranch (1);
21.1129
21.1130 if (newbo)
21.1131 - me->select (newbo);
21.1132 + m->select (newbo);
21.1133 else
21.1134 return;
21.1135
21.1136 if (actionSettingsAutoEditNewBranch->isOn())
21.1137 {
21.1138 if (!actionSettingsAutoSelectNewBranch->isOn())
21.1139 - prevSelection=me->getModel()->getSelectString(bo); //TODO access directly
21.1140 - editHeading();
21.1141 + prevSelection=m->getSelectString(bo);
21.1142 + currentMapEditor()->editHeading();
21.1143 }
21.1144 }
21.1145 }
21.1146 @@ -2999,99 +3075,100 @@
21.1147 fileSaveAs (PartOfMap);
21.1148 }
21.1149
21.1150 -void Main::editDeleteKeepChilds()
21.1151 +void Main::editDeleteKeepChildren()
21.1152 {
21.1153 - if (currentMapEditor())
21.1154 - currentMapEditor()->deleteKeepChilds();
21.1155 + VymModel *m=currentModel();
21.1156 + if (m) m->deleteKeepChildren();
21.1157 }
21.1158
21.1159 -void Main::editDeleteChilds()
21.1160 +void Main::editDeleteChildren()
21.1161 {
21.1162 - if (currentMapEditor())
21.1163 - currentMapEditor()->deleteChilds();
21.1164 + VymModel *m=currentModel();
21.1165 + if (m) m->deleteChildren();
21.1166 }
21.1167
21.1168 void Main::editDeleteSelection()
21.1169 {
21.1170 - if (currentMapEditor() && actionSettingsUseDelKey->isOn())
21.1171 - currentMapEditor()->deleteSelection();
21.1172 + VymModel *m=currentModel();
21.1173 + if (m && actionSettingsUseDelKey->isOn())
21.1174 + m->deleteSelection();
21.1175 }
21.1176
21.1177 void Main::editUpperBranch()
21.1178 {
21.1179 - if (currentMapEditor())
21.1180 - currentMapEditor()->selectUpperBranch();
21.1181 + VymModel *m=currentModel();
21.1182 + if (m) m->selectUpperBranch();
21.1183 }
21.1184
21.1185 void Main::editLowerBranch()
21.1186 {
21.1187 - if (currentMapEditor())
21.1188 - currentMapEditor()->selectLowerBranch();
21.1189 + VymModel *m=currentModel();
21.1190 + if (m) m->selectLowerBranch();
21.1191 }
21.1192
21.1193 void Main::editLeftBranch()
21.1194 {
21.1195 - if (currentMapEditor())
21.1196 - currentMapEditor()->selectLeftBranch();
21.1197 + VymModel *m=currentModel();
21.1198 + if (m) m->selectLeftBranch();
21.1199 }
21.1200
21.1201 void Main::editRightBranch()
21.1202 {
21.1203 - if (currentMapEditor())
21.1204 - currentMapEditor()->selectRightBranch();
21.1205 + VymModel *m=currentModel();
21.1206 + if (m) m->selectRightBranch();
21.1207 }
21.1208
21.1209 void Main::editFirstBranch()
21.1210 {
21.1211 - if (currentMapEditor())
21.1212 - currentMapEditor()->selectFirstBranch();
21.1213 + VymModel *m=currentModel();
21.1214 + if (m) m->selectFirstBranch();
21.1215 }
21.1216
21.1217 void Main::editLastBranch()
21.1218 {
21.1219 - if (currentMapEditor())
21.1220 - currentMapEditor()->selectLastBranch();
21.1221 + VymModel *m=currentModel();
21.1222 + if (m) m->selectLastBranch();
21.1223 }
21.1224
21.1225 void Main::editLoadImage()
21.1226 {
21.1227 - if (currentMapEditor())
21.1228 - currentMapEditor()->loadFloatImage();
21.1229 + VymModel *m=currentModel();
21.1230 + if (m) m->loadFloatImage();
21.1231 }
21.1232
21.1233 void Main::editSaveImage()
21.1234 {
21.1235 - if (currentMapEditor())
21.1236 - currentMapEditor()->saveFloatImage();
21.1237 + VymModel *m=currentModel();
21.1238 + if (m) m->saveFloatImage();
21.1239 }
21.1240
21.1241 void Main::editFollowXLink(QAction *a)
21.1242 {
21.1243
21.1244 - if (currentMapEditor())
21.1245 - currentMapEditor()->followXLink(branchXLinksContextMenuFollow->actions().indexOf(a));
21.1246 + VymModel *m=currentModel();
21.1247 + if (m)
21.1248 + m->followXLink(branchXLinksContextMenuFollow->actions().indexOf(a));
21.1249 }
21.1250
21.1251 void Main::editEditXLink(QAction *a)
21.1252 {
21.1253 - if (currentMapEditor())
21.1254 - currentMapEditor()->editXLink(branchXLinksContextMenuEdit->actions().indexOf(a));
21.1255 + VymModel *m=currentModel();
21.1256 + if (m)
21.1257 + m->editXLink(branchXLinksContextMenuEdit->actions().indexOf(a));
21.1258 }
21.1259
21.1260 void Main::formatSelectColor()
21.1261 {
21.1262 - if (currentMapEditor())
21.1263 - {
21.1264 - QColor col = QColorDialog::getColor((currentColor ), this );
21.1265 - if ( !col.isValid() ) return;
21.1266 - colorChanged( col );
21.1267 - }
21.1268 + QColor col = QColorDialog::getColor((currentColor ), this );
21.1269 + if ( !col.isValid() ) return;
21.1270 + colorChanged( col );
21.1271 }
21.1272
21.1273 void Main::formatPickColor()
21.1274 {
21.1275 - if (currentMapEditor())
21.1276 - colorChanged( currentMapEditor()->getCurrentHeadingColor() );
21.1277 + VymModel *m=currentModel();
21.1278 + if (m)
21.1279 + colorChanged( m->getCurrentHeadingColor() );
21.1280 }
21.1281
21.1282 void Main::colorChanged(QColor c)
21.1283 @@ -3104,86 +3181,102 @@
21.1284
21.1285 void Main::formatColorBranch()
21.1286 {
21.1287 - if (currentMapEditor())
21.1288 - currentMapEditor()->colorBranch(currentColor);
21.1289 + VymModel *m=currentModel();
21.1290 + if (m) m->colorBranch(currentColor);
21.1291 }
21.1292
21.1293 void Main::formatColorSubtree()
21.1294 {
21.1295 - if (currentMapEditor())
21.1296 - currentMapEditor()->colorSubtree (currentColor);
21.1297 + VymModel *m=currentModel();
21.1298 + if (m) m->colorSubtree (currentColor);
21.1299 }
21.1300
21.1301 void Main::formatLinkStyleLine()
21.1302 {
21.1303 - if (currentMapEditor())
21.1304 + VymModel *m=currentModel();
21.1305 + if (m)
21.1306 {
21.1307 - currentMapEditor()->setMapLinkStyle("StyleLine");
21.1308 + m->setMapLinkStyle("StyleLine");
21.1309 actionFormatLinkStyleLine->setOn(true);
21.1310 }
21.1311 }
21.1312
21.1313 void Main::formatLinkStyleParabel()
21.1314 {
21.1315 - if (currentMapEditor())
21.1316 + VymModel *m=currentModel();
21.1317 + if (m)
21.1318 {
21.1319 - currentMapEditor()->setMapLinkStyle("StyleParabel");
21.1320 + m->setMapLinkStyle("StyleParabel");
21.1321 actionFormatLinkStyleParabel->setOn(true);
21.1322 }
21.1323 }
21.1324
21.1325 void Main::formatLinkStylePolyLine()
21.1326 {
21.1327 - if (currentMapEditor())
21.1328 + VymModel *m=currentModel();
21.1329 + if (m)
21.1330 {
21.1331 - currentMapEditor()->setMapLinkStyle("StylePolyLine");
21.1332 + m->setMapLinkStyle("StylePolyLine");
21.1333 actionFormatLinkStylePolyLine->setOn(true);
21.1334 }
21.1335 }
21.1336
21.1337 void Main::formatLinkStylePolyParabel()
21.1338 {
21.1339 - if (currentMapEditor())
21.1340 + VymModel *m=currentModel();
21.1341 + if (m)
21.1342 {
21.1343 - currentMapEditor()->setMapLinkStyle("StylePolyParabel");
21.1344 + m->setMapLinkStyle("StylePolyParabel");
21.1345 actionFormatLinkStylePolyParabel->setOn(true);
21.1346 }
21.1347 }
21.1348
21.1349 void Main::formatSelectBackColor()
21.1350 {
21.1351 - if (currentMapEditor())
21.1352 - currentMapEditor()->selectMapBackgroundColor();
21.1353 + VymModel *m=currentModel();
21.1354 + if (m) m->selectMapBackgroundColor();
21.1355 }
21.1356
21.1357 void Main::formatSelectBackImage()
21.1358 {
21.1359 - if (currentMapEditor())
21.1360 - currentMapEditor()->selectMapBackgroundImage();
21.1361 + VymModel *m=currentModel();
21.1362 + if (m)
21.1363 + m->selectMapBackgroundImage();
21.1364 }
21.1365
21.1366 void Main::formatSelectLinkColor()
21.1367 {
21.1368 - if (currentMapEditor())
21.1369 - currentMapEditor()->selectMapLinkColor();
21.1370 + VymModel *m=currentModel();
21.1371 + if (m)
21.1372 + {
21.1373 + QColor col = QColorDialog::getColor( m->getMapDefLinkColor(), this );
21.1374 + m->setMapDefLinkColor( col );
21.1375 + }
21.1376 }
21.1377
21.1378 void Main::formatSelectSelectionColor()
21.1379 {
21.1380 - if (currentMapEditor())
21.1381 - currentMapEditor()->selectMapSelectionColor();
21.1382 + VymModel *m=currentModel();
21.1383 + if (m)
21.1384 + {
21.1385 + QColor col = QColorDialog::getColor( m->getMapDefLinkColor(), this );
21.1386 + m->setSelectionColor (col);
21.1387 + }
21.1388 +
21.1389 }
21.1390
21.1391 void Main::formatToggleLinkColorHint()
21.1392 {
21.1393 - currentMapEditor()->toggleMapLinkColorHint();
21.1394 + VymModel *m=currentModel();
21.1395 + if (m) m->toggleMapLinkColorHint();
21.1396 }
21.1397
21.1398
21.1399 void Main::formatHideLinkUnselected() //FIXME get rid of this with imagepropertydialog
21.1400 {
21.1401 - if (currentMapEditor())
21.1402 - currentMapEditor()->setHideLinkUnselected(actionFormatHideLinkUnselected->isOn());
21.1403 + VymModel *m=currentModel();
21.1404 + if (m)
21.1405 + m->setHideLinkUnselected(actionFormatHideLinkUnselected->isOn());
21.1406 }
21.1407
21.1408 void Main::viewZoomReset()
21.1409 @@ -3218,23 +3311,20 @@
21.1410
21.1411 void Main::viewCenter()
21.1412 {
21.1413 - MapEditor *me=currentMapEditor();
21.1414 - if (me)
21.1415 - {
21.1416 - me->ensureSelectionVisible();
21.1417 - }
21.1418 + VymModel *m=currentModel();
21.1419 + if (m) m->ensureSelectionVisible();
21.1420 }
21.1421
21.1422 void Main::networkStartServer()
21.1423 {
21.1424 - MapEditor *me=currentMapEditor();
21.1425 - if (me) me->newServer();
21.1426 + VymModel *m=currentModel();
21.1427 + if (m) m->newServer();
21.1428 }
21.1429
21.1430 void Main::networkConnect()
21.1431 {
21.1432 - MapEditor *me=currentMapEditor();
21.1433 - if (me) me->connectToServer();
21.1434 + VymModel *m=currentModel();
21.1435 + if (m) m->connectToServer();
21.1436 }
21.1437
21.1438 bool Main::settingsPDF()
21.1439 @@ -3352,19 +3442,7 @@
21.1440 branchPropertyWindow->hide();
21.1441 else
21.1442 branchPropertyWindow->show();
21.1443 -
21.1444 - if(currentMapEditor())
21.1445 - {
21.1446 - BranchObj *bo=currentMapEditor()->getSelectedBranch();
21.1447 - if (bo)
21.1448 - {
21.1449 - branchPropertyWindow->setMapEditor(currentMapEditor());
21.1450 - branchPropertyWindow->setBranch(bo);
21.1451 - return;
21.1452 - }
21.1453 -
21.1454 - }
21.1455 - branchPropertyWindow->setBranch(NULL);
21.1456 + branchPropertyWindow->setModel (currentModel() );
21.1457 }
21.1458
21.1459 void Main::windowToggleAntiAlias()
21.1460 @@ -3373,7 +3451,6 @@
21.1461 MapEditor *me;
21.1462 for (int i=0;i<tabWidget->count();i++)
21.1463 {
21.1464 -
21.1465 me=(MapEditor*)tabWidget->page(i);
21.1466 me->setAntiAlias(b);
21.1467 }
21.1468 @@ -3399,33 +3476,35 @@
21.1469
21.1470 void Main::updateNoteFlag()
21.1471 {
21.1472 - if (currentMapEditor())
21.1473 - currentMapEditor()->updateNoteFlag();
21.1474 + // this slot is connected to TextEditor::textHasChanged()
21.1475 +
21.1476 + VymModel *m=currentModel();
21.1477 + if (m) m->updateNoteFlag();
21.1478 }
21.1479
21.1480 void Main::updateSatellites(MapEditor *me)
21.1481 {
21.1482 - branchPropertyWindow->setMapEditor (me);
21.1483 + branchPropertyWindow->setModel (me->getModel() );
21.1484 }
21.1485
21.1486 void Main::updateActions()
21.1487 {
21.1488 - MapEditor *me=currentMapEditor();
21.1489 - if (!me) return;
21.1490 -
21.1491 - historyWindow->setCaption (vymName + " - " +tr("History for %1","Window Caption").arg(currentMapEditor()->getFileName()));
21.1492 + VymModel *m =currentModel();
21.1493 + if (!m) return;
21.1494 +
21.1495 + historyWindow->setCaption (vymName + " - " +tr("History for %1","Window Caption").arg(m->getFileName()));
21.1496
21.1497 // updateActions is also called when NoteEditor is closed
21.1498 actionViewToggleNoteEditor->setOn (textEditor->isVisible());
21.1499 actionViewToggleHistoryWindow->setOn (historyWindow->isVisible());
21.1500 actionViewTogglePropertyWindow->setOn (branchPropertyWindow->isVisible());
21.1501
21.1502 - if (me->getMapLinkColorHint()==LinkableMapObj::HeadingColor)
21.1503 + if (m->getMapLinkColorHint()==LinkableMapObj::HeadingColor)
21.1504 actionFormatLinkColorHint->setOn(true);
21.1505 else
21.1506 actionFormatLinkColorHint->setOn(false);
21.1507
21.1508 - switch (me->getMapLinkStyle())
21.1509 + switch (m->getMapLinkStyle())
21.1510 {
21.1511 case LinkableMapObj::Line:
21.1512 actionFormatLinkStyleLine->setOn(true);
21.1513 @@ -3445,26 +3524,26 @@
21.1514
21.1515 // Update colors
21.1516 QPixmap pix( 16, 16 );
21.1517 - pix.fill( me->getMapBackgroundColor() );
21.1518 + pix.fill( m->getMapBackgroundColor() );
21.1519 actionFormatBackColor->setIconSet( pix );
21.1520 - pix.fill( me->getSelectionColor() );
21.1521 + pix.fill( m->getSelectionColor() );
21.1522 actionFormatSelectionColor->setIconSet( pix );
21.1523 - pix.fill( me->getMapDefLinkColor() );
21.1524 + pix.fill( m->getMapDefLinkColor() );
21.1525 actionFormatLinkColor->setIconSet( pix );
21.1526
21.1527
21.1528 - actionFileSave->setEnabled( me->hasChanged() );
21.1529 - if (me->isUndoAvailable())
21.1530 + actionFileSave->setEnabled( m->hasChanged() );
21.1531 + if (m->isUndoAvailable())
21.1532 actionEditUndo->setEnabled( true);
21.1533 else
21.1534 actionEditUndo->setEnabled( false);
21.1535
21.1536 - if (me->isRedoAvailable())
21.1537 + if (m->isRedoAvailable())
21.1538 actionEditRedo->setEnabled( true);
21.1539 else
21.1540 actionEditRedo->setEnabled( false);
21.1541
21.1542 - LinkableMapObj *selection=me->getSelection();
21.1543 + LinkableMapObj *selection=m->getSelection();
21.1544 if (selection)
21.1545 {
21.1546 if ( (typeid(*selection) == typeid(BranchObj)) ||
21.1547 @@ -3636,8 +3715,8 @@
21.1548
21.1549 void Main::runScript (const QString &script)
21.1550 {
21.1551 - if (currentMapEditor())
21.1552 - currentMapEditor()->runScript (script);
21.1553 + VymModel *m=currentModel();
21.1554 + if (m) m->runScript (script);
21.1555 }
21.1556
21.1557 void Main::runScriptEverywhere (const QString &script)
21.1558 @@ -3646,7 +3725,7 @@
21.1559 for (int i=0;i<=tabWidget->count() -1;i++)
21.1560 {
21.1561 me=(MapEditor*)tabWidget->page(i);
21.1562 - if (me) me->runScript (script);
21.1563 + if (me) me->getModel()->runScript (script);
21.1564 }
21.1565 }
21.1566
21.1567 @@ -3828,41 +3907,13 @@
21.1568 }
21.1569
21.1570 QTextStream ts( &f );
21.1571 - QString m= ts.read();
21.1572 -
21.1573 - if (! m.isEmpty())
21.1574 + QString macro= ts.read();
21.1575 +
21.1576 + if (! macro.isEmpty())
21.1577 {
21.1578 - //cout <<"Main::callMacro m="<<qPrintable (m)<<endl;
21.1579 - currentMapEditor()->runScript (m);
21.1580 + VymModel *m=currentModel();
21.1581 + if (m) m->runScript(macro);
21.1582 }
21.1583 }
21.1584 }
21.1585
21.1586 -
21.1587 -
21.1588 -//////////////////////////////////
21.1589 -/*
21.1590 -@@ -2544,18 +2576,27 @@
21.1591 - // Try to open new tab in existing konqueror started previously by vym
21.1592 - p=new QProcess (this);
21.1593 - args.clear();
21.1594 -- args<< QString("konqueror-%1").arg(procBrowser->pid())<<
21.1595 -- "konqueror-mainwindow#1"<<
21.1596 -- "newTab" <<
21.1597 -+#if defined(Q_OS_WIN32)
21.1598 -+ // In Win32, pid is not a longlong, but a pointer to a _PROCESS_INFORMATION structure.
21.1599 -+ // Redundant change in Win32, as there's no konqueror, but I wanted to follow the original logic.
21.1600 -+ args<< QString("konqueror-%1").arg(procBrowser->pid()->dwProcessId)<<
21.1601 -+ "konqueror-mainwindow#1"<<
21.1602 -+ "newTab" <<
21.1603 - urls.at(i);
21.1604 -+#else
21.1605 -+ args<< QString("konqueror-%1").arg(procBrowser->pid())<<
21.1606 -+ "konqueror-mainwindow#1"<<
21.1607 -+ "newTab" <<
21.1608 -+ urls.at(i);
21.1609 -+#endif
21.1610 - p->start ("dcop",args);
21.1611 - if ( !p->waitForStarted() ) success=false;
21.1612 - }
21.1613 -*/
22.1 --- a/mainwindow.h Wed Jul 16 10:44:44 2008 +0000
22.2 +++ b/mainwindow.h Wed Jul 16 10:46:14 2008 +0000
22.3 @@ -4,6 +4,7 @@
22.4 #include <QMainWindow>
22.5
22.6 #include "branchpropwindow.h"
22.7 +#include "extrainfodialog.h"
22.8 #include "file.h"
22.9 #include "findwindow.h"
22.10 #include "historywindow.h"
22.11 @@ -56,6 +57,7 @@
22.12 void hideEvent (QHideEvent * );
22.13 void showEvent (QShowEvent * );
22.14 MapEditor* currentMapEditor() const;
22.15 + VymModel* currentModel() const;
22.16
22.17 private slots:
22.18 void editorChanged(QWidget*);
22.19 @@ -65,10 +67,10 @@
22.20 void fileLoad();
22.21 void fileLoadRecent();
22.22 void addRecentMap (const QString &);
22.23 - void fileSave(MapEditor*, const SaveMode & );
22.24 + void fileSave(VymModel*, const SaveMode & );
22.25 void fileSave();
22.26 public slots:
22.27 - void fileSave(MapEditor *); // autosave from MapEditor
22.28 + void fileSave(VymModel*); // autosave from MapEditor
22.29 private slots:
22.30 void fileSaveAs(const SaveMode &);
22.31 void fileSaveAs();
22.32 @@ -116,10 +118,10 @@
22.33 void openVymLinks(const QStringList &);
22.34 void editVymLink();
22.35 void editOpenMultipleVymLinks();
22.36 - void editHeadingFinished();
22.37 void editAttributeFinished();
22.38 public slots:
22.39 - void editHeading();
22.40 + void editHeadingFinished(VymModel *m);
22.41 +// void editHeading();
22.42 void editAttribute();
22.43 void editOpenVymLink();
22.44 private slots:
22.45 @@ -130,7 +132,7 @@
22.46 void editMoveDown();
22.47 void editSortChildren();
22.48 void editToggleScroll();
22.49 - void editUnscrollChilds();
22.50 + void editUnscrollChildren();
22.51 void editAddMapCenter();
22.52 void editNewBranch();
22.53 void editNewBranchBefore();
22.54 @@ -139,8 +141,8 @@
22.55 void editImportAdd();
22.56 void editImportReplace();
22.57 void editSaveBranch();
22.58 - void editDeleteKeepChilds();
22.59 - void editDeleteChilds();
22.60 + void editDeleteKeepChildren();
22.61 + void editDeleteChildren();
22.62 void editDeleteSelection();
22.63 void editUpperBranch();
22.64 void editLowerBranch();
22.65 @@ -230,6 +232,8 @@
22.66
22.67 QStringList imageTypes;
22.68
22.69 + QList <VymModel*> models;
22.70 +
22.71 QLineEdit *lineedit; // to enter headings of branches
22.72 QString prevSelection;
22.73
22.74 @@ -284,8 +288,8 @@
22.75 QAction *actionEditAddBranchBefore;
22.76 QAction *actionEditAddBranchAbove;
22.77 QAction *actionEditAddBranchBelow;
22.78 - QAction *actionEditDeleteKeepChilds;
22.79 - QAction *actionEditDeleteChilds;
22.80 + QAction *actionEditDeleteKeepChildren;
22.81 + QAction *actionEditDeleteChildren;
22.82 QAction *actionEditImportAdd;
22.83 QAction *actionEditImportReplace;
22.84 QAction *actionEditSaveBranch;
23.1 --- a/mapcenterobj.cpp Wed Jul 16 10:44:44 2008 +0000
23.2 +++ b/mapcenterobj.cpp Wed Jul 16 10:46:14 2008 +0000
23.3 @@ -73,7 +73,7 @@
23.4
23.5 void MapCenterObj::moveAllBy (double dx, double dy)
23.6 {
23.7 - // Move myself and childs
23.8 + // Move myself and children
23.9 BranchObj::moveBy(dx,dy);
23.10 }
23.11
24.1 --- a/noteobj.cpp Wed Jul 16 10:44:44 2008 +0000
24.2 +++ b/noteobj.cpp Wed Jul 16 10:46:14 2008 +0000
24.3 @@ -51,6 +51,7 @@
24.4
24.5 QString NoteObj::getNoteASCII(const QString &indent, const int &width)
24.6 {
24.7 + // FIXME make use of width
24.8 QString r=note;
24.9
24.10 // Remove all <style...> ...</style>
24.11 @@ -167,12 +168,13 @@
24.12 {
24.13 QString n=note;
24.14
24.15 - // Remove the doctype, which will confuse parsing
24.16 + // Remove the doctype, which will confuse parsing
24.17 // with XmlReader in Qt >= 4.4
24.18 QRegExp rx("<!DOCTYPE.*>");
24.19 rx.setMinimal(true);
24.20 n.replace (rx,"");
24.21 -
24.22 +
24.23 +
24.24 // QTextEdit may generate fontnames with unquoted &, like
24.25 // in "Lucida B&H". This is invalid in XML and thus would crash
24.26 // the XML parser
24.27 @@ -183,6 +185,7 @@
24.28 bool inbracket=false;
24.29 int begin_bracket=0;
24.30 bool inquot=false;
24.31 +
24.32 while (pos<n.length())
24.33 {
24.34 if (n.mid(pos,1)=="<")
24.35 @@ -197,7 +200,7 @@
24.36 int sl=s.length();
24.37 if (s.count("style=\"")>1)
24.38 {
24.39 - rx.setPattern("style=\\s*\"(.*)\"\\s*style=\\s*\"(.*)\"");
24.40 + rx.setPattern ("style=\\s*\"(.*)\"\\s*style=\\s*\"(.*)\"");
24.41 s.replace(rx,"style=\"\\1 \\2\"");
24.42 n.replace (begin_bracket,sl,s);
24.43 pos=pos-(sl-s.length());
24.44 @@ -218,8 +221,6 @@
24.45 }
24.46 pos++;
24.47 }
24.48 -
24.49 -
24.50 return beginElement ("htmlnote",attribut("fonthint",fonthint)) + "\n"+ n+ "\n" +endElement ("htmlnote");
24.51 }
24.52
25.1 --- a/ornamentedobj.cpp Wed Jul 16 10:44:44 2008 +0000
25.2 +++ b/ornamentedobj.cpp Wed Jul 16 10:46:14 2008 +0000
25.3 @@ -93,10 +93,10 @@
25.4
25.5 void OrnamentedObj::setLinkColor()
25.6 {
25.7 - if (mapEditor->getMapLinkColorHint()==HeadingColor)
25.8 + if (model->getMapLinkColorHint()==HeadingColor)
25.9 LinkableMapObj::setLinkColor (heading->getColor());
25.10 else
25.11 - LinkableMapObj::setLinkColor (mapEditor->getMapDefLinkColor());
25.12 + LinkableMapObj::setLinkColor (model->getMapDefLinkColor());
25.13 }
25.14
25.15 void OrnamentedObj::setColor (QColor col)
25.16 @@ -321,7 +321,7 @@
25.17 QDir d(s);
25.18 if (!d.path().startsWith ("/"))
25.19 {
25.20 - QString p=mapEditor->getDestPath();
25.21 + QString p=model->getDestPath();
25.22 int i=p.findRev("/",-1);
25.23 d.setPath(p.left(i)+"/"+s);
25.24 d.convertToAbs();
25.25 @@ -432,7 +432,7 @@
25.26 if (!systemFlags->isActive ("note")) return;
25.27 systemFlags->deactivate("note");
25.28 }
25.29 - mapEditor->setChanged();
25.30 + model->setChanged();
25.31 calcBBoxSize();
25.32 positionBBox();
25.33 move (absPos.x(), absPos.y() );
25.34 @@ -498,7 +498,7 @@
25.35
25.36 QString vymLinkAttr;
25.37 if (!vymLink.isEmpty())
25.38 - vymLinkAttr=attribut ("vymLink",convertToRel(mapEditor->getDestPath(),vymLink) );
25.39 + vymLinkAttr=attribut ("vymLink",convertToRel(model->getDestPath(),vymLink) );
25.40
25.41 QString hideExpAttr;
25.42 if (hideExport)
26.1 --- a/ornamentedobj.h Wed Jul 16 10:44:44 2008 +0000
26.2 +++ b/ornamentedobj.h Wed Jul 16 10:46:14 2008 +0000
26.3 @@ -79,7 +79,7 @@
26.4 virtual void updateNoteFlag();
26.5 virtual void getNoteFromTextEditor ();
26.6 virtual void updateFlagsToolbar();
26.7 - virtual void setHideInExport(bool); // set export of object (and childs)
26.8 + virtual void setHideInExport(bool); // set export of object (and children)
26.9 virtual bool hideInExport();
26.10 virtual bool isHidden ();
26.11 virtual QString getOrnXMLAttr(); // get attributes for saveToDir
27.1 --- a/selection.cpp Wed Jul 16 10:44:44 2008 +0000
27.2 +++ b/selection.cpp Wed Jul 16 10:46:14 2008 +0000
27.3 @@ -13,6 +13,7 @@
27.4 Selection::Selection()
27.5 {
27.6 color= QColor(255,255,0);
27.7 + blocked=false;
27.8 }
27.9
27.10 Selection::~Selection()
27.11 @@ -37,7 +38,7 @@
27.12 lastSelectList.clear();
27.13 }
27.14
27.15 -void Selection::update()
27.16 +void Selection::update() // FIXME this needs to be adapted to several views
27.17 {
27.18 QRectF bbox;
27.19 int w=0;
27.20 @@ -120,6 +121,21 @@
27.21 }
27.22 }
27.23
27.24 +bool Selection::isBlocked()
27.25 +{
27.26 + return blocked;
27.27 +}
27.28 +
27.29 +void Selection::block()
27.30 +{
27.31 + blocked=true;
27.32 +}
27.33 +
27.34 +void Selection::unblock()
27.35 +{
27.36 + blocked=false;
27.37 +}
27.38 +
27.39 bool Selection::isEmpty()
27.40 {
27.41 return selectList.isEmpty();
28.1 --- a/selection.h Wed Jul 16 10:44:44 2008 +0000
28.2 +++ b/selection.h Wed Jul 16 10:46:14 2008 +0000
28.3 @@ -29,6 +29,9 @@
28.4 bool select (const QString &);
28.5 bool reselect ();
28.6 void unselect ();
28.7 + bool isBlocked ();
28.8 + void block();
28.9 + void unblock();
28.10 bool isEmpty();
28.11 uint count();
28.12 Type type();
28.13 @@ -48,6 +51,8 @@
28.14 QGraphicsScene *scene;
28.15
28.16 QColor color;
28.17 + bool blocked; //!< if true, no new selection possible
28.18 };
28.19 +
28.20 #endif
28.21
29.1 --- a/version.h Wed Jul 16 10:44:44 2008 +0000
29.2 +++ b/version.h Wed Jul 16 10:46:14 2008 +0000
29.3 @@ -4,10 +4,10 @@
29.4 #include <QString>
29.5
29.6 #define __VYM_NAME "VYM"
29.7 -#define __VYM_VERSION "1.12.1"
29.8 -#define __VYM_CODENAME "Maintenance Update"
29.9 -//#define __VYM_CODENAME "Codename: development version"
29.10 -#define __VYM_BUILD_DATE "2008-07-14"
29.11 +#define __VYM_VERSION "1.13.0"
29.12 +//#define __VYM_CODENAME "Codename: RC-1"
29.13 +#define __VYM_CODENAME "Codename: development version"
29.14 +#define __VYM_BUILD_DATE "2008-07-02"
29.15
29.16
29.17 bool checkVersion(const QString &);
30.1 --- a/vym.pro Wed Jul 16 10:44:44 2008 +0000
30.2 +++ b/vym.pro Wed Jul 16 10:46:14 2008 +0000
30.3 @@ -7,11 +7,10 @@
30.4 TRANSLATIONS += lang/vym_de.ts
30.5 TRANSLATIONS += lang/vym_en.ts
30.6 TRANSLATIONS += lang/vym_es.ts
30.7 +TRANSLATIONS += lang/vym_it.ts
30.8 TRANSLATIONS += lang/vym_fr.ts
30.9 -TRANSLATIONS += lang/vym_it.ts
30.10 +TRANSLATIONS += lang/vym_zh_CN.ts
30.11 TRANSLATIONS += lang/vym_pt_BR.ts
30.12 -TRANSLATIONS += lang/vym_ru.ts
30.13 -TRANSLATIONS += lang/vym_zh_CN.ts
30.14
30.15 # Manifest embedding was suggested by Qt docs somewhere...
30.16 win32: CONFIG += embed_manifest_exe
31.1 --- a/vymmodel.cpp Wed Jul 16 10:44:44 2008 +0000
31.2 +++ b/vymmodel.cpp Wed Jul 16 10:46:14 2008 +0000
31.3 @@ -1,32 +1,122 @@
31.4 #include <QApplication>
31.5 #include <typeinfo>
31.6
31.7 +#include "vymmodel.h"
31.8 +
31.9 +#include "editxlinkdialog.h"
31.10 +#include "exports.h"
31.11 +#include "exportxhtmldialog.h"
31.12 +#include "file.h"
31.13 #include "geometry.h" // for addBBox
31.14 -#include "vymmodel.h"
31.15 -
31.16 -
31.17 +#include "mainwindow.h"
31.18 +#include "mapcenterobj.h"
31.19 +#include "misc.h"
31.20 +#include "parser.h"
31.21 +#include "selection.h"
31.22 +
31.23 +
31.24 +#include "warningdialog.h"
31.25 +#include "xml-freemind.h"
31.26 +#include "xml-vym.h"
31.27 +
31.28 +
31.29 +extern bool debug;
31.30 +extern Main *mainWindow;
31.31 extern Settings settings;
31.32 +extern QString tmpVymDir;
31.33 +
31.34 +extern TextEditor *textEditor;
31.35 +
31.36 +
31.37 +extern QString clipboardDir;
31.38 +extern QString clipboardFile;
31.39 +extern bool clipboardEmpty;
31.40 +
31.41 +extern ImageIO imageIO;
31.42 +
31.43 +extern QString vymName;
31.44 +extern QString vymVersion;
31.45 +extern QDir vymBaseDir;
31.46 +
31.47 +extern QDir lastImageDir;
31.48 +extern QDir lastFileDir;
31.49 +
31.50 +extern FlagRowObj *standardFlagsDefault;
31.51 +
31.52 +extern Settings settings;
31.53 +
31.54 +
31.55 +
31.56 +int VymModel::mapNum=0; // make instance
31.57
31.58 VymModel::VymModel()
31.59 {
31.60 // cout << "Const VymModel\n";
31.61 + init();
31.62 }
31.63
31.64
31.65 VymModel::~VymModel()
31.66 {
31.67 // cout << "Destr VymModel\n";
31.68 + autosaveTimer->stop();
31.69 + fileChangedTimer->stop();
31.70 + clear();
31.71 }
31.72
31.73 void VymModel::clear()
31.74 {
31.75 + selection.clear();
31.76 +
31.77 while (!mapCenters.isEmpty())
31.78 delete mapCenters.takeFirst();
31.79 }
31.80
31.81 void VymModel::init ()
31.82 {
31.83 - addMapCenter();
31.84 + // We should have at least one map center to start with
31.85 + // addMapCenter(); FIXME create this in MapEditor as long as model is part of that
31.86 +
31.87 + // History
31.88 + mapNum++;
31.89 + mapChanged=false;
31.90 + mapDefault=true;
31.91 + mapUnsaved=false;
31.92 +
31.93 + curStep=0;
31.94 + redosAvail=0;
31.95 + undosAvail=0;
31.96 +
31.97 + stepsTotal=settings.readNumEntry("/history/stepsTotal",100);
31.98 + undoSet.setEntry ("/history/stepsTotal",QString::number(stepsTotal));
31.99 + mainWindow->updateHistory (undoSet);
31.100 +
31.101 + // Create tmp dirs
31.102 + makeTmpDirectories();
31.103 +
31.104 + // Files
31.105 + zipped=true;
31.106 + filePath="";
31.107 + fileName=tr("unnamed");
31.108 + mapName="";
31.109 + blockReposition=false;
31.110 + blockSaveState=false;
31.111 +
31.112 + autosaveTimer=new QTimer (this);
31.113 + connect(autosaveTimer, SIGNAL(timeout()), this, SLOT(autosave()));
31.114 +
31.115 + fileChangedTimer=new QTimer (this);
31.116 + fileChangedTimer->start(3000);
31.117 + connect(fileChangedTimer, SIGNAL(timeout()), this, SLOT(fileChanged()));
31.118 +
31.119 +
31.120 + // selections
31.121 + selection.setModel (this);
31.122 + selection.unselect();
31.123 +
31.124 + // find routine
31.125 + itFind=NULL;
31.126 + EOFind=false;
31.127
31.128 // animations
31.129 animationUse=settings.readBoolEntry("/animation/use",false);
31.130 @@ -36,8 +126,36 @@
31.131 animationTimer=new QTimer (this);
31.132 connect(animationTimer, SIGNAL(timeout()), this, SLOT(animate()));
31.133
31.134 + // View - map
31.135 + defLinkColor=QColor (0,0,255);
31.136 + defXLinkColor=QColor (180,180,180);
31.137 + linkcolorhint=LinkableMapObj::DefaultColor;
31.138 + linkstyle=LinkableMapObj::PolyParabel;
31.139 + defXLinkWidth=1;
31.140 + defXLinkColor=QColor (230,230,230);
31.141 +
31.142 + hidemode=HideNone;
31.143 +
31.144 +
31.145 +
31.146 + // Network
31.147 + netstate=Offline;
31.148 +
31.149 + // Create MapCenter
31.150 + // addMapCenter(); FIXME create this in MapEditor until BO and MCO are independent of scene
31.151 +
31.152 }
31.153
31.154 +void VymModel::makeTmpDirectories()
31.155 +{
31.156 + // Create unique temporary directories
31.157 + tmpMapDir = tmpVymDir+QString("/model-%1").arg(mapNum);
31.158 + histPath = tmpMapDir+"/history";
31.159 + QDir d;
31.160 + d.mkdir (tmpMapDir);
31.161 +}
31.162 +
31.163 +
31.164 void VymModel::setMapEditor(MapEditor *me)
31.165 {
31.166 mapEditor=me;
31.167 @@ -50,76 +168,1183 @@
31.168 return mapEditor;
31.169 }
31.170
31.171 -void VymModel::setVersion (const QString &s)
31.172 +bool VymModel::isRepositionBlocked()
31.173 {
31.174 - version=s;
31.175 + return blockReposition;
31.176 }
31.177
31.178 -void VymModel::setAuthor (const QString &s)
31.179 +void VymModel::updateActions() // FIXME maybe don't update if blockReposition is set
31.180 {
31.181 - author=s;
31.182 + // Tell mainwindow to update states of actions
31.183 + mainWindow->updateActions();
31.184 }
31.185
31.186 -QString VymModel::getAuthor()
31.187 +
31.188 +
31.189 +QString VymModel::saveToDir(const QString &tmpdir, const QString &prefix, bool writeflags, const QPointF &offset, LinkableMapObj *saveSel)
31.190 {
31.191 - return author;
31.192 + // tmpdir temporary directory to which data will be written
31.193 + // prefix mapname, which will be appended to images etc.
31.194 + // writeflags Only write flags for "real" save of map, not undo
31.195 + // offset offset of bbox of whole map in scene.
31.196 + // Needed for XML export
31.197 +
31.198 + // Save Header
31.199 + QString ls;
31.200 + switch (linkstyle)
31.201 + {
31.202 + case LinkableMapObj::Line:
31.203 + ls="StyleLine";
31.204 + break;
31.205 + case LinkableMapObj::Parabel:
31.206 + ls="StyleParabel";
31.207 + break;
31.208 + case LinkableMapObj::PolyLine:
31.209 + ls="StylePolyLine";
31.210 + break;
31.211 + default:
31.212 + ls="StylePolyParabel";
31.213 + break;
31.214 + }
31.215 +
31.216 + QString s="<?xml version=\"1.0\" encoding=\"utf-8\"?><!DOCTYPE vymmap>\n";
31.217 + QString colhint="";
31.218 + if (linkcolorhint==LinkableMapObj::HeadingColor)
31.219 + colhint=attribut("linkColorHint","HeadingColor");
31.220 +
31.221 + QString mapAttr=attribut("version",vymVersion);
31.222 + if (!saveSel)
31.223 + mapAttr+= attribut("author",author) +
31.224 + attribut("comment",comment) +
31.225 + attribut("date",getDate()) +
31.226 + attribut("backgroundColor", mapScene->backgroundBrush().color().name() ) +
31.227 + attribut("selectionColor", selection.getColor().name() ) +
31.228 + attribut("linkStyle", ls ) +
31.229 + attribut("linkColor", defLinkColor.name() ) +
31.230 + attribut("defXLinkColor", defXLinkColor.name() ) +
31.231 + attribut("defXLinkWidth", QString().setNum(defXLinkWidth,10) ) +
31.232 + colhint;
31.233 + s+=beginElement("vymmap",mapAttr);
31.234 + incIndent();
31.235 +
31.236 + // Find the used flags while traversing the tree
31.237 + standardFlagsDefault->resetUsedCounter();
31.238 +
31.239 + // Reset the counters before saving
31.240 + // TODO constr. of FIO creates lots of objects, better do this in some other way...
31.241 + FloatImageObj (mapScene).resetSaveCounter();
31.242 +
31.243 + // Build xml recursivly
31.244 + if (!saveSel || typeid (*saveSel) == typeid (MapCenterObj))
31.245 + // Save complete map, if saveSel not set
31.246 + s+=saveToDir(tmpdir,prefix,writeflags,offset);
31.247 + else
31.248 + {
31.249 + if ( typeid(*saveSel) == typeid(BranchObj) )
31.250 + // Save Subtree
31.251 + s+=((BranchObj*)(saveSel))->saveToDir(tmpdir,prefix,offset);
31.252 + else if ( typeid(*saveSel) == typeid(FloatImageObj) )
31.253 + // Save image
31.254 + s+=((FloatImageObj*)(saveSel))->saveToDir(tmpdir,prefix);
31.255 + }
31.256 +
31.257 + // Save local settings
31.258 + s+=settings.getDataXML (destPath);
31.259 +
31.260 + // Save selection
31.261 + if (!selection.isEmpty() && !saveSel )
31.262 + s+=valueElement("select",selection.getSelectString());
31.263 +
31.264 + decIndent();
31.265 + s+=endElement("vymmap");
31.266 +
31.267 + if (writeflags)
31.268 + standardFlagsDefault->saveToDir (tmpdir+"/flags/","",writeflags);
31.269 + return s;
31.270 }
31.271
31.272 -void VymModel::setComment (const QString &s)
31.273 +void VymModel::setFilePath(QString fpath, QString destname)
31.274 {
31.275 - comment=s;
31.276 + if (fpath.isEmpty() || fpath=="")
31.277 + {
31.278 + filePath="";
31.279 + fileName="";
31.280 + destPath="";
31.281 + } else
31.282 + {
31.283 + filePath=fpath; // becomes absolute path
31.284 + fileName=fpath; // gets stripped of path
31.285 + destPath=destname; // needed for vymlinks and during load to reset fileChangedTime
31.286 +
31.287 + // If fpath is not an absolute path, complete it
31.288 + filePath=QDir(fpath).absPath();
31.289 + fileDir=filePath.left (1+filePath.findRev ("/"));
31.290 +
31.291 + // Set short name, too. Search from behind:
31.292 + int i=fileName.findRev("/");
31.293 + if (i>=0) fileName=fileName.remove (0,i+1);
31.294 +
31.295 + // Forget the .vym (or .xml) for name of map
31.296 + mapName=fileName.left(fileName.findRev(".",-1,true) );
31.297 + }
31.298 }
31.299
31.300 -QString VymModel::getComment ()
31.301 +void VymModel::setFilePath(QString fpath)
31.302 {
31.303 - return comment;
31.304 + setFilePath (fpath,fpath);
31.305 }
31.306
31.307 -QString VymModel::getDate ()
31.308 +QString VymModel::getFilePath()
31.309 {
31.310 - return QDate::currentDate().toString ("yyyy-MM-dd");
31.311 + return filePath;
31.312 }
31.313
31.314 -void VymModel::setScene (QGraphicsScene *s)
31.315 +QString VymModel::getFileName()
31.316 {
31.317 - mapScene=s;
31.318 - init(); // Here we have a mapScene set,
31.319 - // which is (still) needed to create MapCenters
31.320 + return fileName;
31.321 }
31.322
31.323 +QString VymModel::getMapName()
31.324 +{
31.325 + return mapName;
31.326 +}
31.327 +
31.328 +QString VymModel::getDestPath()
31.329 +{
31.330 + return destPath;
31.331 +}
31.332 +
31.333 +ErrorCode VymModel::load (QString fname, const LoadMode &lmode, const FileType &ftype)
31.334 +{
31.335 + ErrorCode err=success;
31.336 +
31.337 + parseBaseHandler *handler;
31.338 + fileType=ftype;
31.339 + switch (fileType)
31.340 + {
31.341 + case VymMap: handler=new parseVYMHandler; break;
31.342 + case FreemindMap : handler=new parseFreemindHandler; break;
31.343 + default:
31.344 + QMessageBox::critical( 0, tr( "Critical Parse Error" ),
31.345 + "Unknown FileType in VymModel::load()");
31.346 + return aborted;
31.347 + }
31.348 + if (lmode==NewMap)
31.349 + {
31.350 + selection.clear();
31.351 + // FIXME not needed??? model->setMapEditor(this);
31.352 + // (map state is set later at end of load...)
31.353 + } else
31.354 + {
31.355 + BranchObj *bo=selection.getBranch();
31.356 + if (!bo) return aborted;
31.357 + if (lmode==ImportAdd)
31.358 + saveStateChangingPart(
31.359 + bo,
31.360 + bo,
31.361 + QString("addMapInsert (%1)").arg(fname),
31.362 + QString("Add map %1 to %2").arg(fname).arg(getObjectName(bo)));
31.363 + else
31.364 + saveStateChangingPart(
31.365 + bo,
31.366 + bo,
31.367 + QString("addMapReplace(%1)").arg(fname),
31.368 + QString("Add map %1 to %2").arg(fname).arg(getObjectName(bo)));
31.369 + }
31.370 +
31.371 +
31.372 + // Create temporary directory for packing
31.373 + bool ok;
31.374 + QString tmpZipDir=makeTmpDir (ok,"vym-pack");
31.375 + if (!ok)
31.376 + {
31.377 + QMessageBox::critical( 0, tr( "Critical Load Error" ),
31.378 + tr("Couldn't create temporary directory before load\n"));
31.379 + return aborted;
31.380 + }
31.381 +
31.382 + // Try to unzip file
31.383 + err=unzipDir (tmpZipDir,fname);
31.384 + QString xmlfile;
31.385 + if (err==nozip)
31.386 + {
31.387 + xmlfile=fname;
31.388 + zipped=false;
31.389 + } else
31.390 + {
31.391 + zipped=true;
31.392 +
31.393 + // Look for mapname.xml
31.394 + xmlfile= fname.left(fname.findRev(".",-1,true));
31.395 + xmlfile=xmlfile.section( '/', -1 );
31.396 + QFile mfile( tmpZipDir + "/" + xmlfile + ".xml");
31.397 + if (!mfile.exists() )
31.398 + {
31.399 + // mapname.xml does not exist, well,
31.400 + // maybe someone renamed the mapname.vym file...
31.401 + // Try to find any .xml in the toplevel
31.402 + // directory of the .vym file
31.403 + QStringList flist=QDir (tmpZipDir).entryList("*.xml");
31.404 + if (flist.count()==1)
31.405 + {
31.406 + // Only one entry, take this one
31.407 + xmlfile=tmpZipDir + "/"+flist.first();
31.408 + } else
31.409 + {
31.410 + for ( QStringList::Iterator it = flist.begin(); it != flist.end(); ++it )
31.411 + *it=tmpZipDir + "/" + *it;
31.412 + // TODO Multiple entries, load all (but only the first one into this ME)
31.413 + //mainWindow->fileLoadFromTmp (flist);
31.414 + //returnCode=1; // Silently forget this attempt to load
31.415 + qWarning ("MainWindow::load (fn) multimap found...");
31.416 + }
31.417 +
31.418 + if (flist.isEmpty() )
31.419 + {
31.420 + QMessageBox::critical( 0, tr( "Critical Load Error" ),
31.421 + tr("Couldn't find a map (*.xml) in .vym archive.\n"));
31.422 + err=aborted;
31.423 + }
31.424 + } //file doesn't exist
31.425 + else
31.426 + xmlfile=mfile.name();
31.427 + }
31.428 +
31.429 + QFile file( xmlfile);
31.430 +
31.431 + // I am paranoid: file should exist anyway
31.432 + // according to check in mainwindow.
31.433 + if (!file.exists() )
31.434 + {
31.435 + QMessageBox::critical( 0, tr( "Critical Parse Error" ),
31.436 + tr(QString("Couldn't open map %1").arg(file.name())));
31.437 + err=aborted;
31.438 + } else
31.439 + {
31.440 + bool blockSaveStateOrg=blockSaveState;
31.441 + blockReposition=true;
31.442 + blockSaveState=true;
31.443 + QXmlInputSource source( file);
31.444 + QXmlSimpleReader reader;
31.445 + reader.setContentHandler( handler );
31.446 + reader.setErrorHandler( handler );
31.447 + handler->setModel ( this);
31.448 +
31.449 +
31.450 + // We need to set the tmpDir in order to load files with rel. path
31.451 + QString tmpdir;
31.452 + if (zipped)
31.453 + tmpdir=tmpZipDir;
31.454 + else
31.455 + tmpdir=fname.left(fname.findRev("/",-1));
31.456 + handler->setTmpDir (tmpdir);
31.457 + handler->setInputFile (file.name());
31.458 + handler->setLoadMode (lmode);
31.459 + bool ok = reader.parse( source );
31.460 + blockReposition=false;
31.461 + blockSaveState=blockSaveStateOrg;
31.462 + file.close();
31.463 + if ( ok )
31.464 + {
31.465 + reposition(); // FIXME reposition the view instead...
31.466 + selection.update();
31.467 + if (lmode==NewMap)
31.468 + {
31.469 + mapDefault=false;
31.470 + mapChanged=false;
31.471 + mapUnsaved=false;
31.472 + autosaveTimer->stop();
31.473 + }
31.474 +
31.475 + // Reset timestamp to check for later updates of file
31.476 + fileChangedTime=QFileInfo (destPath).lastModified();
31.477 + } else
31.478 + {
31.479 + QMessageBox::critical( 0, tr( "Critical Parse Error" ),
31.480 + tr( handler->errorProtocol() ) );
31.481 + // returnCode=1;
31.482 + // Still return "success": the map maybe at least
31.483 + // partially read by the parser
31.484 + }
31.485 + }
31.486 +
31.487 + // Delete tmpZipDir
31.488 + removeDir (QDir(tmpZipDir));
31.489 +
31.490 + updateActions();
31.491 +
31.492 + return err;
31.493 +}
31.494 +
31.495 +ErrorCode VymModel::save (const SaveMode &savemode)
31.496 +{
31.497 + QString tmpZipDir;
31.498 + QString mapFileName;
31.499 + QString safeFilePath;
31.500 +
31.501 + ErrorCode err=success;
31.502 +
31.503 + if (zipped)
31.504 + // save as .xml
31.505 + mapFileName=mapName+".xml";
31.506 + else
31.507 + // use name given by user, even if he chooses .doc
31.508 + mapFileName=fileName;
31.509 +
31.510 + // Look, if we should zip the data:
31.511 + if (!zipped)
31.512 + {
31.513 + QMessageBox mb( vymName,
31.514 + tr("The map %1\ndid not use the compressed "
31.515 + "vym file format.\nWriting it uncompressed will also write images \n"
31.516 + "and flags and thus may overwrite files in the "
31.517 + "given directory\n\nDo you want to write the map").arg(filePath),
31.518 + QMessageBox::Warning,
31.519 + QMessageBox::Yes | QMessageBox::Default,
31.520 + QMessageBox::No ,
31.521 + QMessageBox::Cancel | QMessageBox::Escape);
31.522 + mb.setButtonText( QMessageBox::Yes, tr("compressed (vym default)") );
31.523 + mb.setButtonText( QMessageBox::No, tr("uncompressed") );
31.524 + mb.setButtonText( QMessageBox::Cancel, tr("Cancel"));
31.525 + switch( mb.exec() )
31.526 + {
31.527 + case QMessageBox::Yes:
31.528 + // save compressed (default file format)
31.529 + zipped=true;
31.530 + break;
31.531 + case QMessageBox::No:
31.532 + // save uncompressed
31.533 + zipped=false;
31.534 + break;
31.535 + case QMessageBox::Cancel:
31.536 + // do nothing
31.537 + return aborted;
31.538 + break;
31.539 + }
31.540 + }
31.541 +
31.542 + // First backup existing file, we
31.543 + // don't want to add to old zip archives
31.544 + QFile f(destPath);
31.545 + if (f.exists())
31.546 + {
31.547 + if ( settings.value ("/mapeditor/writeBackupFile").toBool())
31.548 + {
31.549 + QString backupFileName(destPath + "~");
31.550 + QFile backupFile(backupFileName);
31.551 + if (backupFile.exists() && !backupFile.remove())
31.552 + {
31.553 + QMessageBox::warning(0, tr("Save Error"),
31.554 + tr("%1\ncould not be removed before saving").arg(backupFileName));
31.555 + }
31.556 + else if (!f.rename(backupFileName))
31.557 + {
31.558 + QMessageBox::warning(0, tr("Save Error"),
31.559 + tr("%1\ncould not be renamed before saving").arg(destPath));
31.560 + }
31.561 + }
31.562 + }
31.563 +
31.564 + if (zipped)
31.565 + {
31.566 + // Create temporary directory for packing
31.567 + bool ok;
31.568 + tmpZipDir=makeTmpDir (ok,"vym-zip");
31.569 + if (!ok)
31.570 + {
31.571 + QMessageBox::critical( 0, tr( "Critical Load Error" ),
31.572 + tr("Couldn't create temporary directory before save\n"));
31.573 + return aborted;
31.574 + }
31.575 +
31.576 + safeFilePath=filePath;
31.577 + setFilePath (tmpZipDir+"/"+ mapName+ ".xml", safeFilePath);
31.578 + } // zipped
31.579 +
31.580 + // Create mapName and fileDir
31.581 + makeSubDirs (fileDir);
31.582 +
31.583 + QString saveFile;
31.584 + if (savemode==CompleteMap || selection.isEmpty())
31.585 + {
31.586 + // Save complete map
31.587 + saveFile=saveToDir (fileDir,mapName+"-",true,QPointF(),NULL);
31.588 + mapChanged=false;
31.589 + mapUnsaved=false;
31.590 + autosaveTimer->stop();
31.591 + }
31.592 + else
31.593 + {
31.594 + // Save part of map
31.595 + if (selection.type()==Selection::FloatImage)
31.596 + saveFloatImage();
31.597 + else
31.598 + saveFile=saveToDir (fileDir,mapName+"-",true,QPointF(),selection.getBranch());
31.599 + // TODO take care of multiselections
31.600 + }
31.601 +
31.602 + if (!saveStringToDisk(fileDir+mapFileName,saveFile))
31.603 + {
31.604 + err=aborted;
31.605 + qWarning ("ME::saveStringToDisk failed!");
31.606 + }
31.607 +
31.608 + if (zipped)
31.609 + {
31.610 + // zip
31.611 + if (err==success) err=zipDir (tmpZipDir,destPath);
31.612 +
31.613 + // Delete tmpDir
31.614 + removeDir (QDir(tmpZipDir));
31.615 +
31.616 + // Restore original filepath outside of tmp zip dir
31.617 + setFilePath (safeFilePath);
31.618 + }
31.619 +
31.620 + updateActions();
31.621 + fileChangedTime=QFileInfo (destPath).lastModified();
31.622 + return err;
31.623 +}
31.624 +
31.625 +void VymModel::addMapReplaceInt(const QString &undoSel, const QString &path)
31.626 +{
31.627 + QString pathDir=path.left(path.findRev("/"));
31.628 + QDir d(pathDir);
31.629 + QFile file (path);
31.630 +
31.631 + if (d.exists() )
31.632 + {
31.633 + // We need to parse saved XML data
31.634 + parseVYMHandler handler;
31.635 + QXmlInputSource source( file);
31.636 + QXmlSimpleReader reader;
31.637 + reader.setContentHandler( &handler );
31.638 + reader.setErrorHandler( &handler );
31.639 + handler.setModel ( this);
31.640 + handler.setTmpDir ( pathDir ); // needed to load files with rel. path
31.641 + if (undoSel.isEmpty())
31.642 + {
31.643 + unselect();
31.644 + clear();
31.645 + handler.setLoadMode (NewMap);
31.646 + } else
31.647 + {
31.648 + select (undoSel);
31.649 + handler.setLoadMode (ImportReplace);
31.650 + }
31.651 + blockReposition=true;
31.652 + bool ok = reader.parse( source );
31.653 + blockReposition=false;
31.654 + if (! ok )
31.655 + {
31.656 + // This should never ever happen
31.657 + QMessageBox::critical( 0, tr( "Critical Parse Error while reading %1").arg(path),
31.658 + handler.errorProtocol());
31.659 + }
31.660 + } else
31.661 + QMessageBox::critical( 0, tr( "Critical Error" ), tr("Could not read %1").arg(path));
31.662 +}
31.663 +
31.664 +void VymModel::addMapInsertInt (const QString &path, int pos)
31.665 +{
31.666 + BranchObj *sel=selection.getBranch();
31.667 + if (sel)
31.668 + {
31.669 + QString pathDir=path.left(path.findRev("/"));
31.670 + QDir d(pathDir);
31.671 + QFile file (path);
31.672 +
31.673 + if (d.exists() )
31.674 + {
31.675 + // We need to parse saved XML data
31.676 + parseVYMHandler handler;
31.677 + QXmlInputSource source( file);
31.678 + QXmlSimpleReader reader;
31.679 + reader.setContentHandler( &handler );
31.680 + reader.setErrorHandler( &handler );
31.681 + handler.setModel (this);
31.682 + handler.setTmpDir ( pathDir ); // needed to load files with rel. path
31.683 + handler.setLoadMode (ImportAdd);
31.684 + blockReposition=true;
31.685 + bool ok = reader.parse( source );
31.686 + blockReposition=false;
31.687 + if (! ok )
31.688 + {
31.689 + // This should never ever happen
31.690 + QMessageBox::critical( 0, tr( "Critical Parse Error while reading %1").arg(path),
31.691 + handler.errorProtocol());
31.692 + }
31.693 + if (sel->getDepth()>0)
31.694 + sel->getLastBranch()->linkTo (sel,pos);
31.695 + } else
31.696 + QMessageBox::critical( 0, tr( "Critical Error" ), tr("Could not read %1").arg(path));
31.697 + }
31.698 +}
31.699 +
31.700 +FloatImageObj* VymModel::loadFloatImageInt (QString fn)
31.701 +{
31.702 + BranchObj *bo=selection.getBranch();
31.703 + if (bo)
31.704 + {
31.705 + FloatImageObj *fio;
31.706 + bo->addFloatImage();
31.707 + fio=bo->getLastFloatImage();
31.708 + fio->load(fn);
31.709 + reposition();
31.710 + // FIXME needed? scene()->update();
31.711 + return fio;
31.712 + }
31.713 + return NULL;
31.714 +}
31.715 +
31.716 +void VymModel::loadFloatImage ()
31.717 +{
31.718 + BranchObj *bo=selection.getBranch();
31.719 + if (bo)
31.720 + {
31.721 +
31.722 + Q3FileDialog *fd=new Q3FileDialog( NULL);
31.723 + fd->setMode (Q3FileDialog::ExistingFiles);
31.724 + fd->addFilter (QString (tr("Images") + " (*.png *.bmp *.xbm *.jpg *.png *.xpm *.gif *.pnm)"));
31.725 + ImagePreview *p =new ImagePreview (fd);
31.726 + fd->setContentsPreviewEnabled( TRUE );
31.727 + fd->setContentsPreview( p, p );
31.728 + fd->setPreviewMode( Q3FileDialog::Contents );
31.729 + fd->setCaption(vymName+" - " +tr("Load image"));
31.730 + fd->setDir (lastImageDir);
31.731 + fd->show();
31.732 +
31.733 + if ( fd->exec() == QDialog::Accepted )
31.734 + {
31.735 + // TODO loadFIO in QT4 use: lastImageDir=fd->directory();
31.736 + lastImageDir=QDir (fd->dirPath());
31.737 + QString s;
31.738 + FloatImageObj *fio;
31.739 + for (int j=0; j<fd->selectedFiles().count(); j++)
31.740 + {
31.741 + s=fd->selectedFiles().at(j);
31.742 + fio=loadFloatImageInt (s);
31.743 + if (fio)
31.744 + saveState(
31.745 + (LinkableMapObj*)fio,
31.746 + "delete ()",
31.747 + bo,
31.748 + QString ("loadImage (%1)").arg(s ),
31.749 + QString("Add image %1 to %2").arg(s).arg(getObjectName(bo))
31.750 + );
31.751 + else
31.752 + // TODO loadFIO error handling
31.753 + qWarning ("Failed to load "+s);
31.754 + }
31.755 + }
31.756 + delete (p);
31.757 + delete (fd);
31.758 + }
31.759 +}
31.760 +
31.761 +void VymModel::saveFloatImageInt (FloatImageObj *fio, const QString &type, const QString &fn)
31.762 +{
31.763 + fio->save (fn,type);
31.764 +}
31.765 +
31.766 +void VymModel::saveFloatImage ()
31.767 +{
31.768 + FloatImageObj *fio=selection.getFloatImage();
31.769 + if (fio)
31.770 + {
31.771 + QFileDialog *fd=new QFileDialog( NULL);
31.772 + fd->setFilters (imageIO.getFilters());
31.773 + fd->setCaption(vymName+" - " +tr("Save image"));
31.774 + fd->setFileMode( QFileDialog::AnyFile );
31.775 + fd->setDirectory (lastImageDir);
31.776 +// fd->setSelection (fio->getOriginalFilename());
31.777 + fd->show();
31.778 +
31.779 + QString fn;
31.780 + if ( fd->exec() == QDialog::Accepted && fd->selectedFiles().count()==1)
31.781 + {
31.782 + fn=fd->selectedFiles().at(0);
31.783 + if (QFile (fn).exists() )
31.784 + {
31.785 + QMessageBox mb( vymName,
31.786 + tr("The file %1 exists already.\n"
31.787 + "Do you want to overwrite it?").arg(fn),
31.788 + QMessageBox::Warning,
31.789 + QMessageBox::Yes | QMessageBox::Default,
31.790 + QMessageBox::Cancel | QMessageBox::Escape,
31.791 + QMessageBox::NoButton );
31.792 +
31.793 + mb.setButtonText( QMessageBox::Yes, tr("Overwrite") );
31.794 + mb.setButtonText( QMessageBox::No, tr("Cancel"));
31.795 + switch( mb.exec() )
31.796 + {
31.797 + case QMessageBox::Yes:
31.798 + // save
31.799 + break;
31.800 + case QMessageBox::Cancel:
31.801 + // do nothing
31.802 + delete (fd);
31.803 + return;
31.804 + break;
31.805 + }
31.806 + }
31.807 + saveFloatImageInt (fio,fd->selectedFilter(),fn );
31.808 + }
31.809 + delete (fd);
31.810 + }
31.811 +}
31.812 +
31.813 +
31.814 +void VymModel::importDirInt(BranchObj *dst, QDir d)
31.815 +{
31.816 + BranchObj *bo=selection.getBranch();
31.817 + if (bo)
31.818 + {
31.819 + // Traverse directories
31.820 + d.setFilter( QDir::Dirs| QDir::Hidden | QDir::NoSymLinks );
31.821 + QFileInfoList list = d.entryInfoList();
31.822 + QFileInfo fi;
31.823 +
31.824 + for (int i = 0; i < list.size(); ++i)
31.825 + {
31.826 + fi=list.at(i);
31.827 + if (fi.fileName() != "." && fi.fileName() != ".." )
31.828 + {
31.829 + dst->addBranch();
31.830 + bo=dst->getLastBranch();
31.831 + bo->setHeading (fi.fileName() );
31.832 + bo->setColor (QColor("blue"));
31.833 + bo->toggleScroll();
31.834 + if ( !d.cd(fi.fileName()) )
31.835 + QMessageBox::critical (0,tr("Critical Import Error"),tr("Cannot find the directory %1").arg(fi.fileName()));
31.836 + else
31.837 + {
31.838 + // Recursively add subdirs
31.839 + importDirInt (bo,d);
31.840 + d.cdUp();
31.841 + }
31.842 + }
31.843 + }
31.844 + // Traverse files
31.845 + d.setFilter( QDir::Files| QDir::Hidden | QDir::NoSymLinks );
31.846 + list = d.entryInfoList();
31.847 +
31.848 + for (int i = 0; i < list.size(); ++i)
31.849 + {
31.850 + fi=list.at(i);
31.851 + dst->addBranch();
31.852 + bo=dst->getLastBranch();
31.853 + bo->setHeading (fi.fileName() );
31.854 + bo->setColor (QColor("black"));
31.855 + if (fi.fileName().right(4) == ".vym" )
31.856 + bo->setVymLink (fi.filePath());
31.857 + }
31.858 + }
31.859 +}
31.860 +
31.861 +void VymModel::importDirInt (const QString &s)
31.862 +{
31.863 + BranchObj *bo=selection.getBranch();
31.864 + if (bo)
31.865 + {
31.866 + saveStateChangingPart (bo,bo,QString ("importDir (\"%1\")").arg(s),QString("Import directory structure from %1").arg(s));
31.867 +
31.868 + QDir d(s);
31.869 + importDirInt (bo,d);
31.870 + }
31.871 +}
31.872 +
31.873 +void VymModel::importDir()
31.874 +{
31.875 + BranchObj *bo=selection.getBranch();
31.876 + if (bo)
31.877 + {
31.878 + QStringList filters;
31.879 + filters <<"VYM map (*.vym)";
31.880 + QFileDialog *fd=new QFileDialog( NULL,vymName+ " - " +tr("Choose directory structure to import"));
31.881 + fd->setMode (QFileDialog::DirectoryOnly);
31.882 + fd->setFilters (filters);
31.883 + fd->setCaption(vymName+" - " +tr("Choose directory structure to import"));
31.884 + fd->show();
31.885 +
31.886 + QString fn;
31.887 + if ( fd->exec() == QDialog::Accepted )
31.888 + {
31.889 + importDirInt (fd->selectedFile() );
31.890 + reposition();
31.891 + //FIXME needed? scene()->update();
31.892 + }
31.893 + }
31.894 +}
31.895 +
31.896 +
31.897 +void VymModel::autosave()
31.898 +{
31.899 + QDateTime now=QDateTime().currentDateTime();
31.900 +
31.901 + // Disable autosave, while we have gone back in history
31.902 + int redosAvail=undoSet.readNumEntry (QString("/history/redosAvail"));
31.903 + if (redosAvail>0) return;
31.904 +
31.905 + // Also disable autosave for new map without filename
31.906 + if (filePath.isEmpty()) return;
31.907 +
31.908 +
31.909 + if (mapUnsaved &&mapChanged && settings.value ("/autosave/use",true).toBool() )
31.910 + {
31.911 + if (QFileInfo(filePath).lastModified()<=fileChangedTime)
31.912 + mainWindow->fileSave (this);
31.913 + else
31.914 + if (debug)
31.915 + cout <<" ME::autosave rejected, file on disk is newer than last save.\n";
31.916 +
31.917 + }
31.918 +}
31.919 +
31.920 +void VymModel::fileChanged()
31.921 +{
31.922 + // Check if file on disk has changed meanwhile
31.923 + if (!filePath.isEmpty())
31.924 + {
31.925 + QDateTime tmod=QFileInfo (filePath).lastModified();
31.926 + if (tmod>fileChangedTime)
31.927 + {
31.928 + // FIXME switch to current mapeditor and finish lineedits...
31.929 + QMessageBox mb( vymName,
31.930 + tr("The file of the map on disk has changed:\n\n"
31.931 + " %1\n\nDo you want to reload that map with the new file?").arg(filePath),
31.932 + QMessageBox::Question,
31.933 + QMessageBox::Yes ,
31.934 + QMessageBox::Cancel | QMessageBox::Default,
31.935 + QMessageBox::NoButton );
31.936 +
31.937 + mb.setButtonText( QMessageBox::Yes, tr("Reload"));
31.938 + mb.setButtonText( QMessageBox::No, tr("Ignore"));
31.939 + switch( mb.exec() )
31.940 + {
31.941 + case QMessageBox::Yes:
31.942 + // Reload map
31.943 + load (filePath,NewMap,fileType);
31.944 + case QMessageBox::Cancel:
31.945 + fileChangedTime=tmod; // allow autosave to overwrite newer file!
31.946 + }
31.947 + }
31.948 + }
31.949 +}
31.950 +
31.951 +bool VymModel::isDefault()
31.952 +{
31.953 + return mapDefault;
31.954 +}
31.955 +
31.956 +void VymModel::makeDefault()
31.957 +{
31.958 + mapChanged=false;
31.959 + mapDefault=true;
31.960 +}
31.961 +
31.962 +bool VymModel::hasChanged()
31.963 +{
31.964 + return mapChanged;
31.965 +}
31.966 +
31.967 +void VymModel::setChanged()
31.968 +{
31.969 + if (!mapChanged)
31.970 + autosaveTimer->start(settings.value("/autosave/ms/",300000).toInt());
31.971 + mapChanged=true;
31.972 + mapDefault=false;
31.973 + mapUnsaved=true;
31.974 + findReset();
31.975 +}
31.976 +
31.977 +
31.978 +QString VymModel::getObjectName (const LinkableMapObj *lmo)
31.979 +{
31.980 + QString s;
31.981 + if (!lmo) return QString("Error: NULL has no name!");
31.982 +
31.983 + if ((typeid(*lmo) == typeid(BranchObj) ||
31.984 + typeid(*lmo) == typeid(MapCenterObj)))
31.985 + {
31.986 +
31.987 + s=(((BranchObj*)lmo)->getHeading());
31.988 + if (s=="") s="unnamed";
31.989 + return QString("branch (%1)").arg(s);
31.990 + }
31.991 + if ((typeid(*lmo) == typeid(FloatImageObj) ))
31.992 + return QString ("floatimage [%1]").arg(((FloatImageObj*)lmo)->getOriginalFilename());
31.993 + return QString("Unknown type has no name!");
31.994 +}
31.995 +
31.996 +void VymModel::redo()
31.997 +{
31.998 + // Can we undo at all?
31.999 + if (redosAvail<1) return;
31.1000 +
31.1001 + bool blockSaveStateOrg=blockSaveState;
31.1002 + blockSaveState=true;
31.1003 +
31.1004 + redosAvail--;
31.1005 +
31.1006 + if (undosAvail<stepsTotal) undosAvail++;
31.1007 + curStep++;
31.1008 + if (curStep>stepsTotal) curStep=1;
31.1009 + QString undoCommand= undoSet.readEntry (QString("/history/step-%1/undoCommand").arg(curStep));
31.1010 + QString undoSelection=undoSet.readEntry (QString("/history/step-%1/undoSelection").arg(curStep));
31.1011 + QString redoCommand= undoSet.readEntry (QString("/history/step-%1/redoCommand").arg(curStep));
31.1012 + QString redoSelection=undoSet.readEntry (QString("/history/step-%1/redoSelection").arg(curStep));
31.1013 + QString comment=undoSet.readEntry (QString("/history/step-%1/comment").arg(curStep));
31.1014 + QString version=undoSet.readEntry ("/history/version");
31.1015 +
31.1016 + /* TODO Maybe check for version, if we save the history
31.1017 + if (!checkVersion(version))
31.1018 + QMessageBox::warning(0,tr("Warning"),
31.1019 + tr("Version %1 of saved undo/redo data\ndoes not match current vym version %2.").arg(version).arg(vymVersion));
31.1020 + */
31.1021 +
31.1022 + // Find out current undo directory
31.1023 + QString bakMapDir(QString(tmpMapDir+"/undo-%1").arg(curStep));
31.1024 +
31.1025 + if (debug)
31.1026 + {
31.1027 + cout << "VymModel::redo() begin\n";
31.1028 + cout << " undosAvail="<<undosAvail<<endl;
31.1029 + cout << " redosAvail="<<redosAvail<<endl;
31.1030 + cout << " curStep="<<curStep<<endl;
31.1031 + cout << " ---------------------------"<<endl;
31.1032 + cout << " comment="<<comment.toStdString()<<endl;
31.1033 + cout << " undoCom="<<undoCommand.toStdString()<<endl;
31.1034 + cout << " undoSel="<<undoSelection.toStdString()<<endl;
31.1035 + cout << " redoCom="<<redoCommand.toStdString()<<endl;
31.1036 + cout << " redoSel="<<redoSelection.toStdString()<<endl;
31.1037 + cout << " ---------------------------"<<endl<<endl;
31.1038 + }
31.1039 +
31.1040 + // select object before redo
31.1041 + if (!redoSelection.isEmpty())
31.1042 + select (redoSelection);
31.1043 +
31.1044 +
31.1045 + parseAtom (redoCommand);
31.1046 + reposition();
31.1047 +
31.1048 + blockSaveState=blockSaveStateOrg;
31.1049 +
31.1050 + undoSet.setEntry ("/history/undosAvail",QString::number(undosAvail));
31.1051 + undoSet.setEntry ("/history/redosAvail",QString::number(redosAvail));
31.1052 + undoSet.setEntry ("/history/curStep",QString::number(curStep));
31.1053 + undoSet.writeSettings(histPath);
31.1054 +
31.1055 + mainWindow->updateHistory (undoSet);
31.1056 + updateActions();
31.1057 +
31.1058 + /* TODO remove testing
31.1059 + cout << "ME::redo() end\n";
31.1060 + cout << " undosAvail="<<undosAvail<<endl;
31.1061 + cout << " redosAvail="<<redosAvail<<endl;
31.1062 + cout << " curStep="<<curStep<<endl;
31.1063 + cout << " ---------------------------"<<endl<<endl;
31.1064 + */
31.1065 +
31.1066 +
31.1067 +}
31.1068 +
31.1069 +bool VymModel::isRedoAvailable()
31.1070 +{
31.1071 + if (undoSet.readNumEntry("/history/redosAvail",0)>0)
31.1072 + return true;
31.1073 + else
31.1074 + return false;
31.1075 +}
31.1076 +
31.1077 +void VymModel::undo()
31.1078 +{
31.1079 + // Can we undo at all?
31.1080 + if (undosAvail<1) return;
31.1081 +
31.1082 + mainWindow->statusMessage (tr("Autosave disabled during undo."));
31.1083 +
31.1084 + bool blockSaveStateOrg=blockSaveState;
31.1085 + blockSaveState=true;
31.1086 +
31.1087 + QString undoCommand= undoSet.readEntry (QString("/history/step-%1/undoCommand").arg(curStep));
31.1088 + QString undoSelection=undoSet.readEntry (QString("/history/step-%1/undoSelection").arg(curStep));
31.1089 + QString redoCommand= undoSet.readEntry (QString("/history/step-%1/redoCommand").arg(curStep));
31.1090 + QString redoSelection=undoSet.readEntry (QString("/history/step-%1/redoSelection").arg(curStep));
31.1091 + QString comment=undoSet.readEntry (QString("/history/step-%1/comment").arg(curStep));
31.1092 + QString version=undoSet.readEntry ("/history/version");
31.1093 +
31.1094 + /* TODO Maybe check for version, if we save the history
31.1095 + if (!checkVersion(version))
31.1096 + QMessageBox::warning(0,tr("Warning"),
31.1097 + tr("Version %1 of saved undo/redo data\ndoes not match current vym version %2.").arg(version).arg(vymVersion));
31.1098 + */
31.1099 +
31.1100 + // Find out current undo directory
31.1101 + QString bakMapDir(QString(tmpMapDir+"/undo-%1").arg(curStep));
31.1102 +
31.1103 + // select object before undo
31.1104 + if (!undoSelection.isEmpty())
31.1105 + select (undoSelection);
31.1106 +
31.1107 + if (debug)
31.1108 + {
31.1109 + cout << "VymModel::undo() begin\n";
31.1110 + cout << " undosAvail="<<undosAvail<<endl;
31.1111 + cout << " redosAvail="<<redosAvail<<endl;
31.1112 + cout << " curStep="<<curStep<<endl;
31.1113 + cout << " ---------------------------"<<endl;
31.1114 + cout << " comment="<<comment.toStdString()<<endl;
31.1115 + cout << " undoCom="<<undoCommand.toStdString()<<endl;
31.1116 + cout << " undoSel="<<undoSelection.toStdString()<<endl;
31.1117 + cout << " redoCom="<<redoCommand.toStdString()<<endl;
31.1118 + cout << " redoSel="<<redoSelection.toStdString()<<endl;
31.1119 + cout << " ---------------------------"<<endl<<endl;
31.1120 + }
31.1121 + parseAtom (undoCommand);
31.1122 + reposition();
31.1123 +
31.1124 + undosAvail--;
31.1125 + curStep--;
31.1126 + if (curStep<1) curStep=stepsTotal;
31.1127 +
31.1128 + redosAvail++;
31.1129 +
31.1130 + blockSaveState=blockSaveStateOrg;
31.1131 +/* TODO remove testing
31.1132 + cout << "VymModel::undo() end\n";
31.1133 + cout << " undosAvail="<<undosAvail<<endl;
31.1134 + cout << " redosAvail="<<redosAvail<<endl;
31.1135 + cout << " curStep="<<curStep<<endl;
31.1136 + cout << " ---------------------------"<<endl<<endl;
31.1137 +*/
31.1138 +
31.1139 + undoSet.setEntry ("/history/undosAvail",QString::number(undosAvail));
31.1140 + undoSet.setEntry ("/history/redosAvail",QString::number(redosAvail));
31.1141 + undoSet.setEntry ("/history/curStep",QString::number(curStep));
31.1142 + undoSet.writeSettings(histPath);
31.1143 +
31.1144 + mainWindow->updateHistory (undoSet);
31.1145 + updateActions();
31.1146 + selection.update();
31.1147 + ensureSelectionVisible();
31.1148 +}
31.1149 +
31.1150 +bool VymModel::isUndoAvailable()
31.1151 +{
31.1152 + if (undoSet.readNumEntry("/history/undosAvail",0)>0)
31.1153 + return true;
31.1154 + else
31.1155 + return false;
31.1156 +}
31.1157 +
31.1158 +void VymModel::gotoHistoryStep (int i)
31.1159 +{
31.1160 + // Restore variables
31.1161 + int undosAvail=undoSet.readNumEntry (QString("/history/undosAvail"));
31.1162 + int redosAvail=undoSet.readNumEntry (QString("/history/redosAvail"));
31.1163 +
31.1164 + if (i<0) i=undosAvail+redosAvail;
31.1165 +
31.1166 + // Clicking above current step makes us undo things
31.1167 + if (i<undosAvail)
31.1168 + {
31.1169 + for (int j=0; j<undosAvail-i; j++) undo();
31.1170 + return;
31.1171 + }
31.1172 + // Clicking below current step makes us redo things
31.1173 + if (i>undosAvail)
31.1174 + for (int j=undosAvail; j<i; j++)
31.1175 + {
31.1176 + if (debug) cout << "VymModel::gotoHistoryStep redo "<<j<<"/"<<undosAvail<<" i="<<i<<endl;
31.1177 + redo();
31.1178 + }
31.1179 +
31.1180 + // And ignore clicking the current row ;-)
31.1181 +}
31.1182 +
31.1183 +
31.1184 +QString VymModel::getHistoryPath()
31.1185 +{
31.1186 + QString histName(QString("history-%1").arg(curStep));
31.1187 + return (tmpMapDir+"/"+histName);
31.1188 +}
31.1189 +
31.1190 +void VymModel::saveState(const SaveMode &savemode, const QString &undoSelection, const QString &undoCom, const QString &redoSelection, const QString &redoCom, const QString &comment, LinkableMapObj *saveSel)
31.1191 +{
31.1192 + sendData(redoCom); //FIXME testing
31.1193 +
31.1194 + // Main saveState
31.1195 +
31.1196 +
31.1197 + if (blockSaveState) return;
31.1198 +
31.1199 + if (debug) cout << "ME::saveState() for "<<qPrintable (mapName)<<endl;
31.1200 +
31.1201 + // Find out current undo directory
31.1202 + if (undosAvail<stepsTotal) undosAvail++;
31.1203 + curStep++;
31.1204 + if (curStep>stepsTotal) curStep=1;
31.1205 +
31.1206 + QString backupXML="";
31.1207 + QString histDir=getHistoryPath();
31.1208 + QString bakMapPath=histDir+"/map.xml";
31.1209 +
31.1210 + // Create histDir if not available
31.1211 + QDir d(histDir);
31.1212 + if (!d.exists())
31.1213 + makeSubDirs (histDir);
31.1214 +
31.1215 + // Save depending on how much needs to be saved
31.1216 + if (saveSel)
31.1217 + backupXML=saveToDir (histDir,mapName+"-",false, QPointF (),saveSel);
31.1218 +
31.1219 + QString undoCommand="";
31.1220 + if (savemode==UndoCommand)
31.1221 + {
31.1222 + undoCommand=undoCom;
31.1223 + }
31.1224 + else if (savemode==PartOfMap )
31.1225 + {
31.1226 + undoCommand=undoCom;
31.1227 + undoCommand.replace ("PATH",bakMapPath);
31.1228 + }
31.1229 +
31.1230 + if (!backupXML.isEmpty())
31.1231 + // Write XML Data to disk
31.1232 + saveStringToDisk (bakMapPath,backupXML);
31.1233 +
31.1234 + // We would have to save all actions in a tree, to keep track of
31.1235 + // possible redos after a action. Possible, but we are too lazy: forget about redos.
31.1236 + redosAvail=0;
31.1237 +
31.1238 + // Write the current state to disk
31.1239 + undoSet.setEntry ("/history/undosAvail",QString::number(undosAvail));
31.1240 + undoSet.setEntry ("/history/redosAvail",QString::number(redosAvail));
31.1241 + undoSet.setEntry ("/history/curStep",QString::number(curStep));
31.1242 + undoSet.setEntry (QString("/history/step-%1/undoCommand").arg(curStep),undoCommand);
31.1243 + undoSet.setEntry (QString("/history/step-%1/undoSelection").arg(curStep),undoSelection);
31.1244 + undoSet.setEntry (QString("/history/step-%1/redoCommand").arg(curStep),redoCom);
31.1245 + undoSet.setEntry (QString("/history/step-%1/redoSelection").arg(curStep),redoSelection);
31.1246 + undoSet.setEntry (QString("/history/step-%1/comment").arg(curStep),comment);
31.1247 + undoSet.setEntry (QString("/history/version"),vymVersion);
31.1248 + undoSet.writeSettings(histPath);
31.1249 +
31.1250 + if (debug)
31.1251 + {
31.1252 + // TODO remove after testing
31.1253 + //cout << " into="<< histPath.toStdString()<<endl;
31.1254 + cout << " stepsTotal="<<stepsTotal<<
31.1255 + ", undosAvail="<<undosAvail<<
31.1256 + ", redosAvail="<<redosAvail<<
31.1257 + ", curStep="<<curStep<<endl;
31.1258 + cout << " ---------------------------"<<endl;
31.1259 + cout << " comment="<<comment.toStdString()<<endl;
31.1260 + cout << " undoCom="<<undoCommand.toStdString()<<endl;
31.1261 + cout << " undoSel="<<undoSelection.toStdString()<<endl;
31.1262 + cout << " redoCom="<<redoCom.toStdString()<<endl;
31.1263 + cout << " redoSel="<<redoSelection.toStdString()<<endl;
31.1264 + if (saveSel) cout << " saveSel="<<qPrintable (getSelectString(saveSel))<<endl;
31.1265 + cout << " ---------------------------"<<endl;
31.1266 + }
31.1267 +
31.1268 + mainWindow->updateHistory (undoSet);
31.1269 + setChanged();
31.1270 + updateActions();
31.1271 +}
31.1272 +
31.1273 +
31.1274 +void VymModel::saveStateChangingPart(LinkableMapObj *undoSel, LinkableMapObj* redoSel, const QString &rc, const QString &comment)
31.1275 +{
31.1276 + // save the selected part of the map, Undo will replace part of map
31.1277 + QString undoSelection="";
31.1278 + if (undoSel)
31.1279 + undoSelection=getSelectString(undoSel);
31.1280 + else
31.1281 + qWarning ("VymModel::saveStateChangingPart no undoSel given!");
31.1282 + QString redoSelection="";
31.1283 + if (redoSel)
31.1284 + redoSelection=getSelectString(undoSel);
31.1285 + else
31.1286 + qWarning ("VymModel::saveStateChangingPart no redoSel given!");
31.1287 +
31.1288 +
31.1289 + saveState (PartOfMap,
31.1290 + undoSelection, "addMapReplace (\"PATH\")",
31.1291 + redoSelection, rc,
31.1292 + comment,
31.1293 + undoSel);
31.1294 +}
31.1295 +
31.1296 +void VymModel::saveStateRemovingPart(LinkableMapObj *redoSel, const QString &comment)
31.1297 +{
31.1298 + if (!redoSel)
31.1299 + {
31.1300 + qWarning ("VymModel::saveStateRemovingPart no redoSel given!");
31.1301 + return;
31.1302 + }
31.1303 + QString undoSelection=getSelectString (redoSel->getParObj());
31.1304 + QString redoSelection=getSelectString(redoSel);
31.1305 + if (typeid(*redoSel) == typeid(BranchObj) )
31.1306 + {
31.1307 + // save the selected branch of the map, Undo will insert part of map
31.1308 + saveState (PartOfMap,
31.1309 + undoSelection, QString("addMapInsert (\"PATH\",%1)").arg(((BranchObj*)redoSel)->getNum()),
31.1310 + redoSelection, "delete ()",
31.1311 + comment,
31.1312 + redoSel);
31.1313 + }
31.1314 +}
31.1315 +
31.1316 +
31.1317 +void VymModel::saveState(LinkableMapObj *undoSel, const QString &uc, LinkableMapObj *redoSel, const QString &rc, const QString &comment)
31.1318 +{
31.1319 + // "Normal" savestate: save commands, selections and comment
31.1320 + // so just save commands for undo and redo
31.1321 + // and use current selection
31.1322 +
31.1323 + QString redoSelection="";
31.1324 + if (redoSel) redoSelection=getSelectString(redoSel);
31.1325 + QString undoSelection="";
31.1326 + if (undoSel) undoSelection=getSelectString(undoSel);
31.1327 +
31.1328 + saveState (UndoCommand,
31.1329 + undoSelection, uc,
31.1330 + redoSelection, rc,
31.1331 + comment,
31.1332 + NULL);
31.1333 +}
31.1334 +
31.1335 +void VymModel::saveState(const QString &undoSel, const QString &uc, const QString &redoSel, const QString &rc, const QString &comment)
31.1336 +{
31.1337 + // "Normal" savestate: save commands, selections and comment
31.1338 + // so just save commands for undo and redo
31.1339 + // and use current selection
31.1340 + saveState (UndoCommand,
31.1341 + undoSel, uc,
31.1342 + redoSel, rc,
31.1343 + comment,
31.1344 + NULL);
31.1345 +}
31.1346 +
31.1347 +void VymModel::saveState(const QString &uc, const QString &rc, const QString &comment)
31.1348 +{
31.1349 + // "Normal" savestate applied to model (no selection needed):
31.1350 + // save commands and comment
31.1351 + saveState (UndoCommand,
31.1352 + NULL, uc,
31.1353 + NULL, rc,
31.1354 + comment,
31.1355 + NULL);
31.1356 +}
31.1357 +
31.1358 +
31.1359 QGraphicsScene* VymModel::getScene ()
31.1360 {
31.1361 return mapScene;
31.1362 }
31.1363
31.1364 -MapCenterObj* VymModel::addMapCenter()
31.1365 -{
31.1366 - return addMapCenter (QPointF(0,0));
31.1367 -}
31.1368 -
31.1369 -MapCenterObj* VymModel::addMapCenter(QPointF absPos)
31.1370 -{
31.1371 - MapCenterObj *mapCenter = new MapCenterObj(mapScene);
31.1372 - mapCenter->move (absPos);
31.1373 - mapCenter->setVisibility (true);
31.1374 - mapCenter->setHeading (QApplication::translate("Heading of mapcenter in new map", "New map"));
31.1375 - mapCenter->setMapEditor(mapEditor); //FIXME needed to get defLinkStyle, mapLinkColorHint ... for later added objects
31.1376 - mapCenters.append(mapCenter);
31.1377 - return mapCenter;
31.1378 -}
31.1379 -
31.1380 -MapCenterObj *VymModel::removeMapCenter(MapCenterObj* mco)
31.1381 -{
31.1382 - int i=mapCenters.indexOf (mco);
31.1383 - if (i>=0)
31.1384 - {
31.1385 - mapCenters.removeAt (i);
31.1386 - delete (mco);
31.1387 - if (i>0) return mapCenters.at(i-1); // Return previous MCO
31.1388 - }
31.1389 - return NULL;
31.1390 -}
31.1391 -
31.1392 BranchObj* VymModel::first()
31.1393 {
31.1394 if (mapCenters.count()>0)
31.1395 @@ -196,6 +1421,10 @@
31.1396 return NULL;
31.1397 }
31.1398
31.1399 +void VymModel::removeSelection()
31.1400 +{
31.1401 +}
31.1402 +
31.1403 QString VymModel::saveToDir (const QString &tmpdir,const QString &prefix, int verbose, const QPointF &offset)
31.1404 {
31.1405 QString s;
31.1406 @@ -205,11 +1434,2264 @@
31.1407 return s;
31.1408 }
31.1409
31.1410 +//////////////////////////////////////////////
31.1411 +// Interface
31.1412 +//////////////////////////////////////////////
31.1413 +void VymModel::setVersion (const QString &s)
31.1414 +{
31.1415 + version=s;
31.1416 +}
31.1417 +
31.1418 +void VymModel::setAuthor (const QString &s)
31.1419 +{
31.1420 + saveState (
31.1421 + QString ("setMapAuthor (\"%1\")").arg(author),
31.1422 + QString ("setMapAuthor (\"%1\")").arg(s),
31.1423 + QString ("Set author of map to \"%1\"").arg(s)
31.1424 + );
31.1425 +
31.1426 + author=s;
31.1427 +}
31.1428 +
31.1429 +QString VymModel::getAuthor()
31.1430 +{
31.1431 + return author;
31.1432 +}
31.1433 +
31.1434 +void VymModel::setComment (const QString &s)
31.1435 +{
31.1436 + saveState (
31.1437 + QString ("setMapComment (\"%1\")").arg(comment),
31.1438 + QString ("setMapComment (\"%1\")").arg(s),
31.1439 + QString ("Set comment of map")
31.1440 + );
31.1441 +
31.1442 + comment=s;
31.1443 +}
31.1444 +
31.1445 +QString VymModel::getComment ()
31.1446 +{
31.1447 + return comment;
31.1448 +}
31.1449 +
31.1450 +QString VymModel::getDate ()
31.1451 +{
31.1452 + return QDate::currentDate().toString ("yyyy-MM-dd");
31.1453 +}
31.1454 +
31.1455 +void VymModel::setHeading(const QString &s)
31.1456 +{
31.1457 + BranchObj *sel=selection.getBranch();
31.1458 + if (sel)
31.1459 + {
31.1460 + saveState(
31.1461 + sel,
31.1462 + "setHeading (\""+sel->getHeading()+"\")",
31.1463 + sel,
31.1464 + "setHeading (\""+s+"\")",
31.1465 + QString("Set heading of %1 to \"%2\"").arg(getObjectName(sel)).arg(s) );
31.1466 + sel->setHeading(s );
31.1467 + reposition();
31.1468 + selection.update();
31.1469 + ensureSelectionVisible();
31.1470 + }
31.1471 +}
31.1472 +
31.1473 +QString VymModel::getHeading(bool &ok, QPoint &p)
31.1474 +{
31.1475 + BranchObj *bo=selection.getBranch();
31.1476 + if (bo)
31.1477 + {
31.1478 + ok=true;
31.1479 + //p=scene->mapFromScene(bo->getAbsPos()); // FIXME this is view-dependant!!!
31.1480 + return bo->getHeading();
31.1481 + }
31.1482 + ok=false;
31.1483 + return QString();
31.1484 +}
31.1485 +
31.1486 +
31.1487 +void VymModel::setHeadingInt(const QString &s)
31.1488 +{
31.1489 + BranchObj *bo=selection.getBranch();
31.1490 + if (bo)
31.1491 + {
31.1492 + bo->setHeading(s);
31.1493 + reposition();
31.1494 + selection.update();
31.1495 + ensureSelectionVisible();
31.1496 + }
31.1497 +}
31.1498 +
31.1499 +BranchObj* VymModel::findText (QString s, bool cs)
31.1500 +{
31.1501 + QTextDocument::FindFlags flags=0;
31.1502 + if (cs) flags=QTextDocument::FindCaseSensitively;
31.1503 +
31.1504 + if (!itFind)
31.1505 + { // Nothing found or new find process
31.1506 + if (EOFind)
31.1507 + // nothing found, start again
31.1508 + EOFind=false;
31.1509 + itFind=first();
31.1510 + }
31.1511 + bool searching=true;
31.1512 + bool foundNote=false;
31.1513 + while (searching && !EOFind)
31.1514 + {
31.1515 + if (itFind)
31.1516 + {
31.1517 + // Searching in Note
31.1518 + if (itFind->getNote().contains(s,cs))
31.1519 + {
31.1520 + if (selection.single()!=itFind)
31.1521 + {
31.1522 + selection.select(itFind);
31.1523 + ensureSelectionVisible();
31.1524 + }
31.1525 + if (textEditor->findText(s,flags))
31.1526 + {
31.1527 + searching=false;
31.1528 + foundNote=true;
31.1529 + }
31.1530 + }
31.1531 + // Searching in Heading
31.1532 + if (searching && itFind->getHeading().contains (s,cs) )
31.1533 + {
31.1534 + selection.select(itFind);
31.1535 + ensureSelectionVisible();
31.1536 + searching=false;
31.1537 + }
31.1538 + }
31.1539 + if (!foundNote)
31.1540 + {
31.1541 + itFind=next(itFind);
31.1542 + if (!itFind) EOFind=true;
31.1543 + }
31.1544 + //cout <<"still searching... "<<qPrintable( itFind->getHeading())<<endl;
31.1545 + }
31.1546 + if (!searching)
31.1547 + return selection.getBranch();
31.1548 + else
31.1549 + return NULL;
31.1550 +}
31.1551 +
31.1552 +void VymModel::findReset()
31.1553 +{ // Necessary if text to find changes during a find process
31.1554 + itFind=NULL;
31.1555 + EOFind=false;
31.1556 +}
31.1557 +
31.1558 +
31.1559 +
31.1560 +void VymModel::setScene (QGraphicsScene *s)
31.1561 +{
31.1562 + mapScene=s;
31.1563 + init(); // Here we have a mapScene set,
31.1564 + // which is (still) needed to create MapCenters
31.1565 +}
31.1566 +
31.1567 +void VymModel::setURL(const QString &url)
31.1568 +{
31.1569 + BranchObj *bo=selection.getBranch();
31.1570 + if (bo)
31.1571 + {
31.1572 + QString oldurl=bo->getURL();
31.1573 + bo->setURL (url);
31.1574 + saveState (
31.1575 + bo,
31.1576 + QString ("setURL (\"%1\")").arg(oldurl),
31.1577 + bo,
31.1578 + QString ("setURL (\"%1\")").arg(url),
31.1579 + QString ("set URL of %1 to %2").arg(getObjectName(bo)).arg(url)
31.1580 + );
31.1581 + updateActions();
31.1582 + reposition();
31.1583 + selection.update();
31.1584 + ensureSelectionVisible();
31.1585 + }
31.1586 +}
31.1587 +
31.1588 +QString VymModel::getURL()
31.1589 +{
31.1590 + BranchObj *bo=selection.getBranch();
31.1591 + if (bo)
31.1592 + return bo->getURL();
31.1593 + else
31.1594 + return "";
31.1595 +}
31.1596 +
31.1597 +QStringList VymModel::getURLs()
31.1598 +{
31.1599 + QStringList urls;
31.1600 + BranchObj *bo=selection.getBranch();
31.1601 + if (bo)
31.1602 + {
31.1603 + bo=bo->first();
31.1604 + while (bo)
31.1605 + {
31.1606 + if (!bo->getURL().isEmpty()) urls.append( bo->getURL());
31.1607 + bo=bo->next();
31.1608 + }
31.1609 + }
31.1610 + return urls;
31.1611 +}
31.1612 +
31.1613 +void VymModel::linkFloatImageTo(const QString &dstString)
31.1614 +{
31.1615 + FloatImageObj *fio=selection.getFloatImage();
31.1616 + if (fio)
31.1617 + {
31.1618 + BranchObj *dst=(BranchObj*)findObjBySelect(dstString);
31.1619 + if (dst && (typeid(*dst)==typeid (BranchObj) ||
31.1620 + typeid(*dst)==typeid (MapCenterObj)))
31.1621 + {
31.1622 + LinkableMapObj *dstPar=dst->getParObj();
31.1623 + QString parString=getSelectString(dstPar);
31.1624 + QString fioPreSelectString=getSelectString(fio);
31.1625 + QString fioPreParentSelectString=getSelectString (fio->getParObj());
31.1626 + ((BranchObj*)dst)->addFloatImage (fio);
31.1627 + selection.unselect();
31.1628 + ((BranchObj*)(fio->getParObj()))->removeFloatImage (fio);
31.1629 + fio=((BranchObj*)dst)->getLastFloatImage();
31.1630 + fio->setRelPos();
31.1631 + fio->reposition();
31.1632 + selection.select(fio);
31.1633 + saveState(
31.1634 + getSelectString(fio),
31.1635 + QString("linkTo (\"%1\")").arg(fioPreParentSelectString),
31.1636 + fioPreSelectString,
31.1637 + QString ("linkTo (\"%1\")").arg(dstString),
31.1638 + QString ("Link floatimage to %1").arg(getObjectName(dst)));
31.1639 + }
31.1640 + }
31.1641 +}
31.1642 +
31.1643 +
31.1644 +void VymModel::setFrameType(const FrameObj::FrameType &t)
31.1645 +{
31.1646 + BranchObj *bo=selection.getBranch();
31.1647 + if (bo)
31.1648 + {
31.1649 + QString s=bo->getFrameTypeName();
31.1650 + bo->setFrameType (t);
31.1651 + saveState (bo, QString("setFrameType (\"%1\")").arg(s),
31.1652 + bo, QString ("setFrameType (\"%1\")").arg(bo->getFrameTypeName()),QString ("set type of frame to %1").arg(s));
31.1653 + reposition();
31.1654 + bo->updateLink();
31.1655 + }
31.1656 +}
31.1657 +
31.1658 +void VymModel::setFrameType(const QString &s)
31.1659 +{
31.1660 + BranchObj *bo=selection.getBranch();
31.1661 + if (bo)
31.1662 + {
31.1663 + saveState (bo, QString("setFrameType (\"%1\")").arg(bo->getFrameTypeName()),
31.1664 + bo, QString ("setFrameType (\"%1\")").arg(s),QString ("set type of frame to %1").arg(s));
31.1665 + bo->setFrameType (s);
31.1666 + reposition();
31.1667 + bo->updateLink();
31.1668 + }
31.1669 +}
31.1670 +
31.1671 +void VymModel::setFramePenColor(const QColor &c)
31.1672 +{
31.1673 + BranchObj *bo=selection.getBranch();
31.1674 + if (bo)
31.1675 + {
31.1676 + saveState (bo, QString("setFramePenColor (\"%1\")").arg(bo->getFramePenColor().name() ),
31.1677 + bo, QString ("setFramePenColor (\"%1\")").arg(c.name() ),QString ("set pen color of frame to %1").arg(c.name() ));
31.1678 + bo->setFramePenColor (c);
31.1679 + }
31.1680 +}
31.1681 +
31.1682 +void VymModel::setFrameBrushColor(const QColor &c)
31.1683 +{
31.1684 + BranchObj *bo=selection.getBranch();
31.1685 + if (bo)
31.1686 + {
31.1687 + saveState (bo, QString("setFrameBrushColor (\"%1\")").arg(bo->getFrameBrushColor().name() ),
31.1688 + bo, QString ("setFrameBrushColor (\"%1\")").arg(c.name() ),QString ("set brush color of frame to %1").arg(c.name() ));
31.1689 + bo->setFrameBrushColor (c);
31.1690 + }
31.1691 +}
31.1692 +
31.1693 +void VymModel::setFramePadding (const int &i)
31.1694 +{
31.1695 + BranchObj *bo=selection.getBranch();
31.1696 + if (bo)
31.1697 + {
31.1698 + saveState (bo, QString("setFramePadding (\"%1\")").arg(bo->getFramePadding() ),
31.1699 + bo, QString ("setFramePadding (\"%1\")").arg(i),QString ("set brush color of frame to %1").arg(i));
31.1700 + bo->setFramePadding (i);
31.1701 + reposition();
31.1702 + bo->updateLink();
31.1703 + }
31.1704 +}
31.1705 +
31.1706 +void VymModel::setFrameBorderWidth(const int &i)
31.1707 +{
31.1708 + BranchObj *bo=selection.getBranch();
31.1709 + if (bo)
31.1710 + {
31.1711 + saveState (bo, QString("setFrameBorderWidth (\"%1\")").arg(bo->getFrameBorderWidth() ),
31.1712 + bo, QString ("setFrameBorderWidth (\"%1\")").arg(i),QString ("set border width of frame to %1").arg(i));
31.1713 + bo->setFrameBorderWidth (i);
31.1714 + reposition();
31.1715 + bo->updateLink();
31.1716 + }
31.1717 +}
31.1718 +
31.1719 +void VymModel::setIncludeImagesVer(bool b)
31.1720 +{
31.1721 + BranchObj *bo=selection.getBranch();
31.1722 + if (bo)
31.1723 + {
31.1724 + QString u= b ? "false" : "true";
31.1725 + QString r=!b ? "false" : "true";
31.1726 +
31.1727 + saveState(
31.1728 + bo,
31.1729 + QString("setIncludeImagesVertically (%1)").arg(u),
31.1730 + bo,
31.1731 + QString("setIncludeImagesVertically (%1)").arg(r),
31.1732 + QString("Include images vertically in %1").arg(getObjectName(bo))
31.1733 + );
31.1734 + bo->setIncludeImagesVer(b);
31.1735 + reposition();
31.1736 + }
31.1737 +}
31.1738 +
31.1739 +void VymModel::setIncludeImagesHor(bool b)
31.1740 +{
31.1741 + BranchObj *bo=selection.getBranch();
31.1742 + if (bo)
31.1743 + {
31.1744 + QString u= b ? "false" : "true";
31.1745 + QString r=!b ? "false" : "true";
31.1746 +
31.1747 + saveState(
31.1748 + bo,
31.1749 + QString("setIncludeImagesHorizontally (%1)").arg(u),
31.1750 + bo,
31.1751 + QString("setIncludeImagesHorizontally (%1)").arg(r),
31.1752 + QString("Include images horizontally in %1").arg(getObjectName(bo))
31.1753 + );
31.1754 + bo->setIncludeImagesHor(b);
31.1755 + reposition();
31.1756 + }
31.1757 +}
31.1758 +
31.1759 +void VymModel::setHideLinkUnselected (bool b)
31.1760 +{
31.1761 + LinkableMapObj *sel=selection.single();
31.1762 + if (sel &&
31.1763 + (selection.type() == Selection::Branch ||
31.1764 + selection.type() == Selection::MapCenter ||
31.1765 + selection.type() == Selection::FloatImage ))
31.1766 + {
31.1767 + QString u= b ? "false" : "true";
31.1768 + QString r=!b ? "false" : "true";
31.1769 +
31.1770 + saveState(
31.1771 + sel,
31.1772 + QString("setHideLinkUnselected (%1)").arg(u),
31.1773 + sel,
31.1774 + QString("setHideLinkUnselected (%1)").arg(r),
31.1775 + QString("Hide link of %1 if unselected").arg(getObjectName(sel))
31.1776 + );
31.1777 + sel->setHideLinkUnselected(b);
31.1778 + }
31.1779 +}
31.1780 +
31.1781 +void VymModel::setHideExport(bool b)
31.1782 +{
31.1783 + BranchObj *bo=selection.getBranch();
31.1784 + if (bo)
31.1785 + {
31.1786 + bo->setHideInExport (b);
31.1787 + QString u= b ? "false" : "true";
31.1788 + QString r=!b ? "false" : "true";
31.1789 +
31.1790 + saveState(
31.1791 + bo,
31.1792 + QString ("setHideExport (%1)").arg(u),
31.1793 + bo,
31.1794 + QString ("setHideExport (%1)").arg(r),
31.1795 + QString ("Set HideExport flag of %1 to %2").arg(getObjectName(bo)).arg (r)
31.1796 + );
31.1797 + updateActions();
31.1798 + reposition();
31.1799 + selection.update();
31.1800 + // FIXME needed? scene()->update();
31.1801 + }
31.1802 +}
31.1803 +
31.1804 +void VymModel::toggleHideExport()
31.1805 +{
31.1806 + BranchObj *bo=selection.getBranch();
31.1807 + if (bo)
31.1808 + setHideExport ( !bo->hideInExport() );
31.1809 +}
31.1810 +
31.1811 +
31.1812 +void VymModel::copy()
31.1813 +{
31.1814 + LinkableMapObj *sel=selection.single();
31.1815 + if (sel)
31.1816 + {
31.1817 + if (redosAvail == 0)
31.1818 + {
31.1819 + // Copy to history
31.1820 + QString s=getSelectString(sel);
31.1821 + saveState (PartOfMap, s, "nop ()", s, "copy ()","Copy selection to clipboard",sel );
31.1822 + curClipboard=curStep;
31.1823 + }
31.1824 +
31.1825 + // Copy also to global clipboard, because we are at last step in history
31.1826 + QString bakMapName(QString("history-%1").arg(curStep));
31.1827 + QString bakMapDir(tmpMapDir +"/"+bakMapName);
31.1828 + copyDir (bakMapDir,clipboardDir );
31.1829 +
31.1830 + clipboardEmpty=false;
31.1831 + updateActions();
31.1832 + }
31.1833 +}
31.1834 +
31.1835 +
31.1836 +void VymModel::pasteNoSave(const int &n)
31.1837 +{
31.1838 + bool old=blockSaveState;
31.1839 + blockSaveState=true;
31.1840 + bool zippedOrg=zipped;
31.1841 + if (redosAvail > 0 || n!=0)
31.1842 + {
31.1843 + // Use the "historical" buffer
31.1844 + QString bakMapName(QString("history-%1").arg(n));
31.1845 + QString bakMapDir(tmpMapDir +"/"+bakMapName);
31.1846 + load (bakMapDir+"/"+clipboardFile,ImportAdd, VymMap);
31.1847 + } else
31.1848 + // Use the global buffer
31.1849 + load (clipboardDir+"/"+clipboardFile,ImportAdd, VymMap);
31.1850 + zipped=zippedOrg;
31.1851 + blockSaveState=old;
31.1852 +}
31.1853 +
31.1854 +void VymModel::paste()
31.1855 +{
31.1856 + BranchObj *sel=selection.getBranch();
31.1857 + if (sel)
31.1858 + {
31.1859 + saveStateChangingPart(
31.1860 + sel,
31.1861 + sel,
31.1862 + QString ("paste (%1)").arg(curClipboard),
31.1863 + QString("Paste to %1").arg( getObjectName(sel))
31.1864 + );
31.1865 + pasteNoSave(0);
31.1866 + reposition();
31.1867 + }
31.1868 +}
31.1869 +
31.1870 +void VymModel::cut()
31.1871 +{
31.1872 + LinkableMapObj *sel=selection.single();
31.1873 + if ( sel && (selection.type() == Selection::Branch ||
31.1874 + selection.type()==Selection::MapCenter ||
31.1875 + selection.type()==Selection::FloatImage))
31.1876 + {
31.1877 + /* No savestate! savestate is called in cutNoSave
31.1878 + saveStateChangingPart(
31.1879 + sel->getParObj(),
31.1880 + sel,
31.1881 + "cut ()",
31.1882 + QString("Cut %1").arg(getObjectName(sel ))
31.1883 + );
31.1884 + */
31.1885 + copy();
31.1886 + deleteSelection();
31.1887 + reposition();
31.1888 + }
31.1889 +}
31.1890 +
31.1891 +void VymModel::moveBranchUp()
31.1892 +{
31.1893 + BranchObj* bo=selection.getBranch();
31.1894 + BranchObj* par;
31.1895 + if (bo)
31.1896 + {
31.1897 + if (!bo->canMoveBranchUp()) return;
31.1898 + par=(BranchObj*)(bo->getParObj());
31.1899 + BranchObj *obo=par->moveBranchUp (bo); // bo will be the one below selection
31.1900 + saveState (getSelectString(bo),"moveBranchDown ()",getSelectString(obo),"moveBranchUp ()",QString("Move up %1").arg(getObjectName(bo)));
31.1901 + reposition();
31.1902 + //FIXME needed? scene()->update();
31.1903 + selection.update();
31.1904 + ensureSelectionVisible();
31.1905 + }
31.1906 +}
31.1907 +
31.1908 +void VymModel::moveBranchDown()
31.1909 +{
31.1910 + BranchObj* bo=selection.getBranch();
31.1911 + BranchObj* par;
31.1912 + if (bo)
31.1913 + {
31.1914 + if (!bo->canMoveBranchDown()) return;
31.1915 + par=(BranchObj*)(bo->getParObj());
31.1916 + BranchObj *obo=par->moveBranchDown(bo); // bo will be the one above selection
31.1917 + saveState(getSelectString(bo),"moveBranchUp ()",getSelectString(obo),"moveBranchDown ()",QString("Move down %1").arg(getObjectName(bo)));
31.1918 + reposition();
31.1919 + //FIXME needed? scene()->update();
31.1920 + selection.update();
31.1921 + ensureSelectionVisible();
31.1922 + }
31.1923 +}
31.1924 +
31.1925 +void VymModel::sortChildren()
31.1926 +{
31.1927 + BranchObj* bo=selection.getBranch();
31.1928 + if (bo)
31.1929 + {
31.1930 + if(bo->countBranches()>1)
31.1931 + {
31.1932 + saveStateChangingPart(bo,bo, "sortChildren ()",QString("Sort children of %1").arg(getObjectName(bo)));
31.1933 + bo->sortChildren();
31.1934 + reposition();
31.1935 + ensureSelectionVisible();
31.1936 + }
31.1937 + }
31.1938 +}
31.1939 +
31.1940 +MapCenterObj* VymModel::addMapCenter ()
31.1941 +{
31.1942 + MapCenterObj *mco=addMapCenter (QPointF(0,0));
31.1943 + selection.select (mco);
31.1944 + updateActions();
31.1945 + ensureSelectionVisible();
31.1946 + saveState (
31.1947 + mco,
31.1948 + "delete()",
31.1949 + NULL,
31.1950 + // FIXME how to position LineEdit without contextMenuPos ?
31.1951 + // QString ("addMapCenter (%1,%2)").arg (contextMenuPos.x()).arg(contextMenuPos.y()),
31.1952 + // QString ("Adding MapCenter to (%1,%2").arg (contextMenuPos.x()).arg(contextMenuPos.y())
31.1953 + QString ("addMapCenter (%1,%2)").arg (0).arg(0),
31.1954 + QString ("Adding MapCenter to (%1,%2").arg (0).arg(0)
31.1955 + );
31.1956 + return mco;
31.1957 +}
31.1958 +
31.1959 +MapCenterObj* VymModel::addMapCenter(QPointF absPos)
31.1960 +{
31.1961 + MapCenterObj *mapCenter = new MapCenterObj(mapScene);
31.1962 + mapCenter->move (absPos);
31.1963 + mapCenter->setVisibility (true);
31.1964 + mapCenter->setHeading (QApplication::translate("Heading of mapcenter in new map", "New map"));
31.1965 + mapCenter->setMapEditor(mapEditor); //FIXME needed to get defLinkStyle, mapLinkColorHint ... for later added objects
31.1966 + mapCenters.append(mapCenter);
31.1967 + return mapCenter;
31.1968 +}
31.1969 +
31.1970 +MapCenterObj *VymModel::removeMapCenter(MapCenterObj* mco)
31.1971 +{
31.1972 + int i=mapCenters.indexOf (mco);
31.1973 + if (i>=0)
31.1974 + {
31.1975 + mapCenters.removeAt (i);
31.1976 + delete (mco);
31.1977 + if (i>0) return mapCenters.at(i-1); // Return previous MCO
31.1978 + }
31.1979 + return NULL;
31.1980 +}
31.1981 +
31.1982 +
31.1983 +BranchObj* VymModel::addNewBranchInt(int num)
31.1984 +{
31.1985 + // Depending on pos:
31.1986 + // -3 insert in children of parent above selection
31.1987 + // -2 add branch to selection
31.1988 + // -1 insert in children of parent below selection
31.1989 + // 0..n insert in children of parent at pos
31.1990 + BranchObj *newbo=NULL;
31.1991 + BranchObj *bo=selection.getBranch();
31.1992 + if (bo)
31.1993 + {
31.1994 + if (num==-2)
31.1995 + {
31.1996 + // save scroll state. If scrolled, automatically select
31.1997 + // new branch in order to tmp unscroll parent...
31.1998 + newbo=bo->addBranch();
31.1999 +
31.2000 + }else if (num==-1)
31.2001 + {
31.2002 + num=bo->getNum()+1;
31.2003 + bo=(BranchObj*)bo->getParObj();
31.2004 + if (bo) newbo=bo->insertBranch(num);
31.2005 + }else if (num==-3)
31.2006 + {
31.2007 + num=bo->getNum();
31.2008 + bo=(BranchObj*)bo->getParObj();
31.2009 + if (bo) newbo=bo->insertBranch(num);
31.2010 + }
31.2011 + if (!newbo) return NULL;
31.2012 + }
31.2013 + return newbo;
31.2014 +}
31.2015 +
31.2016 +BranchObj* VymModel::addNewBranch(int pos)
31.2017 +{
31.2018 + // Different meaning than num in addNewBranchInt!
31.2019 + // -1 add above
31.2020 + // 0 add as child
31.2021 + // +1 add below
31.2022 + BranchObj *bo = selection.getBranch();
31.2023 + BranchObj *newbo=NULL;
31.2024 +
31.2025 + if (bo)
31.2026 + {
31.2027 + // FIXME do we still need this in model? setCursor (Qt::ArrowCursor);
31.2028 +
31.2029 + newbo=addNewBranchInt (pos-2);
31.2030 +
31.2031 + if (newbo)
31.2032 + {
31.2033 + saveState(
31.2034 + newbo,
31.2035 + "delete ()",
31.2036 + bo,
31.2037 + QString ("addBranch (%1)").arg(pos),
31.2038 + QString ("Add new branch to %1").arg(getObjectName(bo)));
31.2039 +
31.2040 + reposition();
31.2041 + selection.update();
31.2042 + latestSelectionString=getSelectString(newbo);
31.2043 + // In Network mode, the client needs to know where the new branch is,
31.2044 + // so we have to pass on this information via saveState.
31.2045 + // TODO: Get rid of this positioning workaround
31.2046 + QString ps=qpointfToString (newbo->getAbsPos());
31.2047 + sendData ("selectLatestAdded ()");
31.2048 + sendData (QString("move %1").arg(ps));
31.2049 + sendSelection();
31.2050 + }
31.2051 + }
31.2052 + return newbo;
31.2053 +}
31.2054 +
31.2055 +
31.2056 +BranchObj* VymModel::addNewBranchBefore()
31.2057 +{
31.2058 + BranchObj *newbo=NULL;
31.2059 + BranchObj *bo = selection.getBranch();
31.2060 + if (bo && selection.type()==Selection::Branch)
31.2061 + // We accept no MapCenterObj here, so we _have_ a parent
31.2062 + {
31.2063 + QPointF p=bo->getRelPos();
31.2064 +
31.2065 +
31.2066 + BranchObj *parbo=(BranchObj*)(bo->getParObj());
31.2067 +
31.2068 + // add below selection
31.2069 + newbo=parbo->insertBranch(bo->getNum()+1);
31.2070 + if (newbo)
31.2071 + {
31.2072 + newbo->move2RelPos (p);
31.2073 +
31.2074 + // Move selection to new branch
31.2075 + bo->linkTo (newbo,-1);
31.2076 +
31.2077 + saveState (newbo, "deleteKeepChildren ()", newbo, "addBranchBefore ()",
31.2078 + QString ("Add branch before %1").arg(getObjectName(bo)));
31.2079 +
31.2080 + reposition();
31.2081 + selection.update();
31.2082 + }
31.2083 + }
31.2084 + latestSelectionString=selection.getSelectString();
31.2085 + return newbo;
31.2086 +}
31.2087 +
31.2088 +void VymModel::deleteSelection()
31.2089 +{
31.2090 + BranchObj *bo = selection.getBranch();
31.2091 + if (bo && selection.type()==Selection::MapCenter)
31.2092 + {
31.2093 + // BranchObj* par=(BranchObj*)(bo->getParObj());
31.2094 + selection.unselect();
31.2095 + /* FIXME Note: does saveStateRemovingPart work for MCO? (No parent!)
31.2096 + saveStateRemovingPart (bo, QString ("Delete %1").arg(getObjectName(bo)));
31.2097 + */
31.2098 + bo=removeMapCenter ((MapCenterObj*)bo);
31.2099 + if (bo)
31.2100 + {
31.2101 + selection.select (bo);
31.2102 + ensureSelectionVisible();
31.2103 + selection.update();
31.2104 + }
31.2105 + reposition();
31.2106 + return;
31.2107 + }
31.2108 + if (bo && selection.type()==Selection::Branch)
31.2109 + {
31.2110 + BranchObj* par=(BranchObj*)bo->getParObj();
31.2111 + selection.unselect();
31.2112 + saveStateRemovingPart (bo, QString ("Delete %1").arg(getObjectName(bo)));
31.2113 + par->removeBranch(bo);
31.2114 + selection.select (par);
31.2115 + ensureSelectionVisible();
31.2116 + reposition();
31.2117 + selection.update();
31.2118 + return;
31.2119 + }
31.2120 + FloatImageObj *fio=selection.getFloatImage();
31.2121 + if (fio)
31.2122 + {
31.2123 + BranchObj* par=(BranchObj*)fio->getParObj();
31.2124 + saveStateChangingPart(
31.2125 + par,
31.2126 + fio,
31.2127 + "delete ()",
31.2128 + QString("Delete %1").arg(getObjectName(fio))
31.2129 + );
31.2130 + selection.unselect();
31.2131 + par->removeFloatImage(fio);
31.2132 + selection.select (par);
31.2133 + reposition();
31.2134 + selection.update();
31.2135 + ensureSelectionVisible();
31.2136 + return;
31.2137 + }
31.2138 +}
31.2139 +
31.2140 +void VymModel::deleteKeepChildren()
31.2141 +{
31.2142 + BranchObj *bo=selection.getBranch();
31.2143 + BranchObj *par;
31.2144 + if (bo)
31.2145 + {
31.2146 + par=(BranchObj*)(bo->getParObj());
31.2147 + QPointF p=bo->getRelPos();
31.2148 + saveStateChangingPart(
31.2149 + bo->getParObj(),
31.2150 + bo,
31.2151 + "deleteKeepChildren ()",
31.2152 + QString("Remove %1 and keep its children").arg(getObjectName(bo))
31.2153 + );
31.2154 +
31.2155 + QString sel=getSelectString(bo);
31.2156 + unselect();
31.2157 + par->removeBranchHere(bo);
31.2158 + reposition();
31.2159 + select (sel);
31.2160 + selection.getBranch()->move2RelPos (p);
31.2161 + reposition();
31.2162 + }
31.2163 +}
31.2164 +
31.2165 +void VymModel::deleteChildren()
31.2166 +{
31.2167 + BranchObj *bo=selection.getBranch();
31.2168 + if (bo)
31.2169 + {
31.2170 + saveStateChangingPart(
31.2171 + bo,
31.2172 + bo,
31.2173 + "deleteChildren ()",
31.2174 + QString( "Remove children of branch %1").arg(getObjectName(bo))
31.2175 + );
31.2176 + bo->removeChildren();
31.2177 + reposition();
31.2178 + }
31.2179 +}
31.2180 +
31.2181 +
31.2182 +bool VymModel::scrollBranch(BranchObj *bo)
31.2183 +{
31.2184 + if (bo)
31.2185 + {
31.2186 + if (bo->isScrolled()) return false;
31.2187 + if (bo->countBranches()==0) return false;
31.2188 + if (bo->getDepth()==0) return false;
31.2189 + QString u,r;
31.2190 + r="scroll";
31.2191 + u="unscroll";
31.2192 + saveState(
31.2193 + bo,
31.2194 + QString ("%1 ()").arg(u),
31.2195 + bo,
31.2196 + QString ("%1 ()").arg(r),
31.2197 + QString ("%1 %2").arg(r).arg(getObjectName(bo))
31.2198 + );
31.2199 + bo->toggleScroll();
31.2200 + selection.update();
31.2201 + // FIXME needed? scene()->update();
31.2202 + return true;
31.2203 + }
31.2204 + return false;
31.2205 +}
31.2206 +
31.2207 +bool VymModel::unscrollBranch(BranchObj *bo)
31.2208 +{
31.2209 + if (bo)
31.2210 + {
31.2211 + if (!bo->isScrolled()) return false;
31.2212 + if (bo->countBranches()==0) return false;
31.2213 + if (bo->getDepth()==0) return false;
31.2214 + QString u,r;
31.2215 + u="scroll";
31.2216 + r="unscroll";
31.2217 + saveState(
31.2218 + bo,
31.2219 + QString ("%1 ()").arg(u),
31.2220 + bo,
31.2221 + QString ("%1 ()").arg(r),
31.2222 + QString ("%1 %2").arg(r).arg(getObjectName(bo))
31.2223 + );
31.2224 + bo->toggleScroll();
31.2225 + selection.update();
31.2226 + // FIXME needed? scene()->update();
31.2227 + return true;
31.2228 + }
31.2229 + return false;
31.2230 +}
31.2231 +
31.2232 +void VymModel::toggleScroll()
31.2233 +{
31.2234 + BranchObj *bo=selection.getBranch();
31.2235 + if (selection.type()==Selection::Branch )
31.2236 + {
31.2237 + if (bo->isScrolled())
31.2238 + unscrollBranch (bo);
31.2239 + else
31.2240 + scrollBranch (bo);
31.2241 + }
31.2242 +}
31.2243 +
31.2244 +void VymModel::unscrollChildren()
31.2245 +{
31.2246 + BranchObj *bo=selection.getBranch();
31.2247 + if (bo)
31.2248 + {
31.2249 + bo->first();
31.2250 + while (bo)
31.2251 + {
31.2252 + if (bo->isScrolled()) unscrollBranch (bo);
31.2253 + bo=bo->next();
31.2254 + }
31.2255 + }
31.2256 +}
31.2257 +void VymModel::addFloatImage (const QPixmap &img)
31.2258 +{
31.2259 + BranchObj *bo=selection.getBranch();
31.2260 + if (bo)
31.2261 + {
31.2262 + FloatImageObj *fio=bo->addFloatImage();
31.2263 + fio->load(img);
31.2264 + fio->setOriginalFilename("No original filename (image added by dropevent)");
31.2265 + QString s=getSelectString(bo);
31.2266 + saveState (PartOfMap, s, "nop ()", s, "copy ()","Copy dropped image to clipboard",fio );
31.2267 + saveState (fio,"delete ()", bo,QString("paste(%1)").arg(curStep),"Pasting dropped image");
31.2268 + reposition();
31.2269 + // FIXME needed? scene()->update();
31.2270 + }
31.2271 +}
31.2272 +
31.2273 +
31.2274 +void VymModel::colorBranch (QColor c)
31.2275 +{
31.2276 + BranchObj *bo=selection.getBranch();
31.2277 + if (bo)
31.2278 + {
31.2279 + saveState(
31.2280 + bo,
31.2281 + QString ("colorBranch (\"%1\")").arg(bo->getColor().name()),
31.2282 + bo,
31.2283 + QString ("colorBranch (\"%1\")").arg(c.name()),
31.2284 + QString("Set color of %1 to %2").arg(getObjectName(bo)).arg(c.name())
31.2285 + );
31.2286 + bo->setColor(c); // color branch
31.2287 + }
31.2288 +}
31.2289 +
31.2290 +void VymModel::colorSubtree (QColor c)
31.2291 +{
31.2292 + BranchObj *bo=selection.getBranch();
31.2293 + if (bo)
31.2294 + {
31.2295 + saveStateChangingPart(
31.2296 + bo,
31.2297 + bo,
31.2298 + QString ("colorSubtree (\"%1\")").arg(c.name()),
31.2299 + QString ("Set color of %1 and children to %2").arg(getObjectName(bo)).arg(c.name())
31.2300 + );
31.2301 + bo->setColorSubtree (c); // color links, color children
31.2302 + }
31.2303 +}
31.2304 +
31.2305 +QColor VymModel::getCurrentHeadingColor()
31.2306 +{
31.2307 + BranchObj *bo=selection.getBranch();
31.2308 + if (bo) return bo->getColor();
31.2309 +
31.2310 + QMessageBox::warning(0,"Warning","Can't get color of heading,\nthere's no branch selected");
31.2311 + return Qt::black;
31.2312 +}
31.2313 +
31.2314 +
31.2315 +
31.2316 +void VymModel::editURL()
31.2317 +{
31.2318 + BranchObj *bo=selection.getBranch();
31.2319 + if (bo)
31.2320 + {
31.2321 + bool ok;
31.2322 + QString text = QInputDialog::getText(
31.2323 + "VYM", tr("Enter URL:"), QLineEdit::Normal,
31.2324 + bo->getURL(), &ok, NULL);
31.2325 + if ( ok)
31.2326 + // user entered something and pressed OK
31.2327 + setURL(text);
31.2328 + }
31.2329 +}
31.2330 +
31.2331 +void VymModel::editLocalURL()
31.2332 +{
31.2333 + BranchObj *bo=selection.getBranch();
31.2334 + if (bo)
31.2335 + {
31.2336 + QStringList filters;
31.2337 + filters <<"All files (*)";
31.2338 + filters << tr("Text","Filedialog") + " (*.txt)";
31.2339 + filters << tr("Spreadsheet","Filedialog") + " (*.odp,*.sxc)";
31.2340 + filters << tr("Textdocument","Filedialog") +" (*.odw,*.sxw)";
31.2341 + filters << tr("Images","Filedialog") + " (*.png *.bmp *.xbm *.jpg *.png *.xpm *.gif *.pnm)";
31.2342 + QFileDialog *fd=new QFileDialog( NULL,vymName+" - " +tr("Set URL to a local file"));
31.2343 + fd->setFilters (filters);
31.2344 + fd->setCaption(vymName+" - " +tr("Set URL to a local file"));
31.2345 + fd->setDirectory (lastFileDir);
31.2346 + if (! bo->getVymLink().isEmpty() )
31.2347 + fd->selectFile( bo->getURL() );
31.2348 + fd->show();
31.2349 +
31.2350 + if ( fd->exec() == QDialog::Accepted )
31.2351 + {
31.2352 + lastFileDir=QDir (fd->directory().path());
31.2353 + setURL (fd->selectedFile() );
31.2354 + }
31.2355 + }
31.2356 +}
31.2357 +
31.2358 +
31.2359 +void VymModel::editHeading2URL()
31.2360 +{
31.2361 + BranchObj *bo=selection.getBranch();
31.2362 + if (bo)
31.2363 + setURL (bo->getHeading());
31.2364 +}
31.2365 +
31.2366 +void VymModel::editBugzilla2URL()
31.2367 +{
31.2368 + BranchObj *bo=selection.getBranch();
31.2369 + if (bo)
31.2370 + {
31.2371 + QString url= "https://bugzilla.novell.com/show_bug.cgi?id="+bo->getHeading();
31.2372 + setURL (url);
31.2373 + }
31.2374 +}
31.2375 +
31.2376 +void VymModel::editFATE2URL()
31.2377 +{
31.2378 + BranchObj *bo=selection.getBranch();
31.2379 + if (bo)
31.2380 + {
31.2381 + QString url= "http://keeper.suse.de:8080/webfate/match/id?value=ID"+bo->getHeading();
31.2382 + saveState(
31.2383 + bo,
31.2384 + "setURL (\""+bo->getURL()+"\")",
31.2385 + bo,
31.2386 + "setURL (\""+url+"\")",
31.2387 + QString("Use heading of %1 as link to FATE").arg(getObjectName(bo))
31.2388 + );
31.2389 + bo->setURL (url);
31.2390 + updateActions();
31.2391 + }
31.2392 +}
31.2393 +
31.2394 +void VymModel::editVymLink()
31.2395 +{
31.2396 + BranchObj *bo=selection.getBranch();
31.2397 + if (bo)
31.2398 + {
31.2399 + QStringList filters;
31.2400 + filters <<"VYM map (*.vym)";
31.2401 + QFileDialog *fd=new QFileDialog( NULL,vymName+" - " +tr("Link to another map"));
31.2402 + fd->setFilters (filters);
31.2403 + fd->setCaption(vymName+" - " +tr("Link to another map"));
31.2404 + fd->setDirectory (lastFileDir);
31.2405 + if (! bo->getVymLink().isEmpty() )
31.2406 + fd->selectFile( bo->getVymLink() );
31.2407 + fd->show();
31.2408 +
31.2409 + QString fn;
31.2410 + if ( fd->exec() == QDialog::Accepted )
31.2411 + {
31.2412 + lastFileDir=QDir (fd->directory().path());
31.2413 + saveState(
31.2414 + bo,
31.2415 + "setVymLink (\""+bo->getVymLink()+"\")",
31.2416 + bo,
31.2417 + "setVymLink (\""+fd->selectedFile()+"\")",
31.2418 + QString("Set vymlink of %1 to %2").arg(getObjectName(bo)).arg(fd->selectedFile())
31.2419 + );
31.2420 + setVymLink (fd->selectedFile() ); // FIXME ok?
31.2421 + }
31.2422 + }
31.2423 +}
31.2424 +
31.2425 +void VymModel::setVymLink (const QString &s)
31.2426 +{
31.2427 + // Internal function, no saveState needed
31.2428 + BranchObj *bo=selection.getBranch();
31.2429 + if (bo)
31.2430 + {
31.2431 + bo->setVymLink(s);
31.2432 + reposition();
31.2433 + updateActions();
31.2434 + selection.update();
31.2435 + ensureSelectionVisible();
31.2436 + }
31.2437 +}
31.2438 +
31.2439 +void VymModel::deleteVymLink()
31.2440 +{
31.2441 + BranchObj *bo=selection.getBranch();
31.2442 + if (bo)
31.2443 + {
31.2444 + saveState(
31.2445 + bo,
31.2446 + "setVymLink (\""+bo->getVymLink()+"\")",
31.2447 + bo,
31.2448 + "setVymLink (\"\")",
31.2449 + QString("Unset vymlink of %1").arg(getObjectName(bo))
31.2450 + );
31.2451 + bo->setVymLink ("" );
31.2452 + updateActions();
31.2453 + reposition();
31.2454 + // FIXME needed? scene()->update();
31.2455 + }
31.2456 +}
31.2457 +
31.2458 +QString VymModel::getVymLink()
31.2459 +{
31.2460 + BranchObj *bo=selection.getBranch();
31.2461 + if (bo)
31.2462 + return bo->getVymLink();
31.2463 + else
31.2464 + return "";
31.2465 +
31.2466 +}
31.2467 +
31.2468 +QStringList VymModel::getVymLinks()
31.2469 +{
31.2470 + QStringList links;
31.2471 + BranchObj *bo=selection.getBranch();
31.2472 + if (bo)
31.2473 + {
31.2474 + bo=bo->first();
31.2475 + while (bo)
31.2476 + {
31.2477 + if (!bo->getVymLink().isEmpty()) links.append( bo->getVymLink());
31.2478 + bo=bo->next();
31.2479 + }
31.2480 + }
31.2481 + return links;
31.2482 +}
31.2483 +
31.2484 +
31.2485 +void VymModel::followXLink(int i)
31.2486 +{
31.2487 + BranchObj *bo=selection.getBranch();
31.2488 + if (bo)
31.2489 + {
31.2490 + bo=bo->XLinkTargetAt(i);
31.2491 + if (bo)
31.2492 + {
31.2493 + selection.select(bo);
31.2494 + ensureSelectionVisible();
31.2495 + }
31.2496 + }
31.2497 +}
31.2498 +
31.2499 +void VymModel::editXLink(int i) // FIXME missing saveState
31.2500 +{
31.2501 + BranchObj *bo=selection.getBranch();
31.2502 + if (bo)
31.2503 + {
31.2504 + XLinkObj *xlo=bo->XLinkAt(i);
31.2505 + if (xlo)
31.2506 + {
31.2507 + EditXLinkDialog dia;
31.2508 + dia.setXLink (xlo);
31.2509 + dia.setSelection(bo);
31.2510 + if (dia.exec() == QDialog::Accepted)
31.2511 + {
31.2512 + if (dia.useSettingsGlobal() )
31.2513 + {
31.2514 + setMapDefXLinkColor (xlo->getColor() );
31.2515 + setMapDefXLinkWidth (xlo->getWidth() );
31.2516 + }
31.2517 + if (dia.deleteXLink())
31.2518 + bo->deleteXLinkAt(i);
31.2519 + }
31.2520 + }
31.2521 + }
31.2522 +}
31.2523 +
31.2524 +
31.2525 +
31.2526 +
31.2527 +
31.2528 +//////////////////////////////////////////////
31.2529 +// Scripting
31.2530 +//////////////////////////////////////////////
31.2531 +
31.2532 +void VymModel::parseAtom(const QString &atom)
31.2533 +{
31.2534 + BranchObj *selb=selection.getBranch();
31.2535 + QString s,t;
31.2536 + double x,y;
31.2537 + int n;
31.2538 + bool b,ok;
31.2539 +
31.2540 + // Split string s into command and parameters
31.2541 + parser.parseAtom (atom);
31.2542 + QString com=parser.getCommand();
31.2543 +
31.2544 + // External commands
31.2545 + /////////////////////////////////////////////////////////////////////
31.2546 + if (com=="addBranch")
31.2547 + {
31.2548 + if (selection.isEmpty())
31.2549 + {
31.2550 + parser.setError (Aborted,"Nothing selected");
31.2551 + } else if (! selb )
31.2552 + {
31.2553 + parser.setError (Aborted,"Type of selection is not a branch");
31.2554 + } else
31.2555 + {
31.2556 + QList <int> pl;
31.2557 + pl << 0 <<1;
31.2558 + if (parser.checkParCount(pl))
31.2559 + {
31.2560 + if (parser.parCount()==0)
31.2561 + addNewBranch (0);
31.2562 + else
31.2563 + {
31.2564 + n=parser.parInt (ok,0);
31.2565 + if (ok ) addNewBranch (n);
31.2566 + }
31.2567 + }
31.2568 + }
31.2569 + /////////////////////////////////////////////////////////////////////
31.2570 + } else if (com=="addBranchBefore")
31.2571 + {
31.2572 + if (selection.isEmpty())
31.2573 + {
31.2574 + parser.setError (Aborted,"Nothing selected");
31.2575 + } else if (! selb )
31.2576 + {
31.2577 + parser.setError (Aborted,"Type of selection is not a branch");
31.2578 + } else
31.2579 + {
31.2580 + if (parser.parCount()==0)
31.2581 + {
31.2582 + addNewBranchBefore ();
31.2583 + }
31.2584 + }
31.2585 + /////////////////////////////////////////////////////////////////////
31.2586 + } else if (com==QString("addMapCenter"))
31.2587 + {
31.2588 + if (parser.checkParCount(2))
31.2589 + {
31.2590 + x=parser.parDouble (ok,0);
31.2591 + if (ok)
31.2592 + {
31.2593 + y=parser.parDouble (ok,1);
31.2594 + if (ok) addMapCenter (QPointF(x,y));
31.2595 + }
31.2596 + }
31.2597 + /////////////////////////////////////////////////////////////////////
31.2598 + } else if (com==QString("addMapReplace"))
31.2599 + {
31.2600 + if (selection.isEmpty())
31.2601 + {
31.2602 + parser.setError (Aborted,"Nothing selected");
31.2603 + } else if (! selb )
31.2604 + {
31.2605 + parser.setError (Aborted,"Type of selection is not a branch");
31.2606 + } else if (parser.checkParCount(1))
31.2607 + {
31.2608 + //s=parser.parString (ok,0); // selection
31.2609 + t=parser.parString (ok,0); // path to map
31.2610 + if (QDir::isRelativePath(t)) t=(tmpMapDir + "/"+t);
31.2611 + addMapReplaceInt(getSelectString(selb),t);
31.2612 + }
31.2613 + /////////////////////////////////////////////////////////////////////
31.2614 + } else if (com==QString("addMapInsert"))
31.2615 + {
31.2616 + if (selection.isEmpty())
31.2617 + {
31.2618 + parser.setError (Aborted,"Nothing selected");
31.2619 + } else if (! selb )
31.2620 + {
31.2621 + parser.setError (Aborted,"Type of selection is not a branch");
31.2622 + } else
31.2623 + {
31.2624 + if (parser.checkParCount(2))
31.2625 + {
31.2626 + t=parser.parString (ok,0); // path to map
31.2627 + n=parser.parInt(ok,1); // position
31.2628 + if (QDir::isRelativePath(t)) t=(tmpMapDir + "/"+t);
31.2629 + addMapInsertInt(t,n);
31.2630 + }
31.2631 + }
31.2632 + /////////////////////////////////////////////////////////////////////
31.2633 + } else if (com=="clearFlags")
31.2634 + {
31.2635 + if (selection.isEmpty() )
31.2636 + {
31.2637 + parser.setError (Aborted,"Nothing selected");
31.2638 + } else if (! selb )
31.2639 + {
31.2640 + parser.setError (Aborted,"Type of selection is not a branch");
31.2641 + } else if (parser.checkParCount(0))
31.2642 + {
31.2643 + selb->clearStandardFlags();
31.2644 + selb->updateFlagsToolbar();
31.2645 + }
31.2646 + /////////////////////////////////////////////////////////////////////
31.2647 + } else if (com=="colorBranch")
31.2648 + {
31.2649 + if (selection.isEmpty())
31.2650 + {
31.2651 + parser.setError (Aborted,"Nothing selected");
31.2652 + } else if (! selb )
31.2653 + {
31.2654 + parser.setError (Aborted,"Type of selection is not a branch");
31.2655 + } else if (parser.checkParCount(1))
31.2656 + {
31.2657 + QColor c=parser.parColor (ok,0);
31.2658 + if (ok) colorBranch (c);
31.2659 + }
31.2660 + /////////////////////////////////////////////////////////////////////
31.2661 + } else if (com=="colorSubtree")
31.2662 + {
31.2663 + if (selection.isEmpty())
31.2664 + {
31.2665 + parser.setError (Aborted,"Nothing selected");
31.2666 + } else if (! selb )
31.2667 + {
31.2668 + parser.setError (Aborted,"Type of selection is not a branch");
31.2669 + } else if (parser.checkParCount(1))
31.2670 + {
31.2671 + QColor c=parser.parColor (ok,0);
31.2672 + if (ok) colorSubtree (c);
31.2673 + }
31.2674 + /////////////////////////////////////////////////////////////////////
31.2675 + } else if (com=="copy")
31.2676 + {
31.2677 + if (selection.isEmpty())
31.2678 + {
31.2679 + parser.setError (Aborted,"Nothing selected");
31.2680 + } else if (! selb )
31.2681 + {
31.2682 + parser.setError (Aborted,"Type of selection is not a branch");
31.2683 + } else if (parser.checkParCount(0))
31.2684 + {
31.2685 + //FIXME missing action for copy
31.2686 + }
31.2687 + /////////////////////////////////////////////////////////////////////
31.2688 + } else if (com=="cut")
31.2689 + {
31.2690 + if (selection.isEmpty())
31.2691 + {
31.2692 + parser.setError (Aborted,"Nothing selected");
31.2693 + } else if ( selection.type()!=Selection::Branch &&
31.2694 + selection.type()!=Selection::MapCenter &&
31.2695 + selection.type()!=Selection::FloatImage )
31.2696 + {
31.2697 + parser.setError (Aborted,"Type of selection is not a branch or floatimage");
31.2698 + } else if (parser.checkParCount(0))
31.2699 + {
31.2700 + cut();
31.2701 + }
31.2702 + /////////////////////////////////////////////////////////////////////
31.2703 + } else if (com=="delete")
31.2704 + {
31.2705 + if (selection.isEmpty())
31.2706 + {
31.2707 + parser.setError (Aborted,"Nothing selected");
31.2708 + }
31.2709 + /*else if (selection.type() != Selection::Branch && selection.type() != Selection::FloatImage )
31.2710 + {
31.2711 + parser.setError (Aborted,"Type of selection is wrong.");
31.2712 + }
31.2713 + */
31.2714 + else if (parser.checkParCount(0))
31.2715 + {
31.2716 + deleteSelection();
31.2717 + }
31.2718 + /////////////////////////////////////////////////////////////////////
31.2719 + } else if (com=="deleteKeepChildren")
31.2720 + {
31.2721 + if (selection.isEmpty())
31.2722 + {
31.2723 + parser.setError (Aborted,"Nothing selected");
31.2724 + } else if (! selb )
31.2725 + {
31.2726 + parser.setError (Aborted,"Type of selection is not a branch");
31.2727 + } else if (parser.checkParCount(0))
31.2728 + {
31.2729 + deleteKeepChildren();
31.2730 + }
31.2731 + /////////////////////////////////////////////////////////////////////
31.2732 + } else if (com=="deleteChildren")
31.2733 + {
31.2734 + if (selection.isEmpty())
31.2735 + {
31.2736 + parser.setError (Aborted,"Nothing selected");
31.2737 + } else if (! selb)
31.2738 + {
31.2739 + parser.setError (Aborted,"Type of selection is not a branch");
31.2740 + } else if (parser.checkParCount(0))
31.2741 + {
31.2742 + deleteChildren();
31.2743 + }
31.2744 + /////////////////////////////////////////////////////////////////////
31.2745 + } else if (com=="exportASCII")
31.2746 + {
31.2747 + QString fname="";
31.2748 + ok=true;
31.2749 + if (parser.parCount()>=1)
31.2750 + // Hey, we even have a filename
31.2751 + fname=parser.parString(ok,0);
31.2752 + if (!ok)
31.2753 + {
31.2754 + parser.setError (Aborted,"Could not read filename");
31.2755 + } else
31.2756 + {
31.2757 + exportASCII (fname,false);
31.2758 + }
31.2759 + /////////////////////////////////////////////////////////////////////
31.2760 + } else if (com=="exportImage")
31.2761 + {
31.2762 + QString fname="";
31.2763 + ok=true;
31.2764 + if (parser.parCount()>=2)
31.2765 + // Hey, we even have a filename
31.2766 + fname=parser.parString(ok,0);
31.2767 + if (!ok)
31.2768 + {
31.2769 + parser.setError (Aborted,"Could not read filename");
31.2770 + } else
31.2771 + {
31.2772 + QString format="PNG";
31.2773 + if (parser.parCount()>=2)
31.2774 + {
31.2775 + format=parser.parString(ok,1);
31.2776 + }
31.2777 + exportImage (fname,false,format);
31.2778 + }
31.2779 + /////////////////////////////////////////////////////////////////////
31.2780 + } else if (com=="exportXHTML")
31.2781 + {
31.2782 + QString fname="";
31.2783 + ok=true;
31.2784 + if (parser.parCount()>=2)
31.2785 + // Hey, we even have a filename
31.2786 + fname=parser.parString(ok,1);
31.2787 + if (!ok)
31.2788 + {
31.2789 + parser.setError (Aborted,"Could not read filename");
31.2790 + } else
31.2791 + {
31.2792 + exportXHTML (fname,false);
31.2793 + }
31.2794 + /////////////////////////////////////////////////////////////////////
31.2795 + } else if (com=="exportXML")
31.2796 + {
31.2797 + QString fname="";
31.2798 + ok=true;
31.2799 + if (parser.parCount()>=2)
31.2800 + // Hey, we even have a filename
31.2801 + fname=parser.parString(ok,1);
31.2802 + if (!ok)
31.2803 + {
31.2804 + parser.setError (Aborted,"Could not read filename");
31.2805 + } else
31.2806 + {
31.2807 + exportXML (fname,false);
31.2808 + }
31.2809 + /////////////////////////////////////////////////////////////////////
31.2810 + } else if (com=="importDir")
31.2811 + {
31.2812 + if (selection.isEmpty())
31.2813 + {
31.2814 + parser.setError (Aborted,"Nothing selected");
31.2815 + } else if (! selb )
31.2816 + {
31.2817 + parser.setError (Aborted,"Type of selection is not a branch");
31.2818 + } else if (parser.checkParCount(1))
31.2819 + {
31.2820 + s=parser.parString(ok,0);
31.2821 + if (ok) importDirInt(s);
31.2822 + }
31.2823 + /////////////////////////////////////////////////////////////////////
31.2824 + } else if (com=="linkTo")
31.2825 + {
31.2826 + if (selection.isEmpty())
31.2827 + {
31.2828 + parser.setError (Aborted,"Nothing selected");
31.2829 + } else if ( selb)
31.2830 + {
31.2831 + if (parser.checkParCount(4))
31.2832 + {
31.2833 + // 0 selectstring of parent
31.2834 + // 1 num in parent (for branches)
31.2835 + // 2,3 x,y of mainbranch or mapcenter
31.2836 + s=parser.parString(ok,0);
31.2837 + LinkableMapObj *dst=findObjBySelect (s);
31.2838 + if (dst)
31.2839 + {
31.2840 + if (typeid(*dst) == typeid(BranchObj) )
31.2841 + {
31.2842 + // Get number in parent
31.2843 + n=parser.parInt (ok,1);
31.2844 + if (ok)
31.2845 + {
31.2846 + selb->linkTo ((BranchObj*)(dst),n);
31.2847 + selection.update();
31.2848 + }
31.2849 + } else if (typeid(*dst) == typeid(MapCenterObj) )
31.2850 + {
31.2851 + selb->linkTo ((BranchObj*)(dst),-1);
31.2852 + // Get coordinates of mainbranch
31.2853 + x=parser.parDouble(ok,2);
31.2854 + if (ok)
31.2855 + {
31.2856 + y=parser.parDouble(ok,3);
31.2857 + if (ok)
31.2858 + {
31.2859 + selb->move (x,y);
31.2860 + selection.update();
31.2861 + }
31.2862 + }
31.2863 + }
31.2864 + }
31.2865 + }
31.2866 + } else if ( selection.type() == Selection::FloatImage)
31.2867 + {
31.2868 + if (parser.checkParCount(1))
31.2869 + {
31.2870 + // 0 selectstring of parent
31.2871 + s=parser.parString(ok,0);
31.2872 + LinkableMapObj *dst=findObjBySelect (s);
31.2873 + if (dst)
31.2874 + {
31.2875 + if (typeid(*dst) == typeid(BranchObj) ||
31.2876 + typeid(*dst) == typeid(MapCenterObj))
31.2877 + linkFloatImageTo (getSelectString(dst));
31.2878 + } else
31.2879 + parser.setError (Aborted,"Destination is not a branch");
31.2880 + }
31.2881 + } else
31.2882 + parser.setError (Aborted,"Type of selection is not a floatimage or branch");
31.2883 + /////////////////////////////////////////////////////////////////////
31.2884 + } else if (com=="loadImage")
31.2885 + {
31.2886 + if (selection.isEmpty())
31.2887 + {
31.2888 + parser.setError (Aborted,"Nothing selected");
31.2889 + } else if (! selb )
31.2890 + {
31.2891 + parser.setError (Aborted,"Type of selection is not a branch");
31.2892 + } else if (parser.checkParCount(1))
31.2893 + {
31.2894 + s=parser.parString(ok,0);
31.2895 + if (ok) loadFloatImageInt (s);
31.2896 + }
31.2897 + /////////////////////////////////////////////////////////////////////
31.2898 + } else if (com=="moveBranchUp")
31.2899 + {
31.2900 + if (selection.isEmpty() )
31.2901 + {
31.2902 + parser.setError (Aborted,"Nothing selected");
31.2903 + } else if (! selb )
31.2904 + {
31.2905 + parser.setError (Aborted,"Type of selection is not a branch");
31.2906 + } else if (parser.checkParCount(0))
31.2907 + {
31.2908 + moveBranchUp();
31.2909 + }
31.2910 + /////////////////////////////////////////////////////////////////////
31.2911 + } else if (com=="moveBranchDown")
31.2912 + {
31.2913 + if (selection.isEmpty() )
31.2914 + {
31.2915 + parser.setError (Aborted,"Nothing selected");
31.2916 + } else if (! selb )
31.2917 + {
31.2918 + parser.setError (Aborted,"Type of selection is not a branch");
31.2919 + } else if (parser.checkParCount(0))
31.2920 + {
31.2921 + moveBranchDown();
31.2922 + }
31.2923 + /////////////////////////////////////////////////////////////////////
31.2924 + } else if (com=="move")
31.2925 + {
31.2926 + if (selection.isEmpty() )
31.2927 + {
31.2928 + parser.setError (Aborted,"Nothing selected");
31.2929 + } else if ( selection.type()!=Selection::Branch &&
31.2930 + selection.type()!=Selection::MapCenter &&
31.2931 + selection.type()!=Selection::FloatImage )
31.2932 + {
31.2933 + parser.setError (Aborted,"Type of selection is not a branch or floatimage");
31.2934 + } else if (parser.checkParCount(2))
31.2935 + {
31.2936 + x=parser.parDouble (ok,0);
31.2937 + if (ok)
31.2938 + {
31.2939 + y=parser.parDouble (ok,1);
31.2940 + if (ok) move (x,y);
31.2941 + }
31.2942 + }
31.2943 + /////////////////////////////////////////////////////////////////////
31.2944 + } else if (com=="moveRel")
31.2945 + {
31.2946 + if (selection.isEmpty() )
31.2947 + {
31.2948 + parser.setError (Aborted,"Nothing selected");
31.2949 + } else if ( selection.type()!=Selection::Branch &&
31.2950 + selection.type()!=Selection::MapCenter &&
31.2951 + selection.type()!=Selection::FloatImage )
31.2952 + {
31.2953 + parser.setError (Aborted,"Type of selection is not a branch or floatimage");
31.2954 + } else if (parser.checkParCount(2))
31.2955 + {
31.2956 + x=parser.parDouble (ok,0);
31.2957 + if (ok)
31.2958 + {
31.2959 + y=parser.parDouble (ok,1);
31.2960 + if (ok) moveRel (x,y);
31.2961 + }
31.2962 + }
31.2963 + /////////////////////////////////////////////////////////////////////
31.2964 + } else if (com=="nop")
31.2965 + {
31.2966 + /////////////////////////////////////////////////////////////////////
31.2967 + } else if (com=="paste")
31.2968 + {
31.2969 + if (selection.isEmpty() )
31.2970 + {
31.2971 + parser.setError (Aborted,"Nothing selected");
31.2972 + } else if (! selb )
31.2973 + {
31.2974 + parser.setError (Aborted,"Type of selection is not a branch");
31.2975 + } else if (parser.checkParCount(1))
31.2976 + {
31.2977 + n=parser.parInt (ok,0);
31.2978 + if (ok) pasteNoSave(n);
31.2979 + }
31.2980 + /////////////////////////////////////////////////////////////////////
31.2981 + } else if (com=="qa")
31.2982 + {
31.2983 + if (selection.isEmpty() )
31.2984 + {
31.2985 + parser.setError (Aborted,"Nothing selected");
31.2986 + } else if (! selb )
31.2987 + {
31.2988 + parser.setError (Aborted,"Type of selection is not a branch");
31.2989 + } else if (parser.checkParCount(4))
31.2990 + {
31.2991 + QString c,u;
31.2992 + c=parser.parString (ok,0);
31.2993 + if (!ok)
31.2994 + {
31.2995 + parser.setError (Aborted,"No comment given");
31.2996 + } else
31.2997 + {
31.2998 + s=parser.parString (ok,1);
31.2999 + if (!ok)
31.3000 + {
31.3001 + parser.setError (Aborted,"First parameter is not a string");
31.3002 + } else
31.3003 + {
31.3004 + t=parser.parString (ok,2);
31.3005 + if (!ok)
31.3006 + {
31.3007 + parser.setError (Aborted,"Condition is not a string");
31.3008 + } else
31.3009 + {
31.3010 + u=parser.parString (ok,3);
31.3011 + if (!ok)
31.3012 + {
31.3013 + parser.setError (Aborted,"Third parameter is not a string");
31.3014 + } else
31.3015 + {
31.3016 + if (s!="heading")
31.3017 + {
31.3018 + parser.setError (Aborted,"Unknown type: "+s);
31.3019 + } else
31.3020 + {
31.3021 + if (! (t=="eq") )
31.3022 + {
31.3023 + parser.setError (Aborted,"Unknown operator: "+t);
31.3024 + } else
31.3025 + {
31.3026 + if (! selb )
31.3027 + {
31.3028 + parser.setError (Aborted,"Type of selection is not a branch");
31.3029 + } else
31.3030 + {
31.3031 + if (selb->getHeading() == u)
31.3032 + {
31.3033 + cout << "PASSED: " << qPrintable (c) << endl;
31.3034 + } else
31.3035 + {
31.3036 + cout << "FAILED: " << qPrintable (c) << endl;
31.3037 + }
31.3038 + }
31.3039 + }
31.3040 + }
31.3041 + }
31.3042 + }
31.3043 + }
31.3044 + }
31.3045 + }
31.3046 + /////////////////////////////////////////////////////////////////////
31.3047 + } else if (com=="saveImage")
31.3048 + {
31.3049 + FloatImageObj *fio=selection.getFloatImage();
31.3050 + if (!fio)
31.3051 + {
31.3052 + parser.setError (Aborted,"Type of selection is not an image");
31.3053 + } else if (parser.checkParCount(2))
31.3054 + {
31.3055 + s=parser.parString(ok,0);
31.3056 + if (ok)
31.3057 + {
31.3058 + t=parser.parString(ok,1);
31.3059 + if (ok) saveFloatImageInt (fio,t,s);
31.3060 + }
31.3061 + }
31.3062 + /////////////////////////////////////////////////////////////////////
31.3063 + } else if (com=="scroll")
31.3064 + {
31.3065 + if (selection.isEmpty() )
31.3066 + {
31.3067 + parser.setError (Aborted,"Nothing selected");
31.3068 + } else if (! selb )
31.3069 + {
31.3070 + parser.setError (Aborted,"Type of selection is not a branch");
31.3071 + } else if (parser.checkParCount(0))
31.3072 + {
31.3073 + if (!scrollBranch (selb))
31.3074 + parser.setError (Aborted,"Could not scroll branch");
31.3075 + }
31.3076 + /////////////////////////////////////////////////////////////////////
31.3077 + } else if (com=="select")
31.3078 + {
31.3079 + if (parser.checkParCount(1))
31.3080 + {
31.3081 + s=parser.parString(ok,0);
31.3082 + if (ok) select (s);
31.3083 + }
31.3084 + /////////////////////////////////////////////////////////////////////
31.3085 + } else if (com=="selectLastBranch")
31.3086 + {
31.3087 + if (selection.isEmpty() )
31.3088 + {
31.3089 + parser.setError (Aborted,"Nothing selected");
31.3090 + } else if (! selb )
31.3091 + {
31.3092 + parser.setError (Aborted,"Type of selection is not a branch");
31.3093 + } else if (parser.checkParCount(0))
31.3094 + {
31.3095 + BranchObj *bo=selb->getLastBranch();
31.3096 + if (!bo)
31.3097 + parser.setError (Aborted,"Could not select last branch");
31.3098 + selectInt (bo);
31.3099 +
31.3100 + }
31.3101 + /////////////////////////////////////////////////////////////////////
31.3102 + } else if (com=="selectLastImage")
31.3103 + {
31.3104 + if (selection.isEmpty() )
31.3105 + {
31.3106 + parser.setError (Aborted,"Nothing selected");
31.3107 + } else if (! selb )
31.3108 + {
31.3109 + parser.setError (Aborted,"Type of selection is not a branch");
31.3110 + } else if (parser.checkParCount(0))
31.3111 + {
31.3112 + FloatImageObj *fio=selb->getLastFloatImage();
31.3113 + if (!fio)
31.3114 + parser.setError (Aborted,"Could not select last image");
31.3115 + selectInt (fio);
31.3116 +
31.3117 + }
31.3118 + /////////////////////////////////////////////////////////////////////
31.3119 + } else if (com=="selectLatestAdded")
31.3120 + {
31.3121 + if (latestSelectionString.isEmpty() )
31.3122 + {
31.3123 + parser.setError (Aborted,"No latest added object");
31.3124 + } else
31.3125 + {
31.3126 + if (!select (latestSelectionString))
31.3127 + parser.setError (Aborted,"Could not select latest added object "+latestSelectionString);
31.3128 + }
31.3129 + /////////////////////////////////////////////////////////////////////
31.3130 + } else if (com=="setFrameType")
31.3131 + {
31.3132 + if ( selection.type()!=Selection::Branch && selection.type()!= Selection::MapCenter && selection.type()!=Selection::FloatImage)
31.3133 + {
31.3134 + parser.setError (Aborted,"Type of selection does not allow setting frame type");
31.3135 + }
31.3136 + else if (parser.checkParCount(1))
31.3137 + {
31.3138 + s=parser.parString(ok,0);
31.3139 + if (ok) setFrameType (s);
31.3140 + }
31.3141 + /////////////////////////////////////////////////////////////////////
31.3142 + } else if (com=="setFramePenColor")
31.3143 + {
31.3144 + if ( selection.type()!=Selection::Branch && selection.type()!= Selection::MapCenter && selection.type()!=Selection::FloatImage)
31.3145 + {
31.3146 + parser.setError (Aborted,"Type of selection does not allow setting of pen color");
31.3147 + }
31.3148 + else if (parser.checkParCount(1))
31.3149 + {
31.3150 + QColor c=parser.parColor(ok,0);
31.3151 + if (ok) setFramePenColor (c);
31.3152 + }
31.3153 + /////////////////////////////////////////////////////////////////////
31.3154 + } else if (com=="setFrameBrushColor")
31.3155 + {
31.3156 + if ( selection.type()!=Selection::Branch && selection.type()!= Selection::MapCenter && selection.type()!=Selection::FloatImage)
31.3157 + {
31.3158 + parser.setError (Aborted,"Type of selection does not allow setting brush color");
31.3159 + }
31.3160 + else if (parser.checkParCount(1))
31.3161 + {
31.3162 + QColor c=parser.parColor(ok,0);
31.3163 + if (ok) setFrameBrushColor (c);
31.3164 + }
31.3165 + /////////////////////////////////////////////////////////////////////
31.3166 + } else if (com=="setFramePadding")
31.3167 + {
31.3168 + if ( selection.type()!=Selection::Branch && selection.type()!= Selection::MapCenter && selection.type()!=Selection::FloatImage)
31.3169 + {
31.3170 + parser.setError (Aborted,"Type of selection does not allow setting frame padding");
31.3171 + }
31.3172 + else if (parser.checkParCount(1))
31.3173 + {
31.3174 + n=parser.parInt(ok,0);
31.3175 + if (ok) setFramePadding(n);
31.3176 + }
31.3177 + /////////////////////////////////////////////////////////////////////
31.3178 + } else if (com=="setFrameBorderWidth")
31.3179 + {
31.3180 + if ( selection.type()!=Selection::Branch && selection.type()!= Selection::MapCenter && selection.type()!=Selection::FloatImage)
31.3181 + {
31.3182 + parser.setError (Aborted,"Type of selection does not allow setting frame border width");
31.3183 + }
31.3184 + else if (parser.checkParCount(1))
31.3185 + {
31.3186 + n=parser.parInt(ok,0);
31.3187 + if (ok) setFrameBorderWidth (n);
31.3188 + }
31.3189 + /////////////////////////////////////////////////////////////////////
31.3190 + } else if (com=="setMapAuthor")
31.3191 + {
31.3192 + if (parser.checkParCount(1))
31.3193 + {
31.3194 + s=parser.parString(ok,0);
31.3195 + if (ok) setAuthor (s);
31.3196 + }
31.3197 + /////////////////////////////////////////////////////////////////////
31.3198 + } else if (com=="setMapComment")
31.3199 + {
31.3200 + if (parser.checkParCount(1))
31.3201 + {
31.3202 + s=parser.parString(ok,0);
31.3203 + if (ok) setComment(s);
31.3204 + }
31.3205 + /////////////////////////////////////////////////////////////////////
31.3206 + } else if (com=="setMapBackgroundColor")
31.3207 + {
31.3208 + if (selection.isEmpty() )
31.3209 + {
31.3210 + parser.setError (Aborted,"Nothing selected");
31.3211 + } else if (! selection.getBranch() )
31.3212 + {
31.3213 + parser.setError (Aborted,"Type of selection is not a branch");
31.3214 + } else if (parser.checkParCount(1))
31.3215 + {
31.3216 + QColor c=parser.parColor (ok,0);
31.3217 + if (ok) setMapBackgroundColor (c);
31.3218 + }
31.3219 + /////////////////////////////////////////////////////////////////////
31.3220 + } else if (com=="setMapDefLinkColor")
31.3221 + {
31.3222 + if (selection.isEmpty() )
31.3223 + {
31.3224 + parser.setError (Aborted,"Nothing selected");
31.3225 + } else if (! selb )
31.3226 + {
31.3227 + parser.setError (Aborted,"Type of selection is not a branch");
31.3228 + } else if (parser.checkParCount(1))
31.3229 + {
31.3230 + QColor c=parser.parColor (ok,0);
31.3231 + if (ok) setMapDefLinkColor (c);
31.3232 + }
31.3233 + /////////////////////////////////////////////////////////////////////
31.3234 + } else if (com=="setMapLinkStyle")
31.3235 + {
31.3236 + if (parser.checkParCount(1))
31.3237 + {
31.3238 + s=parser.parString (ok,0);
31.3239 + if (ok) setMapLinkStyle(s);
31.3240 + }
31.3241 + /////////////////////////////////////////////////////////////////////
31.3242 + } else if (com=="setHeading")
31.3243 + {
31.3244 + if (selection.isEmpty() )
31.3245 + {
31.3246 + parser.setError (Aborted,"Nothing selected");
31.3247 + } else if (! selb )
31.3248 + {
31.3249 + parser.setError (Aborted,"Type of selection is not a branch");
31.3250 + } else if (parser.checkParCount(1))
31.3251 + {
31.3252 + s=parser.parString (ok,0);
31.3253 + if (ok)
31.3254 + setHeading (s);
31.3255 + }
31.3256 + /////////////////////////////////////////////////////////////////////
31.3257 + } else if (com=="setHideExport")
31.3258 + {
31.3259 + if (selection.isEmpty() )
31.3260 + {
31.3261 + parser.setError (Aborted,"Nothing selected");
31.3262 + } else if (selection.type()!=Selection::Branch && selection.type() != Selection::MapCenter &&selection.type()!=Selection::FloatImage)
31.3263 + {
31.3264 + parser.setError (Aborted,"Type of selection is not a branch or floatimage");
31.3265 + } else if (parser.checkParCount(1))
31.3266 + {
31.3267 + b=parser.parBool(ok,0);
31.3268 + if (ok) setHideExport (b);
31.3269 + }
31.3270 + /////////////////////////////////////////////////////////////////////
31.3271 + } else if (com=="setIncludeImagesHorizontally")
31.3272 + {
31.3273 + if (selection.isEmpty() )
31.3274 + {
31.3275 + parser.setError (Aborted,"Nothing selected");
31.3276 + } else if (! selb)
31.3277 + {
31.3278 + parser.setError (Aborted,"Type of selection is not a branch");
31.3279 + } else if (parser.checkParCount(1))
31.3280 + {
31.3281 + b=parser.parBool(ok,0);
31.3282 + if (ok) setIncludeImagesHor(b);
31.3283 + }
31.3284 + /////////////////////////////////////////////////////////////////////
31.3285 + } else if (com=="setIncludeImagesVertically")
31.3286 + {
31.3287 + if (selection.isEmpty() )
31.3288 + {
31.3289 + parser.setError (Aborted,"Nothing selected");
31.3290 + } else if (! selb)
31.3291 + {
31.3292 + parser.setError (Aborted,"Type of selection is not a branch");
31.3293 + } else if (parser.checkParCount(1))
31.3294 + {
31.3295 + b=parser.parBool(ok,0);
31.3296 + if (ok) setIncludeImagesVer(b);
31.3297 + }
31.3298 + /////////////////////////////////////////////////////////////////////
31.3299 + } else if (com=="setHideLinkUnselected")
31.3300 + {
31.3301 + if (selection.isEmpty() )
31.3302 + {
31.3303 + parser.setError (Aborted,"Nothing selected");
31.3304 + } else if ( selection.type()!=Selection::Branch && selection.type()!= Selection::MapCenter && selection.type()!=Selection::FloatImage)
31.3305 + {
31.3306 + parser.setError (Aborted,"Type of selection does not allow hiding the link");
31.3307 + } else if (parser.checkParCount(1))
31.3308 + {
31.3309 + b=parser.parBool(ok,0);
31.3310 + if (ok) setHideLinkUnselected(b);
31.3311 + }
31.3312 + /////////////////////////////////////////////////////////////////////
31.3313 + } else if (com=="setSelectionColor")
31.3314 + {
31.3315 + if (parser.checkParCount(1))
31.3316 + {
31.3317 + QColor c=parser.parColor (ok,0);
31.3318 + if (ok) setSelectionColorInt (c);
31.3319 + }
31.3320 + /////////////////////////////////////////////////////////////////////
31.3321 + } else if (com=="setURL")
31.3322 + {
31.3323 + if (selection.isEmpty() )
31.3324 + {
31.3325 + parser.setError (Aborted,"Nothing selected");
31.3326 + } else if (! selb )
31.3327 + {
31.3328 + parser.setError (Aborted,"Type of selection is not a branch");
31.3329 + } else if (parser.checkParCount(1))
31.3330 + {
31.3331 + s=parser.parString (ok,0);
31.3332 + if (ok) setURL(s);
31.3333 + }
31.3334 + /////////////////////////////////////////////////////////////////////
31.3335 + } else if (com=="setVymLink")
31.3336 + {
31.3337 + if (selection.isEmpty() )
31.3338 + {
31.3339 + parser.setError (Aborted,"Nothing selected");
31.3340 + } else if (! selb )
31.3341 + {
31.3342 + parser.setError (Aborted,"Type of selection is not a branch");
31.3343 + } else if (parser.checkParCount(1))
31.3344 + {
31.3345 + s=parser.parString (ok,0);
31.3346 + if (ok) setVymLink(s);
31.3347 + }
31.3348 + }
31.3349 + /////////////////////////////////////////////////////////////////////
31.3350 + else if (com=="setFlag")
31.3351 + {
31.3352 + if (selection.isEmpty() )
31.3353 + {
31.3354 + parser.setError (Aborted,"Nothing selected");
31.3355 + } else if (! selb )
31.3356 + {
31.3357 + parser.setError (Aborted,"Type of selection is not a branch");
31.3358 + } else if (parser.checkParCount(1))
31.3359 + {
31.3360 + s=parser.parString(ok,0);
31.3361 + if (ok)
31.3362 + {
31.3363 + selb->activateStandardFlag(s);
31.3364 + selb->updateFlagsToolbar();
31.3365 + }
31.3366 + }
31.3367 + /////////////////////////////////////////////////////////////////////
31.3368 + } else if (com=="setFrameType")
31.3369 + {
31.3370 + if (selection.isEmpty() )
31.3371 + {
31.3372 + parser.setError (Aborted,"Nothing selected");
31.3373 + } else if (! selb )
31.3374 + {
31.3375 + parser.setError (Aborted,"Type of selection is not a branch");
31.3376 + } else if (parser.checkParCount(1))
31.3377 + {
31.3378 + s=parser.parString(ok,0);
31.3379 + if (ok)
31.3380 + setFrameType (s);
31.3381 + }
31.3382 + /////////////////////////////////////////////////////////////////////
31.3383 + } else if (com=="sortChildren")
31.3384 + {
31.3385 + if (selection.isEmpty() )
31.3386 + {
31.3387 + parser.setError (Aborted,"Nothing selected");
31.3388 + } else if (! selb )
31.3389 + {
31.3390 + parser.setError (Aborted,"Type of selection is not a branch");
31.3391 + } else if (parser.checkParCount(0))
31.3392 + {
31.3393 + sortChildren();
31.3394 + }
31.3395 + /////////////////////////////////////////////////////////////////////
31.3396 + } else if (com=="toggleFlag")
31.3397 + {
31.3398 + if (selection.isEmpty() )
31.3399 + {
31.3400 + parser.setError (Aborted,"Nothing selected");
31.3401 + } else if (! selb )
31.3402 + {
31.3403 + parser.setError (Aborted,"Type of selection is not a branch");
31.3404 + } else if (parser.checkParCount(1))
31.3405 + {
31.3406 + s=parser.parString(ok,0);
31.3407 + if (ok)
31.3408 + {
31.3409 + selb->toggleStandardFlag(s);
31.3410 + selb->updateFlagsToolbar();
31.3411 + }
31.3412 + }
31.3413 + /////////////////////////////////////////////////////////////////////
31.3414 + } else if (com=="unscroll")
31.3415 + {
31.3416 + if (selection.isEmpty() )
31.3417 + {
31.3418 + parser.setError (Aborted,"Nothing selected");
31.3419 + } else if (! selb )
31.3420 + {
31.3421 + parser.setError (Aborted,"Type of selection is not a branch");
31.3422 + } else if (parser.checkParCount(0))
31.3423 + {
31.3424 + if (!unscrollBranch (selb))
31.3425 + parser.setError (Aborted,"Could not unscroll branch");
31.3426 + }
31.3427 + /////////////////////////////////////////////////////////////////////
31.3428 + } else if (com=="unscrollChildren")
31.3429 + {
31.3430 + if (selection.isEmpty() )
31.3431 + {
31.3432 + parser.setError (Aborted,"Nothing selected");
31.3433 + } else if (! selb )
31.3434 + {
31.3435 + parser.setError (Aborted,"Type of selection is not a branch");
31.3436 + } else if (parser.checkParCount(0))
31.3437 + {
31.3438 + unscrollChildren ();
31.3439 + }
31.3440 + /////////////////////////////////////////////////////////////////////
31.3441 + } else if (com=="unsetFlag")
31.3442 + {
31.3443 + if (selection.isEmpty() )
31.3444 + {
31.3445 + parser.setError (Aborted,"Nothing selected");
31.3446 + } else if (! selb )
31.3447 + {
31.3448 + parser.setError (Aborted,"Type of selection is not a branch");
31.3449 + } else if (parser.checkParCount(1))
31.3450 + {
31.3451 + s=parser.parString(ok,0);
31.3452 + if (ok)
31.3453 + {
31.3454 + selb->deactivateStandardFlag(s);
31.3455 + selb->updateFlagsToolbar();
31.3456 + }
31.3457 + }
31.3458 + } else
31.3459 + parser.setError (Aborted,"Unknown command");
31.3460 +
31.3461 + // Any errors?
31.3462 + if (parser.errorLevel()==NoError)
31.3463 + {
31.3464 + // setChanged(); FIXME should not be called e.g. for export?!
31.3465 + reposition();
31.3466 + }
31.3467 + else
31.3468 + {
31.3469 + // TODO Error handling
31.3470 + qWarning("VymModel::parseAtom: Error!");
31.3471 + qWarning(parser.errorMessage());
31.3472 + }
31.3473 +}
31.3474 +
31.3475 +void VymModel::runScript (QString script)
31.3476 +{
31.3477 + parser.setScript (script);
31.3478 + parser.runScript();
31.3479 + while (parser.next() )
31.3480 + parseAtom(parser.getAtom());
31.3481 +}
31.3482 +
31.3483 +void VymModel::setExportMode (bool b)
31.3484 +{
31.3485 + // should be called before and after exports
31.3486 + // depending on the settings
31.3487 + if (b && settings.value("/export/useHideExport","true")=="true")
31.3488 + setHideTmpMode (HideExport);
31.3489 + else
31.3490 + setHideTmpMode (HideNone);
31.3491 +}
31.3492 +
31.3493 +void VymModel::exportImage(QString fname, bool askName, QString format)
31.3494 +{
31.3495 + if (fname=="")
31.3496 + {
31.3497 + fname=getMapName()+".png";
31.3498 + format="PNG";
31.3499 + }
31.3500 +
31.3501 + if (askName)
31.3502 + {
31.3503 + QStringList fl;
31.3504 + QFileDialog *fd=new QFileDialog (NULL);
31.3505 + fd->setCaption (tr("Export map as image"));
31.3506 + fd->setDirectory (lastImageDir);
31.3507 + fd->setFileMode(QFileDialog::AnyFile);
31.3508 + fd->setFilters (imageIO.getFilters() );
31.3509 + if (fd->exec())
31.3510 + {
31.3511 + fl=fd->selectedFiles();
31.3512 + fname=fl.first();
31.3513 + format=imageIO.getType(fd->selectedFilter());
31.3514 + }
31.3515 + }
31.3516 +
31.3517 + setExportMode (true);
31.3518 + QPixmap pix (getPixmap());
31.3519 + pix.save(fname, format);
31.3520 + setExportMode (false);
31.3521 +}
31.3522 +
31.3523 +
31.3524 +void VymModel::exportXML(QString dir, bool askForName)
31.3525 +{
31.3526 + if (askForName)
31.3527 + {
31.3528 + dir=browseDirectory(NULL,tr("Export XML to directory"));
31.3529 + if (dir =="" && !reallyWriteDirectory(dir) )
31.3530 + return;
31.3531 + }
31.3532 +
31.3533 + // Hide stuff during export, if settings want this
31.3534 + setExportMode (true);
31.3535 +
31.3536 + // Create subdirectories
31.3537 + makeSubDirs (dir);
31.3538 +
31.3539 + // write to directory
31.3540 + QString saveFile=saveToDir (dir,mapName+"-",true,getTotalBBox().topLeft() ,NULL);
31.3541 + QFile file;
31.3542 +
31.3543 + file.setName ( dir + "/"+mapName+".xml");
31.3544 + if ( !file.open( QIODevice::WriteOnly ) )
31.3545 + {
31.3546 + // This should neverever happen
31.3547 + QMessageBox::critical (0,tr("Critical Export Error"),tr("VymModel::exportXML couldn't open %1").arg(file.name()));
31.3548 + return;
31.3549 + }
31.3550 +
31.3551 + // Write it finally, and write in UTF8, no matter what
31.3552 + QTextStream ts( &file );
31.3553 + ts.setEncoding (QTextStream::UnicodeUTF8);
31.3554 + ts << saveFile;
31.3555 + file.close();
31.3556 +
31.3557 + // Now write image, too
31.3558 + exportImage (dir+"/images/"+mapName+".png",false,"PNG");
31.3559 +
31.3560 + setExportMode (false);
31.3561 +}
31.3562 +
31.3563 +void VymModel::exportASCII(QString fname,bool askName)
31.3564 +{
31.3565 + ExportASCII ex;
31.3566 + ex.setModel (this);
31.3567 + if (fname=="")
31.3568 + ex.setFile (mapName+".txt");
31.3569 + else
31.3570 + ex.setFile (fname);
31.3571 +
31.3572 + if (askName)
31.3573 + {
31.3574 + //ex.addFilter ("TXT (*.txt)");
31.3575 + ex.setDir(lastImageDir);
31.3576 + //ex.setCaption(vymName+ " -" +tr("Export as ASCII")+" "+tr("(still experimental)"));
31.3577 + ex.execDialog() ;
31.3578 + }
31.3579 + if (!ex.canceled())
31.3580 + {
31.3581 + setExportMode(true);
31.3582 + ex.doExport();
31.3583 + setExportMode(false);
31.3584 + }
31.3585 +}
31.3586 +
31.3587 +void VymModel::exportXHTML (const QString &dir, bool askForName)
31.3588 +{
31.3589 + ExportXHTMLDialog dia(NULL);
31.3590 + dia.setFilePath (filePath );
31.3591 + dia.setMapName (mapName );
31.3592 + dia.readSettings();
31.3593 + if (dir!="") dia.setDir (dir);
31.3594 +
31.3595 + bool ok=true;
31.3596 +
31.3597 + if (askForName)
31.3598 + {
31.3599 + if (dia.exec()!=QDialog::Accepted)
31.3600 + ok=false;
31.3601 + else
31.3602 + {
31.3603 + QDir d (dia.getDir());
31.3604 + // Check, if warnings should be used before overwriting
31.3605 + // the output directory
31.3606 + if (d.exists() && d.count()>0)
31.3607 + {
31.3608 + WarningDialog warn;
31.3609 + warn.showCancelButton (true);
31.3610 + warn.setText(QString(
31.3611 + "The directory %1 is not empty.\n"
31.3612 + "Do you risk to overwrite some of its contents?").arg(d.path() ));
31.3613 + warn.setCaption("Warning: Directory not empty");
31.3614 + warn.setShowAgainName("mainwindow/overwrite-dir-xhtml");
31.3615 +
31.3616 + if (warn.exec()!=QDialog::Accepted) ok=false;
31.3617 + }
31.3618 + }
31.3619 + }
31.3620 +
31.3621 + if (ok)
31.3622 + {
31.3623 + exportXML (dia.getDir(),false );
31.3624 + dia.doExport(mapName );
31.3625 + //if (dia.hasChanged()) setChanged();
31.3626 + }
31.3627 +}
31.3628 +
31.3629 +void VymModel::exportOOPresentation(const QString &fn, const QString &cf)
31.3630 +{
31.3631 + ExportOO ex;
31.3632 + ex.setFile (fn);
31.3633 + ex.setModel (this);
31.3634 + if (ex.setConfigFile(cf))
31.3635 + {
31.3636 + setExportMode (true);
31.3637 + ex.exportPresentation();
31.3638 + setExportMode (false);
31.3639 + }
31.3640 +}
31.3641 +
31.3642 +
31.3643 +
31.3644
31.3645 //////////////////////////////////////////////
31.3646 // View related
31.3647 //////////////////////////////////////////////
31.3648
31.3649 +void VymModel::registerEditor(QWidget *)
31.3650 +{
31.3651 +}
31.3652 +
31.3653 +void VymModel::unregisterEditor(QWidget *)
31.3654 +{
31.3655 +}
31.3656 +
31.3657 +void VymModel::updateNoteFlag()
31.3658 +{
31.3659 + setChanged();
31.3660 + BranchObj *bo=selection.getBranch();
31.3661 + if (bo)
31.3662 + {
31.3663 + bo->updateNoteFlag();
31.3664 + mainWindow->updateActions();
31.3665 + }
31.3666 +}
31.3667 +
31.3668 void VymModel::updateRelPositions()
31.3669 {
31.3670 for (int i=0; i<mapCenters.count(); i++)
31.3671 @@ -284,6 +3766,261 @@
31.3672 }
31.3673 }
31.3674
31.3675 +QPixmap VymModel::getPixmap()
31.3676 +{
31.3677 + QRectF mapRect=getTotalBBox();
31.3678 + QPixmap pix((int)mapRect.width()+2,(int)mapRect.height()+1);
31.3679 + QPainter pp (&pix);
31.3680 +
31.3681 + pp.setRenderHints(mapEditor->renderHints());
31.3682 +
31.3683 + // Don't print the visualisation of selection
31.3684 + selection.unselect();
31.3685 +
31.3686 + mapScene->render ( &pp,
31.3687 + QRectF(0,0,mapRect.width()+2,mapRect.height()+2),
31.3688 + QRectF(mapRect.x(),mapRect.y(),mapRect.width(),mapRect.height() ));
31.3689 +
31.3690 + // Restore selection
31.3691 + selection.reselect();
31.3692 +
31.3693 + return pix;
31.3694 +}
31.3695 +
31.3696 +
31.3697 +void VymModel::setMapLinkStyle (const QString & s)
31.3698 +{
31.3699 + QString snow;
31.3700 + if (linkstyle==LinkableMapObj::Line)
31.3701 + snow="StyleLine";
31.3702 + else if (linkstyle==LinkableMapObj::Parabel)
31.3703 + snow="StyleParabel";
31.3704 + else if (linkstyle==LinkableMapObj::PolyLine)
31.3705 + snow="StylePolyLine";
31.3706 + else if (linkstyle==LinkableMapObj::PolyParabel)
31.3707 + snow="StyleParabel";
31.3708 +
31.3709 + saveState (
31.3710 + QString("setMapLinkStyle (\"%1\")").arg(s),
31.3711 + QString("setMapLinkStyle (\"%1\")").arg(snow),
31.3712 + QString("Set map link style (\"%1\")").arg(s)
31.3713 + );
31.3714 +
31.3715 + if (s=="StyleLine")
31.3716 + linkstyle=LinkableMapObj::Line;
31.3717 + else if (s=="StyleParabel")
31.3718 + linkstyle=LinkableMapObj::Parabel;
31.3719 + else if (s=="StylePolyLine")
31.3720 + linkstyle=LinkableMapObj::PolyLine;
31.3721 + else
31.3722 + linkstyle=LinkableMapObj::PolyParabel;
31.3723 +
31.3724 + BranchObj *bo;
31.3725 + bo=first();
31.3726 + bo=next(bo);
31.3727 + while (bo)
31.3728 + {
31.3729 + bo->setLinkStyle(bo->getDefLinkStyle());
31.3730 + bo=next(bo);
31.3731 + }
31.3732 + reposition();
31.3733 +}
31.3734 +
31.3735 +LinkableMapObj::Style VymModel::getMapLinkStyle ()
31.3736 +{
31.3737 + return linkstyle;
31.3738 +}
31.3739 +
31.3740 +void VymModel::setMapDefLinkColor(QColor col)
31.3741 +{
31.3742 + if ( !col.isValid() ) return;
31.3743 + saveState (
31.3744 + QString("setMapDefLinkColor (\"%1\")").arg(getMapDefLinkColor().name()),
31.3745 + QString("setMapDefLinkColor (\"%1\")").arg(col.name()),
31.3746 + QString("Set map link color to %1").arg(col.name())
31.3747 + );
31.3748 +
31.3749 + defLinkColor=col;
31.3750 + BranchObj *bo;
31.3751 + bo=first();
31.3752 + while (bo)
31.3753 + {
31.3754 + bo->setLinkColor();
31.3755 + bo=next(bo);
31.3756 + }
31.3757 + updateActions();
31.3758 +}
31.3759 +
31.3760 +void VymModel::setMapLinkColorHintInt()
31.3761 +{
31.3762 + // called from setMapLinkColorHint(lch) or at end of parse
31.3763 + BranchObj *bo;
31.3764 + bo=first();
31.3765 + while (bo)
31.3766 + {
31.3767 + bo->setLinkColor();
31.3768 + bo=next(bo);
31.3769 + }
31.3770 +}
31.3771 +
31.3772 +void VymModel::setMapLinkColorHint(LinkableMapObj::ColorHint lch)
31.3773 +{
31.3774 + linkcolorhint=lch;
31.3775 + setMapLinkColorHintInt();
31.3776 +}
31.3777 +
31.3778 +void VymModel::toggleMapLinkColorHint()
31.3779 +{
31.3780 + if (linkcolorhint==LinkableMapObj::HeadingColor)
31.3781 + linkcolorhint=LinkableMapObj::DefaultColor;
31.3782 + else
31.3783 + linkcolorhint=LinkableMapObj::HeadingColor;
31.3784 + BranchObj *bo;
31.3785 + bo=first();
31.3786 + while (bo)
31.3787 + {
31.3788 + bo->setLinkColor();
31.3789 + bo=next(bo);
31.3790 + }
31.3791 +}
31.3792 +
31.3793 +void VymModel::selectMapBackgroundImage ()
31.3794 +{
31.3795 + Q3FileDialog *fd=new Q3FileDialog( NULL);
31.3796 + fd->setMode (Q3FileDialog::ExistingFile);
31.3797 + fd->addFilter (QString (tr("Images") + " (*.png *.bmp *.xbm *.jpg *.png *.xpm *.gif *.pnm)"));
31.3798 + ImagePreview *p =new ImagePreview (fd);
31.3799 + fd->setContentsPreviewEnabled( TRUE );
31.3800 + fd->setContentsPreview( p, p );
31.3801 + fd->setPreviewMode( Q3FileDialog::Contents );
31.3802 + fd->setCaption(vymName+" - " +tr("Load background image"));
31.3803 + fd->setDir (lastImageDir);
31.3804 + fd->show();
31.3805 +
31.3806 + if ( fd->exec() == QDialog::Accepted )
31.3807 + {
31.3808 + // TODO selectMapBackgroundImg in QT4 use: lastImageDir=fd->directory();
31.3809 + lastImageDir=QDir (fd->dirPath());
31.3810 + setMapBackgroundImage (fd->selectedFile());
31.3811 + }
31.3812 +}
31.3813 +
31.3814 +void VymModel::setMapBackgroundImage (const QString &fn) //FIXME missing savestate
31.3815 +{
31.3816 + QColor oldcol=mapScene->backgroundBrush().color();
31.3817 + /*
31.3818 + saveState(
31.3819 + selection,
31.3820 + QString ("setMapBackgroundImage (%1)").arg(oldcol.name()),
31.3821 + selection,
31.3822 + QString ("setMapBackgroundImage (%1)").arg(col.name()),
31.3823 + QString("Set background color of map to %1").arg(col.name()));
31.3824 + */
31.3825 + QBrush brush;
31.3826 + brush.setTextureImage (QPixmap (fn));
31.3827 + mapScene->setBackgroundBrush(brush);
31.3828 +}
31.3829 +
31.3830 +void VymModel::selectMapBackgroundColor()
31.3831 +{
31.3832 + QColor col = QColorDialog::getColor( mapScene->backgroundBrush().color(), NULL);
31.3833 + if ( !col.isValid() ) return;
31.3834 + setMapBackgroundColor( col );
31.3835 +}
31.3836 +
31.3837 +
31.3838 +void VymModel::setMapBackgroundColor(QColor col)
31.3839 +{
31.3840 + QColor oldcol=mapScene->backgroundBrush().color();
31.3841 + saveState(
31.3842 + QString ("setMapBackgroundColor (\"%1\")").arg(oldcol.name()),
31.3843 + QString ("setMapBackgroundColor (\"%1\")").arg(col.name()),
31.3844 + QString("Set background color of map to %1").arg(col.name()));
31.3845 + mapScene->setBackgroundBrush(col);
31.3846 +}
31.3847 +
31.3848 +QColor VymModel::getMapBackgroundColor()
31.3849 +{
31.3850 + return mapScene->backgroundBrush().color();
31.3851 +}
31.3852 +
31.3853 +
31.3854 +LinkableMapObj::ColorHint VymModel::getMapLinkColorHint()
31.3855 +{
31.3856 + return linkcolorhint;
31.3857 +}
31.3858 +
31.3859 +QColor VymModel::getMapDefLinkColor()
31.3860 +{
31.3861 + return defLinkColor;
31.3862 +}
31.3863 +
31.3864 +void VymModel::setMapDefXLinkColor(QColor col)
31.3865 +{
31.3866 + defXLinkColor=col;
31.3867 +}
31.3868 +
31.3869 +QColor VymModel::getMapDefXLinkColor()
31.3870 +{
31.3871 + return defXLinkColor;
31.3872 +}
31.3873 +
31.3874 +void VymModel::setMapDefXLinkWidth (int w)
31.3875 +{
31.3876 + defXLinkWidth=w;
31.3877 +}
31.3878 +
31.3879 +int VymModel::getMapDefXLinkWidth()
31.3880 +{
31.3881 + return defXLinkWidth;
31.3882 +}
31.3883 +
31.3884 +void VymModel::move(const double &x, const double &y)
31.3885 +{
31.3886 + LinkableMapObj *sel=selection.single();
31.3887 + if (sel)
31.3888 + {
31.3889 + QPointF ap(sel->getAbsPos());
31.3890 + QPointF to(x, y);
31.3891 + if (ap != to)
31.3892 + {
31.3893 + QString ps=qpointfToString(ap);
31.3894 + QString s=selection.getSelectString();
31.3895 + saveState(
31.3896 + s, "move "+ps,
31.3897 + s, "move "+qpointfToString(to),
31.3898 + QString("Move %1 to %2").arg(getObjectName(sel)).arg(ps));
31.3899 + sel->move(x,y);
31.3900 + reposition();
31.3901 + selection.update();
31.3902 + }
31.3903 + }
31.3904 +}
31.3905 +
31.3906 +void VymModel::moveRel (const double &x, const double &y)
31.3907 +{
31.3908 + LinkableMapObj *sel=selection.single();
31.3909 + if (sel)
31.3910 + {
31.3911 + QPointF rp(sel->getRelPos());
31.3912 + QPointF to(x, y);
31.3913 + if (rp != to)
31.3914 + {
31.3915 + QString ps=qpointfToString (sel->getRelPos());
31.3916 + QString s=getSelectString(sel);
31.3917 + saveState(
31.3918 + s, "moveRel "+ps,
31.3919 + s, "moveRel "+qpointfToString(to),
31.3920 + QString("Move %1 to relative position %2").arg(getObjectName(sel)).arg(ps));
31.3921 + ((OrnamentedObj*)sel)->move2RelPos (x,y);
31.3922 + reposition();
31.3923 + sel->updateLink();
31.3924 + selection.update();
31.3925 + }
31.3926 + }
31.3927 +}
31.3928 +
31.3929 +
31.3930 void VymModel::animate()
31.3931 {
31.3932 animationTimer->stop();
31.3933 @@ -294,7 +4031,11 @@
31.3934 bo=(BranchObj*)animObjList.at(i);
31.3935 if (!bo->animate())
31.3936 {
31.3937 - if (i>=0) animObjList.removeAt(i);
31.3938 + if (i>=0)
31.3939 + {
31.3940 + animObjList.removeAt(i);
31.3941 + i--;
31.3942 + }
31.3943 }
31.3944 bo->reposition();
31.3945 i++;
31.3946 @@ -322,26 +4063,640 @@
31.3947 }
31.3948 }
31.3949
31.3950 +void VymModel::sendSelection()
31.3951 +{
31.3952 + if (netstate!=Server) return;
31.3953 + sendData (QString("select (\"%1\")").arg(selection.getSelectString()) );
31.3954 +}
31.3955 +
31.3956 +void VymModel::newServer()
31.3957 +{
31.3958 + port=54321;
31.3959 + sendCounter=0;
31.3960 + tcpServer = new QTcpServer(this);
31.3961 + if (!tcpServer->listen(QHostAddress::Any,port)) {
31.3962 + QMessageBox::critical(NULL, "vym server",
31.3963 + QString("Unable to start the server: %1.").arg(tcpServer->errorString()));
31.3964 + //FIXME needed? we are no widget any longer... close();
31.3965 + return;
31.3966 + }
31.3967 + connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newClient()));
31.3968 + netstate=Server;
31.3969 + cout<<"Server is running on port "<<tcpServer->serverPort()<<endl;
31.3970 +}
31.3971 +
31.3972 +void VymModel::connectToServer()
31.3973 +{
31.3974 + port=54321;
31.3975 + server="salam.suse.de";
31.3976 + server="localhost";
31.3977 + clientSocket = new QTcpSocket (this);
31.3978 + clientSocket->abort();
31.3979 + clientSocket->connectToHost(server ,port);
31.3980 + connect(clientSocket, SIGNAL(readyRead()), this, SLOT(readData()));
31.3981 + connect(clientSocket, SIGNAL(error(QAbstractSocket::SocketError)),
31.3982 + this, SLOT(displayNetworkError(QAbstractSocket::SocketError)));
31.3983 + netstate=Client;
31.3984 + cout<<"connected to "<<qPrintable (server)<<" port "<<port<<endl;
31.3985 +
31.3986 +
31.3987 +}
31.3988 +
31.3989 +void VymModel::newClient()
31.3990 +{
31.3991 + QTcpSocket *newClient = tcpServer->nextPendingConnection();
31.3992 + connect(newClient, SIGNAL(disconnected()),
31.3993 + newClient, SLOT(deleteLater()));
31.3994 +
31.3995 + cout <<"ME::newClient at "<<qPrintable( newClient->peerAddress().toString() )<<endl;
31.3996 +
31.3997 + clientList.append (newClient);
31.3998 +}
31.3999 +
31.4000 +
31.4001 +void VymModel::sendData(const QString &s)
31.4002 +{
31.4003 + if (clientList.size()==0) return;
31.4004 +
31.4005 + // Create bytearray to send
31.4006 + QByteArray block;
31.4007 + QDataStream out(&block, QIODevice::WriteOnly);
31.4008 + out.setVersion(QDataStream::Qt_4_0);
31.4009 +
31.4010 + // Reserve some space for blocksize
31.4011 + out << (quint16)0;
31.4012 +
31.4013 + // Write sendCounter
31.4014 + out << sendCounter++;
31.4015 +
31.4016 + // Write data
31.4017 + out << s;
31.4018 +
31.4019 + // Go back and write blocksize so far
31.4020 + out.device()->seek(0);
31.4021 + quint16 bs=(quint16)(block.size() - 2*sizeof(quint16));
31.4022 + out << bs;
31.4023 +
31.4024 + if (debug)
31.4025 + cout << "ME::sendData bs="<<bs<<" counter="<<sendCounter<<" s="<<qPrintable(s)<<endl;
31.4026 +
31.4027 + for (int i=0; i<clientList.size(); ++i)
31.4028 + {
31.4029 + //cout << "Sending \""<<qPrintable (s)<<"\" to "<<qPrintable (clientList.at(i)->peerAddress().toString())<<endl;
31.4030 + clientList.at(i)->write (block);
31.4031 + }
31.4032 +}
31.4033 +
31.4034 +void VymModel::readData ()
31.4035 +{
31.4036 + while (clientSocket->bytesAvailable() >=(int)sizeof(quint16) )
31.4037 + {
31.4038 + if (debug)
31.4039 + cout <<"readData bytesAvail="<<clientSocket->bytesAvailable();
31.4040 + quint16 recCounter;
31.4041 + quint16 blockSize;
31.4042 +
31.4043 + QDataStream in(clientSocket);
31.4044 + in.setVersion(QDataStream::Qt_4_0);
31.4045 +
31.4046 + in >> blockSize;
31.4047 + in >> recCounter;
31.4048 +
31.4049 + QString t;
31.4050 + in >>t;
31.4051 + if (debug)
31.4052 + cout << " t="<<qPrintable (t)<<endl;
31.4053 + parseAtom (t);
31.4054 + }
31.4055 + return;
31.4056 +}
31.4057 +
31.4058 +void VymModel::displayNetworkError(QAbstractSocket::SocketError socketError)
31.4059 +{
31.4060 + switch (socketError) {
31.4061 + case QAbstractSocket::RemoteHostClosedError:
31.4062 + break;
31.4063 + case QAbstractSocket::HostNotFoundError:
31.4064 + QMessageBox::information(NULL, vymName +" Network client",
31.4065 + "The host was not found. Please check the "
31.4066 + "host name and port settings.");
31.4067 + break;
31.4068 + case QAbstractSocket::ConnectionRefusedError:
31.4069 + QMessageBox::information(NULL, vymName + " Network client",
31.4070 + "The connection was refused by the peer. "
31.4071 + "Make sure the fortune server is running, "
31.4072 + "and check that the host name and port "
31.4073 + "settings are correct.");
31.4074 + break;
31.4075 + default:
31.4076 + QMessageBox::information(NULL, vymName + " Network client",
31.4077 + QString("The following error occurred: %1.")
31.4078 + .arg(clientSocket->errorString()));
31.4079 + }
31.4080 +}
31.4081 +
31.4082 +
31.4083 +
31.4084 +
31.4085 +void VymModel::selectMapSelectionColor()
31.4086 +{
31.4087 + QColor col = QColorDialog::getColor( defLinkColor, NULL);
31.4088 + setSelectionColor (col);
31.4089 +}
31.4090 +
31.4091 +void VymModel::setSelectionColorInt (QColor col)
31.4092 +{
31.4093 + if ( !col.isValid() ) return;
31.4094 + saveState (
31.4095 + QString("setSelectionColor (%1)").arg(selection.getColor().name()),
31.4096 + QString("setSelectionColor (%1)").arg(col.name()),
31.4097 + QString("Set color of selection box to %1").arg(col.name())
31.4098 + );
31.4099 +
31.4100 + selection.setColor (col);
31.4101 +}
31.4102 +
31.4103 +void VymModel::updateSelection()
31.4104 +{
31.4105 + selection.update();
31.4106 +}
31.4107 +
31.4108 +void VymModel::setSelectionColor(QColor col)
31.4109 +{
31.4110 + if ( !col.isValid() ) return;
31.4111 + saveState (
31.4112 + QString("setSelectionColor (%1)").arg(selection.getColor().name()),
31.4113 + QString("setSelectionColor (%1)").arg(col.name()),
31.4114 + QString("Set color of selection box to %1").arg(col.name())
31.4115 + );
31.4116 + setSelectionColorInt (col);
31.4117 +}
31.4118 +
31.4119 +QColor VymModel::getSelectionColor()
31.4120 +{
31.4121 + return selection.getColor();
31.4122 +}
31.4123 +
31.4124 +void VymModel::setHideTmpMode (HideTmpMode mode)
31.4125 +{
31.4126 + hidemode=mode;
31.4127 + for (int i=0;i<mapCenters.count(); i++)
31.4128 + mapCenters.at(i)->setHideTmp (mode);
31.4129 + reposition();
31.4130 + // FIXME needed? scene()->update();
31.4131 +}
31.4132 +
31.4133 +
31.4134 +QRectF VymModel::getTotalBBox()
31.4135 +{
31.4136 + QRectF r;
31.4137 + for (int i=0;i<mapCenters.count(); i++)
31.4138 + r=addBBox (mapCenters.at(i)->getTotalBBox(), r);
31.4139 + return r;
31.4140 +}
31.4141
31.4142 //////////////////////////////////////////////
31.4143 // Selection related
31.4144 //////////////////////////////////////////////
31.4145
31.4146 -
31.4147 -// Only as long as we dont have Model/View yet
31.4148 +void VymModel::setSelectionBlocked (bool b)
31.4149 +{
31.4150 + if (b)
31.4151 + selection.block();
31.4152 + else
31.4153 + selection.unblock();
31.4154 +}
31.4155 +
31.4156 +bool VymModel::isSelectionBlocked()
31.4157 +{
31.4158 + return selection.isBlocked();
31.4159 +}
31.4160 +
31.4161 +bool VymModel::select (const QString &s)
31.4162 +{
31.4163 + if (selection.select(s))
31.4164 + {
31.4165 + selection.update();
31.4166 + ensureSelectionVisible();
31.4167 + sendSelection ();
31.4168 + return true;
31.4169 + }
31.4170 + return false;
31.4171 +
31.4172 +}
31.4173 +
31.4174 +bool VymModel::select (LinkableMapObj *lmo)
31.4175 +{
31.4176 + if (selection.select(lmo))
31.4177 + {
31.4178 + selection.update();
31.4179 + ensureSelectionVisible();
31.4180 + sendSelection ();
31.4181 + return true;
31.4182 + }
31.4183 + return false;
31.4184 +}
31.4185 +
31.4186 +void VymModel::unselect()
31.4187 +{
31.4188 + selection.unselect();
31.4189 +}
31.4190 +
31.4191 +void VymModel::reselect()
31.4192 +{
31.4193 + selection.reselect();
31.4194 +}
31.4195 +
31.4196 +void VymModel::ensureSelectionVisible()
31.4197 +{
31.4198 + LinkableMapObj *lmo=selection.single();
31.4199 + if (lmo &&mapEditor) mapEditor->ensureVisible (lmo->getBBox() );
31.4200 +
31.4201 +}
31.4202 +
31.4203 +void VymModel::selectInt (LinkableMapObj *lmo)
31.4204 +{
31.4205 + if (selection.select(lmo))
31.4206 + {
31.4207 + selection.update();
31.4208 + sendSelection ();
31.4209 + }
31.4210 +}
31.4211 +
31.4212 +
31.4213 +void VymModel::selectNextBranchInt()
31.4214 +{
31.4215 + // Increase number of branch
31.4216 + LinkableMapObj *sel=selection.single();
31.4217 + if (sel)
31.4218 + {
31.4219 + QString s=selection.getSelectString();
31.4220 + QString part;
31.4221 + QString typ;
31.4222 + QString num;
31.4223 +
31.4224 + // Where am I?
31.4225 + part=s.section(",",-1);
31.4226 + typ=part.left (3);
31.4227 + num=part.right(part.length() - 3);
31.4228 +
31.4229 + s=s.left (s.length() -num.length());
31.4230 +
31.4231 + // Go to next lmo
31.4232 + num=QString ("%1").arg(num.toUInt()+1);
31.4233 +
31.4234 + s=s+num;
31.4235 +
31.4236 + // Try to select this one
31.4237 + if (select (s)) return;
31.4238 +
31.4239 + // We have no direct successor,
31.4240 + // try to increase the parental number in order to
31.4241 + // find a successor with same depth
31.4242 +
31.4243 + int d=selection.single()->getDepth();
31.4244 + int oldDepth=d;
31.4245 + int i;
31.4246 + bool found=false;
31.4247 + bool b;
31.4248 + while (!found && d>0)
31.4249 + {
31.4250 + s=s.section (",",0,d-1);
31.4251 + // replace substring of current depth in s with "1"
31.4252 + part=s.section(",",-1);
31.4253 + typ=part.left (3);
31.4254 + num=part.right(part.length() - 3);
31.4255 +
31.4256 + if (d>1)
31.4257 + {
31.4258 + // increase number of parent
31.4259 + num=QString ("%1").arg(num.toUInt()+1);
31.4260 + s=s.section (",",0,d-2) + ","+ typ+num;
31.4261 + } else
31.4262 + {
31.4263 + // Special case, look at orientation
31.4264 + if (selection.single()->getOrientation()==LinkableMapObj::RightOfCenter)
31.4265 + num=QString ("%1").arg(num.toUInt()+1);
31.4266 + else
31.4267 + num=QString ("%1").arg(num.toUInt()-1);
31.4268 + s=typ+num;
31.4269 + }
31.4270 +
31.4271 + if (select (s))
31.4272 + // pad to oldDepth, select the first branch for each depth
31.4273 + for (i=d;i<oldDepth;i++)
31.4274 + {
31.4275 + b=select (s);
31.4276 + if (b)
31.4277 + {
31.4278 + if ( selection.getBranch()->countBranches()>0)
31.4279 + s+=",bo:0";
31.4280 + else
31.4281 + break;
31.4282 + } else
31.4283 + break;
31.4284 + }
31.4285 +
31.4286 + // try to select the freshly built string
31.4287 + found=select(s);
31.4288 + d--;
31.4289 + }
31.4290 + return;
31.4291 + }
31.4292 +}
31.4293 +
31.4294 +void VymModel::selectPrevBranchInt()
31.4295 +{
31.4296 + // Decrease number of branch
31.4297 + BranchObj *bo=selection.getBranch();
31.4298 + if (bo)
31.4299 + {
31.4300 + QString s=selection.getSelectString();
31.4301 + QString part;
31.4302 + QString typ;
31.4303 + QString num;
31.4304 +
31.4305 + // Where am I?
31.4306 + part=s.section(",",-1);
31.4307 + typ=part.left (3);
31.4308 + num=part.right(part.length() - 3);
31.4309 +
31.4310 + s=s.left (s.length() -num.length());
31.4311 +
31.4312 + int n=num.toInt()-1;
31.4313 +
31.4314 + // Go to next lmo
31.4315 + num=QString ("%1").arg(n);
31.4316 + s=s+num;
31.4317 +
31.4318 + // Try to select this one
31.4319 + if (n>=0 && select (s)) return;
31.4320 +
31.4321 + // We have no direct precessor,
31.4322 + // try to decrease the parental number in order to
31.4323 + // find a precessor with same depth
31.4324 +
31.4325 + int d=selection.single()->getDepth();
31.4326 + int oldDepth=d;
31.4327 + int i;
31.4328 + bool found=false;
31.4329 + bool b;
31.4330 + while (!found && d>0)
31.4331 + {
31.4332 + s=s.section (",",0,d-1);
31.4333 + // replace substring of current depth in s with "1"
31.4334 + part=s.section(",",-1);
31.4335 + typ=part.left (3);
31.4336 + num=part.right(part.length() - 3);
31.4337 +
31.4338 + if (d>1)
31.4339 + {
31.4340 + // decrease number of parent
31.4341 + num=QString ("%1").arg(num.toInt()-1);
31.4342 + s=s.section (",",0,d-2) + ","+ typ+num;
31.4343 + } else
31.4344 + {
31.4345 + // Special case, look at orientation
31.4346 + if (selection.single()->getOrientation()==LinkableMapObj::RightOfCenter)
31.4347 + num=QString ("%1").arg(num.toInt()-1);
31.4348 + else
31.4349 + num=QString ("%1").arg(num.toInt()+1);
31.4350 + s=typ+num;
31.4351 + }
31.4352 +
31.4353 + if (select(s))
31.4354 + // pad to oldDepth, select the last branch for each depth
31.4355 + for (i=d;i<oldDepth;i++)
31.4356 + {
31.4357 + b=select (s);
31.4358 + if (b)
31.4359 + if ( selection.getBranch()->countBranches()>0)
31.4360 + s+=",bo:"+ QString ("%1").arg( selection.getBranch()->countBranches()-1 );
31.4361 + else
31.4362 + break;
31.4363 + else
31.4364 + break;
31.4365 + }
31.4366 +
31.4367 + // try to select the freshly built string
31.4368 + found=select(s);
31.4369 + d--;
31.4370 + }
31.4371 + return;
31.4372 + }
31.4373 +}
31.4374 +
31.4375 +void VymModel::selectUpperBranch()
31.4376 +{
31.4377 + if (selection.isBlocked() ) return;
31.4378 +
31.4379 + BranchObj *bo=selection.getBranch();
31.4380 + if (bo && selection.type()==Selection::Branch)
31.4381 + {
31.4382 + if (bo->getOrientation()==LinkableMapObj::RightOfCenter)
31.4383 + selectPrevBranchInt();
31.4384 + else
31.4385 + if (bo->getDepth()==1)
31.4386 + selectNextBranchInt();
31.4387 + else
31.4388 + selectPrevBranchInt();
31.4389 + }
31.4390 +}
31.4391 +
31.4392 +void VymModel::selectLowerBranch()
31.4393 +{
31.4394 + if (selection.isBlocked() ) return;
31.4395 +
31.4396 + BranchObj *bo=selection.getBranch();
31.4397 + if (bo && selection.type()==Selection::Branch)
31.4398 + {
31.4399 + if (bo->getOrientation()==LinkableMapObj::RightOfCenter)
31.4400 + selectNextBranchInt();
31.4401 + else
31.4402 + if (bo->getDepth()==1)
31.4403 + selectPrevBranchInt();
31.4404 + else
31.4405 + selectNextBranchInt();
31.4406 + }
31.4407 +}
31.4408 +
31.4409 +
31.4410 +void VymModel::selectLeftBranch()
31.4411 +{
31.4412 + if (selection.isBlocked() ) return;
31.4413 +
31.4414 + BranchObj* bo;
31.4415 + BranchObj* par;
31.4416 + LinkableMapObj *sel=selection.single();
31.4417 + if (sel)
31.4418 + {
31.4419 + if (selection.type()== Selection::MapCenter)
31.4420 + {
31.4421 + par=selection.getBranch();
31.4422 + bo=par->getLastSelectedBranch();
31.4423 + if (bo)
31.4424 + {
31.4425 + // Workaround for reselecting on left and right side
31.4426 + if (bo->getOrientation()==LinkableMapObj::RightOfCenter)
31.4427 + bo=par->getLastBranch();
31.4428 + if (bo)
31.4429 + {
31.4430 + bo=par->getLastBranch();
31.4431 + selection.select(bo);
31.4432 + selection.update();
31.4433 + ensureSelectionVisible();
31.4434 + sendSelection();
31.4435 + }
31.4436 + }
31.4437 + } else
31.4438 + {
31.4439 + par=(BranchObj*)(sel->getParObj());
31.4440 + if (sel->getOrientation()==LinkableMapObj::RightOfCenter)
31.4441 + {
31.4442 + if (selection.type() == Selection::Branch ||
31.4443 + selection.type() == Selection::FloatImage)
31.4444 + {
31.4445 + selection.select(par);
31.4446 + selection.update();
31.4447 + ensureSelectionVisible();
31.4448 + sendSelection();
31.4449 + }
31.4450 + } else
31.4451 + {
31.4452 + if (selection.type() == Selection::Branch )
31.4453 + {
31.4454 + bo=selection.getBranch()->getLastSelectedBranch();
31.4455 + if (bo)
31.4456 + {
31.4457 + selection.select(bo);
31.4458 + selection.update();
31.4459 + ensureSelectionVisible();
31.4460 + sendSelection();
31.4461 + }
31.4462 + }
31.4463 + }
31.4464 + }
31.4465 + }
31.4466 +}
31.4467 +
31.4468 +void VymModel::selectRightBranch()
31.4469 +{
31.4470 + if (selection.isBlocked() ) return;
31.4471 +
31.4472 + BranchObj* bo;
31.4473 + BranchObj* par;
31.4474 + LinkableMapObj *sel=selection.single();
31.4475 + if (sel)
31.4476 + {
31.4477 + if (selection.type()==Selection::MapCenter)
31.4478 + {
31.4479 + par=selection.getBranch();
31.4480 + bo=par->getLastSelectedBranch();
31.4481 + if (bo)
31.4482 + {
31.4483 + // Workaround for reselecting on left and right side
31.4484 + if (bo->getOrientation()==LinkableMapObj::LeftOfCenter)
31.4485 + bo=par->getFirstBranch();
31.4486 + if (bo)
31.4487 + {
31.4488 + selection.select(bo);
31.4489 + selection.update();
31.4490 + ensureSelectionVisible();
31.4491 + sendSelection();
31.4492 + }
31.4493 + }
31.4494 + } else
31.4495 + {
31.4496 + par=(BranchObj*)(selection.single()->getParObj());
31.4497 + if (selection.single()->getOrientation()==LinkableMapObj::LeftOfCenter)
31.4498 + {
31.4499 + if (selection.type() == Selection::Branch ||
31.4500 + selection.type() == Selection::FloatImage)
31.4501 + {
31.4502 + selection.select(par);
31.4503 + selection.update();
31.4504 + ensureSelectionVisible();
31.4505 + sendSelection();
31.4506 + }
31.4507 + } else
31.4508 + {
31.4509 + if (selection.type() == Selection::Branch)
31.4510 + {
31.4511 + bo=selection.getBranch()->getLastSelectedBranch();
31.4512 + if (bo)
31.4513 + {
31.4514 + selection.select(bo);
31.4515 + selection.update();
31.4516 + ensureSelectionVisible();
31.4517 + sendSelection();
31.4518 + }
31.4519 + }
31.4520 + }
31.4521 + }
31.4522 + }
31.4523 +}
31.4524 +
31.4525 +void VymModel::selectFirstBranch()
31.4526 +{
31.4527 + BranchObj *bo1=selection.getBranch();
31.4528 + BranchObj *bo2;
31.4529 + BranchObj* par;
31.4530 + if (bo1)
31.4531 + {
31.4532 + par=(BranchObj*)(bo1->getParObj());
31.4533 + if (!par) return;
31.4534 + bo2=par->getFirstBranch();
31.4535 + if (bo2) {
31.4536 + selection.select(bo2);
31.4537 + selection.update();
31.4538 + ensureSelectionVisible();
31.4539 + sendSelection();
31.4540 + }
31.4541 + }
31.4542 +}
31.4543 +
31.4544 +void VymModel::selectLastBranch()
31.4545 +{
31.4546 + BranchObj *bo1=selection.getBranch();
31.4547 + BranchObj *bo2;
31.4548 + BranchObj* par;
31.4549 + if (bo1)
31.4550 + {
31.4551 + par=(BranchObj*)(bo1->getParObj());
31.4552 + if (!par) return;
31.4553 + bo2=par->getLastBranch();
31.4554 + if (bo2)
31.4555 + {
31.4556 + selection.select(bo2);
31.4557 + selection.update();
31.4558 + ensureSelectionVisible();
31.4559 + sendSelection();
31.4560 + }
31.4561 + }
31.4562 +}
31.4563 +
31.4564 +Selection::Type VymModel::selectionType()
31.4565 +{
31.4566 + return selection.type();
31.4567 +}
31.4568 +
31.4569 LinkableMapObj* VymModel::getSelection()
31.4570 {
31.4571 - return mapEditor->getSelection();
31.4572 + return selection.single();
31.4573 }
31.4574 BranchObj* VymModel::getSelectedBranch()
31.4575 {
31.4576 - return mapEditor->getSelectedBranch();
31.4577 + return selection.getBranch();
31.4578 }
31.4579
31.4580 -
31.4581 -bool VymModel::select (const QString &s)
31.4582 +FloatImageObj* VymModel::getSelectedFloatImage()
31.4583 {
31.4584 - return mapEditor->select (s);
31.4585 + return selection.getFloatImage();
31.4586 +}
31.4587 +
31.4588 +QString VymModel::getSelectString ()
31.4589 +{
31.4590 + return selection.getSelectString();
31.4591 }
31.4592
31.4593 QString VymModel::getSelectString (LinkableMapObj *lmo)
31.4594 @@ -368,21 +4723,5 @@
31.4595 }
31.4596 }
31.4597 return s;
31.4598 -
31.4599 }
31.4600
31.4601 -
31.4602 -void VymModel::setHideTmp (HideTmpMode mode)
31.4603 -{
31.4604 - for (int i=0;i<mapCenters.count(); i++)
31.4605 - mapCenters.at(i)->setHideTmp (mode);
31.4606 -}
31.4607 -
31.4608 -QRectF VymModel::getTotalBBox()
31.4609 -{
31.4610 - QRectF r;
31.4611 - for (int i=0;i<mapCenters.count(); i++)
31.4612 - r=addBBox (mapCenters.at(i)->getTotalBBox(), r);
31.4613 - return r;
31.4614 -}
31.4615 -
32.1 --- a/vymmodel.h Wed Jul 16 10:44:44 2008 +0000
32.2 +++ b/vymmodel.h Wed Jul 16 10:46:14 2008 +0000
32.3 @@ -2,60 +2,456 @@
32.4 #define VYMMODEL_H
32.5
32.6 #include <QGraphicsScene>
32.7 +#include <QtNetwork>
32.8
32.9 +#include "file.h"
32.10 #include "mapcenterobj.h"
32.11 #include "mapeditor.h"
32.12 +#include "parser.h"
32.13 +#include "selection.h"
32.14 +#include "xmlobj.h"
32.15
32.16
32.17 /*! \brief This will later be divided into Model/View
32.18 */
32.19
32.20 -class VymModel : public QObject{
32.21 +class VymModel : public QObject, public XMLObj {
32.22 Q_OBJECT
32.23
32.24 +////////////////////////////////////////////
32.25 +// General housekeeping
32.26 +////////////////////////////////////////////
32.27 +private:
32.28 + QGraphicsScene *mapScene;
32.29 + QList <MapCenterObj*> mapCenters;
32.30 + QString version; //!< version string saved in vym file
32.31 + QString author;
32.32 + QString comment;
32.33 + QDate date;
32.34 +
32.35 public:
32.36 VymModel();
32.37 ~VymModel ();
32.38 void clear();
32.39 void init();
32.40 + void makeTmpDirectories(); //!< create temporary directories e.g. for history
32.41 +
32.42 void setMapEditor(MapEditor *me); // FIXME should not be necessary in Model/View
32.43 - MapEditor* getMapEditor();
32.44 + MapEditor* getMapEditor(); // FIXME not necessary
32.45 +
32.46 + bool isRepositionBlocked(); //!< While load or undo there is no need to update graphicsview
32.47 +
32.48 + void updateActions(); //!< Update buttons in mainwindow
32.49 +
32.50 +
32.51 +////////////////////////////////////////////
32.52 +// Load/save
32.53 +////////////////////////////////////////////
32.54 +private:
32.55 +
32.56 + bool zipped; // should map be zipped
32.57 + static int mapNum; // unique number for model used in save/undo
32.58 + FileType fileType; // type of file, e.g. vym, freemind...
32.59 + QString fileName; // short name of file (for tab)
32.60 + QString filePath; // path to file which will be saved
32.61 + QString fileDir; // dir where file is saved
32.62 + QString destPath; // path to .vym file (needed for vymlinks)
32.63 + QString mapName; // fileName without ".vym"
32.64 +
32.65 + QString tmpMapDir; // tmp directory with undo history
32.66 +
32.67 + QTimer *autosaveTimer;
32.68 + QTimer *fileChangedTimer;
32.69 + QDateTime fileChangedTime;
32.70 +
32.71 +public:
32.72 + /*! This function saves all information of the map to disc.
32.73 + saveToDir also calls the functions for all BranchObj and other objects in the map.
32.74 + The structure of the map itself is returned as QString and passed back to Main,
32.75 + where saveToDir is called initially
32.76 + */
32.77 + QString saveToDir (const QString &tmpdir, const QString &prefix, bool writeflags, const QPointF &offset, LinkableMapObj *saveSel);
32.78 +
32.79 + /*! \brief Sets filepath, filename and mapname
32.80 +
32.81 + If the filepath is "/home/tux/map.xml", then the filename will be set
32.82 + to map.xml. The destname is needed for vymLinks, pointing to another map.
32.83 + The destname holds the real name of the file, after it has been compressed, e.g. "map.vym"
32.84 + */
32.85 +
32.86 +
32.87 + /*! \brief Set File path
32.88 +
32.89 + The destname is needed to construct the references between maps
32.90 + */
32.91 + void setFilePath (QString filepath,QString destname);
32.92 + void setFilePath (QString); //!< Overloaded for convenience
32.93 + QString getFilePath (); //!< Full path e.g. "/home/tux/map.xml"
32.94 + QString getFileName (); //!< e.g. "map.xml"
32.95 + QString getMapName (); //!< e.g. "map"
32.96 + QString getDestPath (); //!< e.g. "/home/tux/map.vym"
32.97 +
32.98 + /*! \brief Load map
32.99 +
32.100 + The data is read from file. Depending on LoadMode the current
32.101 + selection gets replaced by data or the data is appended.
32.102 + */
32.103 + ErrorCode load (QString, const LoadMode &, const FileType& ); // newmap, import/replace selection
32.104 +
32.105 +public:
32.106 + /*! \brief Save the map to file */
32.107 + ErrorCode save(const SaveMode &);
32.108 +
32.109 +private:
32.110 + void addMapReplaceInt(const QString & undoSel, const QString & path);
32.111 + void addMapInsertInt (const QString & path, int pos);
32.112 +
32.113 + FloatImageObj* loadFloatImageInt (QString);
32.114 + void saveFloatImageInt (FloatImageObj*, const QString &, const QString &);
32.115 +public:
32.116 + void loadFloatImage ();
32.117 + void saveFloatImage ();
32.118 +
32.119 +private:
32.120 + void importDirInt(BranchObj *,QDir);
32.121 + void importDirInt(const QString&);
32.122 +public:
32.123 + void importDir();
32.124 +
32.125 +private slots:
32.126 + void autosave ();
32.127 + void fileChanged();
32.128 +
32.129 +////////////////////////////////////////////
32.130 +// history (undo/redo)
32.131 +////////////////////////////////////////////
32.132 +private:
32.133 + bool mapDefault; //!< Flag if map is untouched
32.134 + bool mapChanged; //!< Flag if undo is possible
32.135 + bool mapUnsaved; //!< Flag if map should be saved
32.136 +
32.137 + QString histPath; //!< Path to history file
32.138 + SimpleSettings undoSet; //!< undo/redo commands, saved in histPath
32.139 + int stepsTotal; //!< total number of steps (undos+redos)
32.140 + int curStep; //!< Current step in history (ring buffer)
32.141 + int curClipboard; //!< number of history step, which is the current clipboard
32.142 + int redosAvail; //!< Available number of redo steps
32.143 + int undosAvail; //!< Available number of undo steps
32.144 + bool blockReposition; //!< block while load or undo
32.145 + bool blockSaveState; //!< block while load or undo
32.146 +public:
32.147 + bool isDefault(); //!< true, if map is still the empty default map
32.148 + void makeDefault(); //!< Reset changelog, declare this as default map
32.149 + bool hasChanged() ; //!< true, if something has changed and is not saved yet
32.150 + void setChanged(); //!< called from TextEditor via LinkableMapObj
32.151 +
32.152 + /*! \brief Get name of object
32.153 +
32.154 + Returns heading of a branch or name of an object for use in comment
32.155 + of undo/redo history
32.156 + */
32.157 + QString getObjectName(const LinkableMapObj*);
32.158 +
32.159 + void redo(); //!< Redo last action
32.160 + bool isRedoAvailable(); //!< True, if redo is available
32.161 + void undo(); //!< Undo last action
32.162 + bool isUndoAvailable(); //!< True, if undo is available
32.163 + void gotoHistoryStep (int); //!< Goto a specifig step in history
32.164 +
32.165 +
32.166 + QString getHistoryPath(); //!< Path to directory containing the history
32.167 +
32.168 + /*! \brief Save the current changes in map
32.169 +
32.170 + Two commands and selections are saved:
32.171 +
32.172 + - undocommand and undoselection to undo the change
32.173 + - redocommand and redoselection to redo the action after an undo
32.174 +
32.175 + Additionally a comment is logged.
32.176 +
32.177 + */
32.178 + void saveState(
32.179 + const SaveMode& savemode,
32.180 + const QString &undoSelection,
32.181 + const QString &undoCommand,
32.182 + const QString &redoSelection,
32.183 + const QString &redoCommand,
32.184 + const QString &comment,
32.185 + LinkableMapObj *saveSelection);
32.186 + /*! Overloaded for convenience */
32.187 + void saveStateChangingPart(
32.188 + LinkableMapObj *undoSelection,
32.189 + LinkableMapObj* redoSelection,
32.190 + const QString &redoCommand,
32.191 + const QString &comment);
32.192 + /*! Overloaded for convenience */
32.193 + void saveStateRemovingPart(
32.194 + LinkableMapObj *redoSelection,
32.195 + const QString &comment);
32.196 + /*! Overloaded for convenience */
32.197 + void saveState(
32.198 + LinkableMapObj *undoSelection,
32.199 + const QString &undoCommand,
32.200 + LinkableMapObj *redoSelection,
32.201 + const QString &redoCommand,
32.202 + const QString &comment);
32.203 + /*! Overloaded for convenience */
32.204 + void saveState(
32.205 + const QString &undoSelection,
32.206 + const QString &undoCommand,
32.207 + const QString &redoSelection,
32.208 + const QString &redoCommand,
32.209 + const QString &comment) ;
32.210 + void saveState(
32.211 + const QString &undoCommand,
32.212 + const QString &redoCommand,
32.213 + const QString &comment) ;
32.214 +
32.215 +
32.216 +////////////////////////////////////////////
32.217 +// unsorted so far
32.218 +////////////////////////////////////////////
32.219 +public:
32.220 + void setScene(QGraphicsScene *s);
32.221 + QGraphicsScene *getScene();
32.222 +
32.223 + BranchObj* first();
32.224 + BranchObj* next(BranchObj *bo);
32.225 +
32.226 + LinkableMapObj* findMapObj(QPointF,LinkableMapObj*); // find MapObj
32.227 + LinkableMapObj* findObjBySelect (const QString &s); // find MapObj by select string
32.228 + LinkableMapObj* findID (const QString &s); // find MapObj by previously set ID
32.229 +
32.230 + void removeSelection (); // remove selected object
32.231 +
32.232 + QString saveToDir (const QString&,const QString&,int, const QPointF&);// Save data recursivly to tempdir
32.233 +
32.234 +
32.235 +////////////////////////////////////////////
32.236 +// Interface
32.237 +////////////////////////////////////////////
32.238 +public:
32.239 void setVersion(const QString &);
32.240 void setAuthor (const QString &);
32.241 QString getAuthor ();
32.242 void setComment (const QString &);
32.243 QString getComment ();
32.244 QString getDate();
32.245 - void setScene(QGraphicsScene *s);
32.246 - QGraphicsScene *getScene();
32.247 +
32.248 +public:
32.249 + void setHeading(const QString &); //!< Set heading of branch
32.250 + QString getHeading (bool &ok,QPoint &p); //!< Get heading, ok if selection is branch
32.251 +private:
32.252 + void setHeadingInt(const QString &);
32.253 +
32.254 +private:
32.255 + BranchObj* itFind; // next object in find process
32.256 + bool EOFind; // true, if search failed
32.257 +public:
32.258 + BranchObj* findText(QString,bool); // Find object
32.259 + void findReset(); // Reset Search
32.260 +
32.261 + void setURL(const QString &url);
32.262 + QString getURL(); // returns URL of selection or ""
32.263 + QStringList getURLs(); // returns URLs of subtree
32.264 +
32.265 + void linkFloatImageTo(const QString &);
32.266 +
32.267 + void setFrameType(const FrameObj::FrameType &);
32.268 + void setFrameType(const QString &);
32.269 + void setFramePenColor (const QColor &);
32.270 + void setFrameBrushColor (const QColor &);
32.271 + void setFramePadding (const int &);
32.272 + void setFrameBorderWidth (const int &);
32.273 + void setIncludeImagesVer(bool);
32.274 + void setIncludeImagesHor(bool);
32.275 + void setHideLinkUnselected (bool);
32.276 +
32.277 + /*! Should object be hidden in exports (clouded)? */
32.278 + void setHideExport(bool);
32.279 +
32.280 + /*! Should object be hidden in exports (clouded)? */
32.281 + void toggleHideExport();
32.282 +
32.283 + void copy(); //!< Copy to clipboard
32.284 +private:
32.285 + void pasteNoSave(const int &n); //!< paste clipboard to branch
32.286 +public:
32.287 + void paste(); //!< Paste clipboard to branch and backup
32.288 + void cut(); //!< Cut to clipboard (and copy)
32.289 +
32.290 + void moveBranchUp(); //!< Move branch up
32.291 + void moveBranchDown(); //!< Move branch down
32.292 + void sortChildren(); //!< Sort children lexically
32.293 +
32.294 + /*! \brief Add new mapcenter
32.295 +
32.296 + Disclaimer: Still experimental, not fully supported yet.
32.297 + */
32.298 MapCenterObj* addMapCenter();
32.299 +private:
32.300 MapCenterObj* addMapCenter(QPointF absPos);
32.301 +public:
32.302 MapCenterObj* removeMapCenter(MapCenterObj *mco);
32.303
32.304 - BranchObj* first(); // FIXME replaced by ModelIndex later
32.305 - BranchObj* next(BranchObj *bo); // FIXME replaced by ModelIndex later
32.306 + /*! \brief Add new branch
32.307
32.308 - LinkableMapObj* findMapObj(QPointF,LinkableMapObj*); // find MapObj
32.309 - LinkableMapObj* findObjBySelect (const QString &s); // find MapObj by select string
32.310 - LinkableMapObj* findID (const QString &s); // find MapObj by previously set ID
32.311 - QString saveToDir (const QString&,const QString&,int, const QPointF&);// Save data recursivly to tempdir
32.312 + Depending on num the new branch is created
32.313
32.314 + -3 above selection as child of selections parent
32.315 + -2 as child of selection
32.316 + -1 below selection as child of selections parent
32.317 + 0..n insert at a specific position in selections parent
32.318 + (needed for free relinking)
32.319 + */
32.320 +private:
32.321 + BranchObj* addNewBranchInt(int); // pos allows to add above/below selection
32.322 +public:
32.323 + /*! \Add new branch
32.324 +
32.325 + Depending on num the new branch is created
32.326 + -1 above selection
32.327 + 0 as child of selection
32.328 + 1 below selection
32.329 + */
32.330 + BranchObj* addNewBranch(int pos);
32.331 + BranchObj* addNewBranchBefore(); //!< Insert branch between selection and its parent
32.332 + void deleteSelection(); //!< Delete selection
32.333 + void deleteKeepChildren(); //!< remove branch, but keep children
32.334 + void deleteChildren(); //!< keep branch, but remove children
32.335
32.336 -////////////////////////////////////////// View related
32.337 - // void updateLink(); FIXME needed?
32.338 +private:
32.339 + bool scrollBranch(BranchObj*);
32.340 + bool unscrollBranch(BranchObj*);
32.341 +public:
32.342 + void toggleScroll();
32.343 + void unscrollChildren();
32.344 +
32.345 + void addFloatImage(const QPixmap &img);
32.346 +
32.347 + void colorBranch(QColor);
32.348 + void colorSubtree(QColor);
32.349 + QColor getCurrentHeadingColor();
32.350 +
32.351 +
32.352 + void editURL(); // edit URL
32.353 + void editLocalURL(); // edit URL to local file
32.354 + void editHeading2URL(); // copy heading to URL
32.355 + void editBugzilla2URL(); // create URL to Bugzilla
32.356 + void editFATE2URL(); // create URL to FATE
32.357 + void editVymLink(); // edit link to another map
32.358 + void setVymLink (const QString &); // Set vymLink for selection
32.359 + void deleteVymLink(); // delete link to another map
32.360 + QString getVymLink(); // return path to map
32.361 + QStringList getVymLinks(); // return paths in subtree
32.362 + void followXLink (int);
32.363 + void editXLink (int);
32.364 +
32.365 +
32.366 +
32.367 +
32.368 +////////////////////////////////////////////
32.369 +// Scripting
32.370 +////////////////////////////////////////////
32.371 +public:
32.372 +
32.373 + /* \brief Process one command and its parameters */
32.374 + void parseAtom (const QString &atom);
32.375 +
32.376 + /* \brief Runs the script */
32.377 + void runScript (QString script);
32.378 +
32.379 +private:
32.380 + Parser parser;
32.381 +
32.382 +////////////////////////////////////////////
32.383 +// Exports
32.384 +////////////////////////////////////////////
32.385 +private:
32.386 + HideTmpMode hidemode; // true while exporting to hide some stuff
32.387 +
32.388 +public:
32.389 + /*! Set or unset temporary hiding of objects during export */
32.390 + void setExportMode (bool);
32.391 +
32.392 + /*! Save as image */
32.393 + void exportImage (QString fname="",bool askForName=true,QString format="PNG");
32.394 +
32.395 +
32.396 + /*! Export as XTML to directory */
32.397 + void exportXML(QString dir="", bool askForName=true);
32.398 +
32.399 + /*! Export as ASCII text to file */
32.400 + void exportASCII (QString fname="",bool askForName=true);
32.401 +
32.402 + /*! Export as XHTML to directory */
32.403 + void exportXHTML(const QString& dir="", bool askForName=true);
32.404 +
32.405 + /*! Export as OpenOfficeOrg presentation */
32.406 + void exportOOPresentation(const QString &,const QString &);
32.407 +
32.408 +
32.409 +////////////////////////////////////////////
32.410 +// View related
32.411 +////////////////////////////////////////////
32.412 +public:
32.413 + void registerEditor (QWidget *);
32.414 + void unregisterEditor (QWidget *);
32.415 + void updateNoteFlag(); //!< Signal origination in TextEditor
32.416 void updateRelPositions();
32.417
32.418 QRectF getTotalBBox();
32.419 void reposition(); //!< Call reposition for all MCOs
32.420 - void setHideTmp (HideTmpMode mode);
32.421 + void setHideTmpMode (HideTmpMode mode);
32.422 +
32.423 QPolygonF shape(BranchObj *bo); //!< Returns arbitrary shape of subtree
32.424 void moveAway (LinkableMapObj *lmo);//!< Autolayout: Move all out of the way
32.425
32.426 - // Animation **experimental**
32.427 -private slots:
32.428 - void animate(); //!< Called by timer to animate stuff
32.429 + //void ensureSelectionVisible(); //!< Show selection in all views
32.430 +
32.431 +private:
32.432 + MapEditor *mapEditor;
32.433 +
32.434 + QColor defLinkColor; // default color for links
32.435 + QColor defXLinkColor; // default color for xlinks
32.436 + int defXLinkWidth; // default width for xlinks
32.437 + LinkableMapObj::ColorHint linkcolorhint;// use heading color or own color
32.438 + LinkableMapObj::Style linkstyle; // default style for links
32.439 +
32.440 +private:
32.441 + QPixmap getPixmap();
32.442 +
32.443 public:
32.444 - void startAnimation(const QPointF &start, const QPointF &dest);
32.445 + void setMapLinkStyle (const QString &); // Set style of link
32.446 + LinkableMapObj::Style getMapLinkStyle (); // requested in LMO
32.447 + void setMapDefLinkColor(QColor); // default color of links
32.448 + void setMapLinkColorHintInt(); // color of links
32.449 + void setMapLinkColorHint(LinkableMapObj::ColorHint);// color of links
32.450 + void toggleMapLinkColorHint(); // after changing linkStyles
32.451 + void selectMapBackgroundImage();
32.452 + void setMapBackgroundImage(const QString &);
32.453 + void selectMapBackgroundColor();
32.454 + void setMapBackgroundColor(QColor);
32.455 + QColor getMapBackgroundColor();
32.456 +
32.457 +
32.458 + LinkableMapObj::ColorHint getMapLinkColorHint();
32.459 + QColor getMapDefLinkColor();
32.460 + void setMapDefXLinkColor(QColor);
32.461 + QColor getMapDefXLinkColor();
32.462 + void setMapDefXLinkWidth (int);
32.463 + int getMapDefXLinkWidth();
32.464 +
32.465 + /*! Move absolutly to (x,y). */
32.466 + void move (const double &x, const double &y);
32.467 +
32.468 + /*! Move relativly to (x,y). */
32.469 + void moveRel (const double &x, const double &y);
32.470 +
32.471 +////////////////////////////////////////////
32.472 +// Animation **experimental**
32.473 +////////////////////////////////////////////
32.474 private:
32.475 QTimer *animationTimer;
32.476 bool animationUse;
32.477 @@ -64,22 +460,102 @@
32.478 int timerId; // animation timer
32.479 QList <MapObj*> animObjList;// list with animated objects
32.480
32.481 -////////////////////////////////////////// Selection related
32.482 +private slots:
32.483 + void animate(); //!< Called by timer to animate stuff
32.484 public:
32.485 + void startAnimation(const QPointF &start, const QPointF &dest);
32.486 +////////////////////////////////////////////
32.487 +// Network related
32.488 +////////////////////////////////////////////
32.489 +public:
32.490 + /*! \brief Networking states
32.491 +
32.492 + In Network modus we want to switch of saveState, autosave, ...
32.493 + */
32.494 + enum NetState {
32.495 + Offline, //!< Offline
32.496 + Client, //!< I am the client and connected to server
32.497 + Server //!< I am the server
32.498 + };
32.499 +
32.500 +private:
32.501 + // Network connections **Experimental**
32.502 + NetState netstate; // offline, client, server
32.503 + QTcpServer *tcpServer; // Act as server in conference mode (experimental)
32.504 + QList <QTcpSocket*> clientList; // List of connected clients
32.505 + quint16 sendCounter; // Increased with every sent command
32.506 +
32.507 + QTcpSocket *clientSocket; // socket of this client
32.508 + QString server; // server address of this client
32.509 + int port; // server port of this client
32.510 +
32.511 +
32.512 +
32.513 +protected:
32.514 + void sendSelection();
32.515 +
32.516 +public:
32.517 + void newServer();
32.518 + void connectToServer();
32.519 +
32.520 +private slots:
32.521 + void newClient();
32.522 + void sendData(const QString &s);
32.523 + void readData();
32.524 + void displayNetworkError (QAbstractSocket::SocketError);
32.525 +
32.526 +private:
32.527 + void displayClientError(QAbstractSocket::SocketError socketError);
32.528 +
32.529 +
32.530 +////////////////////////////////////////////
32.531 +// Selection related
32.532 +////////////////////////////////////////////
32.533 +private:
32.534 + Selection selection;
32.535 + QString latestSelectionString; // select string of latest added object
32.536 +
32.537 +public:
32.538 + void setSelectionBlocked(bool);
32.539 + bool isSelectionBlocked();
32.540 +
32.541 + bool select(const QString &); // Select by string
32.542 + bool select(LinkableMapObj *lmo); // Select by pointer
32.543 + void unselect();
32.544 + void reselect();
32.545 +
32.546 + void ensureSelectionVisible(); //!< Show selection in all views
32.547 +
32.548 + void selectInt(LinkableMapObj*);
32.549 +
32.550 +private:
32.551 + void selectNextBranchInt(); // Increment number of branch
32.552 + void selectPrevBranchInt(); // Decrement number of branch
32.553 +public:
32.554 + void selectUpperBranch();
32.555 + void selectLowerBranch();
32.556 + void selectLeftBranch();
32.557 + void selectRightBranch();
32.558 + void selectFirstBranch();
32.559 + void selectLastBranch();
32.560 +
32.561 +public:
32.562 + Selection::Type selectionType();
32.563 LinkableMapObj* getSelection();
32.564 BranchObj* getSelectedBranch();
32.565 - bool select (const QString &s);
32.566 + FloatImageObj* getSelectedFloatImage();
32.567 + QString getSelectString ();
32.568 QString getSelectString (LinkableMapObj *lmo);
32.569 +
32.570 + void updateSelection();
32.571 + void selectMapLinkColor();
32.572 + void selectMapSelectionColor();
32.573 +private:
32.574 + void setSelectionColorInt(QColor);
32.575 +public:
32.576 + void setSelectionColor(QColor);
32.577 + QColor getSelectionColor();
32.578
32.579 -private:
32.580 - QGraphicsScene *mapScene;
32.581 - MapEditor *mapEditor;
32.582 - QList <MapCenterObj*> mapCenters;
32.583 - QString version; //!< version string saved in vym file
32.584 - QString author;
32.585 - QString comment;
32.586 - QDate date;
32.587 };
32.588
32.589 -
32.590 #endif
33.1 --- a/xml-vym.cpp Wed Jul 16 10:44:44 2008 +0000
33.2 +++ b/xml-vym.cpp Wed Jul 16 10:46:14 2008 +0000
33.3 @@ -105,29 +105,29 @@
33.4 if (!atts.value( "selectionColor").isEmpty() )
33.5 {
33.6 col.setNamedColor(atts.value("selectionColor"));
33.7 - model->getMapEditor()->setSelectionColor(col);
33.8 + model->setSelectionColor(col);
33.9 }
33.10 if (!atts.value( "linkColorHint").isEmpty() )
33.11 {
33.12 if (atts.value("linkColorHint")=="HeadingColor")
33.13 - model->getMapEditor()->setMapLinkColorHint(LinkableMapObj::HeadingColor);
33.14 + model->setMapLinkColorHint(LinkableMapObj::HeadingColor);
33.15 else
33.16 - model->getMapEditor()->setMapLinkColorHint(LinkableMapObj::DefaultColor);
33.17 + model->setMapLinkColorHint(LinkableMapObj::DefaultColor);
33.18 }
33.19 if (!atts.value( "linkStyle").isEmpty() )
33.20 - model->getMapEditor()->setMapLinkStyle(atts.value("linkStyle"));
33.21 + model->setMapLinkStyle(atts.value("linkStyle"));
33.22 if (!atts.value( "linkColor").isEmpty() )
33.23 {
33.24 col.setNamedColor(atts.value("linkColor"));
33.25 - model->getMapEditor()->setMapDefLinkColor(col);
33.26 + model->setMapDefLinkColor(col);
33.27 }
33.28 if (!atts.value( "defXLinkColor").isEmpty() )
33.29 {
33.30 col.setNamedColor(atts.value("defXLinkColor"));
33.31 - model->getMapEditor()->setMapDefXLinkColor(col);
33.32 + model->setMapDefXLinkColor(col);
33.33 }
33.34 if (!atts.value( "defXLinkWidth").isEmpty() )
33.35 - model->getMapEditor()->setMapDefXLinkWidth(atts.value("defXLinkWidth").toInt ());
33.36 + model->setMapDefXLinkWidth(atts.value("defXLinkWidth").toInt ());
33.37 }
33.38 } else if ( eName == "select" && state == StateMap )
33.39 {
33.40 @@ -150,8 +150,8 @@
33.41 // Treat the found mapcenter as a branch
33.42 // in an existing map
33.43 LinkableMapObj* lmo=model->getSelection();
33.44 - if (lmo && ((typeid(*lmo) == typeid(BranchObj) )
33.45 - || typeid(*lmo) == typeid(MapCenterObj) ) )
33.46 + if (lmo && (typeid(*lmo) == typeid(BranchObj) )
33.47 + || (typeid(*lmo) == typeid(MapCenterObj) ) )
33.48 {
33.49 lastBranch=(BranchObj*)lmo;
33.50 if (loadMode==ImportAdd)
33.51 @@ -205,10 +205,10 @@
33.52 // selection==lmo==NULL
33.53 // Treat it like ImportAdd then...
33.54 loadMode=ImportAdd;
33.55 - lmo=model->first(); // FIXME this used to be lmo=mc before
33.56 + lmo=model->first();
33.57 }
33.58 - if (lmo && ((typeid(*lmo) == typeid(BranchObj) )
33.59 - || typeid(*lmo) == typeid(MapCenterObj) ) )
33.60 + if (lmo && (typeid(*lmo) == typeid(BranchObj) )
33.61 + || (typeid(*lmo) == typeid(MapCenterObj) ) )
33.62 {
33.63 lastBranch=(BranchObj*)(lmo);
33.64 if (eName=="branch")
33.65 @@ -626,7 +626,7 @@
33.66 if (!a.value( "key").isEmpty() )
33.67 {
33.68 if (!a.value( "value").isEmpty() )
33.69 - settings.setLocalEntry (model->getMapEditor()->getDestPath(), a.value ("key"), a.value ("value"));
33.70 + settings.setLocalEntry (model->getDestPath(), a.value ("key"), a.value ("value"));
33.71 else
33.72 return false;
33.73
34.1 --- a/xmlobj.cpp Wed Jul 16 10:44:44 2008 +0000
34.2 +++ b/xmlobj.cpp Wed Jul 16 10:46:14 2008 +0000
34.3 @@ -1,6 +1,7 @@
34.4 #include "xmlobj.h"
34.5
34.6 #include <QRegExp>
34.7 +#include <QString>
34.8
34.9
34.10 // returns masked "<" ">" "&"
35.1 --- a/xmlobj.h Wed Jul 16 10:44:44 2008 +0000
35.2 +++ b/xmlobj.h Wed Jul 16 10:46:14 2008 +0000
35.3 @@ -1,7 +1,7 @@
35.4 #ifndef XMLOBJ_H
35.5 #define XMLOBJ_H
35.6
35.7 -#include <QString>
35.8 +class QString;
35.9
35.10 QString quotemeta(const QString&);
35.11