![]() |
TinkerCell Core 1.0
TinkerCell's Core library providing all basic functionalities
|
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