You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdewebdev/kommander/editor/widgetfactory.h

489 lines
14 KiB

/**********************************************************************
** Copyright (C) 2000 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.
**
** 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.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#ifndef WIDGETFACTORY_H
#define WIDGETFACTORY_H
#include <tqvariant.h>
#include <tqiconset.h>
#include <tqstring.h>
#include <tqintdict.h>
#include <tqtabwidget.h>
#include <tqpixmap.h>
#include <tqsize.h>
#include <tqpainter.h>
#include <tqevent.h>
#include <tqobjectlist.h>
#include <tqlabel.h>
#include <tqwizard.h>
#include <tqptrdict.h>
#include <tqpushbutton.h>
#include <tqtoolbutton.h>
#include <tqcheckbox.h>
#include <tqradiobutton.h>
#include <tqbuttongroup.h>
#include "metadatabase.h"
#ifndef KOMMANDER
#include "tqwidgetfactory.h"
#include "ewidgetfactory.h"
#else
#include "kommanderfactory.h"
#endif
/* KOMMANDER INCLUDES */
#include <dialog.h>
#include <wizard.h>
#include <tabwidget.h>
#include "toolbox.h"
class TQWidget;
class TQLayout;
class FormWindow;
class WidgetFactory : public TQt
{
friend class CustomWidgetFactory;
public:
enum LayoutType {
HBox,
VBox,
Grid,
NoLayout
};
static TQWidget *create( int id, TQWidget *parent, const char *name = 0, bool init = TRUE,
const TQRect *rect = 0, Qt::Orientation orient = Qt::Horizontal );
static TQLayout *createLayout( TQWidget *widget, TQLayout* tqlayout, LayoutType type );
static void deleteLayout( TQWidget *widget );
static LayoutType layoutType( TQWidget *w );
static LayoutType layoutType( TQWidget *w, TQLayout *&tqlayout );
static LayoutType layoutType( TQLayout *tqlayout );
static TQWidget *layoutParent( TQLayout *tqlayout );
static TQWidget* containerOfWidget( TQWidget *w );
static TQWidget* widgetOfContainer( TQWidget *w );
static bool isPassiveInteractor( TQObject* o );
static const char* classNameOf( TQObject* o );
static void initChangedProperties( TQObject *o );
static bool hasSpecialEditor( int id );
static bool hasItems( int id );
static void editWidget( int id, TQWidget *parent, TQWidget *editWidget, FormWindow *fw );
static bool canResetProperty( TQObject *w, const TQString &propName );
static bool resetProperty( TQObject *w, const TQString &propName );
static TQVariant defaultValue( TQObject *w, const TQString &propName );
static TQString defaultCurrentItem( TQObject *w, const TQString &propName );
static TQVariant property( TQObject *w, const char *name );
static void saveDefaultProperties( TQWidget *w, int id );
private:
static TQWidget *createWidget( const TQString &className, TQWidget *parent, const char *name, bool init,
const TQRect *r = 0, Qt::Orientation orient = Qt::Horizontal );
static TQWidget *createCustomWidget( TQWidget *parent, const char *name, MetaDataBase::CustomWidget *w );
};
class QDesignerTabWidget : public TQTabWidget
{
Q_OBJECT
TQ_OBJECT
TQ_PROPERTY( int currentPage READ currentPage WRITE setCurrentPage STORED false DESIGNABLE true )
TQ_PROPERTY( TQString pageTitle READ pageTitle WRITE setPageTitle STORED false DESIGNABLE true )
TQ_PROPERTY( TQCString pageName READ pageName WRITE setPageName STORED false DESIGNABLE true )
public:
QDesignerTabWidget( TQWidget *parent, const char *name );
int currentPage() const;
void setCurrentPage( int i );
TQString pageTitle() const;
void setPageTitle( const TQString& title );
TQCString pageName() const;
void setPageName( const TQCString& name );
int count() const;
TQTabBar *tabBar() const { return TQTabWidget::tabBar(); }
bool eventFilter( TQObject*, TQEvent* );
private:
TQPoint pressPoint;
TQWidget *dropIndicator;
TQWidget *dragPage;
TQString dragLabel;
bool mousePressed;
};
class EditorTabWidget : public TabWidget
{
Q_OBJECT
TQ_OBJECT
TQ_PROPERTY( int currentPage READ currentPage WRITE setCurrentPage STORED false DESIGNABLE true )
TQ_PROPERTY( TQString pageTitle READ pageTitle WRITE setPageTitle STORED false DESIGNABLE true )
TQ_PROPERTY( TQCString pageName READ pageName WRITE setPageName STORED false DESIGNABLE true )
public:
EditorTabWidget( TQWidget *parent, const char *name );
int currentPage() const;
void setCurrentPage( int i );
TQString pageTitle() const;
void setPageTitle( const TQString& title );
TQCString pageName() const;
void setPageName( const TQCString& name );
int count() const;
TQTabBar *tabBar() const { return TQTabWidget::tabBar(); }
bool eventFilter( TQObject*, TQEvent* );
private:
TQPoint pressPoint;
TQWidget *dropIndicator;
TQWidget *dragPage;
TQString dragLabel;
bool mousePressed;
};
class EditorToolBox : public ToolBox
{
Q_OBJECT
TQ_OBJECT
TQ_PROPERTY( int currentPage READ currentPage WRITE setCurrentPage STORED false DESIGNABLE true )
TQ_PROPERTY( TQString pageTitle READ pageTitle WRITE setPageTitle STORED false DESIGNABLE true )
TQ_PROPERTY( TQCString pageName READ pageName WRITE setPageName STORED false DESIGNABLE true )
public:
EditorToolBox( TQWidget *parent, const char *name );
int currentPage() const;
void setCurrentPage( int i );
TQString pageTitle() const;
void setPageTitle( const TQString& title );
TQCString pageName() const;
void setPageName( const TQCString& name );
int count() const;
};
class QDesignerWizard : public TQWizard
{
Q_OBJECT
TQ_OBJECT
TQ_PROPERTY( int currentPage READ currentPageNum WRITE setCurrentPage STORED false DESIGNABLE true )
TQ_PROPERTY( TQString pageTitle READ pageTitle WRITE setPageTitle STORED false DESIGNABLE true )
TQ_PROPERTY( TQCString pageName READ pageName WRITE setPageName STORED false DESIGNABLE true )
public:
QDesignerWizard( TQWidget *parent, const char *name ) : TQWizard( parent, name ) {}
int currentPageNum() const;
void setCurrentPage( int i );
TQString pageTitle() const;
void setPageTitle( const TQString& title );
TQCString pageName() const;
void setPageName( const TQCString& name );
int pageNum( TQWidget *page );
void addPage( TQWidget *p, const TQString & );
void removePage( TQWidget *p );
void insertPage( TQWidget *p, const TQString &t, int index );
bool isPageRemoved( TQWidget *p ) { return (removedPages.find( p ) != 0); }
void reject() {}
private:
struct Page
{
Page( TQWidget *a, const TQString &b ) : p( a ), t( b ) {}
Page() : p( 0 ), t( TQString() ) {}
TQWidget *p;
TQString t;
};
TQPtrDict<TQWidget> removedPages;
};
class TQLayoutWidget : public TQWidget
{
Q_OBJECT
TQ_OBJECT
public:
TQLayoutWidget( TQWidget *parent, const char *name ) : TQWidget( parent, name ), sp( TQWidget::sizePolicy() ) {}
TQSizePolicy sizePolicy() const;
void updateSizePolicy();
protected:
void paintEvent( TQPaintEvent * );
bool event( TQEvent * );
TQSizePolicy sp;
};
class CustomWidget : public TQWidget
{
Q_OBJECT
TQ_OBJECT
public:
CustomWidget( TQWidget *parent, const char *name, MetaDataBase::CustomWidget *cw )
: TQWidget( parent, name ), cusw( cw ) {
alwaysExpand = parentWidget() && parentWidget()->inherits( "FormWindow" );
setSizePolicy( cw->sizePolicy );
if ( !alwaysExpand )
setBackgroundMode( PaletteDark );
}
TQSize sizeHint() const {
TQSize sh = cusw->sizeHint;
if ( sh.isValid() )
return sh;
return TQWidget::sizeHint();
}
TQString realClassName() { return cusw->className; }
MetaDataBase::CustomWidget *customWidget() const { return cusw; }
protected:
void paintEvent( TQPaintEvent *e );
MetaDataBase::CustomWidget *cusw;
bool alwaysExpand;
};
class Line : public TQFrame
{
Q_OBJECT
TQ_OBJECT
TQ_PROPERTY( Qt::Orientation orientation READ orientation WRITE setOrientation )
TQ_OVERRIDE( int frameWidth DESIGNABLE false )
TQ_OVERRIDE( Shape frameShape DESIGNABLE false )
TQ_OVERRIDE( TQRect frameRect DESIGNABLE false )
TQ_OVERRIDE( TQRect contentsRect DESIGNABLE false )
public:
Line( TQWidget *parent, const char *name )
: TQFrame( parent, name, WMouseNoMask ) {
setFrameStyle( HLine | Sunken );
}
void setOrientation( Qt::Orientation orient ) {
if ( orient ==Qt::Horizontal )
setFrameShape( HLine );
else
setFrameShape( VLine );
}
Qt::Orientation orientation() const {
return frameShape() == HLine ?Qt::Horizontal :Qt::Vertical;
}
};
class QDesignerLabel : public TQLabel
{
Q_OBJECT
TQ_OBJECT
TQ_PROPERTY( TQCString buddy READ buddyWidget WRITE setBuddyWidget )
public:
QDesignerLabel( TQWidget *parent = 0, const char *name = 0 )
: TQLabel( parent, name ) { myBuddy = 0; }
void setBuddyWidget( const TQCString &b ) {
myBuddy = b;
updateBuddy();
}
TQCString buddyWidget() const {
return myBuddy;
};
protected:
void showEvent( TQShowEvent *e ) {
TQLabel::showEvent( e );
updateBuddy();
}
private:
void updateBuddy();
TQCString myBuddy;
};
class QDesignerWidget : public TQWidget
{
Q_OBJECT
TQ_OBJECT
public:
QDesignerWidget( FormWindow *fw, TQWidget *parent, const char *name )
: TQWidget( parent, name, WResizeNoErase ), formwindow( fw ) {}
protected:
void paintEvent( TQPaintEvent *e );
private:
FormWindow *formwindow;
};
class QDesignerDialog : public TQDialog
{
Q_OBJECT
TQ_OBJECT
public:
QDesignerDialog( FormWindow *fw, TQWidget *parent, const char *name )
: TQDialog( parent, name, FALSE, WResizeNoErase ), formwindow( fw ) {}
protected:
void paintEvent( TQPaintEvent *e );
private:
FormWindow *formwindow;
};
class QDesignerToolButton : public TQToolButton
{
Q_OBJECT
TQ_OBJECT
TQ_PROPERTY( int buttonGroupId READ buttonGroupId WRITE setButtonGroupId )
public:
QDesignerToolButton( TQWidget *parent, const char *name )
: TQToolButton( parent, name ) {}
bool isInButtonGroup() const {
return parentWidget() && parentWidget()->inherits( TQBUTTONGROUP_OBJECT_NAME_STRING );
}
int buttonGroupId() const {
return parentWidget() && parentWidget()->inherits( TQBUTTONGROUP_OBJECT_NAME_STRING ) ? ( (TQButtonGroup*)parentWidget() )->id( (TQButton*)this ) : -1;
}
void setButtonGroupId( int id ) {
if ( parentWidget() && parentWidget()->inherits( TQBUTTONGROUP_OBJECT_NAME_STRING ) ) {
( (TQButtonGroup*)parentWidget() )->remove( this );
( (TQButtonGroup*)parentWidget() )->insert( this, id );
}
}
};
class QDesignerRadioButton : public TQRadioButton
{
Q_OBJECT
TQ_OBJECT
TQ_PROPERTY( int buttonGroupId READ buttonGroupId WRITE setButtonGroupId )
public:
QDesignerRadioButton( TQWidget *parent, const char *name )
: TQRadioButton( parent, name ) {}
bool isInButtonGroup() const {
return parentWidget() && parentWidget()->inherits( TQBUTTONGROUP_OBJECT_NAME_STRING );
}
int buttonGroupId() const {
return parentWidget() && parentWidget()->inherits( TQBUTTONGROUP_OBJECT_NAME_STRING ) ? ( (TQButtonGroup*)parentWidget() )->id( (TQButton*)this ) : -1;
}
void setButtonGroupId( int id ) {
if ( parentWidget() && parentWidget()->inherits( TQBUTTONGROUP_OBJECT_NAME_STRING ) ) {
( (TQButtonGroup*)parentWidget() )->remove( this );
( (TQButtonGroup*)parentWidget() )->insert( this, id );
}
}
};
class QDesignerPushButton : public TQPushButton
{
Q_OBJECT
TQ_OBJECT
TQ_PROPERTY( int buttonGroupId READ buttonGroupId WRITE setButtonGroupId )
public:
QDesignerPushButton( TQWidget *parent, const char *name )
: TQPushButton( parent, name ) {}
bool isInButtonGroup() const {
return parentWidget() && parentWidget()->inherits( TQBUTTONGROUP_OBJECT_NAME_STRING );
}
int buttonGroupId() const {
return parentWidget() && parentWidget()->inherits( TQBUTTONGROUP_OBJECT_NAME_STRING ) ? ( (TQButtonGroup*)parentWidget() )->id( (TQButton*)this ) : -1;
}
void setButtonGroupId( int id ) {
if ( parentWidget() && parentWidget()->inherits( TQBUTTONGROUP_OBJECT_NAME_STRING ) ) {
( (TQButtonGroup*)parentWidget() )->remove( this );
( (TQButtonGroup*)parentWidget() )->insert( this, id );
}
}
};
class QDesignerCheckBox : public TQCheckBox
{
Q_OBJECT
TQ_OBJECT
TQ_PROPERTY( int buttonGroupId READ buttonGroupId WRITE setButtonGroupId )
public:
QDesignerCheckBox( TQWidget *parent, const char *name )
: TQCheckBox( parent, name ) {}
bool isInButtonGroup() const {
return parentWidget() && parentWidget()->inherits( TQBUTTONGROUP_OBJECT_NAME_STRING );
}
int buttonGroupId() const {
return parentWidget() && parentWidget()->inherits( TQBUTTONGROUP_OBJECT_NAME_STRING ) ? ( (TQButtonGroup*)parentWidget() )->id( (TQButton*)this ) : -1;
}
void setButtonGroupId( int id ) {
if ( parentWidget() && parentWidget()->inherits( TQBUTTONGROUP_OBJECT_NAME_STRING ) ) {
( (TQButtonGroup*)parentWidget() )->remove( this );
( (TQButtonGroup*)parentWidget() )->insert( this, id );
}
}
};
class EditorDialog : public Dialog
{
Q_OBJECT
TQ_OBJECT
public:
EditorDialog( FormWindow *fw, TQWidget *parent, const char *name )
: Dialog( parent, name, FALSE, WResizeNoErase ), formwindow( fw ) { }
protected:
void paintEvent( TQPaintEvent *e );
private:
FormWindow *formwindow;
};
#endif