static void signalHandler( QT_SIGNAL_ARGS ) { QFile f( QDir::homeDirPath() + "/.designerargs" ); f.open( IO_ReadOnly ); QString args; f.readLine( args, f.size() ); QStringList lst = QStringList::split( " ", args ); for ( QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) { QString arg = (*it).stripWhiteSpace(); if ( arg[0] != '-' ) { QObjectList* l = MainWindow::self->queryList( "FormWindow" ); FormWindow* fw = (FormWindow*) l->first(); #if 0 // ### what's this dead code for? FormWindow* totop; #endif bool haveit = FALSE; while ( fw ) { haveit = haveit || fw->fileName() == arg; #if 0 // ### what's this dead code for? if ( haveit ) totop = fw; #endif fw = (FormWindow*) l->next(); } if ( !haveit ) MainWindow::self->openFormWindow( arg ); } } MainWindow::self->raise(); MainWindow::self->setActiveWindow(); }
DomUI *FormWindowDnDItem::domUi() const { DomUI *result = QDesignerDnDItem::domUi(); if (result != 0) return result; FormWindow *form = qobject_cast<FormWindow*>(source()); if (widget() == 0 || form == 0) return 0; QtResourceModel *resourceModel = form->core()->resourceModel(); QtResourceSet *currentResourceSet = resourceModel->currentResourceSet(); /* Short: * We need to activate the original resourceSet associated with a form * to properly generate the dom resource includes. * Long: * widgetToDom() calls copy() on QDesignerResource. It generates the * Dom structure. In order to create DomResources properly we need to * have the associated ResourceSet active (QDesignerResource::saveResources() * queries the resource model for a qrc path for the given resource file: * qrcFile = m_core->resourceModel()->qrcPath(ri->text()); * This works only when the resource file comes from the active * resourceSet */ resourceModel->setCurrentResourceSet(form->resourceSet()); result = widgetToDom(widget(), form); const_cast<FormWindowDnDItem*>(this)->setDomUi(result); resourceModel->setCurrentResourceSet(currentResourceSet); return result; }
QString Project::locationOfObject( QObject *o ) { if ( !o ) return QString::null; if ( MainWindow::self ) { QWidgetList windows = MainWindow::self->qWorkspace()->windowList(); for ( QWidget *w = windows.first(); w; w = windows.next() ) { FormWindow *fw = ::qt_cast<FormWindow*>(w); SourceEditor *se = ::qt_cast<SourceEditor*>(w); if ( fw ) { if ( fw->isFake() ) return objectForFakeForm( fw )->name() + QString( " [Source]" ); else return fw->name() + QString( " [Source]" ); } else if ( se ) { if ( !se->object() ) continue; if ( se->formWindow() ) return se->formWindow()->name() + QString( " [Source]" ); else return makeRelative( se->sourceFile()->fileName() ); } } } if ( ::qt_cast<SourceFile*>(o) ) { for ( QPtrListIterator<SourceFile> sources = sourceFiles(); sources.current(); ++sources ) { SourceFile* f = sources.current(); if ( f == o ) return makeRelative( f->fileName() ); } } extern QMap<QWidget*, QString> *qwf_forms; if ( !qwf_forms ) { qWarning( "Project::locationOfObject: qwf_forms is NULL!" ); return QString::null; } QString s = makeRelative( *qwf_forms->find( (QWidget*)o ) ); s += " [Source]"; return s; }
/*--------------------------------------------------------------------------- Program entry point. ---------------------------------------------------------------------------*/ int cdeclare main(int argc, char** argv) { int Error = 0; Q_INIT_RESOURCE(kfx_resource); QApplication Application(argc, argv); try { Application.setApplicationName(NAMESPACE_PROJECT::AppName); Application.setApplicationVersion(NAMESPACE_PROJECT::AppVersion); Application.setOrganizationName(NAMESPACE_PROJECT::AppOrg); Application.setOrganizationDomain(NAMESPACE_PROJECT::AppAuthorWeb); MainCreateLogFile(); MainSetAssetDir(); if (!QGLFormat::hasOpenGL()) {throw dexception("This system does not support OpenGL.");} if (!QGLFramebufferObject::hasOpenGLFramebufferObjects()) {throw dexception("This system does not support OpenGL framebuffer objects.");} FormWindow Window; Window.show(); Error = Application.exec(); } catch (std::exception &e) { QMessageBox::information(nullptr, NAMESPACE_PROJECT::AppName, e.what()); Error = MAIN_EXIT_ERROR; } catch (...) { QMessageBox::information(nullptr, NAMESPACE_PROJECT::AppName, "Trapped an unhandled exception."); Error = MAIN_EXIT_ERROR; } NAMESPACE_PROJECT::Debug::Close(); return Error; }
void FormWindowManager::addFormWindow(QDesignerFormWindowInterface *w) { FormWindow *formWindow = qobject_cast<FormWindow*>(w); if (!formWindow || m_formWindows.contains(formWindow)) return; connect(formWindow, SIGNAL(selectionChanged()), this, SLOT(slotUpdateActions())); connect(formWindow->commandHistory(), SIGNAL(indexChanged(int)), this, SLOT(slotUpdateActions())); connect(formWindow, SIGNAL(toolChanged(int)), this, SLOT(slotUpdateActions())); if (ActionEditor *ae = qobject_cast<ActionEditor *>(m_core->actionEditor())) connect(w, SIGNAL(mainContainerChanged(QWidget*)), ae, SLOT(mainContainerChanged())); if (QDesignerObjectInspector *oi = qobject_cast<QDesignerObjectInspector *>(m_core->objectInspector())) connect(w, SIGNAL(mainContainerChanged(QWidget*)), oi, SLOT(mainContainerChanged())); m_formWindows.append(formWindow); emit formWindowAdded(formWindow); }
void FormWindowManager::setActiveFormWindow(QDesignerFormWindowInterface *w) { FormWindow *formWindow = qobject_cast<FormWindow*>(w); if (formWindow == m_activeFormWindow) return; FormWindow *old = m_activeFormWindow; m_activeFormWindow = formWindow; QtResourceSet *resourceSet = 0; if (formWindow) resourceSet = formWindow->resourceSet(); m_core->resourceModel()->setCurrentResourceSet(resourceSet); slotUpdateActions(); if (m_activeFormWindow) { m_activeFormWindow->repaintSelection(); if (old) old->repaintSelection(); } emit activeFormWindowChanged(m_activeFormWindow); if (m_activeFormWindow) { m_activeFormWindow->emitSelectionChanged(); m_activeFormWindow->commandHistory()->setActive(); // Trigger setActiveSubWindow on mdi area unless we are in toplevel mode QMdiSubWindow *mdiSubWindow = 0; if (QWidget *formwindow = m_activeFormWindow->parentWidget()) { mdiSubWindow = qobject_cast<QMdiSubWindow *>(formwindow->parentWidget()); } if (mdiSubWindow) { for (QWidget *parent = mdiSubWindow->parentWidget(); parent; parent = parent->parentWidget()) { if (QMdiArea *mdiArea = qobject_cast<QMdiArea*>(parent)) { mdiArea->setActiveSubWindow(mdiSubWindow); break; } } } } }
void FormWindowManager::removeFormWindow(QDesignerFormWindowInterface *w) { FormWindow *formWindow = qobject_cast<FormWindow*>(w); int idx = m_formWindows.indexOf(formWindow); if (!formWindow || idx == -1) return; formWindow->disconnect(this); m_formWindows.removeAt(idx); emit formWindowRemoved(formWindow); if (formWindow == m_activeFormWindow) setActiveFormWindow(0); if (m_formWindows.size() == 0 && m_core->widgetBox()) { // Make sure that widget box is enabled by default m_core->widgetBox()->setEnabled(true); } }
void ObjectInspector::ObjectInspectorPrivate::showContainersCurrentPage(QWidget *widget) { if (!widget) return; FormWindow *fw = FormWindow::findFormWindow(widget); if (!fw) return; QWidget *w = widget->parentWidget(); bool macroStarted = false; // Find a multipage container (tab widgets, etc.) in the hierarchy and set the right page. while (w != 0) { if (fw->isManaged(w)) { // Rule out unmanaged internal scroll areas, for example, on QToolBoxes. if (QDesignerContainerExtension *c = qt_extension<QDesignerContainerExtension*>(m_core->extensionManager(), w)) { const int count = c->count(); if (count > 1 && !c->widget(c->currentIndex())->isAncestorOf(widget)) { for (int i = 0; i < count; i++) if (c->widget(i)->isAncestorOf(widget)) { if (macroStarted == false) { macroStarted = true; fw->beginCommand(tr("Change Current Page")); } ChangeCurrentPageCommand *cmd = new ChangeCurrentPageCommand(fw); cmd->init(w, i); fw->commandHistory()->push(cmd); break; } } } } w = w->parentWidget(); } if (macroStarted == true) fw->endCommand(); }
void Project::designerCreated() { for ( FormFile *ff = formfiles.first(); ff; ff = formfiles.next() ) { FormWindow *fw = ff->formWindow(); if ( !fw || fw->mainWindow() ) continue; fw->setMainWindow( MainWindow::self ); connect( fw, SIGNAL( undoRedoChanged( bool, bool, const QString &, const QString & ) ), MainWindow::self, SLOT( updateUndoRedo( bool, bool, const QString &, const QString & ) ) ); fw->reparent( MainWindow::self->qWorkspace(), QPoint( 0, 0 ), FALSE ); QApplication::sendPostedEvents( MainWindow::self->qWorkspace(), QEvent::ChildInserted ); fw->parentWidget()->setFixedSize( 1, 1 ); fw->show(); } }
void Project::addObject( QObject *o ) { bool wasModified = modified; objs.append( o ); FormFile *ff = new FormFile( "", FALSE, this, "qt_fakewindow" ); ff->setFileName( "__APPOBJ" + QString( o->name() ) + ".ui" ); fakeFormFiles.insert( (void*)o, ff ); MetaDataBase::addEntry( o ); if ( hasGUI() ) { QWidget *parent = MainWindow::self ? MainWindow::self->qWorkspace() : 0; FormWindow *fw = new FormWindow( ff, MainWindow::self, parent, "qt_fakewindow" ); fw->setProject( this ); if ( QFile::exists( ff->absFileName() ) ) Resource::loadExtraSource( ff, ff->absFileName(), MetaDataBase::languageInterface( language() ), FALSE ); if ( MainWindow::self ) fw->setMainWindow( MainWindow::self ); if ( MainWindow::self ) { QApplication::sendPostedEvents( MainWindow::self->qWorkspace(), QEvent::ChildInserted ); connect( fw, SIGNAL( undoRedoChanged( bool, bool, const QString &, const QString & ) ), MainWindow::self, SLOT( updateUndoRedo( bool, bool, const QString &, const QString & ) ) ); } if ( fw->parentWidget() ) { fw->parentWidget()->setFixedSize( 1, 1 ); fw->show(); } } else { if ( QFile::exists( ff->absFileName() ) ) Resource::loadExtraSource( ff, ff->absFileName(), MetaDataBase::languageInterface( language() ), FALSE ); } emit objectAdded( o ); modified = wasModified; }
bool FormWindowManager::eventFilter(QObject *o, QEvent *e) { if (!o->isWidgetType()) return false; // If we don't have an active form, we only listen for WindowActivate to speed up integrations const QEvent::Type eventType = e->type(); if (m_activeFormWindow == 0 && eventType != QEvent::WindowActivate) return false; switch (eventType) { // Uninteresting events case QEvent::Create: case QEvent::Destroy: case QEvent::ActionAdded: case QEvent::ActionChanged: case QEvent::ActionRemoved: case QEvent::ChildAdded: case QEvent::ChildPolished: case QEvent::ChildRemoved: #ifndef QT_NO_CLIPBOARD case QEvent::Clipboard: #endif case QEvent::ContentsRectChange: case QEvent::DeferredDelete: case QEvent::FileOpen: case QEvent::LanguageChange: case QEvent::MetaCall: case QEvent::ModifiedChange: case QEvent::Paint: case QEvent::PaletteChange: case QEvent::ParentAboutToChange: case QEvent::ParentChange: case QEvent::Polish: case QEvent::PolishRequest: case QEvent::QueryWhatsThis: case QEvent::StatusTip: case QEvent::StyleChange: case QEvent::Timer: case QEvent::ToolBarChange: case QEvent::ToolTip: case QEvent::WhatsThis: case QEvent::WhatsThisClicked: case QEvent::WinIdChange: case QEvent::DynamicPropertyChange: case QEvent::HoverEnter: case QEvent::HoverLeave: case QEvent::HoverMove: case QEvent::AcceptDropsChange: return false; default: break; } QWidget *widget = static_cast<QWidget*>(o); if (qobject_cast<WidgetHandle*>(widget)) { // ### remove me return false; } FormWindow *fw = FormWindow::findFormWindow(widget); if (fw == 0) { return false; } if (QWidget *managedWidget = findManagedWidget(fw, widget)) { // Prevent MDI subwindows from being closed by clicking at the title bar if (managedWidget != widget && eventType == QEvent::Close) { e->ignore(); return true; } switch (eventType) { case QEvent::WindowActivate: { if (fw->parentWidget()->isWindow() && fw->isMainContainer(managedWidget) && activeFormWindow() != fw) { setActiveFormWindow(fw); } } break; case QEvent::WindowDeactivate: { if (o == fw && o == activeFormWindow()) fw->repaintSelection(); } break; case QEvent::KeyPress: { QKeyEvent *ke = static_cast<QKeyEvent*>(e); if (ke->key() == Qt::Key_Escape) { ke->accept(); return true; } } // don't break... // Embedded Design: Drop on different form: Make sure the right form // window/device is active before having the widget created by the factory case QEvent::Drop: if (activeFormWindow() != fw) setActiveFormWindow(fw); // don't break... default: { if (fw->handleEvent(widget, managedWidget, e)) { return true; } } break; } // end switch } return false; }