# HG changeset patch # User insilmaril # Date 1183110233 0 # Node ID be24af55da408d6e6b728f94f701eda25b36007d # Parent 28be7520cb2116b872285d58747ce8c86ed74041 1.8.76 - Extended fileformat to ease tomboy export to vym diff -r 28be7520cb21 -r be24af55da40 linkablemapobj.cpp --- a/linkablemapobj.cpp Fri Jun 29 09:43:53 2007 +0000 +++ b/linkablemapobj.cpp Fri Jun 29 09:43:53 2007 +0000 @@ -91,6 +91,9 @@ relPos=QPointF(0,0); useRelPos=false; useOrientation=true; + + // Reset ID + id=""; } void LinkableMapObj::copy (LinkableMapObj* other) @@ -294,6 +297,15 @@ return linkpos; } +void LinkableMapObj::setID (const QString &s) +{ + id=s; +} + +QString LinkableMapObj::getID() +{ + return id; +} void LinkableMapObj::setLinkColor() { diff -r 28be7520cb21 -r be24af55da40 linkablemapobj.h --- a/linkablemapobj.h Fri Jun 29 09:43:53 2007 +0000 +++ b/linkablemapobj.h Fri Jun 29 09:43:53 2007 +0000 @@ -77,6 +77,9 @@ void setLinkPos (Position); Position getLinkPos (); + virtual void setID (const QString &s); + virtual QString getID (); + virtual void setLinkColor(); // sets color according to colorhint, overloaded virtual void setLinkColor(QColor); QColor getLinkColor(); @@ -157,5 +160,7 @@ //AnimPoint relPos; // position relative to childPos of parent bool useRelPos; bool useOrientation; + + QString id; // id set during load/save currently used for xLinks }; #endif diff -r 28be7520cb21 -r be24af55da40 mainwindow.cpp --- a/mainwindow.cpp Fri Jun 29 09:43:53 2007 +0000 +++ b/mainwindow.cpp Fri Jun 29 09:43:53 2007 +0000 @@ -2744,13 +2744,13 @@ { bool ok; QPoint p; - QString s=currentMapEditor()->getHeading(ok,p); + QString s=me->getHeading(ok,p); if (ok) { me->setStateEditHeading (true); #if defined(Q_OS_MACX) - p=currentMapEditor()->mapTo (this,p); + p=me->mapToGlobal (p); QDialog *d =new QDialog(NULL); QLineEdit *le=new QLineEdit (d); d->setWindowFlags (Qt::FramelessWindowHint); @@ -2761,12 +2761,12 @@ connect (le, SIGNAL (returnPressed()), d, SLOT (accept())); d->activateWindow(); d->exec(); - currentMapEditor()->setHeading (le->text()); + me->setHeading (le->text()); delete (le); delete (d); editHeadingFinished(); #else - p=currentMapEditor()->mapTo (this,p); + p=me->mapTo (this,p); lineedit->setGeometry(p.x(),p.y(),230,25); lineedit->setText(s); lineedit->setCursorPosition(1); @@ -3210,7 +3210,7 @@ void Main::networkConnect() { MapEditor *me=currentMapEditor(); - if (me) me->newServer(); + if (me) me->connectToServer(); } bool Main::settingsPDF() @@ -3271,7 +3271,7 @@ void Main::settingsAutosaveToggle() { - settings.setValue ("/mapeditor/autosave/used",actionSettingsAutosaveToggle->isOn() ); + settings.setValue ("/mapeditor/autosave/use",actionSettingsAutosaveToggle->isOn() ); } void Main::settingsAutosaveTime() @@ -3647,7 +3647,7 @@ void Main::testFunction2() { if (!currentMapEditor()) return; - currentMapEditor()->testFunction2(); + currentMapEditor()->connectToServer(); } void Main::testCommand() diff -r 28be7520cb21 -r be24af55da40 mapeditor.cpp --- a/mapeditor.cpp Fri Jun 29 09:43:53 2007 +0000 +++ b/mapeditor.cpp Fri Jun 29 09:43:53 2007 +0000 @@ -149,6 +149,9 @@ // autosave autosaveTimer=new QTimer (this); connect(autosaveTimer, SIGNAL(timeout()), this, SLOT(autosave())); + + // Network + netstate=Offline; } MapEditor::~MapEditor() @@ -1549,8 +1552,6 @@ int MapEditor::save (const SaveMode &savemode) { - int returnCode=0; - // Create mapName and fileDir makeSubDirs (fileDir); QString fname; @@ -1572,20 +1573,17 @@ saveFloatImage(); else saveFile=saveToDir (fileDir,mapName+"-",true,QPointF(),xelection.getBranch()); + return 0; } if (!saveStringToDisk(fileDir+fname,saveFile)) return 1; - if (returnCode==0) - { - mapChanged=false; - mapUnsaved=false; - autosaveTimer->stop(); - updateActions(); - } - - return returnCode; + mapChanged=false; + mapUnsaved=false; + autosaveTimer->stop(); + updateActions(); + return 0; } void MapEditor::setZipped (bool z) @@ -2448,6 +2446,15 @@ QString ("Add new branch to %1").arg(getName(bo))); mapCenter->reposition(); + // In Network mode, the client needs to know where the new branch is, + // so we have to pass on this information via saveState. + // TODO: Get rid of this positioning workaround + QString ps=qpointfToString (newbo->getAbsPos()); + saveState( + newbo, "move "+ps, + newbo, "move "+ps, + QString("Move %1 to %2").arg(getName(newbo)).arg(ps)); + xelection.update(); } } @@ -4689,7 +4696,7 @@ event->acceptProposedAction(); } -void MapEditor::dragMoveEvent(QDragMoveEvent *event) +void MapEditor::dragMoveEvent(QDragMoveEvent *) { } @@ -4776,33 +4783,46 @@ void MapEditor::sendSelection() { - sendData (xelection.getSelectString() ); + if (netstate!=Server) return; + sendData (QString("select (\"%1\")").arg(xelection.getSelectString()) ); } void MapEditor::newServer() { + port=54321; + sendCounter=0; tcpServer = new QTcpServer(this); - if (!tcpServer->listen(QHostAddress::Any,54321)) { + if (!tcpServer->listen(QHostAddress::Any,port)) { QMessageBox::critical(this, "vym server", QString("Unable to start the server: %1.").arg(tcpServer->errorString())); close(); return; } connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newClient())); + netstate=Server; if (debug) cout<<"Server is running on port "<serverPort()<abort(); + clientSocket->connectToHost(server ,port); + connect(clientSocket, SIGNAL(readyRead()), this, SLOT(readData())); + connect(clientSocket, SIGNAL(error(QAbstractSocket::SocketError)), + this, SLOT(displayNetworkError(QAbstractSocket::SocketError))); + netstate=Client; + cout<<"connected to "<seek(0); - out << (quint16)(block.size() - sizeof(quint16)); - QTcpSocket *newClient = tcpServer->nextPendingConnection(); connect(newClient, SIGNAL(disconnected()), newClient, SLOT(deleteLater())); @@ -4810,9 +4830,6 @@ cout <<"ME::newClient at "<peerAddress().toString().ascii()<write(block); - //newClient->disconnectFromHost(); } @@ -4826,19 +4843,81 @@ // Reserve some space for blocksize out << (quint16)0; + // Write sendCounter + out << sendCounter++; + // Write data out << s; // Go back and write blocksize so far out.device()->seek(0); - out << (quint16)(block.size() - sizeof(quint16)); + quint16 bs=(quint16)(block.size() - 2*sizeof(quint16)); + out << bs; + + cout << "ME::sendData bs="<peerAddress().toString().ascii()<peerAddress().toString().ascii()<write (block); } } + +void MapEditor::readData () +{ + cout <<"readData bytesAvail="<bytesAvailable()<> blockSize; + in >> recCounter; + + char *sp; + uint l; + in.readBytes (sp,l); + cout << " sp="<errorString())); + } +} + void MapEditor::autosave() { // Disable autosave, while we have gone back in history diff -r 28be7520cb21 -r be24af55da40 mapeditor.h --- a/mapeditor.h Fri Jun 29 09:43:53 2007 +0000 +++ b/mapeditor.h Fri Jun 29 09:43:53 2007 +0000 @@ -29,6 +29,15 @@ Idle, //!< Idle, waiting for user event EditHeading //!< Editing heading (dont't select another branch now) }; + /*! \brief Networking states + + In Network modus we want to switch of saveState, autosave, ... + */ + enum NetState { + Offline, //!< Offline + Client, //!< I am the client and connected to server + Server //!< I am the server + }; MapEditor(QWidget* parent=0); ~MapEditor(); MapCenterObj* getMapCenter(); //!< Return center of map @@ -336,10 +345,14 @@ public: void newServer(); + void connectToServer(); private slots: void newClient(); void sendData(const QString &s); + void readData(); + void displayNetworkError (QAbstractSocket::SocketError); + void autosave (); private: @@ -410,8 +423,16 @@ QPoint exportOffset; // set before export, used in save BranchObj::HideTmpMode hidemode; // true while exporting to hide some stuff + NetState netstate; // offline, client, server QTcpServer *tcpServer; // Act as server in conference mode (experimental) - QList clientList; + QList clientList; // List of connected clients + quint16 sendCounter; // Increased with every sent command + + QTcpSocket *clientSocket; // socket of this client + QString server; // server address of this client + int port; // server port of this client + void displayClientError(QAbstractSocket::SocketError socketError); + int timerId; // animation timer QList animObjList;// list with animated objects diff -r 28be7520cb21 -r be24af55da40 parser.cpp --- a/parser.cpp Fri Jun 29 09:43:53 2007 +0000 +++ b/parser.cpp Fri Jun 29 09:43:53 2007 +0000 @@ -31,6 +31,8 @@ QRegExp re; int pos; + cout << "parseAtom s="< #define __VYM_NAME "VYM" -#define __VYM_VERSION "1.8.75" -#define __VYM_CODENAME "Codename: 1.9.0-beta-1" -//#define __VYM_CODENAME "Codename: development version" -#define __VYM_BUILD_DATE "June 22, 2007" +#define __VYM_VERSION "1.8.76" +//#define __VYM_CODENAME "Codename: 1.9.0-beta-1" +#define __VYM_CODENAME "Codename: development version" +#define __VYM_BUILD_DATE "June 29, 2007" bool checkVersion(const QString &);