diff options
Diffstat (limited to 'kdevdesigner/designer/widgetfactory.cpp')
-rw-r--r-- | kdevdesigner/designer/widgetfactory.cpp | 1805 |
1 files changed, 0 insertions, 1805 deletions
diff --git a/kdevdesigner/designer/widgetfactory.cpp b/kdevdesigner/designer/widgetfactory.cpp deleted file mode 100644 index 9d04535a..00000000 --- a/kdevdesigner/designer/widgetfactory.cpp +++ /dev/null @@ -1,1805 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** Licensees holding valid TQt Enterprise Edition or TQt Professional Edition -** licenses may use this file in accordance with the TQt Commercial License -** Agreement provided with the Software. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -** information about TQt Commercial License Agreements. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ - -#include <tqvariant.h> // HP-UX compiler need this here -#include "widgetfactory.h" -#include <widgetdatabase.h> -#include "metadatabase.h" -#include "mainwindow.h" -#include "formwindow.h" -#include "propertyeditor.h" -#include "tqlayout.h" -#include "listboxeditorimpl.h" -#include "listvieweditorimpl.h" -#include "iconvieweditorimpl.h" -#include "formwindow.h" -#include "multilineeditorimpl.h" -#include "../interfaces/widgetinterface.h" -#ifndef TQT_NO_TABLE -#include "tableeditorimpl.h" -#endif -#include "project.h" -#include "menubareditor.h" -#include "popupmenueditor.h" - -#include "kdevdesigner_part.h" - -#include <kiconloader.h> - -#include <tqfeatures.h> - -#include <tqpixmap.h> -#include <tqgroupbox.h> -#include <tqiconview.h> -#ifndef TQT_NO_TABLE -#include <tqtable.h> -#endif -#ifndef TQT_NO_SQL -#include <tqdatatable.h> -#endif -#include <tqdatetimeedit.h> -#include <tqlineedit.h> -#include <tqspinbox.h> -#include <tqmultilineedit.h> -#include <tqtextedit.h> -#include <tqlabel.h> -#include <tqlayout.h> -#include <tqwidgetstack.h> -#include <tqcombobox.h> -#include <tqtabbar.h> -#include <tqlistbox.h> -#include <tqlistview.h> -#include <tqobjectlist.h> -#include <tqlcdnumber.h> -#include <tqslider.h> -#include <tqdial.h> -#include <tqprogressbar.h> -#include <tqtextview.h> -#include <tqtextbrowser.h> -#include <tqframe.h> -#include <tqmetaobject.h> -#include <tqwidgetstack.h> -#include <tqwizard.h> -#include <tqvaluelist.h> -#include <tqtimer.h> -#include <tqscrollbar.h> -#include <tqmainwindow.h> -#include <tqmenubar.h> -#include <tqapplication.h> -#include <tqsplitter.h> -#include <tqtoolbox.h> -#include <tqsizegrip.h> -#ifndef TQT_NO_SQL -#include "database.h" -#endif - -#define NO_STATIC_COLORS -#include <globaldefs.h> -#include <tqobject.h> - -#include <tdelocale.h> - -FormWindow *find_formwindow( TQWidget *w ) -{ - if ( !w ) - return 0; - for (;;) { - if ( ::tqqt_cast<FormWindow*>(w) ) - return (FormWindow*)w; - if ( !w->parentWidget() ) - return 0; - w = w->parentWidget(); - } -} - -void TQLayoutWidget::paintEvent( TQPaintEvent* ) -{ - TQPainter p ( this ); - p.setPen( red ); - p.drawRect( rect() ); -} - - -QDesignerTabWidget::QDesignerTabWidget( TQWidget *parent, const char *name ) - : TQTabWidget( parent, name ), dropIndicator( 0 ), dragPage( 0 ), mousePressed( FALSE ) -{ - tabBar()->setAcceptDrops( TRUE ); - tabBar()->installEventFilter( this ); -} - -int QDesignerTabWidget::currentPage() const -{ - return tabBar()->currentTab(); -} - -void QDesignerTabWidget::setCurrentPage( int i ) -{ - tabBar()->setCurrentTab( i ); -} - -TQString QDesignerTabWidget::pageTitle() const -{ - return ((TQTabWidget*)this)->tabLabel( TQTabWidget::currentPage() ); -} - -void QDesignerTabWidget::setPageTitle( const TQString& title ) -{ - changeTab( TQTabWidget::currentPage(), title ); -} - -void QDesignerTabWidget::setPageName( const TQCString& name ) -{ - if ( TQTabWidget::currentPage() ) - TQTabWidget::currentPage()->setName( name ); -} - -TQCString QDesignerTabWidget::pageName() const -{ - if ( !TQTabWidget::currentPage() ) - return 0; - return TQTabWidget::currentPage()->name(); -} - -int QDesignerTabWidget::count() const -{ - return tabBar()->count(); -} - -bool QDesignerTabWidget::eventFilter( TQObject *o, TQEvent *e ) -{ - if ( TQT_BASE_OBJECT(o) != TQT_BASE_OBJECT(tabBar()) ) return FALSE; - - switch ( e->type() ) { - case TQEvent::MouseButtonPress: { - mousePressed = TRUE; - TQMouseEvent *me = (TQMouseEvent*)e; - pressPoint = me->pos(); - } - break; - case TQEvent::MouseMove: { - TQMouseEvent *me = (TQMouseEvent*)e; - if ( mousePressed && ( pressPoint - me->pos()).manhattanLength() > TQApplication::startDragDistance() ) { - TQTextDrag *drg = new TQTextDrag( TQString::number( (long) this ) , this ); - mousePressed = FALSE; - dragPage = TQTabWidget::currentPage(); - dragLabel = TQTabWidget::tabLabel( dragPage ); - - int index = indexOf( dragPage ); - - removePage( dragPage ); - if ( !drg->dragMove() ) { - insertTab( dragPage, dragLabel, index ); - showPage( dragPage ); - } - if ( dropIndicator ) - dropIndicator->hide(); - } - } - break; - case TQEvent::DragLeave: { - if ( dropIndicator ) - dropIndicator->hide(); - } - break; - case TQEvent::DragMove: { - TQDragEnterEvent *de = (TQDragEnterEvent*) e; - if ( TQTextDrag::canDecode( de ) ) { - TQString text; - TQTextDrag::decode( de, text ); - if ( text == TQString::number( (long)this ) ) - de->accept(); - else - return FALSE; - } - - int index = 0; - TQRect rect; - for ( ; index < tabBar()->count(); index++ ) { - if ( tabBar()->tabAt( index )->rect().contains( de->pos() ) ) { - rect = tabBar()->tabAt( index )->rect(); - break; - } - } - - if ( index == tabBar()->count() -1 ) { - TQRect rect2 = rect; - rect2.setLeft( rect2.left() + rect2.width() / 2 ); - if ( rect2.contains( de->pos() ) ) - index++; - } - - if ( ! dropIndicator ) { - dropIndicator = new TQWidget( this ); - dropIndicator->setBackgroundColor( red ); - } - - TQPoint pos; - if ( index == tabBar()->count() ) - pos = tabBar()->mapToParent( TQPoint( rect.x() + rect.width(), rect.y() ) ); - else - pos = tabBar()->mapToParent( TQPoint( rect.x(), rect.y() ) ); - - dropIndicator->setGeometry( pos.x(), pos.y() , 3, rect.height() ); - dropIndicator->show(); - } - break; - case TQEvent::Drop: { - TQDragEnterEvent *de = (TQDragEnterEvent*) e; - if ( TQTextDrag::canDecode( de ) ) { - TQString text; - TQTextDrag::decode( de, text ); - if ( text == TQString::number( (long)this ) ) { - - int newIndex = 0; - for ( ; newIndex < tabBar()->count(); newIndex++ ) { - if ( tabBar()->tabAt( newIndex )->rect().contains( de->pos() ) ) - break; - } - - if ( newIndex == tabBar()->count() -1 ) { - TQRect rect2 = tabBar()->tabAt( newIndex )->rect(); - rect2.setLeft( rect2.left() + rect2.width() / 2 ); - if ( rect2.contains( de->pos() ) ) - newIndex++; - } - - int oldIndex = 0; - for ( ; oldIndex < tabBar()->count(); oldIndex++ ) { - if ( tabBar()->tabAt( oldIndex )->rect().contains( pressPoint ) ) - break; - } - - FormWindow *fw = find_formwindow( this ); - MoveTabPageCommand *cmd = - new MoveTabPageCommand( i18n( "Move Tab Page" ), fw, this, - dragPage, dragLabel, newIndex, oldIndex ); - fw->commandHistory()->addCommand( cmd ); - cmd->execute(); - de->accept(); - } - } - } - break; - default: - break; - } - return FALSE; -} - - -QDesignerWidgetStack::QDesignerWidgetStack( TQWidget *parent, const char *name ) - : TQWidgetStack( parent, name ) -{ - prev = new TQToolButton( TQt::LeftArrow, this, "designer_wizardstack_button" ); - prev->setAutoRaise( TRUE ); - prev->setAutoRepeat( TRUE ); - prev->setSizePolicy( TQSizePolicy( TQSizePolicy::Ignored, TQSizePolicy::Ignored ) ); - next = new TQToolButton( TQt::RightArrow, this, "designer_wizardstack_button" ); - next->setAutoRaise( TRUE ); - next->setAutoRepeat( TRUE ); - next->setSizePolicy( TQSizePolicy( TQSizePolicy::Ignored, TQSizePolicy::Ignored ) ); - connect( prev, TQT_SIGNAL( clicked() ), this, TQT_SLOT( prevPage() ) ); - connect( next, TQT_SIGNAL( clicked() ), this, TQT_SLOT( nextPage() ) ); - updateButtons(); -} - -void QDesignerWidgetStack::updateButtons() -{ - prev->setGeometry( width() - 31, 1, 15, 15 ); - next->setGeometry( width() - 16, 1, 15, 15 ); - prev->show(); - next->show(); - prev->raise(); - next->raise(); -} - -void QDesignerWidgetStack::prevPage() -{ - setCurrentPage( currentPage() - 1 ); -} - -void QDesignerWidgetStack::nextPage() -{ - setCurrentPage( currentPage() + 1 ); -} - -int QDesignerWidgetStack::currentPage() const -{ - QDesignerWidgetStack* that = (QDesignerWidgetStack*) this; - return that->pages.find( visibleWidget() ); -} - -void QDesignerWidgetStack::setCurrentPage( int i ) -{ - // help next/prev page commands - if ( i < 0 ) - i += count(); - if ( i >= count() ) - i -= count(); - - if ( i < 0 || i >= count() ) - return; - raiseWidget( pages.at( i ) ); - updateButtons(); -} - -TQCString QDesignerWidgetStack::pageName() const -{ - if ( !visibleWidget() ) - return 0; - return visibleWidget()->name(); -} - -void QDesignerWidgetStack::setPageName( const TQCString& name ) -{ - if ( visibleWidget() ) - visibleWidget()->setName( name ); -} - -int QDesignerWidgetStack::count() const -{ - return pages.count(); -} - -TQWidget* QDesignerWidgetStack::page( int i ) const -{ - if ( i < 0 || i >= count() ) - return 0; - QDesignerWidgetStack* that = (QDesignerWidgetStack*) this; - return that->pages.at( i ); -} - - -int QDesignerWidgetStack::insertPage( TQWidget *p, int i ) -{ - if ( i < 0 ) - pages.append( p ); - else - pages.insert( (uint) i, p ); - addWidget( p ); - p->show(); - raiseWidget( p ); - TQApplication::sendPostedEvents(); - updateButtons(); - return pages.find( p ); -} - -int QDesignerWidgetStack::removePage( TQWidget *p ) -{ - int i = pages.find( p ); - pages.remove( p ); - removeWidget( p ); - setCurrentPage( 0 ); - updateButtons(); - return i; -} - - -int QDesignerWizard::currentPageNum() const -{ - for ( int i = 0; i < pageCount(); ++i ) { - if ( page( i ) == currentPage() ) - return i; - } - return 0; -} - - - - - -void QDesignerWizard::setCurrentPage( int i ) -{ - if ( i < currentPageNum() ) { - while ( i < currentPageNum() ) { - if ( currentPageNum() == 0 ) - break; - back(); - } - - } else { - while ( i > currentPageNum() ) { - if ( currentPageNum() == pageCount() - 1 ) - break; - next(); - } - } -} - -TQString QDesignerWizard::pageTitle() const -{ - return title( currentPage() ); -} - -void QDesignerWizard::setPageTitle( const TQString& title ) -{ - setTitle( currentPage(), title ); -} - -void QDesignerWizard::setPageName( const TQCString& name ) -{ - if ( TQWizard::currentPage() ) - TQWizard::currentPage()->setName( name ); -} - -TQCString QDesignerWizard::pageName() const -{ - if ( !TQWizard::currentPage() ) - return 0; - return TQWizard::currentPage()->name(); -} - -int QDesignerWizard::pageNum( TQWidget *p ) -{ - for ( int i = 0; i < pageCount(); ++i ) { - if ( page( i ) == p ) - return i; - } - return -1; -} - -void QDesignerWizard::addPage( TQWidget *p, const TQString &t ) -{ - TQWizard::addPage( p, t ); - if ( removedPages.find( p ) ) - removedPages.remove( p ); -} - -void QDesignerWizard::removePage( TQWidget *p ) -{ - TQWizard::removePage( p ); - removedPages.insert( p, p ); -} - -void QDesignerWizard::insertPage( TQWidget *p, const TQString &t, int index ) -{ - TQWizard::insertPage( p, t, index ); - if ( removedPages.find( p ) ) - removedPages.remove( p ); -} - -TQMap< int, TQMap< TQString, TQVariant> > *defaultProperties = 0; -TQMap< int, TQStringList > *changedProperties = 0; - -/*! - \class WidgetFactory widgetfactory.h - \brief Set of static functions for creating widgets, layouts and do other stuff - - The widget factory offers functions to create widgets, create and - delete layouts find out other details - all based on the - WidgetDatabase's data. So the functions that use ids use the same - ids as in the WidgetDatabase. -*/ - - -void WidgetFactory::saveDefaultProperties( TQObject *w, int id ) -{ - TQMap< TQString, TQVariant> propMap; - TQStrList lst = w->metaObject()->propertyNames( TRUE ); - for ( uint i = 0; i < lst.count(); ++i ) { - TQVariant var = w->property( lst.at( i ) ); - if ( !var.isValid() && qstrcmp( "pixmap", lst.at( i ) ) == 0 ) - var = TQVariant( TQPixmap() ); - else if ( !var.isValid() && qstrcmp( "iconSet", lst.at( i ) ) == 0 ) - var = TQVariant( TQIconSet() ); - propMap.replace( lst.at( i ), var ); - } - defaultProperties->replace( id, propMap ); -} - -void WidgetFactory::saveChangedProperties( TQObject *w, int id ) -{ - TQStringList l = MetaDataBase::changedProperties( w ); - changedProperties->insert( id, l ); -} - -/*! Creates a widget of the type which is registered as \a id as - child of \a parent. The \a name is optional. If \a init is TRUE, the - widget is initialized with some defaults, else the plain widget is - created. -*/ - -TQWidget *WidgetFactory::create( int id, TQWidget *parent, const char *name, bool init, const TQRect *r, Qt::Orientation orient ) -{ - TQString n = WidgetDatabase::className( id ); - if ( n.isEmpty() ) - return 0; - - if ( !defaultProperties ) { - defaultProperties = new TQMap< int, TQMap< TQString, TQVariant> >(); - changedProperties = new TQMap< int, TQStringList >(); - } - - TQWidget *w = 0; - TQString str = WidgetDatabase::createWidgetName( id ); - const char *s = str.latin1(); - w = createWidget( n, parent, name ? name : s, init, r, orient ); - if ( ::tqqt_cast<TQScrollView*>(w) ) - ( (TQScrollView*)w )->disableSizeHintCaching(); - if ( !w && WidgetDatabase::isCustomWidget( id ) ) - w = createCustomWidget( parent, name ? name : s, MetaDataBase::customWidget( id ) ); - if ( !w ) - return 0; - MetaDataBase::addEntry( TQT_TQOBJECT(w) ); - - if ( !defaultProperties->contains( id ) ) - saveDefaultProperties( TQT_TQOBJECT(w), id ); - if ( !changedProperties->contains( id ) ) - saveChangedProperties( TQT_TQOBJECT(w), id ); - - return w; -} - -/*! Creates a layout on the widget \a widget of the type \a type - which can be \c HBox, \c VBox or \c Grid. -*/ - -TQLayout *WidgetFactory::createLayout( TQWidget *widget, TQLayout *layout, LayoutType type ) -{ - int spacing = MainWindow::self->currentLayoutDefaultSpacing(); - int margin = 0; - - int metaspacing = MetaDataBase::spacing( TQT_TQOBJECT(widget) ); - int metamargin = MetaDataBase::margin( TQT_TQOBJECT(widget) ); - - if ( ::tqqt_cast<TQLayoutWidget*>(widget) && - ( WidgetDatabase::isContainer( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( TQT_TQOBJECT(widget) ) ) ) || - widget && ::tqqt_cast<FormWindow*>(widget->parentWidget()) ) ) - margin = MainWindow::self->currentLayoutDefaultMargin(); - - if ( !layout && ::tqqt_cast<TQTabWidget*>(widget) ) - widget = ((TQTabWidget*)widget)->currentPage(); - - if ( !layout && ::tqqt_cast<TQWizard*>(widget) ) - widget = ((TQWizard*)widget)->currentPage(); - - if ( !layout && ::tqqt_cast<TQMainWindow*>(widget) ) - widget = ((TQMainWindow*)widget)->centralWidget(); - - if ( !layout && ::tqqt_cast<TQWidgetStack*>(widget) ) - widget = ((TQWidgetStack*)widget)->visibleWidget(); - - if ( !layout && ::tqqt_cast<TQToolBox*>(widget) ) - widget = ((TQToolBox*)widget)->currentItem(); - - MetaDataBase::addEntry( TQT_TQOBJECT(widget) ); - - TQLayout *l = 0; - int align = 0; - if ( !layout && ::tqqt_cast<TQGroupBox*>(widget) ) { - TQGroupBox *gb = (TQGroupBox*)widget; - gb->setColumnLayout( 0, Qt::Vertical ); - layout = gb->layout(); - layout->setMargin( 0 ); - layout->setSpacing( 0 ); - switch ( type ) { - case HBox: - l = new TQHBoxLayout( layout ); - break; - case VBox: - l = new TQVBoxLayout( layout ); - break; - case Grid: - l = new QDesignerGridLayout( layout ); - break; - default: - return 0; - } - align = TQt::AlignTop; - MetaDataBase::setMargin( TQT_TQOBJECT(gb), metamargin ); - MetaDataBase::setSpacing( TQT_TQOBJECT(gb), metaspacing ); - } else { - if ( layout ) { - switch ( type ) { - case HBox: - l = new TQHBoxLayout( layout ); - break; - case VBox: - l = new TQVBoxLayout( layout ); - break; - case Grid: - l = new QDesignerGridLayout( layout ); - break; - default: - return 0; - } - MetaDataBase::addEntry( TQT_TQOBJECT(l) ); - l->setSpacing( spacing ); - l->setMargin( margin ); - } else { - switch ( type ) { - case HBox: - l = new TQHBoxLayout( widget ); - break; - case VBox: - l = new TQVBoxLayout( widget ); - break; - case Grid: - l = new QDesignerGridLayout( widget ); - break; - default: - return 0; - } - MetaDataBase::addEntry( TQT_TQOBJECT(l) ); - if ( widget ) { - MetaDataBase::setMargin( TQT_TQOBJECT(widget), metamargin ); - MetaDataBase::setSpacing( TQT_TQOBJECT(widget), metaspacing ); - } else { - l->setMargin( margin ); - l->setSpacing( spacing ); - } - } - } - l->setAlignment( align ); - MetaDataBase::addEntry( TQT_TQOBJECT(l) ); - return l; -} - -void WidgetFactory::deleteLayout( TQWidget *widget ) -{ - if ( !widget ) - return; - - if ( ::tqqt_cast<TQTabWidget*>(widget) ) - widget = ((TQTabWidget*)widget)->currentPage(); - if ( ::tqqt_cast<TQWizard*>(widget) ) - widget = ((TQWizard*)widget)->currentPage(); - if ( ::tqqt_cast<TQMainWindow*>(widget) ) - widget = ((TQMainWindow*)widget)->centralWidget(); - if ( ::tqqt_cast<TQWidgetStack*>(widget) ) - widget = ((TQWidgetStack*)widget)->visibleWidget(); - if ( ::tqqt_cast<TQToolBox*>(widget) ) - widget = ((TQToolBox*)widget)->currentItem(); - delete widget->layout(); -} - -/*! Factory functions for creating a widget of the type \a className - as child of \a parent with the name \a name. - - If \a init is TRUE, some initial default properties are set. This - has to be in sync with the initChangedProperties() function! -*/ - -TQWidget *WidgetFactory::createWidget( const TQString &className, TQWidget *parent, const char *name, bool init, - const TQRect *r, Qt::Orientation orient ) -{ - if ( className == TQPUSHBUTTON_OBJECT_NAME_STRING ) { - TQPushButton *b = 0; - if ( init ) { - b = new QDesignerPushButton( parent, name ); - b->setText( TQString::fromLatin1( name ) ); - } else { - b = new QDesignerPushButton( parent, name ); - } - TQWidget *w = find_formwindow( b ); - b->setAutoDefault( w && ::tqqt_cast<TQDialog*>(((FormWindow*)w)->mainContainer()) ); - return b; - } else if ( className == TQTOOLBUTTON_OBJECT_NAME_STRING ) { - if ( init ) { - QDesignerToolButton *tb = new QDesignerToolButton( parent, name ); - if ( ::tqqt_cast<TQToolBox*>(widgetOfContainer(parent))) { - tb->setUsesTextLabel(TRUE); - tb->setTextLabel("..."); - tb->setAutoRaise(TRUE); - tb->setTextPosition(TQToolButton::BesideIcon); - } else { - tb->setText( "..." ); - } - return tb; - } - return new QDesignerToolButton( parent, name ); - } else if ( className == TQCHECKBOX_OBJECT_NAME_STRING ) { - if ( init ) { - QDesignerCheckBox *cb = new QDesignerCheckBox( parent, name ); - cb->setText( TQString::fromLatin1( name ) ); - return cb; - } - return new QDesignerCheckBox( parent, name ); - } else if ( className == TQRADIOBUTTON_OBJECT_NAME_STRING ) { - if ( init ) { - QDesignerRadioButton *rb = new QDesignerRadioButton( parent, name ); - rb->setText( TQString::fromLatin1( name ) ); - return rb; - } - return new QDesignerRadioButton( parent, name ); - } else if ( className == TQGROUPBOX_OBJECT_NAME_STRING ) { - if ( init ) - return new TQGroupBox( TQString::fromLatin1( name ), parent, name ); - return new TQGroupBox( parent, name ); - } else if ( className == TQBUTTONGROUP_OBJECT_NAME_STRING ) { - if ( init ) - return new TQButtonGroup( TQString::fromLatin1( name ), parent, name ); - return new TQButtonGroup( parent, name ); - } else if ( className == TQICONVIEW_OBJECT_NAME_STRING ) { -#if !defined(TQT_NO_ICONVIEW) - TQIconView* iv = new TQIconView( parent, name ); - if ( init ) - (void) new TQIconViewItem( iv, i18n( "New Item" ) ); - return iv; -#else - return 0; -#endif - } else if ( className == TQTABLE_OBJECT_NAME_STRING ) { -#if !defined(TQT_NO_TABLE) - if ( init ) - return new TQTable( 3, 3, parent, name ); - return new TQTable( parent, name ); -#else - return 0; -#endif -#ifndef TQT_NO_SQL - } else if ( className == TQDATATABLE_OBJECT_NAME_STRING ) { - return new TQDataTable( parent, name ); -#endif //TQT_NO_SQL - } else if ( className == TQDATEEDIT_OBJECT_NAME_STRING ) { - return new TQDateEdit( parent, name ); - } else if ( className == TQTIMEEDIT_OBJECT_NAME_STRING ) { - return new TQTimeEdit( parent, name ); - } else if ( className == TQDATETIMEEDIT_OBJECT_NAME_STRING ) { - return new TQDateTimeEdit( parent, name ); - } - else if ( className == TQLISTBOX_OBJECT_NAME_STRING ) { - TQListBox* lb = new TQListBox( parent, name ); - if ( init ) { - lb->insertItem( i18n( "New Item" ) ); - lb->setCurrentItem( 0 ); - } - return lb; - } else if ( className == TQLISTVIEW_OBJECT_NAME_STRING ) { - TQListView *lv = new TQListView( parent, name ); - lv->setSorting( -1 ); - if ( init ) { - lv->addColumn( i18n( "Column 1" ) ); - lv->setCurrentItem( new TQListViewItem( lv, i18n( "New Item" ) ) ); - } - return lv; - } else if ( className == TQLINEEDIT_OBJECT_NAME_STRING ) - return new TQLineEdit( parent, name ); - else if ( className == TQSPINBOX_OBJECT_NAME_STRING ) - return new TQSpinBox( parent, name ); - else if ( className == TQSPLITTER_OBJECT_NAME_STRING ) - return new TQSplitter( parent, name ); - else if ( className == TQMULTILINEEDIT_OBJECT_NAME_STRING ) - return new TQMultiLineEdit( parent, name ); - else if ( className == TQTEXTEDIT_OBJECT_NAME_STRING ) - return new TQTextEdit( parent, name ); - else if ( className == TQLABEL_OBJECT_NAME_STRING || className == "TextLabel" ) { - QDesignerLabel *l = new QDesignerLabel( parent, name ); - if ( init ) { - l->setText( TQString::fromLatin1( name ) ); - MetaDataBase::addEntry( TQT_TQOBJECT(l) ); - MetaDataBase::setPropertyChanged( TQT_TQOBJECT(l), "text", TRUE ); - } - return l; - } else if ( className == "PixmapLabel" ) { - QDesignerLabel *l = new QDesignerLabel( parent, name ); - if ( init ) { - l->setPixmap( BarIcon( "designer_qtlogo.png", KDevDesignerPartFactory::instance() ) ); - l->setScaledContents( TRUE ); - MetaDataBase::addEntry( TQT_TQOBJECT(l) ); - MetaDataBase::setPropertyChanged( TQT_TQOBJECT(l), "pixmap", TRUE ); - MetaDataBase::setPropertyChanged( TQT_TQOBJECT(l), "scaledContents", TRUE ); - } - return l; - } else if ( className == TQLAYOUTWIDGET_OBJECT_NAME_STRING ) - return new TQLayoutWidget( parent, name ); - else if ( className == TQTABWIDGET_OBJECT_NAME_STRING ) { - TQTabWidget *tw = new QDesignerTabWidget( parent, name ); - if ( init ) { - FormWindow *fw = find_formwindow( parent ); - TQWidget *w = fw ? new QDesignerWidget( fw, tw, "tab" ) : new TQWidget( tw, "tab" ); - tw->addTab( w, i18n("Tab 1") ); - MetaDataBase::addEntry( TQT_TQOBJECT(w) ); - w = fw ? new QDesignerWidget( fw, tw, "tab" ) : new TQWidget( tw, "tab" ); - tw->addTab( w, i18n("Tab 2") ); - MetaDataBase::addEntry( TQT_TQOBJECT(tw) ); - MetaDataBase::addEntry( TQT_TQOBJECT(w) ); - } - return tw; - } else if ( className == TQWIDGETSTACK_OBJECT_NAME_STRING ) { - QDesignerWidgetStack *ws = new QDesignerWidgetStack( parent, name ); - if ( init ) { - FormWindow *fw = find_formwindow( parent ); - TQWidget *w = fw ? new QDesignerWidget( fw, ws, "WStackPage" ) : new TQWidget( ws, "WStackPage" ); - ws->insertPage( w ); - MetaDataBase::addEntry( TQT_TQOBJECT(w) ); - MetaDataBase::addEntry( TQT_TQOBJECT(ws) ); - } - return ws; - } else if ( className == TQCOMBOBOX_OBJECT_NAME_STRING ) { - return new TQComboBox( FALSE, parent, name ); - } else if ( className == TQWIDGET_OBJECT_NAME_STRING ) { - if ( parent && - ( ::tqqt_cast<FormWindow*>(parent) || - ::tqqt_cast<TQWizard*>(parent) || - ::tqqt_cast<TQTabWidget*>(parent) || - ::tqqt_cast<TQWidgetStack*>(parent) || - ::tqqt_cast<TQToolBox*>(parent) || - ::tqqt_cast<TQMainWindow*>(parent) ) ) { - FormWindow *fw = find_formwindow( parent ); - if ( fw ) { - QDesignerWidget *dw = new QDesignerWidget( fw, parent, name ); - MetaDataBase::addEntry( TQT_TQOBJECT(dw) ); - return dw; - } - } - return new TQWidget( parent, name ); - } else if ( className == TQDIALOG_OBJECT_NAME_STRING ) { - TQDialog *dia = 0; - if ( ::tqqt_cast<FormWindow*>(parent) ) - dia = new QDesignerDialog( (FormWindow*)parent, parent, name ); - else - dia = new TQDialog( parent, name ); -#if defined(TQT_NON_COMMERCIAL) - if ( ::tqqt_cast<MainWindow*>(parent) ) -#else - if ( parent ) -#endif - dia->reparent( parent, TQPoint( 0, 0 ), TRUE ); - return dia; - } else if ( className == TQWIZARD_OBJECT_NAME_STRING ) { - TQWizard *wiz = new QDesignerWizard( parent, name ); -#if defined(TQT_NON_COMMERCIAL) - if ( ::tqqt_cast<MainWindow*>(parent) ) -#else - if ( parent ) -#endif - wiz->reparent( parent, TQPoint( 0, 0 ), TRUE ); - if ( init && ::tqqt_cast<FormWindow*>(parent) ) { - QDesignerWidget *dw = new QDesignerWidget( (FormWindow*)parent, wiz, "WizardPage" ); - MetaDataBase::addEntry( TQT_TQOBJECT(dw) ); - wiz->addPage( dw, i18n( "Page" ) ); - TQTimer::singleShot( 0, wiz, TQT_SLOT( next() ) ); - } - return wiz; - } else if ( className == "Spacer" ) { - Spacer *s = new Spacer( parent, name ); - MetaDataBase::addEntry( TQT_TQOBJECT(s) ); - MetaDataBase::setPropertyChanged( TQT_TQOBJECT(s), "orientation", TRUE ); - MetaDataBase::setPropertyChanged( TQT_TQOBJECT(s), "sizeType", TRUE ); - if ( !r ) - return s; - if ( !r->isValid() || r->width() < 2 && r->height() < 2 ) - s->setOrientation( orient ); - else if ( r->width() < r->height() ) - s->setOrientation( Qt::Vertical ); - else - s->setOrientation( Qt::Horizontal ); - return s; - } else if ( className == TQLCDNUMBER_OBJECT_NAME_STRING ) - return new TQLCDNumber( parent, name ); - else if ( className == TQPROGRESSBAR_OBJECT_NAME_STRING ) - return new TQProgressBar( parent, name ); - else if ( className == TQTEXTVIEW_OBJECT_NAME_STRING ) - return new TQTextView( parent, name ); - else if ( className == TQTEXTBROWSER_OBJECT_NAME_STRING ) - return new TQTextBrowser( parent, name ); - else if ( className == TQDIAL_OBJECT_NAME_STRING ) - return new TQDial( parent, name ); - else if ( className == TQSLIDER_OBJECT_NAME_STRING ) { - TQSlider *s = new TQSlider( parent, name ); - if ( !r ) - return s; - if ( !r->isValid() || r->width() < 2 && r->height() < 2 ) - s->setOrientation( orient ); - else if ( r->width() > r->height() ) - s->setOrientation( Qt::Horizontal ); - MetaDataBase::addEntry( TQT_TQOBJECT(s) ); - MetaDataBase::setPropertyChanged( TQT_TQOBJECT(s), "orientation", TRUE ); - return s; - } else if ( className == TQSCROLLBAR_OBJECT_NAME_STRING ) { - TQScrollBar *s = new TQScrollBar( parent, name ); - if ( !r ) - return s; - if ( !r->isValid() || r->width() < 2 && r->height() < 2 ) - s->setOrientation( orient ); - else if ( r->width() > r->height() ) - s->setOrientation( Qt::Horizontal ); - MetaDataBase::addEntry( TQT_TQOBJECT(s) ); - MetaDataBase::setPropertyChanged( TQT_TQOBJECT(s), "orientation", TRUE ); - return s; - } else if ( className == TQFRAME_OBJECT_NAME_STRING ) { - if ( !init ) - return new TQFrame( parent, name ); - TQFrame *f = new TQFrame( parent, name ); - f->setFrameStyle( TQFrame::StyledPanel | TQFrame::Raised ); - return f; - } else if ( className == "Line" ) { - Line *l = new Line( parent, name ); - MetaDataBase::addEntry( TQT_TQOBJECT(l) ); - MetaDataBase::setPropertyChanged( TQT_TQOBJECT(l), "orientation", TRUE ); - MetaDataBase::setPropertyChanged( TQT_TQOBJECT(l), "frameShadow", TRUE ); - MetaDataBase::setPropertyChanged( TQT_TQOBJECT(l), "frameShape", TRUE ); - if ( !r ) - return l; - if ( !r->isValid() || r->width() < 2 && r->height() < 2 ) - l->setOrientation( orient ); - else if ( r->width() < r->height() ) - l->setOrientation( Qt::Vertical ); - return l; - } else if ( className == TQMAINWINDOW_OBJECT_NAME_STRING ) { - TQMainWindow *mw = new TQMainWindow( parent, name, 0 ); - mw->setDockEnabled( TQt::DockMinimized, FALSE ); - QDesignerWidget *dw = new QDesignerWidget( (FormWindow*)parent, mw, "central widget" ); - mw->setDockMenuEnabled( FALSE ); - MetaDataBase::addEntry( TQT_TQOBJECT(dw) ); - mw->setCentralWidget( dw ); - (void)mw->statusBar(); - dw->show(); - return mw; - } else if ( className == TQTOOLBOX_OBJECT_NAME_STRING ) { - if ( !init ) - return new QDesignerToolBox( parent, name ); - TQToolBox *tb = new QDesignerToolBox( parent, name ); - FormWindow *fw = find_formwindow( parent ); - TQWidget *w = fw ? new QDesignerWidget( fw, tb, "page1" ) : - new TQWidget( tb, "page1" ); - tb->addItem( w, i18n("Page 1") ); - MetaDataBase::addEntry( TQT_TQOBJECT(w) ); - w = fw ? new QDesignerWidget( fw, tb, "page2" ) : new TQWidget( tb, "page2" ); - tb->addItem( w, i18n("Page 2") ); - MetaDataBase::addEntry( TQT_TQOBJECT(tb) ); - MetaDataBase::addEntry( TQT_TQOBJECT(w) ); - return tb; - } -#ifndef TQT_NO_SQL - else if ( className == TQDATABROWSER_OBJECT_NAME_STRING ) { - TQWidget *w = new QDesignerDataBrowser( parent, name ); - if ( parent ) - w->reparent( parent, TQPoint( 0, 0 ), TRUE ); - return w; - } else if ( className == TQDATAVIEW_OBJECT_NAME_STRING ) { - TQWidget *w = new QDesignerDataView( parent, name ); - if ( parent ) - w->reparent( parent, TQPoint( 0, 0 ), TRUE ); - return w; - } -#endif - - WidgetInterface *iface = 0; - widgetManager()->queryInterface( className, &iface ); - if ( !iface ) - return 0; - - TQWidget *w = iface->create( className, parent, name ); -#ifdef TQT_CONTAINER_CUSTOM_WIDGETS - if ( init && WidgetDatabase::isCustomPluginWidget( WidgetDatabase::idFromClassName( className ) ) ) { - TQWidgetContainerInterfacePrivate *iface2 = 0; - iface->queryInterface( IID_TQWidgetContainer, (TQUnknownInterface**)&iface2 ); - if ( iface2 ) { - iface2->addPage( className, w, "Page", -1 ); - iface2->release(); - } - } -#endif // TQT_CONTAINER_CUSTOM_WIDGETS - iface->release(); - return w; -} - - - -/*! Find out which type the layout of the widget is. Returns \c HBox, - \c VBox, \c Grid or \c NoLayout. \a layout points to this - TQWidget::layout() of \a w or to 0 after the function call. -*/ - -WidgetFactory::LayoutType WidgetFactory::layoutType( TQWidget *w, TQLayout *&layout ) -{ - layout = 0; - - if ( ::tqqt_cast<TQTabWidget*>(w) ) - w = ((TQTabWidget*)w)->currentPage(); - if ( ::tqqt_cast<TQWizard*>(w) ) - w = ((TQWizard*)w)->currentPage(); - if ( ::tqqt_cast<TQMainWindow*>(w) ) - w = ((TQMainWindow*)w)->centralWidget(); - if ( ::tqqt_cast<TQWidgetStack*>(w) ) - w = ((TQWidgetStack*)w)->visibleWidget(); - if ( ::tqqt_cast<TQToolBox*>(w) ) - w = ((TQToolBox*)w)->currentItem(); - - if ( ::tqqt_cast<TQSplitter*>(w) ) - return ( (TQSplitter*)w )->orientation() ==Qt::Horizontal ? HBox : VBox; - - if ( !w || !w->layout() ) - return NoLayout; - TQLayout *lay = w->layout(); - - if ( ::tqqt_cast<TQGroupBox*>(w) ) { - TQObjectList *l = TQT_TQOBJECT(lay)->queryList( TQLAYOUT_OBJECT_NAME_STRING ); - if ( l && l->first() ) - lay = (TQLayout*)l->first(); - delete l; - } - layout = lay; - - if ( ::tqqt_cast<TQHBoxLayout*>(lay) ) - return HBox; - else if ( ::tqqt_cast<TQVBoxLayout*>(lay) ) - return VBox; - else if ( ::tqqt_cast<TQGridLayout*>(lay) ) - return Grid; - return NoLayout; -} - -/*! - \overload -*/ -WidgetFactory::LayoutType WidgetFactory::layoutType( TQLayout *layout ) -{ - if ( ::tqqt_cast<TQHBoxLayout*>(layout) ) - return HBox; - else if ( ::tqqt_cast<TQVBoxLayout*>(layout) ) - return VBox; - else if ( ::tqqt_cast<TQGridLayout*>(layout) ) - return Grid; - return NoLayout; -} - -/*! - \overload -*/ -WidgetFactory::LayoutType WidgetFactory::layoutType( TQWidget *w ) -{ - TQLayout *l = 0; - return layoutType( w, l ); -} - - -TQWidget *WidgetFactory::layoutParent( TQLayout *layout ) -{ - TQObject *o = TQT_TQOBJECT(layout); - while ( o ) { - if ( o->isWidgetType() ) - return (TQWidget*)o; - o = o->parent(); - } - return 0; -} - -/*! Returns the widget into which children should be inserted when \a - w is a container known to the designer. - - Usually that is \a w itself, sometimes it is different (e.g. a - tabwidget is known to the designer as a container but the child - widgets should be inserted into the current page of the - tabwidget. So in this case this function returns the current page of - the tabwidget.) - */ -TQWidget* WidgetFactory::containerOfWidget( TQWidget *w ) -{ - if ( !w ) - return w; - if ( ::tqqt_cast<TQTabWidget*>(w) ) - return ((TQTabWidget*)w)->currentPage(); - if ( ::tqqt_cast<TQWizard*>(w) ) - return ((TQWizard*)w)->currentPage(); - if ( ::tqqt_cast<TQWidgetStack*>(w) ) - return ((TQWidgetStack*)w)->visibleWidget(); - if ( ::tqqt_cast<TQToolBox*>(w) ) - return ((TQToolBox*)w)->currentItem(); - if ( ::tqqt_cast<TQMainWindow*>(w) ) - return ((TQMainWindow*)w)->centralWidget(); -#ifdef TQT_CONTAINER_CUSTOM_WIDGETS - if ( !WidgetDatabase::isCustomPluginWidget( WidgetDatabase::idFromClassName( classNameOf( w ) ) ) ) - return w; - WidgetInterface *iface = 0; - widgetManager()->queryInterface( classNameOf( w ), &iface ); - if ( !iface ) - return w; - TQWidgetContainerInterfacePrivate *iface2 = 0; - iface->queryInterface( IID_TQWidgetContainer, (TQUnknownInterface**)&iface2 ); - if ( !iface2 ) - return w; - TQWidget *c = iface2->containerOfWidget( w->className(), w ); - iface2->release(); - iface->release(); - if ( c ) - return c; -#endif // TQT_CONTAINER_CUSTOM_WIDGETS - return w; -} - -/*! Returns the actual designer widget of the container \a w. This is - normally \a w itself, but might be a parent or grand parent of \a w - (e.g. when working with a tabwidget and \a w is the container which - contains and layouts childs, but the actual widget known to the - designer is the tabwidget which is the parent of \a w. So this - function returns the tabwidget then.) -*/ - -TQWidget* WidgetFactory::widgetOfContainer( TQWidget *w ) -{ - if ( w && ::tqqt_cast<TQWidgetStack*>(w->parentWidget()) ) - w = w->parentWidget(); - if ( w->parentWidget() && w->parentWidget()->parentWidget() && - w->parentWidget()->parentWidget()->parentWidget() && - ::tqqt_cast<TQToolBox*>(w->parentWidget()->parentWidget()->parentWidget()) ) - return w->parentWidget()->parentWidget()->parentWidget(); - while ( w ) { - int id = WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( TQT_TQOBJECT(w) ) ); - if ( WidgetDatabase::isContainer( id ) || - w && ::tqqt_cast<FormWindow*>(w->parentWidget()) ) - return w; - w = w->parentWidget(); - } - return w; -} - -/*! - Returns whether \a o is a passive interactor or not. - */ - -bool WidgetFactory::lastWasAPassiveInteractor = FALSE; -TQGuardedPtr<TQObject> *WidgetFactory::lastPassiveInteractor = new TQGuardedPtr<TQObject>(); - -bool WidgetFactory::isPassiveInteractor( TQObject* o ) -{ - if ( lastPassiveInteractor && *lastPassiveInteractor && (TQObject*)(*lastPassiveInteractor) == o ) - return lastWasAPassiveInteractor; - lastWasAPassiveInteractor = FALSE; - (*lastPassiveInteractor) = o; - if ( TQApplication::activePopupWidget() ) // if a popup is open, we have to make sure that this one is closed, else X might do funny things - return ( lastWasAPassiveInteractor = TRUE ); - - if ( ::tqqt_cast<TQTabBar*>(o) ) - return ( lastWasAPassiveInteractor = TRUE ); - else if ( ::tqqt_cast<TQSizeGrip*>(o) ) - return ( lastWasAPassiveInteractor = TRUE ); - else if ( ::tqqt_cast<TQButton*>(o) && - ( ::tqqt_cast<TQTabBar*>(o->parent()) || ::tqqt_cast<TQToolBox*>(o->parent()) ) ) - return ( lastWasAPassiveInteractor = TRUE ); - else if ( ::tqqt_cast<TQPushButton*>(o) && ::tqqt_cast<TQWizard*>(o->parent()) ) - return ( lastWasAPassiveInteractor = TRUE ); - else if ( ::tqqt_cast<TQMenuBar*>(o) && ::tqqt_cast<TQMainWindow*>(o->parent()) ) - return ( lastWasAPassiveInteractor = TRUE ); -// else if ( ::tqqt_cast<TQDockWindowHandle*>(o) ) - else if ( o->inherits( TQDOCKWINDOWHANDLE_OBJECT_NAME_STRING ) ) - return ( lastWasAPassiveInteractor = TRUE ); -// else if ( ::tqqt_cast<TQHideDock*>(o) ) - else if ( o->inherits( TQHIDEDOCK_OBJECT_NAME_STRING ) ) - return ( lastWasAPassiveInteractor = TRUE ); - else if ( qstrcmp( o->name(), "designer_wizardstack_button" ) == 0 ) - return ( lastWasAPassiveInteractor = TRUE ); -#ifdef TQT_CONTAINER_CUSTOM_WIDGETS - if ( !o->isWidgetType() ) - return ( lastWasAPassiveInteractor = FALSE ); - WidgetInterface *iface = 0; - TQWidget *w = (TQWidget*)o; - while ( !iface && w && !::tqqt_cast<FormWindow*>(w) ) { - widgetManager()->queryInterface( classNameOf( w ), &iface ); - w = w->parentWidget(); - } - if ( !iface ) - return ( lastWasAPassiveInteractor = FALSE ); - TQWidgetContainerInterfacePrivate *iface2 = 0; - iface->queryInterface( IID_TQWidgetContainer, (TQUnknownInterface**)&iface2 ); - if ( !iface2 ) - return ( lastWasAPassiveInteractor = FALSE ); - TQWidget *fw = MainWindow::self->isAFormWindowChild( (TQWidget*)o ); - if ( !fw ) - return ( lastWasAPassiveInteractor = FALSE ); - TQWidget *dw = ( (FormWindow*)fw )->designerWidget( (TQWidget*)o ); - if ( !dw ) - return ( lastWasAPassiveInteractor = FALSE ); - lastWasAPassiveInteractor = iface2->isPassiveInteractor( dw->className(), (TQWidget*)o ); - iface2->release(); - iface->release(); -#endif // TQT_CONTAINER_CUSTOM_WIDGETS - return lastWasAPassiveInteractor; -} - - -/*! - Returns the class name of object \a o that should be used for externally (i.e. for saving) - */ -const char* WidgetFactory::classNameOf( TQObject* o ) -{ - if ( o->isA( "PropertyObject" ) ) - return o->className(); - if (WidgetDatabase::isCustomPluginWidget(WidgetDatabase::idFromClassName(o->className()))) - return o->className(); - else if ( ::tqqt_cast<QDesignerTabWidget*>(o) ) - return TQTABWIDGET_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<QDesignerWidgetStack*>(o) ) - return TQWIDGETSTACK_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<TQWidgetStack*>(o) ) - return "TQWeDoNotWantToBreakTabWidget"; - else if ( ::tqqt_cast<QDesignerDialog*>(o) ) - return TQDIALOG_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<QDesignerWidget*>(o) ) - return TQWIDGET_OBJECT_NAME_STRING; - else if ( o->inherits( "CustomWidget" ) ) - return ( (CustomWidget*)o )->realClassName().latin1(); - else if ( ::tqqt_cast<QDesignerLabel*>(o) ) - return TQLABEL_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<QDesignerWizard*>(o) ) - return TQWIZARD_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<QDesignerPushButton*>(o) ) - return TQPUSHBUTTON_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<QDesignerToolButton*>(o) ) - return TQTOOLBUTTON_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<QDesignerRadioButton*>(o) ) - return TQRADIOBUTTON_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<QDesignerCheckBox*>(o) ) - return TQCHECKBOX_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<MenuBarEditor*>(o) ) - return TQMENUBAR_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<QDesignerToolBar*>(o) ) - return TQTOOLBAR_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<QDesignerAction*>(o) ) - return TQACTION_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<QDesignerActionGroup*>(o) ) - return TQACTIONGROUP_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<PopupMenuEditor*>(o) ) - return TQPOPUPMENU_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<QDesignerToolBox*>(o) ) - return TQTOOLBOX_OBJECT_NAME_STRING; -#ifndef TQT_NO_SQL - else if ( ::tqqt_cast<QDesignerDataBrowser*>(o) ) - return TQDATABROWSER_OBJECT_NAME_STRING; - else if ( ::tqqt_cast<QDesignerDataView*>(o) ) - return TQDATAVIEW_OBJECT_NAME_STRING; -#endif - return o->className(); -} - -TQString WidgetFactory::defaultSignal( TQObject *w ) -{ - if ( ::tqqt_cast<TQRadioButton*>(w) || ::tqqt_cast<TQCheckBox*>(w) ) - return "toggled"; - else if ( ::tqqt_cast<TQButton*>(w) || ::tqqt_cast<TQButtonGroup*>(w) ) - return "clicked"; - else if ( ::tqqt_cast<TQTextBrowser*>(w) ) - return "linkClicked"; - else if ( ::tqqt_cast<TQLineEdit*>(w) || ::tqqt_cast<TQTextEdit*>(w) ) - return "textChanged"; - else if ( ::tqqt_cast<TQListView*>(w) || ::tqqt_cast<TQIconView*>(w) || - ::tqqt_cast<TQListBox*>(w) || ::tqqt_cast<TQTable*>(w) ) - return "selectionChanged"; - else if ( ::tqqt_cast<TQTabWidget*>(w) ) - return "selected"; - else if ( ::tqqt_cast<TQToolBox*>(w) ) - return "currentChanged"; - else if ( ::tqqt_cast<TQWidgetStack*>(w) ) - return "aboutToShow"; - else if ( ::tqqt_cast<TQSpinBox*>(w) || ::tqqt_cast<TQSlider*>(w) || - ::tqqt_cast<TQScrollBar*>(w) || ::tqqt_cast<TQDateEdit*>(w) || - ::tqqt_cast<TQTimeEdit*>(w) || ::tqqt_cast<TQDateTimeEdit*>(w) || - ::tqqt_cast<TQDial*>(w) ) - return "valueChanged"; - else if ( ::tqqt_cast<TQComboBox*>(w) ) - return "activated"; - return TQString(); -} - -/*! As some properties are set by default when creating a widget this - functions markes this properties as changed. Has to be in sync with - createWidget()! -*/ - -void WidgetFactory::initChangedProperties( TQObject *o ) -{ - if ( MainWindow::self && MainWindow::self->currProject() && - MainWindow::self->currProject()->fakeFormFileFor( o ) ) - return; - MetaDataBase::setPropertyChanged( o, "name", TRUE ); - if ( !::tqqt_cast<QDesignerToolBar*>(o) && !::tqqt_cast<MenuBarEditor*>(o) ) - MetaDataBase::setPropertyChanged( o, "geometry", TRUE ); - - if ( ::tqqt_cast<TQPushButton*>(o) || - ::tqqt_cast<TQRadioButton*>(o) || - ::tqqt_cast<TQCheckBox*>(o) || - ::tqqt_cast<TQToolButton*>(o) ) { - if (::tqqt_cast<TQToolButton*>(o) && ::tqqt_cast<TQToolBox*>(widgetOfContainer((TQWidget*)o->parent()))) { - MetaDataBase::setPropertyChanged( o, "usesTextLabel", TRUE ); - MetaDataBase::setPropertyChanged( o, "textLabel", TRUE ); - MetaDataBase::setPropertyChanged( o, "autoRaise", TRUE ); - MetaDataBase::setPropertyChanged( o, "textPosition", TRUE ); - } else { - MetaDataBase::setPropertyChanged( o, "text", TRUE ); - } - } - else if ( ::tqqt_cast<TQGroupBox*>(o) ) - MetaDataBase::setPropertyChanged( o, "title", TRUE ); - else if ( o->isA( TQFRAME_OBJECT_NAME_STRING ) ) { - MetaDataBase::setPropertyChanged( o, "frameShadow", TRUE ); - MetaDataBase::setPropertyChanged( o, "frameShape", TRUE ); - } else if ( ::tqqt_cast<TQTabWidget*>(o) || ::tqqt_cast<TQWizard*>(o) ) { - MetaDataBase::setPropertyChanged( o, "pageTitle", TRUE ); - MetaDataBase::setPropertyChanged( o, "pageName", TRUE ); - MetaDataBase::setPropertyChanged( o, "currentPage", TRUE ); - } else if ( ::tqqt_cast<TQWidgetStack*>(o) ) { - MetaDataBase::setPropertyChanged( o, "currentPage", TRUE ); - MetaDataBase::setPropertyChanged( o, "pageName", TRUE ); - } else if ( ::tqqt_cast<TQToolBox*>(o) ) { - MetaDataBase::setPropertyChanged( o, "currentIndex", TRUE ); - MetaDataBase::setPropertyChanged( o, "itemName", TRUE ); - MetaDataBase::setPropertyChanged( o, "itemLabel", TRUE ); - MetaDataBase::setPropertyChanged( o, "itemIconSet", TRUE ); - MetaDataBase::setPropertyChanged( o, "itemToolTip", TRUE ); - MetaDataBase::setPropertyChanged( o, "itemBackgroundMode", TRUE ); -#ifndef TQT_NO_TABLE - } else if ( ::tqqt_cast<TQTable*>(o) ) { -# ifndef TQT_NO_SQL - if (!::tqqt_cast<TQDataTable*>(o) ) -# endif - { - MetaDataBase::setPropertyChanged( o, "numRows", TRUE ); - MetaDataBase::setPropertyChanged( o, "numCols", TRUE ); - TQTable *t = (TQTable*)o; - for ( int i = 0; i < 3; ++i ) { - t->horizontalHeader()->setLabel( i, TQString::number( i + 1 ) ); - t->verticalHeader()->setLabel( i, TQString::number( i + 1 ) ); - } - } -#endif - } else if ( ::tqqt_cast<TQSplitter*>(o) ) { - MetaDataBase::setPropertyChanged( o, "orientation", TRUE ); - } else if ( ::tqqt_cast<QDesignerToolBar*>(o) ) { - MetaDataBase::setPropertyChanged( o, "label", TRUE ); - } else if ( ::tqqt_cast<MenuBarEditor*>(o) ) { - MetaDataBase::setPropertyChanged( o, "itemName", TRUE ); - MetaDataBase::setPropertyChanged( o, "itemNumber", TRUE ); - MetaDataBase::setPropertyChanged( o, "itemText", TRUE ); - } -} - -bool WidgetFactory::hasSpecialEditor( int id, TQObject *editorWidget ) -{ - TQString className = WidgetDatabase::className( id ); - - if ( className.contains( "ListBox" ) ) - return TRUE; - if ( className.contains( "ComboBox" ) ) - return TRUE; - if ( className.contains( "ListView" ) ) - return TRUE; - if ( className.contains( "IconView" ) ) - return TRUE; - if ( className == TQTEXTEDIT_OBJECT_NAME_STRING || className == TQMULTILINEEDIT_OBJECT_NAME_STRING ) - return TRUE; - if ( ::tqqt_cast<TQTable*>(editorWidget) != 0 ) - return TRUE; - - return FALSE; -} - -bool WidgetFactory::hasItems( int id, TQObject *editorWidget ) -{ - TQString className = WidgetDatabase::className( id ); - - if ( className.contains( "ListBox" ) || className.contains( "ListView" ) || - className.contains( "IconView" ) || className.contains( "ComboBox" ) || - ::tqqt_cast<TQTable*>(editorWidget) != 0 ) - return TRUE; - - return FALSE; -} - -void WidgetFactory::editWidget( int id, TQWidget *parent, TQWidget *editWidget, FormWindow *fw ) -{ - TQString className = WidgetDatabase::className( id ); - - if ( className.contains( "ListBox" ) ) { - if ( !::tqqt_cast<TQListBox*>(editWidget) ) - return; - ListBoxEditor *e = new ListBoxEditor( parent, editWidget, fw ); - e->exec(); - delete e; - return; - } - - if ( className.contains( "ComboBox" ) ) { - if ( !::tqqt_cast<TQComboBox*>(editWidget) ) - return; - TQComboBox *cb = (TQComboBox*)editWidget; - ListBoxEditor *e = new ListBoxEditor( parent, cb->listBox(), fw ); - e->exec(); - delete e; - cb->update(); - return; - } - - if ( className.contains( "ListView" ) ) { - if ( !::tqqt_cast<TQListView*>(editWidget) ) - return; - TQListView *lv = (TQListView*)editWidget; - ListViewEditor *e = new ListViewEditor( parent, lv, fw ); - e->exec(); - delete e; - return; - } - - if ( className.contains( "IconView" ) ) { - if ( !::tqqt_cast<TQIconView*>(editWidget) ) - return; - IconViewEditor *e = new IconViewEditor( parent, editWidget, fw ); - e->exec(); - delete e; - return; - } - - if ( className == TQMULTILINEEDIT_OBJECT_NAME_STRING || className == TQTEXTEDIT_OBJECT_NAME_STRING ) { - MultiLineEditor *e = new MultiLineEditor( FALSE, TRUE, parent, editWidget, fw ); - e->exec(); - delete e; - return; - } -#ifndef TQT_NO_TABLE - if (::tqqt_cast<TQTable*>(editWidget) != 0) { - TableEditor *e = new TableEditor( parent, editWidget, fw ); - e->exec(); - delete e; - return; - } -#endif -} - -bool WidgetFactory::canResetProperty( TQObject *w, const TQString &propName ) -{ - if ( propName == "name" || propName == "geometry" ) - return FALSE; - TQStringList l = *changedProperties->find( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( w ) ) ); - return l.findIndex( propName ) == -1; -} - -bool WidgetFactory::resetProperty( TQObject *w, const TQString &propName ) -{ - const TQMetaProperty *p = w->metaObject()->property( w->metaObject()-> - findProperty( propName, TRUE ), TRUE ); - if (!p ) - return FALSE; - return p->reset( w ); -} - -TQVariant WidgetFactory::defaultValue( TQObject *w, const TQString &propName ) -{ - if ( propName == "wordwrap" ) { - int v = defaultValue( w, "alignment" ).toInt(); - return TQVariant( ( v & WordBreak ) == WordBreak, 0 ); - } else if ( propName == "toolTip" || propName == "whatsThis" ) { - return TQVariant( TQString::fromLatin1( "" ) ); - } else if ( w->inherits( "CustomWidget" ) ) { - return TQVariant(); - } else if ( propName == "frameworkCode" ) { - return TQVariant( TRUE, 0 ); - } else if ( propName == "layoutMargin" || propName == "layoutSpacing" ) { - return TQVariant( -1 ); - } - - return *( *defaultProperties->find( WidgetDatabase::idFromClassName( classNameOf( w ) ) ) ).find( propName ); -} - -TQString WidgetFactory::defaultCurrentItem( TQObject *w, const TQString &propName ) -{ - const TQMetaProperty *p = w->metaObject()-> - property( w->metaObject()->findProperty( propName, TRUE ), TRUE ); - if ( !p ) { - int v = defaultValue( w, "alignment" ).toInt(); - if ( propName == "hAlign" ) { - if ( ( v & AlignAuto ) == AlignAuto ) - return "AlignAuto"; - if ( ( v & AlignLeft ) == AlignLeft ) - return "AlignLeft"; - if ( ( v & AlignCenter ) == AlignCenter || ( v & AlignHCenter ) == AlignHCenter ) - return "AlignHCenter"; - if ( ( v & AlignRight ) == AlignRight ) - return "AlignRight"; - if ( ( v & AlignJustify ) == AlignJustify ) - return "AlignJustify"; - } else if ( propName == "vAlign" ) { - if ( ( v & AlignTop ) == AlignTop ) - return "AlignTop"; - if ( ( v & AlignCenter ) == AlignCenter || ( v & AlignVCenter ) == AlignVCenter ) - return "AlignVCenter"; - if ( ( v & AlignBottom ) == AlignBottom ) - return "AlignBottom"; - } else if ( propName == "resizeMode" ) { - return "Auto"; - } - return TQString(); - - } - return p->valueToKey( defaultValue( w, propName ).toInt() ); -} - -TQWidget *WidgetFactory::createCustomWidget( TQWidget *parent, const char *name, MetaDataBase::CustomWidget *w ) -{ - if ( !w ) - return 0; - return new CustomWidget( parent, name, w ); -} - -TQVariant WidgetFactory::property( TQObject *w, const char *name ) -{ - int id = w->metaObject()->findProperty( name, TRUE ); - const TQMetaProperty* p = w->metaObject()->property( id, TRUE ); - if ( !p || !p->isValid() ) - return MetaDataBase::fakeProperty( w, name ); - return w->property( name ); -} - -void QDesignerLabel::updateBuddy() -{ - - if ( myBuddy.isEmpty() ) - return; - - TQObjectList *l = topLevelWidget()->queryList( TQWIDGET_OBJECT_NAME_STRING, myBuddy, FALSE, TRUE ); - if ( !l || !l->first() ) { - delete l; - return; - } - - TQLabel::setBuddy( (TQWidget*)l->first() ); - delete l; -} - - -void QDesignerWidget::resizeEvent( TQResizeEvent* e) -{ - if ( need_frame ) { - TQPainter p(this); - p.setPen( backgroundColor() ); - p.drawRect( TQRect( TQPoint(0,0), e->oldSize() ) ); - } -} - -void QDesignerWidget::paintEvent( TQPaintEvent *e ) -{ - if ( need_frame ) { - TQPainter p(this); - p.setPen( backgroundColor().dark() ); - p.drawRect( rect() ); - } - formwindow->paintGrid( this, e ); -} - -void QDesignerDialog::paintEvent( TQPaintEvent *e ) -{ - formwindow->paintGrid( this, e ); -} - -TQSizePolicy TQLayoutWidget::sizePolicy() const -{ - return sp; -} - -bool TQLayoutWidget::event( TQEvent *e ) -{ - if ( e && ( e->type() == TQEvent::ChildInserted || - e->type() == TQEvent::ChildRemoved || - e->type() == TQEvent::LayoutHint || - e->type() == TQEvent::Reparent ) ) - updateSizePolicy(); - return TQWidget::event( e ); -} - -/* - This function must be called on TQLayoutWidget creation and whenever - the TQLayoutWidget's parent layout changes (e.g., from a TQHBoxLayout - to a TQVBoxLayout), because of the (illogical) way layouting works. -*/ -void TQLayoutWidget::updateSizePolicy() -{ - if ( childrenListObject().isEmpty() || childrenListObject().count() == 0 ) { - sp = TQWidget::sizePolicy(); - return; - } - - /* - TQSizePolicy::MayShrink & friends are private. Here we assume the - following: - - Fixed = 0 - Maximum = MayShrink - Minimum = MayGrow - Preferred = MayShrink | MayGrow - */ - - int ht = (int) TQSizePolicy::Preferred; - int vt = (int) TQSizePolicy::Preferred; - - if ( layout() ) { - /* - parentLayout is set to the parent layout if there is one and if it is - top level, in which case layouting is illogical. - */ - TQLayout *parentLayout = 0; - if ( parent() && parent()->isWidgetType() ) { - parentLayout = ((TQWidget *)parent())->layout(); - if ( parentLayout && - ::tqqt_cast<TQLayoutWidget*>(parentLayout->mainWidget()) ) - parentLayout = 0; - } - - TQObjectListIt it( childrenListObject() ); - TQObject *o; - - if ( ::tqqt_cast<TQVBoxLayout*>(layout()) ) { - if ( ::tqqt_cast<TQHBoxLayout*>(parentLayout) ) - vt = TQSizePolicy::Minimum; - else - vt = TQSizePolicy::Fixed; - - while ( ( o = it.current() ) ) { - ++it; - if ( !o->isWidgetType() || ( (TQWidget*)o )->testWState( WState_ForceHide ) ) - continue; - TQWidget *w = (TQWidget*)o; - - if ( !w->sizePolicy().mayGrowHorizontally() ) - ht &= ~TQSizePolicy::Minimum; - if ( !w->sizePolicy().mayShrinkHorizontally() ) - ht &= ~TQSizePolicy::Maximum; - if ( w->sizePolicy().mayGrowVertically() ) - vt |= TQSizePolicy::Minimum; - if ( w->sizePolicy().mayShrinkVertically() ) - vt |= TQSizePolicy::Maximum; - } - } else if ( ::tqqt_cast<TQHBoxLayout*>(layout()) ) { - if ( ::tqqt_cast<TQVBoxLayout*>(parentLayout) ) - ht = TQSizePolicy::Minimum; - else - ht = TQSizePolicy::Fixed; - - while ( ( o = it.current() ) ) { - ++it; - if ( !o->isWidgetType() || ( (TQWidget*)o )->testWState( WState_ForceHide ) ) - continue; - TQWidget *w = (TQWidget*)o; - - if ( w->sizePolicy().mayGrowHorizontally() ) - ht |= TQSizePolicy::Minimum; - if ( w->sizePolicy().mayShrinkHorizontally() ) - ht |= TQSizePolicy::Maximum; - if ( !w->sizePolicy().mayGrowVertically() ) - vt &= ~TQSizePolicy::Minimum; - if ( !w->sizePolicy().mayShrinkVertically() ) - vt &= ~TQSizePolicy::Maximum; - } - } else if ( ::tqqt_cast<TQGridLayout*>(layout()) ) { - ht = TQSizePolicy::Fixed; - vt = TQSizePolicy::Fixed; - if ( parentLayout ) { - if ( ::tqqt_cast<TQVBoxLayout*>(parentLayout) ) - ht = TQSizePolicy::Minimum; - else if ( ::tqqt_cast<TQHBoxLayout*>(parentLayout) ) - vt = TQSizePolicy::Minimum; - } - - while ( ( o = it.current() ) ) { - ++it; - if ( !o->isWidgetType() || ( (TQWidget*)o )->testWState( WState_ForceHide ) ) - continue; - TQWidget *w = (TQWidget*)o; - - if ( w->sizePolicy().mayGrowHorizontally() ) - ht |= TQSizePolicy::Minimum; - if ( w->sizePolicy().mayShrinkHorizontally() ) - ht |= TQSizePolicy::Maximum; - if ( w->sizePolicy().mayGrowVertically() ) - vt |= TQSizePolicy::Minimum; - if ( w->sizePolicy().mayShrinkVertically() ) - vt |= TQSizePolicy::Maximum; - } - } -#ifdef USE_QT4 - if ( layout()->expanding() & TQSizePolicy::Horizontally ) -#else // USE_QT4 - if ( layout()->expanding() & TQSizePolicy::Horizontally ) -#endif // USE_QT4 - ht = TQSizePolicy::Expanding; -#ifdef USE_QT4 - if ( layout()->expanding() & TQSizePolicy::Vertically ) -#else // USE_QT4 - if ( layout()->expanding() & TQSizePolicy::Vertically ) -#endif // USE_QT4 - vt = TQSizePolicy::Expanding; - - layout()->invalidate(); - } - - sp = TQSizePolicy( (TQSizePolicy::SizeType) ht, (TQSizePolicy::SizeType) vt ); - updateGeometry(); -} - -void CustomWidget::paintEvent( TQPaintEvent *e ) -{ - if ( ::tqqt_cast<FormWindow*>(parentWidget()) ) { - ( (FormWindow*)parentWidget() )->paintGrid( this, e ); - } else { - TQPainter p( this ); - p.fillRect( rect(), colorGroup().dark() ); - p.setPen( colorGroup().light() ); - p.drawText( 2, 2, width() - 4, height() - 4, TQt::AlignAuto | TQt::AlignTop, cusw->className ); - p.drawPixmap( ( width() - cusw->pixmap->width() ) / 2, - ( height() - cusw->pixmap->height() ) / 2, - *cusw->pixmap ); - } -} - - -CustomWidgetFactory::CustomWidgetFactory() -{ -} - -TQWidget *CustomWidgetFactory::createWidget( const TQString &className, TQWidget *parent, const char *name ) const -{ - MetaDataBase::CustomWidget *w = MetaDataBase::customWidget( WidgetDatabase::idFromClassName( className ) ); - if ( !w ) - return 0; - return WidgetFactory::createCustomWidget( parent, name, w ); -} - - -QDesignerToolBox::QDesignerToolBox( TQWidget *parent, const char *name ) - : TQToolBox( parent, name ) -{ -} - -TQString QDesignerToolBox::itemLabel() const -{ - return TQToolBox::itemLabel( currentIndex() ); -} - -void QDesignerToolBox::setItemLabel( const TQString &l ) -{ - TQToolBox::setItemLabel( currentIndex(), l ); -} - -TQCString QDesignerToolBox::itemName() const -{ - return currentItem() ? currentItem()->name() : 0; -} - -void QDesignerToolBox::setItemName( const TQCString &n ) -{ - if (currentItem()) - currentItem()->setName( n ); -} - - -TQt::BackgroundMode QDesignerToolBox::itemBackgroundMode() const -{ - return (item(0) ? item(0)->backgroundMode() : PaletteBackground); -} - -void QDesignerToolBox::setItemBackgroundMode( BackgroundMode bmode ) -{ - for (int i = 0; i < count(); ++i) { - TQWidget *w = item(i); - w->setBackgroundMode( bmode ); - w->update(); - } -} - -void QDesignerToolBox::itemInserted( int index ) -{ - if (count() > 1) - item(index)->setBackgroundMode(item(index>0?0:1)->backgroundMode()); -} |