/* * * Copyright (C) 2006 MeVis Research GmbH All Rights Reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * Further, this software is distributed without any warranty that it is * free of the rightful claim of any third person regarding infringement * or the like. Any license provided herein, whether implied or * otherwise, applies only to this software file. Patent licenses, if * any, provided herein do not apply to combinations of this program with * other software, or any other product whatsoever. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact information: MeVis Research GmbH, Universitaetsallee 29, * 28359 Bremen, Germany or: * * http://www.mevis.de * */ //---------------------------------------------------------------------------------- /*! // \file PythonQtGui.cpp // \author Florian Link // \author Last changed by $Author: florian $ // \date 2007-04 */ //---------------------------------------------------------------------------------- #include "PythonQtGui.h" #include "PythonQt.h" #include #include #include #include #include void PythonQtGui::init() { PythonQt::self()->addConstructorHandler(new PythonQtUiLoaderConstructorHandler); PythonQt::self()->addInstanceDecorators(new PythonQtUiDecorators()); PythonQt::self()->addClassDecorators(new PythonQtUiConstructors()); PythonQt::self()->registerClass(&QAction::staticMetaObject); PythonQt::self()->registerClass(&QActionGroup::staticMetaObject); PythonQt::self()->registerClass(&QCheckBox::staticMetaObject); PythonQt::self()->registerClass(&QComboBox::staticMetaObject); PythonQt::self()->registerClass(&QDateTimeEdit::staticMetaObject); PythonQt::self()->registerClass(&QDateEdit::staticMetaObject); PythonQt::self()->registerClass(&QTimeEdit::staticMetaObject); PythonQt::self()->registerClass(&QDial::staticMetaObject); PythonQt::self()->registerClass(&QDialog::staticMetaObject); PythonQt::self()->registerClass(&QDockWidget::staticMetaObject); PythonQt::self()->registerClass(&QFrame::staticMetaObject); PythonQt::self()->registerClass(&QGroupBox::staticMetaObject); PythonQt::self()->registerClass(&QLCDNumber::staticMetaObject); PythonQt::self()->registerClass(&QLabel::staticMetaObject); PythonQt::self()->registerClass(&QLineEdit::staticMetaObject); PythonQt::self()->registerClass(&QListView::staticMetaObject); PythonQt::self()->registerClass(&QListWidget::staticMetaObject); PythonQt::self()->registerClass(&QMainWindow::staticMetaObject); PythonQt::self()->registerClass(&QMenu::staticMetaObject); PythonQt::self()->registerClass(&QMenuBar::staticMetaObject); PythonQt::self()->registerClass(&QProgressBar::staticMetaObject); PythonQt::self()->registerClass(&QPushButton::staticMetaObject); PythonQt::self()->registerClass(&QRadioButton::staticMetaObject); PythonQt::self()->registerClass(&QScrollBar::staticMetaObject); PythonQt::self()->registerClass(&QSlider::staticMetaObject); PythonQt::self()->registerClass(&QSpinBox::staticMetaObject); PythonQt::self()->registerClass(&QDoubleSpinBox::staticMetaObject); PythonQt::self()->registerClass(&QTabWidget::staticMetaObject); PythonQt::self()->registerClass(&QTableView::staticMetaObject); PythonQt::self()->registerClass(&QTableWidget::staticMetaObject); PythonQt::self()->registerClass(&QTextBrowser::staticMetaObject); PythonQt::self()->registerClass(&QTextEdit::staticMetaObject); PythonQt::self()->registerClass(&QToolBar::staticMetaObject); PythonQt::self()->registerClass(&QToolBox::staticMetaObject); PythonQt::self()->registerClass(&QToolButton::staticMetaObject); PythonQt::self()->registerClass(&QTreeView::staticMetaObject); PythonQt::self()->registerClass(&QTreeWidget::staticMetaObject); PythonQt::self()->registerClass(&QWidget::staticMetaObject); PythonQt::self()->registerClass(&QWorkspace::staticMetaObject); PythonQt::self()->registerClass(&QSplitter::staticMetaObject); PythonQt::self()->registerClass(&QStackedWidget::staticMetaObject); PythonQt::self()->registerClass(&QStatusBar::staticMetaObject); PythonQt::self()->registerClass(&QDialogButtonBox::staticMetaObject); PythonQt::self()->registerClass(&QFontComboBox::staticMetaObject); PythonQt::self()->registerClass(&QCalendarWidget::staticMetaObject); PythonQt::self()->registerClass(&QHBoxLayout::staticMetaObject); PythonQt::self()->registerClass(&QStackedLayout::staticMetaObject); PythonQt::self()->registerClass(&QVBoxLayout::staticMetaObject); } bool PythonQt_inherits(const QMetaObject* self, const QMetaObject* parent) { const QMetaObject* m = self; while (m) { if (m==parent) { return true; }; m = m->superClass(); } return false; } QObject* PythonQtUiLoaderConstructorHandler::create(const QMetaObject* meta, PyObject *args, PyObject *kw, QString& error) { if (!PythonQt_inherits(meta, &QLayout::staticMetaObject) && !PythonQt_inherits(meta, &QWidget::staticMetaObject) && !PythonQt_inherits(meta, &QAction::staticMetaObject) && !PythonQt_inherits(meta, &QActionGroup::staticMetaObject)) return NULL; static QUiLoader* loader = NULL; if (!loader) { loader = new QUiLoader(); } int argc = PyTuple_Size(args); QObject* parent = NULL; if (argc == 1) { PyObject* arg1 = PyTuple_GET_ITEM(args, 0); if (arg1 && arg1->ob_type == &PythonQtWrapper_Type) { parent = ((PythonQtWrapper*)arg1)->_obj; } else { error = QString("constructor ") + meta->className() + " requires a QObject as parent"; return NULL; } } else if (argc!=0) { error = QString("constructor ") + meta->className() + " called with too many arguments"; return NULL; } if (PythonQt_inherits(meta, &QLayout::staticMetaObject)) { return loader->createLayout(meta->className(), parent); } if (PythonQt_inherits(meta, &QWidget::staticMetaObject)) { if (!parent || parent->isWidgetType()) { return loader->createWidget(meta->className(), (QWidget*)parent); } else { error = QString("constructor ") + meta->className() + " requires a QWidget as parent"; return NULL; } } if (PythonQt_inherits(meta, &QAction::staticMetaObject)) { return loader->createAction(parent); } if (PythonQt_inherits(meta, &QActionGroup::staticMetaObject)) { return loader->createActionGroup(parent); } return NULL; } void PythonQtUiDecorators::addWidget(QLayout* l, QWidget* w) { l->addWidget(w); } QLayout* PythonQtUiDecorators::layout(QWidget* w) { return w->layout(); } void PythonQtUiDecorators::setLayout(QWidget* w, QLayout* l) { w->setLayout(l); } void PythonQtUiDecorators::setCentralWidget(QMainWindow* main, QWidget* w) { main->setCentralWidget(w); } void PythonQtUiDecorators::setMenuBar(QMainWindow* main, QMenuBar* w) { main->setMenuBar(w); } void PythonQtUiDecorators::addAction(QMenuBar* bar, QAction* action) { bar->addAction(action); } QAction* PythonQtUiDecorators::addMenu(QMenuBar* bar, QMenu* menu) { return bar->addMenu(menu); } QMenu* PythonQtUiDecorators::addMenu(QMenuBar* bar, const QString& name) { return bar->addMenu(name); } QAction* PythonQtUiDecorators::addAction(QMenu* m, const QString& name) { return m->addAction(name); } // -------------------------------------------------------------------- QWidget* PythonQtUiConstructors::new_QWidget(QWidget* parent) { return new QWidget(parent); }