static PyObject * openBrowserHTML(PyObject *self, PyObject *args) { const char* HtmlCode; const char* BaseUrl; const char* TabName = "Browser"; if (! PyArg_ParseTuple(args, "ss|s",&HtmlCode,&BaseUrl,&TabName)) return NULL; PY_TRY { QMdiSubWindow* browserView = 0; QMdiArea* mdiArea = Gui::getMainWindow()->findChild<QMdiArea*>(); QList<QMdiSubWindow *> mdiViews = mdiArea->subWindowList(); for (QList<QMdiSubWindow *>::iterator it = mdiViews.begin(); it != mdiViews.end(); ++it) { if (qobject_cast<WebGui::BrowserView*>((*it)->widget())) { browserView = *it; break; } } if (!browserView) { WebGui::BrowserView* pcBrowserView = 0; pcBrowserView = new WebGui::BrowserView(Gui::getMainWindow()); pcBrowserView->resize(400, 300); pcBrowserView->setHtml(QString::fromUtf8(HtmlCode),QUrl(QString::fromLatin1(BaseUrl)),QString::fromUtf8(TabName)); Gui::getMainWindow()->addWindow(pcBrowserView); } else { mdiArea->setActiveSubWindow(browserView); } } PY_CATCH; Py_Return; }
/** * Closes all windows that are editing the given block. */ void QC_DialogFactory::closeEditBlockWindow(RS_Block* block) { RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow"); QC_ApplicationWindow* appWindow = QC_ApplicationWindow::getAppWindow(); QMdiArea* mdiAreaCAD = appWindow->getMdiArea(); if (mdiAreaCAD!=NULL) { RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: workspace found"); QList<QMdiSubWindow*> windows = mdiAreaCAD->subWindowList(); for (int i = 0; i <windows.size(); ++i) { RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: window: %d", i); QC_MDIWindow* m = qobject_cast<QC_MDIWindow*>(windows.at(i)->widget()); if (m!=NULL) { RS_DEBUG->print( "QC_DialogFactory::closeEditBlockWindow: got mdi"); if (m->getDocument()==block) { RS_DEBUG->print( "QC_DialogFactory::closeEditBlockWindow: closing mdi"); //m->closeMDI(true, false); m->setAttribute(Qt::WA_DeleteOnClose);//RLZ: to ensure the window is deleted m->close(); } } } } QMdiSubWindow* subWindow=NULL; appWindow->slotWindowActivated(subWindow); RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: OK"); }
void RMdiChildQt::closeEvent(QCloseEvent* closeEvent) { // ask before closing (document was modified): if (documentInterface != NULL) { emit closeRequested(this); } else { closeEvent->accept(); return; } // close canceled: if (!closeEventAccepted) { closeEvent->ignore(); return; } if (documentInterface != NULL) { if (diLast==documentInterface) { diLast = NULL; } // 20130510: leads to empty layer list, etc when // closing background tab //RMainWindowQt::getMainWindow()->notifyListeners(true); // make sure rulers don't try to access view anymore: QList<RRulerQt*> rulers = findChildren<RRulerQt*>(); for (int i=0; i<rulers.size(); i++) { rulers.at(i)->setGraphicsView(NULL); } // give current action a chance to clean up: RAction* action = documentInterface->getCurrentAction(); if (action!=NULL) { action->suspendEvent(); } RDocumentInterface* di = documentInterface; documentInterface=NULL; delete di; di = NULL; } closeEvent->accept(); #ifndef Q_OS_WIN32 // part of the workaround for QMdiArea bug // with events filtering through all stacked windows: QMdiArea* mdiArea = RMainWindowQt::getMainWindow()->getMdiArea(); QMdiSubWindow* child = mdiArea->currentSubWindow(); QList<QMdiSubWindow *> children = mdiArea->subWindowList(QMdiArea::ActivationHistoryOrder); int index = children.indexOf(child); int nextIndex = children.length()-2; nextIndex = nextIndex%children.length(); if (nextIndex!=index) { children.at(nextIndex)->showMaximized(); mdiArea->setActiveSubWindow(children.at(nextIndex)); } #endif }
/** * Closes all windows that are editing the given block. */ void QC_DialogFactory::closeEditBlockWindow(RS_Block* block) { RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow"); QC_ApplicationWindow* appWindow = QC_ApplicationWindow::getAppWindow(); QMdiArea* mdiAreaCAD = appWindow->getMdiArea(); if (mdiAreaCAD==NULL) return; //should not happen RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: workspace found"); for (int i = 0; i <mdiAreaCAD->subWindowList().size(); ) { RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: window: %d", i); QC_MDIWindow* m = qobject_cast<QC_MDIWindow*>(mdiAreaCAD->subWindowList().at(i)); if(m==NULL) { mdiAreaCAD->removeSubWindow(mdiAreaCAD->subWindowList().at(i)); continue; } RS_DEBUG->print( "QC_DialogFactory::closeEditBlockWindow: got mdi"); if (m->getDocument()==block) { RS_DEBUG->print( "QC_DialogFactory::closeEditBlockWindow: closing mdi"); appWindow->slotFilePrintPreview(false); m->closeMDI(true, false); mdiAreaCAD->removeSubWindow(mdiAreaCAD->subWindowList().at(i)); continue; // m->setAttribute(Qt::WA_DeleteOnClose);//RLZ: to ensure the window is deleted // m->close(); } i++; } //activate a subWindow, bug#3486357 QMdiSubWindow* subWindow=mdiAreaCAD->currentSubWindow(); appWindow->slotWindowActivated(subWindow); RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: OK"); }