TinkerCell Core 1.0
TinkerCell's Core library providing all basic functionalities
NetworkWindow.cpp
Go to the documentation of this file.
00001 #include <QRegExp>
00002 #include <QVBoxLayout>
00003 #include "GraphicsScene.h"
00004 #include "TextEditor.h"
00005 #include "NetworkHandle.h"
00006 #include "MainWindow.h"
00007 #include "GraphicsView.h"
00008 #include "ConsoleWindow.h"
00009 #include "NetworkWindow.h"
00010 
00011 namespace Tinkercell
00012 {
00013         void NetworkWindow::connectToMainWindow()
00014         {
00015                 if (!network) return;
00016                 MainWindow * main = network->mainWindow;
00017                 
00018                 if (!main) return;
00019                 
00020                 if (scene)
00021                 {
00022                         scene->contextItemsMenu = &(main->contextItemsMenu);
00023                         
00024                         scene->contextScreenMenu = &(main->contextScreenMenu);
00025                 
00026                         connect(scene,SIGNAL(itemsSelected(GraphicsScene*,const QList<QGraphicsItem*>&, QPointF, Qt::KeyboardModifiers)),
00027                                 main, SIGNAL(itemsSelected(GraphicsScene*,const QList<QGraphicsItem*>&, QPointF, Qt::KeyboardModifiers)));
00028 
00029                         connect(scene,SIGNAL(mousePressed(GraphicsScene*,QPointF, Qt::MouseButton, Qt::KeyboardModifiers)),
00030                                 main ,SIGNAL(mousePressed(GraphicsScene*,QPointF, Qt::MouseButton, Qt::KeyboardModifiers)));
00031 
00032                         connect(scene,SIGNAL(mouseReleased(GraphicsScene*,QPointF, Qt::MouseButton, Qt::KeyboardModifiers)),
00033                                 main ,SIGNAL(mouseReleased(GraphicsScene*,QPointF, Qt::MouseButton, Qt::KeyboardModifiers)));
00034 
00035                         connect(scene,SIGNAL(mouseDoubleClicked (GraphicsScene*, QPointF, QGraphicsItem *, Qt::MouseButton, Qt::KeyboardModifiers)),
00036                                 main ,SIGNAL(mouseDoubleClicked (GraphicsScene*, QPointF, QGraphicsItem *, Qt::MouseButton, Qt::KeyboardModifiers)));
00037 
00038                         connect(scene,SIGNAL(mouseDragged(GraphicsScene*,QPointF, QPointF, Qt::MouseButton, Qt::KeyboardModifiers)),
00039                                 main ,SIGNAL(mouseDragged(GraphicsScene*,QPointF, QPointF, Qt::MouseButton, Qt::KeyboardModifiers)));
00040 
00041                         connect(scene,SIGNAL(itemsMoved(GraphicsScene*,const QList<QGraphicsItem*>&, const QList<QPointF>& )),
00042                                 main ,SIGNAL(itemsMoved(GraphicsScene*,const QList<QGraphicsItem*>&, const QList<QPointF>& )));
00043 
00044                         connect(scene,SIGNAL(mouseMoved(GraphicsScene*,QGraphicsItem*, QPointF, Qt::MouseButton, Qt::KeyboardModifiers,QList<QGraphicsItem*>&)),
00045                                 main ,SIGNAL(mouseMoved(GraphicsScene*,QGraphicsItem*, QPointF, Qt::MouseButton, Qt::KeyboardModifiers,QList<QGraphicsItem*>&)));
00046 
00047                         connect(scene,SIGNAL(sceneRightClick(GraphicsScene*,QGraphicsItem*, QPointF, Qt::KeyboardModifiers)),
00048                                 main ,SIGNAL(sceneRightClick(GraphicsScene*,QGraphicsItem*, QPointF, Qt::KeyboardModifiers)));
00049 
00050                         connect(scene,SIGNAL(keyPressed(GraphicsScene*,QKeyEvent *)),
00051                                 main ,SIGNAL(keyPressed(GraphicsScene*,QKeyEvent *)));
00052 
00053                         connect(scene,SIGNAL(keyReleased(GraphicsScene*,QKeyEvent *)),
00054                                 main ,SIGNAL(keyReleased(GraphicsScene*,QKeyEvent *)));
00055 
00056                         connect(scene,SIGNAL(itemsInserted(GraphicsScene *, const QList<QGraphicsItem*>&, const QList<ItemHandle*>&,GraphicsScene::InsertType)),
00057                                 main ,SIGNAL(itemsInserted(GraphicsScene *, const QList<QGraphicsItem*>&, const QList<ItemHandle*>&,GraphicsScene::InsertType)));
00058 
00059                         connect(scene,SIGNAL(itemsAboutToBeInserted(GraphicsScene *, QList<QGraphicsItem*>&, QList<ItemHandle*>&,QList<QUndoCommand*>&, GraphicsScene::InsertType)),
00060                                 main ,SIGNAL(itemsAboutToBeInserted(GraphicsScene *, QList<QGraphicsItem*>&, QList<ItemHandle*>&,QList<QUndoCommand*>&, GraphicsScene::InsertType)));
00061 
00062                         connect(scene,SIGNAL(itemsAboutToBeRemoved(GraphicsScene *, QList<QGraphicsItem*>&, QList<ItemHandle*>&,QList<QUndoCommand*>&)),
00063                                 main ,SIGNAL(itemsAboutToBeRemoved(GraphicsScene *, QList<QGraphicsItem*>&, QList<ItemHandle*>&,QList<QUndoCommand*>&)));
00064                                 
00065                         connect(scene,SIGNAL(itemsAboutToBeMoved(GraphicsScene * , QList<QGraphicsItem*>& , QList<QPointF>& , QList<QUndoCommand*>&)),
00066                                 main ,SIGNAL(itemsAboutToBeMoved(GraphicsScene * , QList<QGraphicsItem*>& , QList<QPointF>& , QList<QUndoCommand*>&)));
00067 
00068                         connect(scene,SIGNAL(itemsRemoved(GraphicsScene *, const QList<QGraphicsItem*>&, const QList<ItemHandle*>&)),
00069                                 main ,SIGNAL(itemsRemoved(GraphicsScene *, const QList<QGraphicsItem*>&, const QList<ItemHandle*>&)));
00070 
00071                         connect(scene,SIGNAL(colorChanged(GraphicsScene*,const QList<QGraphicsItem*>&)),
00072                                 main ,SIGNAL(colorChanged(GraphicsScene*,const QList<QGraphicsItem*>&)));
00073 
00074                         connect(scene,SIGNAL(parentItemChanged(GraphicsScene*,const QList<QGraphicsItem*>&,const QList<QGraphicsItem*>&)),
00075                                 main ,SIGNAL(parentItemChanged(GraphicsScene*,const QList<QGraphicsItem*>&,const QList<QGraphicsItem*>&)));
00076 
00077                         connect(network,SIGNAL(handlesChanged(NetworkHandle*, const QList<QGraphicsItem*>&, const QList<ItemHandle*>&)),
00078                                 main ,SIGNAL(handlesChanged(NetworkHandle*, const QList<QGraphicsItem*>&, const QList<ItemHandle*>&)));
00079 
00080                         connect(scene,SIGNAL(escapeSignal(const QWidget*)),
00081                                 main ,SIGNAL(escapeSignal(const QWidget*)));
00082 
00083                         connect(scene,SIGNAL(copyItems(GraphicsScene*, QList<QGraphicsItem*>& , QList<ItemHandle*>&)),
00084                                 main, SIGNAL(copyItems(GraphicsScene*, QList<QGraphicsItem*>& , QList<ItemHandle*>&)));
00085                 }
00086 
00087                 if (editor)
00088                 {
00089                         editor->contextEditorMenu = &(main->contextEditorMenu);
00090 
00091                         editor->contextSelectionMenu = &(main->contextSelectionMenu);
00092                 
00093                         connect(editor,SIGNAL(itemsInserted(NetworkHandle *, const QList<ItemHandle*>&)),
00094                                 main,SIGNAL(itemsInserted(NetworkHandle *, const QList<ItemHandle*>&)));
00095 
00096                         connect(editor,SIGNAL(itemsRemoved(NetworkHandle * , const QList<ItemHandle*>& )),
00097                                 main,SIGNAL(itemsRemoved(NetworkHandle * , const QList<ItemHandle*>&)));
00098 
00099                         connect(editor,SIGNAL(textChanged(TextEditor *, const QString&, const QString&, const QString&)),
00100                                 main,SIGNAL(textChanged(TextEditor *, const QString&, const QString&, const QString&)));
00101 
00102                         connect(editor,SIGNAL(lineChanged(TextEditor *, int, const QString&)),
00103                                 main,SIGNAL(lineChanged(TextEditor *, int, const QString&)));
00104                 }
00105         }
00106         
00107         NetworkWindow::NetworkWindow(NetworkHandle * network, GraphicsScene * scene)
00108                 : QMainWindow(network->mainWindow), network(network), scene(scene), editor(0), handle(0)
00109         {
00110                 if (!network) return;
00111                 
00112                 if (scene)
00113                 {
00114                         scene->networkWindow = this;
00115                         scene->network = network;
00116                         
00117                         GraphicsView * view = new GraphicsView(this);
00118                         connect(view,SIGNAL(itemsDropped(GraphicsScene*, const QString&, QPointF)),network->mainWindow,SIGNAL(itemsDropped(GraphicsScene*, const QString&, QPointF)));
00119                         setCentralWidget(view);
00120                         //setAttribute(Qt::WA_DeleteOnClose);
00121                 }
00122 
00123                 //if (!network->networkWindows.contains(this))
00124                         //network->networkWindows += this;
00125 
00126                 MainWindow * main = network->mainWindow;
00127                 setVisible(false);
00128                 setWindowFlags(Qt::Dialog);
00129                 
00130                 if (main)
00131                 {
00132                         int w = main->width(), h = main->height();
00133                         setGeometry(w * 3/8, h * 3/8, w * 3/4, h * 3/4);
00134                         connect(this,SIGNAL(networkClosing(NetworkHandle *, bool*)),main,SIGNAL(networkClosing(NetworkHandle *, bool*)));
00135                         connect(this,SIGNAL(networkClosed(NetworkHandle *)),main,SIGNAL(networkClosed(NetworkHandle *)));
00136                         connectToMainWindow();
00137                         if (!network->networkWindows.isEmpty() && network->networkWindows[0])
00138                                 setWindowTitle(network->networkWindows[0]->windowTitle());
00139                         else
00140                                 setWindowTitle(tr("network ") + QString::number(main->allNetworks.size()));
00141                         //main->setCurrentWindow(this);
00142                 }
00143 
00144                 setFocusPolicy(Qt::StrongFocus);
00145                 setWindowIcon(QIcon(tr(":/images/newscene.png")));
00146         }
00147         
00148         NetworkWindow::NetworkWindow(NetworkHandle * network, TextEditor * editor)
00149                 : QMainWindow(network->mainWindow), network(network), scene(0), editor(editor), handle(0)
00150         {
00151                 if (!network) return;
00152                 
00153                 if (editor)
00154                 {
00155                         editor->networkWindow = this;
00156                         editor->network = network;
00157                         setCentralWidget(editor);
00158                         //setAttribute(Qt::WA_DeleteOnClose);
00159                 }
00160 
00161                 MainWindow * main = network->mainWindow;
00162                 
00163                 setVisible(false);
00164                 setWindowFlags(Qt::Dialog);
00165                 
00166                 if (main)
00167                 {
00168                         int w = main->width(), h = main->height();
00169                         setGeometry(w * 3/8, h * 3/8, w * 3/4, h * 3/4);
00170                         connect(this,SIGNAL(networkClosing(NetworkHandle *, bool*)),main,SIGNAL(networkClosing(NetworkHandle *, bool*)));
00171                         connect(this,SIGNAL(networkClosed(NetworkHandle *)),main,SIGNAL(networkClosed(NetworkHandle *)));
00172                         connectToMainWindow();
00173                         if (!network->networkWindows.isEmpty() && network->networkWindows[0])
00174                                 setWindowTitle(network->networkWindows[0]->windowTitle());
00175                         else
00176                                 setWindowTitle(tr("network ") + QString::number(main->allNetworks.size()));
00177                         //main->setCurrentWindow(this);
00178                 }
00179 
00180                 setFocusPolicy(Qt::StrongFocus);
00181                 setWindowIcon(QIcon(tr(":/images/newtext.png")));
00182         }
00183 
00184 
00185         void NetworkWindow::closeEvent(QCloseEvent * event)
00186         {
00187                 if (network && network->networkWindows.contains(this))
00188                 {
00189                         if (network->networkWindows.size() > 0 && network->networkWindows[0] == this)
00190                         {
00191                                 bool b = true;
00192                 
00193                                 if (network)
00194                                         emit networkClosing(network,&b);
00195                 
00196                                 if (b)
00197                                 {
00198                                         if (network->mainWindow && network->mainWindow->currentNetworkWindow == this)
00199                                                 network->mainWindow->currentNetworkWindow = 0;
00200                                         emit networkClosed(network);
00201                                         event->accept();
00202                                         network->close();
00203                                         setParent(network->mainWindow);
00204                                         setWindowFlags(Qt::Dialog);
00205                                         hide();
00206                                         event->accept();
00207                                 }
00208                         }
00209                 }
00210         }
00211         
00212         NetworkWindow::~NetworkWindow()
00213         {
00214                 if (scene)
00215                 {
00216                         //scene->deselect();
00217                         //delete scene;
00218                         //MainWindow::invalidPointers[ (void*)scene ] = true;
00219                         scene = 0;
00220                 }
00221                 
00222                 if (network && network->networkWindows.contains(this))
00223                 {
00224                         network->networkWindows.removeAll(this);
00225                         if (network->mainWindow && network->mainWindow->currentNetworkWindow == this)
00226                                 network->mainWindow->currentNetworkWindow = 0;
00227                 }
00228         }
00229         
00230         void NetworkWindow::focusInEvent ( QFocusEvent * )
00231         {
00232                 if (network && network->mainWindow && network->mainWindow->currentNetworkWindow != this)
00233                         network->mainWindow->setCurrentWindow(this);
00234         }
00235 
00236         void NetworkWindow::resizeEvent (QResizeEvent * event)
00237         {
00238                 if (network && network->mainWindow && windowState() == Qt::WindowMinimized)
00239                 {
00240                         setWindowState(Qt::WindowNoState);
00241                         popIn();
00242                 }
00243                 else
00244                         QWidget::resizeEvent(event);
00245         }
00246 
00247         void NetworkWindow::setAsCurrentWindow()
00248         {
00249                 if (network && network->mainWindow && network->mainWindow->currentNetworkWindow != this)
00250                         network->mainWindow->setCurrentWindow(this);
00251         }
00252 
00253         void NetworkWindow::popOut()
00254         {
00255                 if (network && network->mainWindow)
00256                 {
00257                         network->mainWindow->popOut(this);
00258                 }
00259         }
00260 
00261         void NetworkWindow::popIn()
00262         {
00263                 if (network && network->mainWindow)
00264                         network->mainWindow->popIn(this);
00265         }
00266 
00267         void NetworkWindow::changeEvent ( QEvent * event )
00268         {
00269                 if (network && network->mainWindow && windowState() == Qt::WindowMinimized)
00270                 {
00271                         setWindowState(Qt::WindowNoState);
00272                         popIn();
00273                 }
00274                 else
00275                         QWidget::changeEvent(event);
00276         }
00277         
00278         GraphicsScene * NetworkWindow::newScene()
00279         {
00280                 if (!network) return 0;
00281                 QList<QGraphicsView*> views;
00282                 
00283                 if (editor)
00284                 {
00285                         editor->remove(editor->items());
00286                         editor = 0;
00287                 }
00288                 
00289                 if (scene)
00290                 {
00291                         scene->remove(tr("Remove old network"),scene->items());
00292                 }
00293                 else
00294                 {
00295                         scene = new GraphicsScene(network);
00296                         scene->networkWindow = this;
00297                         scene->network = network;               
00298                         GraphicsView * view = new GraphicsView(this);
00299                         connect(view,SIGNAL(itemsDropped(GraphicsScene*, const QString&, QPointF)),network->mainWindow,SIGNAL(itemsDropped(GraphicsScene*, const QString&, QPointF)));
00300                         setCentralWidget(view);
00301                         connectToMainWindow();
00302                 }
00303                 
00304                 return scene;
00305         }
00306 
00307         TextEditor * NetworkWindow::newTextEditor()
00308         {
00309                 if (!network) return 0;
00310                 
00311                 if (scene)
00312                 {
00313                         scene->remove(tr("Remove old network"),scene->items());
00314                         scene = 0;
00315                 }
00316                 
00317                 if (editor)
00318                 {
00319                         editor->remove(editor->items());
00320                 }
00321                 else
00322                 {
00323                         editor = new TextEditor(network);
00324                         editor->networkWindow = this;
00325                         editor->network = network;
00326                         
00327                         setCentralWidget(editor);               
00328                         connectToMainWindow();
00329                 }
00330                 
00331                 return editor;
00332         }
00333         
00334         void NetworkWindow::setWindowTitle(const QString& text)
00335         {
00336                 QMainWindow::setWindowTitle(text);
00337                 if (network->mainWindow->tabWidget)
00338                 {
00339                         int k = network->mainWindow->tabWidget->indexOf(this);
00340                         if (k >= 0)
00341                                 network->mainWindow->tabWidget->setTabText(k, text);
00342                 }
00343         }
00344         
00345         void NetworkWindow::setFileName(const QString& text)
00346         {
00347                 filename = text;
00348 
00349                 QRegExp regex(tr("([^\\\\/]+$)"));
00350                 if (network && network->mainWindow && (regex.indexIn(filename) >= 0))
00351                 {
00352                         //if (network->console())
00353                                 //network->console()->message(filename);
00354                         setWindowTitle(regex.cap(1));
00355                 }
00356         }
00357 
00358         /*bool NetworkWindow::winEvent ( MSG * m, long * result )
00359         {
00360                 if (mainWindow && m->message == WM_SIZE && m->wParam == SIZE_MINIMIZED)
00361                 {
00362                         popIn();
00363                 }
00364                 return QWidget::winEvent(m,result);
00365         }*/
00366         
00367 }
00368 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines