1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/attributeitem.cpp Thu Sep 17 09:41:09 2009 +0000
1.3 @@ -0,0 +1,156 @@
1.4 +
1.5 +#include "attributeitem.h"
1.6 +
1.7 +#include <iostream>
1.8 +using namespace std;
1.9 +
1.10 +extern bool debug;
1.11 +
1.12 +AttributeItem::AttributeItem(const QList<QVariant> &data, TreeItem *parent):TreeItem (data,parent)
1.13 +{
1.14 + TreeItem::setType (Attribute);
1.15 + //table=NULL;
1.16 + //definition=NULL;
1.17 + type=Attribute;
1.18 +
1.19 + internal=false;
1.20 +}
1.21 +
1.22 +AttributeItem::~AttributeItem()
1.23 +{
1.24 +}
1.25 +
1.26 +void AttributeItem::setKey (const QString &k, const Type &t)
1.27 +{
1.28 +/*
1.29 + if (!table)
1.30 + {
1.31 + qWarning (QString("AttributeItem::setKey (%1) No table defined!\n").arg(k).ascii());
1.32 + return;
1.33 + }
1.34 +
1.35 + if (!definition)
1.36 + {
1.37 + definition=table->getDef(k);
1.38 + if (!definition)
1.39 + {
1.40 + table->addKey (k,t);
1.41 + return;
1.42 + }
1.43 + }
1.44 + qWarning (QString("AttributeItem::setKey (%1) attribute already defined!\n").arg(k).ascii());
1.45 + */
1.46 +}
1.47 +
1.48 +QString AttributeItem::getKey ()
1.49 +{
1.50 +/*
1.51 + if (!table)
1.52 + {
1.53 + qWarning ("AttributeItem::getKey () No table defined!");
1.54 + return QString();
1.55 + }
1.56 + if (!definition)
1.57 + {
1.58 + qWarning ("AttributeItem::getKey () No attribute defined!");
1.59 + return QString ();
1.60 + }
1.61 + return definition->getKey();
1.62 + */
1.63 +}
1.64 +
1.65 +void AttributeItem::setValue(const QString &v)
1.66 +{
1.67 +/*
1.68 + if (!table)
1.69 + {
1.70 + qWarning (QString ("AttributeItem::setValue (%1) No table defined!").arg(v));
1.71 + return;
1.72 + }
1.73 + if (!definition)
1.74 + {
1.75 + qWarning (QString ("AttributeItem::setValue (%1) No attribute defined!").arg(v));
1.76 + return;
1.77 + }
1.78 + definition->setValue (v);
1.79 +*/
1.80 +}
1.81 +
1.82 +QVariant AttributeItem::getValue()
1.83 +{
1.84 +/*
1.85 + if (!table)
1.86 + {
1.87 + qWarning ("AttributeItem::getValue No table defined!");
1.88 + return QString();
1.89 + }
1.90 + if (!definition)
1.91 + {
1.92 + qWarning ("AttributeItem::getValue No attribute defined!");
1.93 + return QString();
1.94 + }
1.95 + QVariant v= definition->getValue();
1.96 + return v;
1.97 + */
1.98 +}
1.99 +
1.100 +void AttributeItem::setType (const Type &t)
1.101 +{
1.102 +/*
1.103 + if (!table)
1.104 + {
1.105 + qWarning ("AttributeItem::setType No table defined!");
1.106 + return;
1.107 + }
1.108 + if (!definition)
1.109 + {
1.110 + qWarning ("Attribute::setType No attribute defined!");
1.111 + return;
1.112 + }
1.113 + definition->setType (t);
1.114 +*/
1.115 +}
1.116 +
1.117 +AttributeItem::Type AttributeItem::getAttributeType()
1.118 +{
1.119 +/*
1.120 + if (!table)
1.121 + {
1.122 + qWarning ("AttributeItem::getType No table defined!");
1.123 + return Undefined;
1.124 + }
1.125 + if (!definition)
1.126 + {
1.127 + qWarning ("AttributeItem::getType No attribute defined!");
1.128 + return Undefined;
1.129 + }
1.130 + return definition->getType();
1.131 +*/
1.132 +}
1.133 +
1.134 +QString AttributeItem::getTypeString()
1.135 +{
1.136 +/*
1.137 + if (!table)
1.138 + {
1.139 + qWarning ("AttributeItem::getTypeString No table defined!");
1.140 + return "Undefined";
1.141 + }
1.142 + if (!definition)
1.143 + {
1.144 + qWarning ("Attribute::getTypeString No AttributeItem defined!");
1.145 + return "Undefined";
1.146 + }
1.147 + return definition->getTypeString();
1.148 +*/
1.149 +}
1.150 +
1.151 +QString AttributeItem::getDataXML()
1.152 +{
1.153 + QString a=beginElement ("attribute");
1.154 + a+=attribut ("key",getKey());
1.155 + a+=attribut ("value",getValue().toString() );
1.156 + a+=attribut ("type",getTypeString () );
1.157 + return a;
1.158 +}
1.159 +
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/attributeitem.h Thu Sep 17 09:41:09 2009 +0000
2.3 @@ -0,0 +1,41 @@
2.4 +#ifndef ATTRIBUTEITEM_H
2.5 +#define ATTRIBUTEITEM_H
2.6 +
2.7 +#include <QStringList>
2.8 +#include <QVariant>
2.9 +
2.10 +#include "treeitem.h"
2.11 +
2.12 +/*! \brief A key and a value
2.13 + The data itself is stored in Attribute Definitions (AttributeDef).
2.14 + A list of these tables AttributeTable is maintained for every MapEditor.
2.15 +*/
2.16 +class AttributeItem:public TreeItem {
2.17 +
2.18 +enum Type {
2.19 + Undefined, //!< Undefined type
2.20 + IntList, //!< Free integer
2.21 + FreeInt, //!< Free integer
2.22 + StringList, //!< List of strings, one can be attribute value
2.23 + FreeString, //!< Any string can be attribute value, not unique
2.24 + UniqueString//!< UniqueString, e.g. for IDs
2.25 +};
2.26 +
2.27 +public:
2.28 + AttributeItem(const QList<QVariant> &data, TreeItem *parent = 0);
2.29 + virtual ~AttributeItem();
2.30 + void setKey (const QString &k, const Type &t);
2.31 + QString getKey ();
2.32 + void setValue (const QString &v);
2.33 + QVariant getValue ();
2.34 + void setType (const Type &t);
2.35 + AttributeItem::Type getAttributeType ();
2.36 + QString getTypeString ();
2.37 + QString getDataXML();
2.38 +protected:
2.39 + QString freeString; //!< String value for type FreeString
2.40 + bool internal; //!< Internal attributes cannot be edited by user
2.41 +};
2.42 +
2.43 +#endif
2.44 +
3.1 --- a/branchitem.cpp Fri Sep 11 12:56:15 2009 +0000
3.2 +++ b/branchitem.cpp Thu Sep 17 09:41:09 2009 +0000
3.3 @@ -45,6 +45,11 @@
3.4 tmpUnscrolled=other->tmpUnscrolled;
3.5 }
3.6
3.7 +BranchItem* BranchItem::parentBranch ()
3.8 +{
3.9 + return (BranchItem*) parentItem;
3.10 +}
3.11 +
3.12 void BranchItem::insertBranch (int pos, BranchItem *branch)
3.13 {
3.14 if (pos<0) pos=0;
3.15 @@ -216,7 +221,7 @@
3.16 }
3.17 }
3.18 }
3.19 - model->reposition(); // FIXME-3 we don't really want to update view from here...
3.20 + //model->reposition(); // FIXME-3 we don't really want to update view from here...
3.21 return true;
3.22 }
3.23
3.24 @@ -273,10 +278,30 @@
3.25 }
3.26 }
3.27
3.28 +void BranchItem::sortChildren()
3.29 +{
3.30 + int childCount=branchCounter;
3.31 + int curChildIndex;
3.32 + bool madeChanges=false;
3.33 + do
3.34 + {
3.35 + madeChanges=false;
3.36 + for(curChildIndex=1;curChildIndex<childCount;curChildIndex++){
3.37 + BranchItem* curChild =getBranchNum(curChildIndex);
3.38 + BranchItem* prevChild=getBranchNum(curChildIndex-1);
3.39 + if(prevChild->getHeading().compare(curChild->getHeading())>0)
3.40 + {
3.41 + model->moveUp(curChild);
3.42 + madeChanges=true;
3.43 + }
3.44 + }
3.45 + }while(madeChanges);
3.46 +}
3.47 +
3.48 void BranchItem::setIncludeImagesVer(bool b)
3.49 {
3.50 includeImagesVer=b;
3.51 - /* calcBBoxSize(); FIXME-2
3.52 + /* calcBBoxSize(); FIXME-3
3.53 positionBBox();
3.54 requestReposition();
3.55 */
3.56 @@ -290,7 +315,7 @@
3.57 void BranchItem::setIncludeImagesHor(bool b)
3.58 {
3.59 includeImagesHor=b;
3.60 - /* calcBBoxSize(); FIXME-2
3.61 + /* calcBBoxSize(); FIXME-3
3.62 positionBBox();
3.63 requestReposition();
3.64 */
3.65 @@ -377,7 +402,7 @@
3.66 }
3.67 return NULL;
3.68 }
3.69 -
3.70 +/*
3.71 TreeItem* BranchItem::findID (QString sid) //FIXME-3 move to TreeItem //FIXME-4 search images
3.72 {
3.73 // Search branches
3.74 @@ -392,7 +417,6 @@
3.75 if (sid==objID) return this;
3.76
3.77
3.78 -/*
3.79 // Search float images
3.80 for (int i=0; i<floatimage.size(); ++i )
3.81 if (floatimage.at(i)->inBox(p) &&
3.82 @@ -400,10 +424,9 @@
3.83 floatimage.at(i)->getParObj()!= excludeLMO &&
3.84 floatimage.at(i)->isVisibleObj()
3.85 ) return floatimage.at(i);
3.86 -*/
3.87 return NULL;
3.88 }
3.89 -
3.90 +*/
3.91 void BranchItem::updateStyles()
3.92 {
3.93 // FIXME-5 compare also MapItem::initLMO...
4.1 --- a/branchitem.h Fri Sep 11 12:56:15 2009 +0000
4.2 +++ b/branchitem.h Thu Sep 17 09:41:09 2009 +0000
4.3 @@ -15,6 +15,7 @@
4.4 BranchItem(const QList<QVariant> &data, TreeItem *parent = 0);
4.5 virtual ~BranchItem();
4.6 virtual void copy (BranchItem *item);
4.7 + virtual BranchItem* parentBranch();
4.8
4.9 virtual void insertBranch (int pos,BranchItem *branch);
4.10
4.11 @@ -34,7 +35,7 @@
4.12 virtual bool hasScrolledParent(BranchItem*); // true, if any of the parents is scrolled
4.13 virtual void tmpUnscroll(); // unscroll scrolled parents temporary e.g. during "find" process
4.14 virtual void resetTmpUnscroll(); // scroll all tmp scrolled parents again e.g. when unselecting
4.15 -
4.16 + virtual void sortChildren(); //! Sort children
4.17
4.18 protected:
4.19 bool includeImagesVer; //! include floatimages in bbox vertically
4.20 @@ -57,7 +58,7 @@
4.21
4.22 public:
4.23 TreeItem* findMapItem (QPointF p,TreeItem* excludeTI); //! search map for branches or images. Ignore excludeTI, where search is started
4.24 - virtual TreeItem* findID (QString sid); //! search map for object with ID string
4.25 +// virtual TreeItem* findID (QString sid); //! search map for object with ID string
4.26
4.27 virtual void updateStyles (); //! update related fonts, parObjects, links, ...
4.28 virtual BranchObj* getBranchObj();
5.1 --- a/branchobj.cpp Fri Sep 11 12:56:15 2009 +0000
5.2 +++ b/branchobj.cpp Thu Sep 17 09:41:09 2009 +0000
5.3 @@ -505,28 +505,6 @@
5.4 calcBBoxSize();
5.5 }
5.6
5.7 -void BranchObj::sortChildren() //FIXME-3 not moved to model yet
5.8 -{
5.9 -/*
5.10 - int childCount=branch.count();
5.11 - int curChildIndex;
5.12 - bool madeChanges=false;
5.13 - do
5.14 - {
5.15 - madeChanges=false;
5.16 - for(curChildIndex=1;curChildIndex<childCount;curChildIndex++){
5.17 - BranchObj* curChild=(BranchObj*)treeItem->getBranchObjNum(curChildIndex);
5.18 - BranchObj* prevChild=(BranchObj*)treeItem->getBranchObjNum(curChildIndex-1);
5.19 - if(prevChild->heading->text().compare(curChild->heading->text())>0)
5.20 - {
5.21 - this->moveBranchUp(curChild);
5.22 - madeChanges=true;
5.23 - }
5.24 - }
5.25 - }while(madeChanges);
5.26 -*/
5.27 -}
5.28 -
5.29 void BranchObj::alignRelativeTo (QPointF ref,bool alignSelf)
5.30 {
5.31 qreal th = bboxTotal.height();
5.32 @@ -545,10 +523,10 @@
5.33 //cout<< " ref="<<ref<<
5.34 " bbox.tL="<<bboxTotal.topLeft()<<
5.35 " absPos="<<absPos<<
5.36 -// " relPos="<<relPos<<
5.37 + " relPos="<<relPos<<
5.38 // " parPos="<<pp<<
5.39 - " w="<<bbox.width()<<
5.40 - " h="<<bbox.height()<<
5.41 +// " w="<<bbox.width()<<
5.42 +// " h="<<bbox.height()<<
5.43 // " orient="<<orientation<<
5.44 // " alignSelf="<<alignSelf<<
5.45 // " scrolled="<<((BranchItem*)treeItem)->isScrolled()<<
6.1 --- a/branchobj.h Fri Sep 11 12:56:15 2009 +0000
6.2 +++ b/branchobj.h Thu Sep 17 09:41:09 2009 +0000
6.3 @@ -48,7 +48,6 @@
6.4 public:
6.5 virtual void setDefAttr (BranchModification); // set default attributes (font, size, ...)
6.6
6.7 - virtual void sortChildren();
6.8 virtual void alignRelativeTo(const QPointF, bool alignSelf=false );
6.9 virtual void reposition();
6.10 virtual void unsetAllRepositionRequests();
7.1 --- a/mainwindow.cpp Fri Sep 11 12:56:15 2009 +0000
7.2 +++ b/mainwindow.cpp Thu Sep 17 09:41:09 2009 +0000
7.3 @@ -23,7 +23,7 @@
7.4 #include "warningdialog.h"
7.5 #include "xlinkitem.h"
7.6
7.7 -#include <modeltest.h> // FIXME-3
7.8 +//#include <modeltest.h> // FIXME-3
7.9
7.10 #if defined(Q_OS_WIN32)
7.11 // Define only this structure as opposed to
7.12 @@ -665,6 +665,13 @@
7.13 editMenu->addAction (a);
7.14 actionMoveDown=a;
7.15
7.16 + a = new QAction(QPixmap(), tr( "&Detach","Context menu" ),this);
7.17 + a->setStatusTip ( tr( "Detach branch and use as mapcenter","Context menu" ) );
7.18 + a->setShortcut ( Qt::Key_D ); // Detach branch
7.19 + editMenu->addAction (a);
7.20 + connect( a, SIGNAL( triggered() ), this, SLOT( editDetach() ) );
7.21 + actionDetach=a;
7.22 +
7.23 a = new QAction( QPixmap(iconPath+"editsort.png" ), tr( "Sort children","Edit menu" ), this );
7.24 connect( a, SIGNAL( activated() ), this, SLOT( editSortChildren() ) );
7.25 a->setEnabled (true);
7.26 @@ -1547,6 +1554,7 @@
7.27
7.28 actionSaveBranch->addTo( branchContextMenu );
7.29 actionFileNewCopy->addTo (branchContextMenu );
7.30 + actionDetach->addTo (branchContextMenu );
7.31
7.32 branchContextMenu->addSeparator();
7.33 branchContextMenu->addAction ( actionLoadImage);
7.34 @@ -1710,7 +1718,7 @@
7.35 {
7.36 VymModel *vm=new VymModel;
7.37
7.38 -new ModelTest(vm, this); //FIXME-3
7.39 +//new ModelTest(vm, this); //FIXME-3
7.40
7.41
7.42 VymView *vv=new VymView (vm);
7.43 @@ -2699,6 +2707,7 @@
7.44 void Main::editMapInfo()
7.45 {
7.46 VymModel *m=currentModel();
7.47 + if (!m) return;
7.48
7.49 ExtraInfoDialog dia;
7.50 dia.setMapName (m->getFileName() );
7.51 @@ -2707,27 +2716,27 @@
7.52
7.53 // Calc some stats
7.54 QString stats;
7.55 -/* FIXME-2 no stats at the moment (view dependent...)
7.56 - stats+=tr("%1 items on map\n","Info about map").arg (mapScene->items().size(),6);
7.57 + stats+=tr("%1 items on map\n","Info about map").arg (m->getScene()->items().size(),6);
7.58
7.59 uint b=0;
7.60 uint f=0;
7.61 uint n=0;
7.62 uint xl=0;
7.63 - BranchObj *bo;
7.64 - bo=m->first();
7.65 - while (bo)
7.66 + BranchItem *cur=NULL;
7.67 + BranchItem *prev=NULL;
7.68 + m->next(cur,prev);
7.69 + while (cur)
7.70 {
7.71 - if (!bo->getNote().isEmpty() ) n++;
7.72 - f+= bo->countFloatImages();
7.73 + if (!cur->getNote().isEmpty() ) n++;
7.74 + f+= cur->imageCount();
7.75 b++;
7.76 - xl+=bo->countXLinks();
7.77 - bo=m->next(bo);
7.78 + xl+=cur->xlinkCount();
7.79 + m->next(cur,prev);
7.80 }
7.81 +
7.82 stats+=QString ("%1 xLinks \n").arg (xl,6);
7.83 stats+=QString ("%1 notes\n").arg (n,6);
7.84 stats+=QString ("%1 images\n").arg (f,6);
7.85 -*/
7.86 stats+=QString ("%1 branches\n").arg (m->branchCount(),6);
7.87 dia.setStats (stats);
7.88
7.89 @@ -2751,6 +2760,12 @@
7.90 if (m) m->moveDown();
7.91 }
7.92
7.93 +void Main::editDetach()
7.94 +{
7.95 + VymModel *m=currentModel();
7.96 + if (m) m->detach();
7.97 +}
7.98 +
7.99 void Main::editSortChildren()
7.100 {
7.101 VymModel *m=currentModel();
7.102 @@ -3591,6 +3606,11 @@
7.103 {
7.104 if (!currentMapEditor()) return;
7.105 currentMapEditor()->testFunction1();
7.106 + /*
7.107 + VymModel *m=currentModel();
7.108 + if (!m) return;
7.109 + m->clearItem (m->getSelectedItem());
7.110 + */
7.111 }
7.112
7.113 void Main::testFunction2()
8.1 --- a/mainwindow.h Fri Sep 11 12:56:15 2009 +0000
8.2 +++ b/mainwindow.h Thu Sep 17 09:41:09 2009 +0000
8.3 @@ -144,6 +144,7 @@
8.4 void editMapInfo();
8.5 void editMoveUp();
8.6 void editMoveDown();
8.7 + void editDetach();
8.8 void editSortChildren();
8.9 void editToggleScroll();
8.10 void editExpandAll();
8.11 @@ -278,6 +279,7 @@
8.12 QAction *actionPaste;
8.13 QAction *actionMoveUp;
8.14 QAction *actionMoveDown;
8.15 + QAction *actionDetach;
8.16 QAction *actionSortChildren;
8.17 QAction *actionToggleScroll;
8.18 QAction *actionExpandAll;
9.1 --- a/mapeditor.cpp Fri Sep 11 12:56:15 2009 +0000
9.2 +++ b/mapeditor.cpp Thu Sep 17 09:41:09 2009 +0000
9.3 @@ -186,6 +186,8 @@
9.4
9.5 void MapEditor::scrollTo (const QModelIndex &index)
9.6 {
9.7 + //cout <<"ME::scrollTo aborted\n";
9.8 + //return;
9.9 if (index.isValid())
9.10 {
9.11 LinkableMapObj* lmo=NULL;
9.12 @@ -454,6 +456,7 @@
9.13
9.14 void MapEditor::testFunction1()
9.15 {
9.16 + cout << "ME::test1 selected TI="<<model->getSelectedItem()<<endl;
9.17 /*
9.18 // Code copied from Qt sources
9.19 QRectF rect=model->getSelectedBranchObj()->getBBox();
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
10.2 +++ b/mysortfilterproxymodel.cpp Thu Sep 17 09:41:09 2009 +0000
10.3 @@ -0,0 +1,99 @@
10.4 +/****************************************************************************
10.5 +**
10.6 +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
10.7 +** Contact: Qt Software Information (qt-info@nokia.com)
10.8 +**
10.9 +** This file is part of the example classes of the Qt Toolkit.
10.10 +**
10.11 +** Commercial Usage
10.12 +** Licensees holding valid Qt Commercial licenses may use this file in
10.13 +** accordance with the Qt Commercial License Agreement provided with the
10.14 +** Software or, alternatively, in accordance with the terms contained in
10.15 +** a written agreement between you and Nokia.
10.16 +**
10.17 +**
10.18 +** GNU General Public License Usage
10.19 +** Alternatively, this file may be used under the terms of the GNU
10.20 +** General Public License versions 2.0 or 3.0 as published by the Free
10.21 +** Software Foundation and appearing in the file LICENSE.GPL included in
10.22 +** the packaging of this file. Please review the following information
10.23 +** to ensure GNU General Public Licensing requirements will be met:
10.24 +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
10.25 +** http://www.gnu.org/copyleft/gpl.html. In addition, as a special
10.26 +** exception, Nokia gives you certain additional rights. These rights
10.27 +** are described in the Nokia Qt GPL Exception version 1.3, included in
10.28 +** the file GPL_EXCEPTION.txt in this package.
10.29 +**
10.30 +** Qt for Windows(R) Licensees
10.31 +** As a special exception, Nokia, as the sole copyright holder for Qt
10.32 +** Designer, grants users of the Qt/Eclipse Integration plug-in the
10.33 +** right for the Qt/Eclipse Integration to link to functionality
10.34 +** provided by Qt Designer and its related libraries.
10.35 +**
10.36 +** If you are unsure which license is appropriate for your use, please
10.37 +** contact the sales department at qt-sales@nokia.com.
10.38 +**
10.39 +****************************************************************************/
10.40 +
10.41 +#include <QtGui>
10.42 +
10.43 +#include "mysortfilterproxymodel.h"
10.44 +
10.45 +MySortFilterProxyModel::MySortFilterProxyModel(QObject *parent)
10.46 + : QSortFilterProxyModel(parent)
10.47 +{
10.48 +}
10.49 +/*
10.50 +void MySortFilterProxyModel::setFilterMinimumDate(const QDate &date)
10.51 +{
10.52 + minDate = date;
10.53 + invalidateFilter();
10.54 +}
10.55 +void MySortFilterProxyModel::setFilterMaximumDate(const QDate &date)
10.56 +{
10.57 + maxDate = date;
10.58 + invalidateFilter();
10.59 +}
10.60 +*/
10.61 +
10.62 +#include <iostream>
10.63 +using namespace std;
10.64 +bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow,
10.65 + const QModelIndex &sourceParent) const
10.66 +{
10.67 + return true;
10.68 +cout << "MSFPM sM="<<sourceModel()<<endl;
10.69 + QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
10.70 + QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent);
10.71 +
10.72 + return (sourceModel()->data(index0).toString().contains(filterRegExp()) );
10.73 +}
10.74 +
10.75 +/*
10.76 +bool MySortFilterProxyModel::lessThan(const QModelIndex &left,
10.77 + const QModelIndex &right) const
10.78 +{
10.79 + QVariant leftData = sourceModel()->data(left);
10.80 + QVariant rightData = sourceModel()->data(right);
10.81 + if (leftData.type() == QVariant::DateTime) {
10.82 + return leftData.toDateTime() < rightData.toDateTime();
10.83 + } else {
10.84 + QRegExp *emailPattern = new QRegExp("([\\w\\.]*@[\\w\\.]*)");
10.85 +
10.86 + QString leftString = leftData.toString();
10.87 + if(left.column() == 1 && emailPattern->indexIn(leftString) != -1)
10.88 + leftString = emailPattern->cap(1);
10.89 +
10.90 + QString rightString = rightData.toString();
10.91 + if(right.column() == 1 && emailPattern->indexIn(rightString) != -1)
10.92 + rightString = emailPattern->cap(1);
10.93 +
10.94 + return QString::localeAwareCompare(leftString, rightString) < 0;
10.95 + }
10.96 +}
10.97 +bool MySortFilterProxyModel::dateInRange(const QDate &date) const
10.98 +{
10.99 + return (!minDate.isValid() || date > minDate)
10.100 + && (!maxDate.isValid() || date < maxDate);
10.101 +}
10.102 +*/
11.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
11.2 +++ b/mysortfilterproxymodel.h Thu Sep 17 09:41:09 2009 +0000
11.3 @@ -0,0 +1,70 @@
11.4 +/****************************************************************************
11.5 +**
11.6 +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
11.7 +** Contact: Qt Software Information (qt-info@nokia.com)
11.8 +**
11.9 +** This file is part of the example classes of the Qt Toolkit.
11.10 +**
11.11 +** Commercial Usage
11.12 +** Licensees holding valid Qt Commercial licenses may use this file in
11.13 +** accordance with the Qt Commercial License Agreement provided with the
11.14 +** Software or, alternatively, in accordance with the terms contained in
11.15 +** a written agreement between you and Nokia.
11.16 +**
11.17 +**
11.18 +** GNU General Public License Usage
11.19 +** Alternatively, this file may be used under the terms of the GNU
11.20 +** General Public License versions 2.0 or 3.0 as published by the Free
11.21 +** Software Foundation and appearing in the file LICENSE.GPL included in
11.22 +** the packaging of this file. Please review the following information
11.23 +** to ensure GNU General Public Licensing requirements will be met:
11.24 +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
11.25 +** http://www.gnu.org/copyleft/gpl.html. In addition, as a special
11.26 +** exception, Nokia gives you certain additional rights. These rights
11.27 +** are described in the Nokia Qt GPL Exception version 1.3, included in
11.28 +** the file GPL_EXCEPTION.txt in this package.
11.29 +**
11.30 +** Qt for Windows(R) Licensees
11.31 +** As a special exception, Nokia, as the sole copyright holder for Qt
11.32 +** Designer, grants users of the Qt/Eclipse Integration plug-in the
11.33 +** right for the Qt/Eclipse Integration to link to functionality
11.34 +** provided by Qt Designer and its related libraries.
11.35 +**
11.36 +** If you are unsure which license is appropriate for your use, please
11.37 +** contact the sales department at qt-sales@nokia.com.
11.38 +**
11.39 +****************************************************************************/
11.40 +
11.41 +#ifndef MYSORTFILTERPROXYMODEL_H
11.42 +#define MYSORTFILTERPROXYMODEL_H
11.43 +
11.44 +#include <QDate>
11.45 +#include <QSortFilterProxyModel>
11.46 +
11.47 +//! [0]
11.48 +class MySortFilterProxyModel : public QSortFilterProxyModel
11.49 +{
11.50 + Q_OBJECT
11.51 +
11.52 +public:
11.53 + MySortFilterProxyModel(QObject *parent = 0);
11.54 +
11.55 + // QDate filterMinimumDate() const { return minDate; }
11.56 +// void setFilterMinimumDate(const QDate &date);
11.57 +
11.58 +// QDate filterMaximumDate() const { return maxDate; }
11.59 +// void setFilterMaximumDate(const QDate &date);
11.60 +
11.61 +protected:
11.62 + bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
11.63 +// bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
11.64 +
11.65 +private:
11.66 + bool dateInRange(const QDate &date) const;
11.67 +
11.68 + QDate minDate;
11.69 + QDate maxDate;
11.70 +};
11.71 +//! [0]
11.72 +
11.73 +#endif
12.1 --- a/treeitem.cpp Fri Sep 11 12:56:15 2009 +0000
12.2 +++ b/treeitem.cpp Thu Sep 17 09:41:09 2009 +0000
12.3 @@ -175,18 +175,6 @@
12.4 }
12.5 }
12.6
12.7 -/*
12.8 -void TreeItem::clear() // FIXME-2 used in vymmodel addMapInsert, but needs to be used via model and emit layout changes...
12.9 -{
12.10 - cout << "TI::clear\n";
12.11 - while ( childItems.size()>0)
12.12 - {
12.13 - branchCounter--;
12.14 - childItems.removeAt (0);
12.15 - }
12.16 -}
12.17 -*/
12.18 -
12.19 TreeItem *TreeItem::child(int row)
12.20 {
12.21 return childItems.value(row);
13.1 --- a/treeitem.h Fri Sep 11 12:56:15 2009 +0000
13.2 +++ b/treeitem.h Thu Sep 17 09:41:09 2009 +0000
13.3 @@ -41,7 +41,6 @@
13.4
13.5 virtual void appendChild (TreeItem *child);
13.6 virtual void removeChild (int row);
13.7 -// virtual void clear();
13.8
13.9 virtual TreeItem *child(int row);
13.10 virtual int childCount() const;
14.1 --- a/treemodel.cpp Fri Sep 11 12:56:15 2009 +0000
14.2 +++ b/treemodel.cpp Thu Sep 17 09:41:09 2009 +0000
14.3 @@ -235,36 +235,12 @@
14.4 pi=rootItem;
14.5 TreeItem *ti;
14.6
14.7 - cout << "TM::removeRows pi="<<pi<<" row="<<row<<" count="<<count<<endl;
14.8 + //cout << "TM::removeRows pi="<<pi<<" row="<<row<<" count="<<count<<endl;
14.9 for (int i=row; i<=last; i++)
14.10 {
14.11 ti=pi->getChildNum (row);
14.12 - cout << " pi="<<pi<<" ti="<<ti<<endl;
14.13 pi->removeChild (row); // does not delete object!
14.14 delete ti;
14.15 - /* FIXME-3
14.16 - switch (ti->getType())
14.17 - {
14.18 - case TreeItem::MapCenter:
14.19 - delete (BranchItem*)ti;
14.20 - break;
14.21 - case TreeItem::Branch:
14.22 - delete (BranchItem*)ti;
14.23 - break;
14.24 - case TreeItem::Image:
14.25 - delete (ImageItem*)ti;
14.26 - break;
14.27 - case TreeItem::Attribute:
14.28 - delete (AttributeItem*)ti;
14.29 - break;
14.30 - case TreeItem::XLink:
14.31 - delete (XLinkItem*)ti;
14.32 - break;
14.33 - default:
14.34 - delete ti;
14.35 - break;
14.36 - }
14.37 - */
14.38 }
14.39 return true;
14.40 }
15.1 --- a/vymmodel.cpp Fri Sep 11 12:56:15 2009 +0000
15.2 +++ b/vymmodel.cpp Thu Sep 17 09:41:09 2009 +0000
15.3 @@ -640,7 +640,7 @@
15.4 return err;
15.5 }
15.6
15.7 -void VymModel::addMapReplaceInt(const QString &undoSel, const QString &path) // FIXME-1 test e.g. with undo color subtree
15.8 +void VymModel::addMapReplaceInt(const QString &undoSel, const QString &path)
15.9 {
15.10 QString pathDir=path.left(path.findRev("/"));
15.11 QDir d(pathDir);
15.12 @@ -1077,7 +1077,6 @@
15.13
15.14
15.15 parseAtom (redoCommand);
15.16 - reposition();
15.17
15.18 blockSaveState=blockSaveStateOrg;
15.19
15.20 @@ -1156,7 +1155,6 @@
15.21 cout << " ---------------------------"<<endl<<endl;
15.22 }
15.23 parseAtom (undoCommand);
15.24 - reposition();
15.25
15.26 undosAvail--;
15.27 curStep--;
15.28 @@ -1180,7 +1178,7 @@
15.29
15.30 mainWindow->updateHistory (undoSet);
15.31 updateActions();
15.32 - emitSelectionChanged();
15.33 + //emitSelectionChanged();
15.34 }
15.35
15.36 bool VymModel::isUndoAvailable()
15.37 @@ -1439,7 +1437,7 @@
15.38 return ti;
15.39 }
15.40
15.41 -TreeItem* VymModel::findID (const QString &s)
15.42 +TreeItem* VymModel::findID (const QString &s) //FIXME-4 Search also other types...
15.43 {
15.44 BranchItem *cur=NULL;
15.45 BranchItem *prev=NULL;
15.46 @@ -1602,9 +1600,7 @@
15.47
15.48 void VymModel::setScene (QGraphicsScene *s)
15.49 {
15.50 - mapScene=s; // FIXME-2 VM should not be necessary anymore, move all occurences to MapEditor
15.51 - //init(); // Here we have a mapScene set,
15.52 - // which is (still) needed to create MapCenters
15.53 + mapScene=s;
15.54 }
15.55
15.56 void VymModel::setURL(const QString &url)
15.57 @@ -1918,47 +1914,80 @@
15.58 }
15.59 }
15.60
15.61 -void VymModel::moveUp() //FIXME-2 crashes if trying to move MCO
15.62 +bool VymModel::moveUp(BranchItem *bi) //FIXME-2 crashes if trying to move MCO
15.63 +{
15.64 + if (bi && bi->canMoveUp())
15.65 + return relinkBranch (bi,(BranchItem*)bi->parent(),bi->num()-1);
15.66 + else
15.67 + return false;
15.68 +}
15.69 +
15.70 +void VymModel::moveUp()
15.71 {
15.72 BranchItem *selbi=getSelectedBranch();
15.73 if (selbi)
15.74 {
15.75 - if (!selbi->canMoveUp()) return;
15.76 QString oldsel=getSelectString();
15.77 - if (relinkBranch (selbi,(BranchItem*)selbi->parent(),selbi->num()-1) )
15.78 -
15.79 - saveState (getSelectString(),"moveDown ()",oldsel,"moveUp ()",QString("Move up %1").arg(getObjectName(selbi)));
15.80 + if (moveUp (selbi))
15.81 + saveState (
15.82 + getSelectString(),"moveDown ()",
15.83 + oldsel,"moveUp ()",
15.84 + QString("Move up %1").arg(getObjectName(selbi)));
15.85 }
15.86 }
15.87
15.88 +bool VymModel::moveDown(BranchItem *bi)
15.89 +{
15.90 + if (bi && bi->canMoveDown())
15.91 + return relinkBranch (bi,(BranchItem*)bi->parent(),bi->num()+1);
15.92 + else
15.93 + return false;
15.94 +}
15.95 +
15.96 void VymModel::moveDown()
15.97 {
15.98 BranchItem *selbi=getSelectedBranch();
15.99 if (selbi)
15.100 {
15.101 - if (!selbi->canMoveDown()) return;
15.102 QString oldsel=getSelectString();
15.103 - if ( relinkBranch (selbi,(BranchItem*)selbi->parent(),selbi->num()+1) )
15.104 -
15.105 - saveState (getSelectString(),"moveUp ()",oldsel,"moveDown ()",QString("Move down %1").arg(getObjectName(selbi)));
15.106 + if ( moveDown(selbi))
15.107 + saveState (
15.108 + getSelectString(),"moveUp ()",
15.109 + oldsel,"moveDown ()",
15.110 + QString("Move down %1").arg(getObjectName(selbi)));
15.111 }
15.112 }
15.113
15.114 -void VymModel::sortChildren() // FIXME-2 not implemented yet
15.115 -{
15.116 -/*
15.117 - BranchObj* bo=getSelectedBranch();
15.118 - if (bo)
15.119 +void VymModel::detach()
15.120 +{
15.121 + BranchItem *selbi=getSelectedBranch();
15.122 + if (selbi && selbi->depth()>0)
15.123 {
15.124 - if(treeItem->branchCount()>1)
15.125 + //QString oldsel=getSelectString();
15.126 + if ( relinkBranch (selbi,rootItem,-1) )
15.127 + saveState (
15.128 + selbi,QString("relink()"), //FIXME-1 add paramters
15.129 + selbi,"detach ()",
15.130 + QString("Detach %1").arg(getObjectName(selbi))
15.131 + );
15.132 + }
15.133 +}
15.134 +
15.135 +void VymModel::sortChildren()
15.136 +{
15.137 + BranchItem* selbi=getSelectedBranch();
15.138 + if (selbi)
15.139 + {
15.140 + if(selbi->branchCount()>1)
15.141 {
15.142 - saveStateChangingPart(bo,bo, "sortChildren ()",QString("Sort children of %1").arg(getObjectName(bo)));
15.143 - bo->sortChildren();
15.144 + saveStateChangingPart(
15.145 + selbi,selbi, "sortChildren ()",
15.146 + QString("Sort children of %1").arg(getObjectName(selbi)));
15.147 + selbi->sortChildren();
15.148 reposition();
15.149 emitShowSelection();
15.150 }
15.151 }
15.152 -*/
15.153 }
15.154
15.155 BranchItem* VymModel::createMapCenter()
15.156 @@ -2437,7 +2466,6 @@
15.157
15.158 TreeItem* VymModel::deleteItem (TreeItem *ti)
15.159 {
15.160 - cout << "VM::deleteItem "<<ti<<" "<<getSelectString(ti).toStdString()<<endl;
15.161 if (ti)
15.162 {
15.163 TreeItem *pi=ti->parent();
15.164 @@ -2457,6 +2485,29 @@
15.165 return NULL;
15.166 }
15.167
15.168 +void VymModel::clearItem (TreeItem *ti)
15.169 +{
15.170 + if (ti)
15.171 + {
15.172 + QModelIndex parentIndex=index(ti);
15.173 + if (!parentIndex.isValid()) return;
15.174 +
15.175 + int n=ti->childCount();
15.176 + if (n==0) return;
15.177 +
15.178 + emit (layoutAboutToBeChanged() );
15.179 +
15.180 + beginRemoveRows (parentIndex,0,n-1);
15.181 + removeRows (0,n,parentIndex);
15.182 + endRemoveRows();
15.183 + reposition();
15.184 +
15.185 + emit (layoutChanged() );
15.186 +
15.187 + }
15.188 + return ;
15.189 +}
15.190 +
15.191 bool VymModel::scrollBranch(BranchItem *bi)
15.192 {
15.193 if (bi)
15.194 @@ -2478,7 +2529,7 @@
15.195 );
15.196 emitDataHasChanged(bi);
15.197 emitSelectionChanged();
15.198 - mapScene->update(); //Needed for _quick_ update, even in 1.13.x //FIXME-3 force update via signal...
15.199 + mapScene->update(); //Needed for _quick_ update, even in 1.13.x
15.200 return true;
15.201 }
15.202 }
15.203 @@ -2492,7 +2543,9 @@
15.204 if (!bi->isScrolled()) return false;
15.205 if (bi->branchCount()==0) return false;
15.206 if (bi->depth()==0) return false;
15.207 -
15.208 + if (bi->toggleScroll())
15.209 + {
15.210 + reposition();
15.211 QString u,r;
15.212 u="scroll";
15.213 r="unscroll";
15.214 @@ -2503,13 +2556,12 @@
15.215 QString ("%1 ()").arg(r),
15.216 QString ("%1 %2").arg(r).arg(getObjectName(bi))
15.217 );
15.218 - bi->toggleScroll();
15.219 emitDataHasChanged(bi);
15.220 emitSelectionChanged();
15.221 -
15.222 - mapScene->update(); //Needed for _quick_ update, even in 1.13.x //FIXME-3 force update via signal...
15.223 + mapScene->update(); //Needed for _quick_ update, even in 1.13.x
15.224 return true;
15.225 }
15.226 + }
15.227 return false;
15.228 }
15.229
15.230 @@ -2523,24 +2575,34 @@
15.231 else
15.232 scrollBranch (bi);
15.233 }
15.234 - // saveState is called in above functions
15.235 + // saveState & reposition are called in above functions
15.236 }
15.237
15.238 -void VymModel::unscrollChildren() // FIXME-2 first, next moved to vymmodel
15.239 -
15.240 -{
15.241 -/*
15.242 - BranchObj *bo=getSelectedBranch();
15.243 - if (bo)
15.244 +void VymModel::unscrollChildren() //FIXME-2 does not update flag yet, possible segfault
15.245 +{
15.246 + BranchItem *selbi=getSelectedBranch();
15.247 + BranchItem *prev=NULL;
15.248 + BranchItem *cur=selbi;
15.249 + if (selbi)
15.250 {
15.251 - bo->first();
15.252 - while (bo)
15.253 + saveStateChangingPart(
15.254 + selbi,
15.255 + selbi,
15.256 + QString ("unscrollChildren ()"),
15.257 + QString ("unscroll all children of %1").arg(getObjectName(selbi))
15.258 + );
15.259 + while (cur)
15.260 {
15.261 - if (bo->isScrolled()) unscrollBranch (bo);
15.262 - bo=bo->next();
15.263 + if (cur->isScrolled())
15.264 + {
15.265 + cur->toggleScroll();
15.266 + emitDataHasChanged (cur);
15.267 }
15.268 + cur=next (cur,prev,selbi);
15.269 + }
15.270 + updateActions();
15.271 + reposition();
15.272 }
15.273 -*/
15.274 }
15.275
15.276 void VymModel::emitExpandAll()
15.277 @@ -2606,6 +2668,7 @@
15.278 QString("Set color of %1 to %2").arg(getObjectName(selbi)).arg(c.name())
15.279 );
15.280 selbi->setHeadingColor(c); // color branch
15.281 + mapScene->update();
15.282 }
15.283 }
15.284
15.285 @@ -2627,7 +2690,7 @@
15.286 cur->setHeadingColor(c); // color links, color children
15.287 cur=next (cur,prev,selbi);
15.288 }
15.289 -
15.290 + mapScene->update();
15.291 }
15.292 }
15.293
15.294 @@ -4057,82 +4120,16 @@
15.295 */
15.296 }
15.297
15.298 -void VymModel::reposition() //FIXME-3 VM should have no need to reposition, this is done in views???
15.299 +void VymModel::reposition() //FIXME-4 VM should have no need to reposition, but the views...
15.300 {
15.301 //cout << "VM::reposition blocked="<<blockReposition<<endl;
15.302 if (blockReposition) return;
15.303
15.304 for (int i=0;i<rootItem->branchCount(); i++)
15.305 rootItem->getBranchObjNum(i)->reposition(); // for positioning heading
15.306 - emitSelectionChanged();
15.307 + //emitSelectionChanged();
15.308 }
15.309
15.310 -/*
15.311 -QPolygonF VymModel::shape(BranchObj *bo) //FIXME-4
15.312 -{
15.313 - return QPolygonF ();
15.314 - // Creating (arbitrary) shapes
15.315 -
15.316 - QPolygonF p;
15.317 - QRectF rb=bo->getBBox();
15.318 - if (bo->getDepth()==0)
15.319 - {
15.320 - // Just take BBox of this mapCenter
15.321 - p<<rb.topLeft()<<rb.topRight()<<rb.bottomRight()<<rb.bottomLeft();
15.322 - return p;
15.323 - }
15.324 -
15.325 - // Take union of BBox and TotalBBox
15.326 -
15.327 - QRectF ra=bo->getTotalBBox();
15.328 - if (bo->getOrientation()==LinkableMapObj::LeftOfCenter)
15.329 - p <<ra.bottomLeft()
15.330 - <<ra.topLeft()
15.331 - <<QPointF (rb.topLeft().x(), ra.topLeft().y() )
15.332 - <<rb.topRight()
15.333 - <<rb.bottomRight()
15.334 - <<QPointF (rb.bottomLeft().x(), ra.bottomLeft().y() ) ;
15.335 - else
15.336 - p <<ra.bottomRight()
15.337 - <<ra.topRight()
15.338 - <<QPointF (rb.topRight().x(), ra.topRight().y() )
15.339 - <<rb.topLeft()
15.340 - <<rb.bottomLeft()
15.341 - <<QPointF (rb.bottomRight().x(), ra.bottomRight().y() ) ;
15.342 - return p;
15.343 -}
15.344 -*/
15.345 -
15.346 -/*
15.347 -void VymModel::moveAway(LinkableMapObj *lmo) //FIXME-5
15.348 -{
15.349 - // Autolayout:
15.350 - //
15.351 - // Move all branches and MapCenters away from lmo
15.352 - // to avoid collisions
15.353 -
15.354 - QPolygonF pA;
15.355 - QPolygonF pB;
15.356 -
15.357 - BranchObj *boA=(BranchObj*)lmo;
15.358 - BranchObj *boB;
15.359 - for (int i=0; i<rootItem->branchCount(); i++)
15.360 - {
15.361 - boB=rootItem->getBranchNum(i);
15.362 - pA=shape (boA);
15.363 - pB=shape (boB);
15.364 - PolygonCollisionResult r = PolygonCollision(pA, pB, QPoint(0,0));
15.365 - cout <<"------->"
15.366 - <<"="<<r.intersect
15.367 - <<" ("<<qPrintable(boA->getHeading() )<<")"
15.368 - <<" with ("<< qPrintable (boB->getHeading() )
15.369 - <<") willIntersect"
15.370 - <<r.willIntersect
15.371 - <<" minT="<<r.minTranslation<<endl<<endl;
15.372 - }
15.373 -}
15.374 -*/
15.375 -
15.376
15.377 void VymModel::setMapLinkStyle (const QString & s)
15.378 {
15.379 @@ -4274,7 +4271,7 @@
15.380 }
15.381 }
15.382
15.383 -void VymModel::setMapBackgroundImage (const QString &fn) //FIXME-2 missing savestate, move to ME
15.384 +void VymModel::setMapBackgroundImage (const QString &fn) //FIXME-3 missing savestate, move to ME
15.385 {
15.386 QColor oldcol=mapScene->backgroundBrush().color();
15.387 /*
15.388 @@ -4753,24 +4750,6 @@
15.389 }
15.390
15.391
15.392 -//bool VymModel::selectInt (LinkableMapObj *lmo) // FIXME-3 still needed?
15.393 -/*
15.394 -{
15.395 - if (selection.select(lmo))
15.396 - {
15.397 - //emitSelectionChanged();
15.398 - }
15.399 -}
15.400 -
15.401 -bool VymModel::selectInt (TreeItem *ti)
15.402 -{
15.403 - if (selection.select(lmo))
15.404 - {
15.405 - //emitSelectionChanged();
15.406 - }
15.407 -}
15.408 -*/
15.409 -
15.410 bool VymModel::selectFirstBranch()
15.411 {
15.412 TreeItem *ti=getSelectedBranch();
16.1 --- a/vymmodel.h Fri Sep 11 12:56:15 2009 +0000
16.2 +++ b/vymmodel.h Thu Sep 17 09:41:09 2009 +0000
16.3 @@ -190,12 +190,6 @@
16.4 const QString &comment,
16.5 TreeItem *saveSelection);
16.6 /*! Overloaded for convenience */
16.7 - void saveStateComplete(
16.8 - TreeItem *undoSelection,
16.9 - TreeItem* redoSelection,
16.10 - const QString &redoCommand,
16.11 - const QString &comment);
16.12 - /*! Overloaded for convenience */
16.13 void saveStateChangingPart(
16.14 TreeItem *undoSelection,
16.15 TreeItem* redoSelection,
16.16 @@ -290,8 +284,11 @@
16.17 void paste(); //!< Paste clipboard to branch and backup
16.18 void cut(); //!< Cut to clipboard (and copy)
16.19
16.20 - void moveUp(); //!< Move branch up
16.21 + bool moveUp(BranchItem *bi); //!< Move branch up without saving state
16.22 + void moveUp(); //!< Move branch up with saving state
16.23 + bool moveDown(BranchItem *bi); //!< Move branch down without saving state
16.24 void moveDown(); //!< Move branch down
16.25 + void detach(); //!< Detach branch and use as new mapcenter
16.26 void sortChildren(); //!< Sort children lexically
16.27
16.28 // The create methods are used to quickly parse a XML file
16.29 @@ -347,6 +344,7 @@
16.30 void deleteChildren(); //!< keep branch, but remove children
16.31
16.32 TreeItem* deleteItem(TreeItem*); //!< Delete item and return parent (if parent!= rootItem)
16.33 + void clearItem (TreeItem* ti); //!< Remove all children of TreeItem ti
16.34 bool scrollBranch(BranchItem *);
16.35 bool unscrollBranch(BranchItem *);
16.36 public:
16.37 @@ -441,9 +439,6 @@
16.38 void reposition(); //!< Call reposition for all MCOs
16.39 void setHideTmpMode (TreeItem::HideTmpMode mode);
16.40
16.41 - //FIXME-5 QPolygonF shape(BranchObj *bo); //!< Returns arbitrary shape of subtree
16.42 - //FIXME-5 void moveAway (LinkableMapObj *lmo);//!< Autolayout: Move all out of the way
16.43 -
16.44 void emitNoteHasChanged (TreeItem *ti);
16.45 void emitDataHasChanged (TreeItem *ti);
16.46
16.47 @@ -579,8 +574,6 @@
16.48 signals:
16.49 void showSelection();
16.50
16.51 -// bool selectInt(LinkableMapObj*); //FIXME-4
16.52 -
16.53 public:
16.54 bool selectFirstBranch();
16.55 bool selectLastBranch();
17.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
17.2 +++ b/xlinkitem.cpp Thu Sep 17 09:41:09 2009 +0000
17.3 @@ -0,0 +1,210 @@
17.4 +#include <QGraphicsScene>
17.5 +#include "xlinkitem.h"
17.6 +
17.7 +#include "branchitem.h"
17.8 +#include "linkablemapobj.h"
17.9 +#include "vymmodel.h"
17.10 +#include "xlinkobj.h"
17.11 +
17.12 +#include <iostream>
17.13 +using namespace std;
17.14 +
17.15 +/////////////////////////////////////////////////////////////////
17.16 +// XLinkItem
17.17 +/////////////////////////////////////////////////////////////////
17.18 +
17.19 +XLinkItem::XLinkItem (const QList<QVariant> &data, TreeItem *parent):MapItem (data,parent)
17.20 +
17.21 +{
17.22 + //cout << "Const XLinkItem () "<<this<<endl;
17.23 + init();
17.24 +}
17.25 +
17.26 +XLinkItem::~XLinkItem ()
17.27 +{
17.28 + cout << "Destr XLinkItem "<<this<<" lmo="<<lmo<<endl;
17.29 + if (lmo){cout <<" calling delete\n"; delete (lmo);}
17.30 + if (partnerXLink)
17.31 + {
17.32 + // Also delete partner
17.33 + cout << " deleting partner="<<partnerXLink<<endl;
17.34 + partnerXLink->partnerXLink=NULL; // avoid endless recusion
17.35 + model->deleteItem (partnerXLink);
17.36 + }
17.37 +}
17.38 +
17.39 +
17.40 +void XLinkItem::init ()
17.41 +{
17.42 + setType (XLink);
17.43 + beginBranch=NULL;
17.44 + endBranch=NULL;
17.45 + partnerXLink=NULL;
17.46 + isBeginXLink=true;
17.47 + xLinkState=XLinkItem::undefinedXLink;
17.48 +
17.49 + color=QColor (180,180,180);
17.50 + width=1;
17.51 +}
17.52 +
17.53 +void XLinkItem::setBegin (BranchItem *bi)
17.54 +{
17.55 + if (bi)
17.56 + {
17.57 + xLinkState=initXLink;
17.58 + beginBranch=bi;
17.59 + }
17.60 +}
17.61 +
17.62 +BranchItem* XLinkItem::getBegin ()
17.63 +{
17.64 + return beginBranch;
17.65 +}
17.66 +
17.67 +void XLinkItem::setEnd (BranchItem *bi)
17.68 +{
17.69 + if (bi)
17.70 + {
17.71 + xLinkState=initXLink;
17.72 + endBranch=bi;
17.73 + }
17.74 +}
17.75 +
17.76 +BranchItem* XLinkItem::getEnd()
17.77 +{
17.78 + return endBranch;
17.79 +}
17.80 +
17.81 +void XLinkItem::setWidth (int w)
17.82 +{
17.83 + if (isBeginXLink)
17.84 + {
17.85 + width=w;
17.86 + if (lmo) ((XLinkObj*)lmo)->updateXLink();
17.87 + return;
17.88 + }
17.89 + if (partnerXLink)
17.90 + partnerXLink->setWidth (w);
17.91 +}
17.92 +
17.93 +int XLinkItem::getWidth()
17.94 +{
17.95 + if (isBeginXLink) return width;
17.96 + if (partnerXLink)
17.97 + return partnerXLink->getWidth();
17.98 + else
17.99 + return -1;
17.100 +}
17.101 +
17.102 +void XLinkItem::setColor(QColor c)
17.103 +{
17.104 + if (isBeginXLink)
17.105 + {
17.106 + color=c;
17.107 + if (lmo) ((XLinkObj*)lmo)->updateXLink();
17.108 + return;
17.109 + }
17.110 + if (partnerXLink)
17.111 + partnerXLink->setColor (c);
17.112 +}
17.113 +
17.114 +QColor XLinkItem::getColor()
17.115 +{
17.116 + if (isBeginXLink) return color;
17.117 + if (partnerXLink)
17.118 + return partnerXLink->getColor();
17.119 + else
17.120 + return QColor();
17.121 +}
17.122 +
17.123 +void XLinkItem::setEnd (QPointF p)
17.124 +{
17.125 + if (lmo) ((XLinkObj*)lmo)->setEnd (p);
17.126 +}
17.127 +
17.128 +bool XLinkItem::activate ()
17.129 +{
17.130 + if (beginBranch && endBranch)
17.131 + {
17.132 + if (beginBranch==endBranch) return false;
17.133 +
17.134 + partnerXLink=model->createXLink (endBranch);
17.135 + partnerXLink->setBegin (beginBranch);
17.136 + partnerXLink->setEnd (endBranch);
17.137 + partnerXLink->partnerXLink=this;
17.138 + partnerXLink->isBeginXLink=false;
17.139 +
17.140 + xLinkState=activeXLink;
17.141 + partnerXLink->xLinkState=activeXLink;
17.142 + partnerXLink->setHeading ("xLink to: "+beginBranch->getHeading());
17.143 + setHeading ("xLink to: "+endBranch->getHeading());
17.144 +
17.145 + model->updateActions();
17.146 + return true;
17.147 + } else
17.148 + return false;
17.149 +}
17.150 +
17.151 +bool XLinkItem::isBegin()
17.152 +{
17.153 + return isBeginXLink;
17.154 +}
17.155 +
17.156 +void XLinkItem::updateXLink()
17.157 +{
17.158 + if(lmo && isBeginXLink)
17.159 + ((XLinkObj*)lmo)->updateXLink();
17.160 + else
17.161 + if (partnerXLink) partnerXLink->updateXLink();
17.162 +}
17.163 +
17.164 +void XLinkItem::updateVisibility()
17.165 +{
17.166 + if (lmo) lmo->updateVisibility();
17.167 +}
17.168 +
17.169 +BranchItem* XLinkItem::getPartnerBranch()
17.170 +{
17.171 + if (!beginBranch && !endBranch)
17.172 + return NULL;
17.173 + if (isBeginXLink)
17.174 + return endBranch;
17.175 + else
17.176 + return beginBranch;
17.177 +}
17.178 +
17.179 +
17.180 +XLinkItem* XLinkItem::getPartnerXLink()
17.181 +{
17.182 + return partnerXLink;
17.183 +}
17.184 +
17.185 +
17.186 +QString XLinkItem::saveToDir ()
17.187 +{
17.188 + QString s="";
17.189 + if (beginBranch && endBranch && xLinkState==activeXLink)
17.190 + {
17.191 + if (beginBranch==endBranch )
17.192 + qWarning ("XLI::saveToDir beginBranch==endBranch"); //FIXME-3 s=""
17.193 + else
17.194 + {
17.195 + QString colAttr=attribut ("color",color.name());
17.196 + QString widAttr=attribut ("width",QString().setNum(width,10));
17.197 + QString begSelAttr=attribut ("beginID",model->getSelectString(beginBranch));
17.198 + QString endSelAttr=attribut ("endID", model->getSelectString(endBranch));
17.199 + s=beginElement ("xlink", colAttr +widAttr +begSelAttr +endSelAttr);
17.200 +
17.201 + s+=endElement ("xlink");
17.202 + }
17.203 + }
17.204 + return s;
17.205 +}
17.206 +
17.207 +XLinkObj* XLinkItem::createMapObj(QGraphicsScene *scene)
17.208 +{
17.209 + XLinkObj* xlo=new XLinkObj (scene,this);
17.210 + lmo=(LinkableMapObj*)xlo;
17.211 + return xlo;
17.212 +}
17.213 +
18.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
18.2 +++ b/xlinkitem.h Thu Sep 17 09:41:09 2009 +0000
18.3 @@ -0,0 +1,48 @@
18.4 +#ifndef XLINKITEM_H
18.5 +#define XLINKITEM_H
18.6 +
18.7 +class BranchItem;
18.8 +class XLinkObj;
18.9 +class QGraphicsScene;
18.10 +
18.11 +#include "mapitem.h"
18.12 +
18.13 +/*! \brief xlinks are used to draw arbitrary connections between branches (BranchObj) in the map. */
18.14 +
18.15 +/////////////////////////////////////////////////////////////////////////////
18.16 +class XLinkItem:public MapItem {
18.17 +public:
18.18 + enum XLinkState {undefinedXLink,initXLink,activeXLink,deleteXLink};
18.19 +
18.20 + XLinkItem (const QList<QVariant> &data, TreeItem *parent=NULL);
18.21 + virtual ~XLinkItem ();
18.22 + virtual void init ();
18.23 + void setBegin (BranchItem*);
18.24 + BranchItem* getBegin();
18.25 + void setEnd (BranchItem*);
18.26 + void setEnd (QPointF);
18.27 + BranchItem* getEnd();
18.28 + void setColor(QColor);
18.29 + QColor getColor();
18.30 + void setWidth (int);
18.31 + int getWidth ();
18.32 + bool activate (); //! Creates a 2nd XLink (without a XLinkObj attached)
18.33 + bool isBegin(); //! true, if this is master xLink, which may have an XLinkObj attached
18.34 + void updateXLink();
18.35 + virtual void updateVisibility(); // FIXME-3 not really needed atm...
18.36 + BranchItem* getPartnerBranch ();
18.37 + XLinkItem *getPartnerXLink(); //! Partner XLink
18.38 + QString saveToDir ();
18.39 + virtual XLinkObj* createMapObj(QGraphicsScene *scene);
18.40 +
18.41 +private:
18.42 + XLinkState xLinkState; // init during drawing or active
18.43 + QColor color;
18.44 + int width;
18.45 + BranchItem *beginBranch;
18.46 + BranchItem *endBranch;
18.47 + XLinkItem *partnerXLink;
18.48 + bool isBeginXLink;
18.49 +};
18.50 +
18.51 +#endif
19.1 --- a/xml-vym.cpp Fri Sep 11 12:56:15 2009 +0000
19.2 +++ b/xml-vym.cpp Thu Sep 17 09:41:09 2009 +0000
19.3 @@ -14,8 +14,6 @@
19.4 #include "version.h"
19.5 #include "xlinkitem.h"
19.6
19.7 -static ImageItem *lastImageItem;
19.8 -static MapItem *lastMI;
19.9
19.10 extern Main *mainWindow;
19.11 extern Settings settings;
19.12 @@ -145,7 +143,8 @@
19.13 {
19.14 // Treat the found mapcenter as a branch
19.15 // in an existing map
19.16 - BranchItem *bi=model->getSelectedBranch(); //FIXME-2 selection is no longer used here...
19.17 + BranchItem *bi=model->getSelectedBranch();
19.18 + cout << "xml-vym bi="<<bi->getHeadingStd()<<" loadMode="<<loadMode<<endl;
19.19 if (bi)
19.20 {
19.21 lastBranch=bi;
19.22 @@ -153,7 +152,7 @@
19.23 {
19.24 lastBranch=model->createBranch(lastBranch);
19.25 } //else
19.26 - //lastBranch->clear(); //FIXME-2 clear not really defined!
19.27 + model->clearItem(lastBranch);
19.28 } else
19.29 // add mapCenter without parent
19.30 lastBranch=model->createMapCenter();
19.31 @@ -190,9 +189,9 @@
19.32 if (!readImageAttr(atts)) return false;
19.33 } else if ( (eName == "branch"||eName=="floatimage") && state == StateMap)
19.34 {
19.35 - // This is used in vymparts, which have no mapcenter!
19.36 + // This is used in vymparts, which have no mapcenter or for undo
19.37 isVymPart=true;
19.38 - TreeItem *ti=model->getSelectedItem(); //FIXME-3 selection is no longer used here...
19.39 + TreeItem *ti=model->getSelectedItem();
19.40 if (!ti)
19.41 {
19.42 // If a vym part is _loaded_ (not imported),
19.43 @@ -202,6 +201,7 @@
19.44 // FIXME-3 lmo=model->first()->getLMO();
19.45 // Do we really have no MCO when loading?????
19.46 cout << "xml-vym aborted\n";
19.47 + return false;
19.48 }
19.49 if (ti && ti->isBranchLikeType() )
19.50 {
19.51 @@ -212,9 +212,8 @@
19.52 if (loadMode==ImportAdd)
19.53 {
19.54 lastBranch=model->createBranch(lastBranch);
19.55 -
19.56 } else
19.57 - //FIXME-2 lastBranch->clear();
19.58 + model->clearItem (lastBranch);
19.59 readBranchAttr (atts);
19.60 } else if (eName=="floatimage")
19.61 {
20.1 --- a/xml-vym.h Fri Sep 11 12:56:15 2009 +0000
20.2 +++ b/xml-vym.h Thu Sep 17 09:41:09 2009 +0000
20.3 @@ -55,5 +55,6 @@
20.4
20.5 BranchItem* lastBranch;
20.6 ImageItem* lastImage;
20.7 + MapItem* lastMI;
20.8 };
20.9 #endif