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.
tdevelop/tdevdesigner/designer/propertyeditor.h

892 lines
20 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.
**
** 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.
**
**********************************************************************/
#ifndef PROPERTYEDITOR_H
#define PROPERTYEDITOR_H
#include <tqfeatures.h>
#include <tqvariant.h>
#include <tqlistview.h>
#include <tqptrlist.h>
#include <tqguardedptr.h>
#include <tqtabwidget.h>
#include <tqmodules.h>
#include <tqptrlist.h>
#include <tqlayout.h>
#include <tqcheckbox.h>
#include <tqcombobox.h>
#include "hierarchyview.h"
#include "metadatabase.h"
class PropertyList;
class PropertyEditor;
class TQPainter;
class TQColorGroup;
class TQLineEdit;
class TQPushButton;
class TQHBox;
class TQSpinBox;
class TQLabel;
class TQFrame;
class FormWindow;
class TQCloseEvent;
class TQResizeEvent;
class PropertyWhatsThis;
class TQDateEdit;
class TQTimeEdit;
class TQDateTimeEdit;
class PropertyItem : public TQListViewItem
{
public:
PropertyItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const TQString &propName );
~PropertyItem();
void paintCell( TQPainter *p, const TQColorGroup &cg, int column, int width, int align );
void paintBranches( TQPainter * p, const TQColorGroup & cg,
int w, int y, int h );
void paintFocus( TQPainter *p, const TQColorGroup &cg, const TQRect &r );
virtual bool hasSubItems() const;
virtual void createChildren();
virtual void initChildren();
bool isOpen() const;
void setOpen( bool b );
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
TQVariant value() const;
TQString name() const;
virtual void notifyValueChange();
virtual void setChanged( bool b, bool updateDb = TRUE );
bool isChanged() const;
virtual void placeEditor( TQWidget *w );
virtual PropertyItem *propertyParent() const;
virtual void childValueChanged( PropertyItem *child );
void addChild( PropertyItem *i );
int childCount() const;
PropertyItem *child( int i ) const;
virtual bool hasCustomContents() const;
virtual void drawCustomContents( TQPainter *p, const TQRect &r );
void updateBackColor();
void setup() { TQListViewItem::setup(); setHeight( TQListViewItem::height() + 2 ); }
virtual TQString currentItem() const;
virtual int currentIntItem() const;
virtual void setCurrentItem( const TQString &s );
virtual void setCurrentItem( int i );
virtual int currentIntItemFromObject() const;
virtual TQString currentItemFromObject() const;
void setFocus( TQWidget *w );
virtual void toggle();
void setText( int col, const TQString &txt );
protected:
PropertyList *listview;
TQVariant val;
private:
TQColor backgroundColor();
void createResetButton();
void updateResetButtonState();
private:
bool open, changed;
PropertyItem *property;
TQString propertyName;
TQPtrList<PropertyItem> children;
TQColor backColor;
TQPushButton *resetButton;
};
class PropertyTextItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyTextItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName, bool comment, bool multiLine, bool ascii = FALSE, bool a = FALSE );
~PropertyTextItem();
virtual void createChildren();
virtual void initChildren();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
virtual bool hasSubItems() const;
virtual void childValueChanged( PropertyItem *child );
virtual void setChanged( bool b, bool updateDb = TRUE );
private slots:
void setValue();
void getText();
private:
TQLineEdit *lined();
TQGuardedPtr<TQLineEdit> lin;
TQGuardedPtr<TQHBox> box;
TQPushButton *button;
bool withComment, hasMultiLines, asciiOnly, accel;
};
class PropertyBoolItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyBoolItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const TQString &propName );
~PropertyBoolItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
virtual void toggle();
private slots:
void setValue();
private:
TQComboBox *combo();
TQGuardedPtr<TQComboBox> comb;
};
class PropertyIntItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyIntItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName, bool s );
~PropertyIntItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
private slots:
void setValue();
private:
TQSpinBox *spinBox();
TQGuardedPtr<TQSpinBox> spinBx;
bool signedValue;
};
class PropertyLayoutItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyLayoutItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName );
~PropertyLayoutItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
private slots:
void setValue();
private:
TQSpinBox *spinBox();
TQGuardedPtr<TQSpinBox> spinBx;
};
class PropertyDoubleItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyDoubleItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName );
~PropertyDoubleItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
private slots:
void setValue();
private:
TQLineEdit *lined();
TQGuardedPtr<TQLineEdit> lin;
};
class PropertyListItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyListItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName, bool editable );
~PropertyListItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
TQString currentItem() const;
int currentIntItem() const;
void setCurrentItem( const TQString &s );
void setCurrentItem( int i );
int currentIntItemFromObject() const;
TQString currentItemFromObject() const;
void addItem( const TQString &s );
private slots:
void setValue();
private:
TQComboBox *combo();
TQGuardedPtr<TQComboBox> comb;
int oldInt;
bool editable;
TQString oldString;
};
class PropertyFontItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyFontItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const TQString &propName );
~PropertyFontItem();
virtual void createChildren();
virtual void initChildren();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
virtual bool hasSubItems() const;
virtual void childValueChanged( PropertyItem *child );
private slots:
void getFont();
private:
TQGuardedPtr<TQLineEdit> lined;
TQGuardedPtr<TQPushButton> button;
TQGuardedPtr<TQHBox> box;
};
class PropertyCoordItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
enum Type { Rect, Size, Point };
PropertyCoordItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName, Type t );
~PropertyCoordItem();
virtual void createChildren();
virtual void initChildren();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
virtual bool hasSubItems() const;
virtual void childValueChanged( PropertyItem *child );
private:
TQLineEdit *lined();
TQGuardedPtr<TQLineEdit> lin;
Type typ;
};
class PropertyColorItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyColorItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName, bool children );
~PropertyColorItem();
virtual void createChildren();
virtual void initChildren();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
virtual bool hasSubItems() const;
virtual void childValueChanged( PropertyItem *child );
virtual bool hasCustomContents() const;
virtual void drawCustomContents( TQPainter *p, const TQRect &r );
private slots:
void getColor();
private:
TQGuardedPtr<TQHBox> box;
TQGuardedPtr<TQFrame> colorPrev;
TQGuardedPtr<TQPushButton> button;
bool withChildren;
};
class PropertyPixmapItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
enum Type { Pixmap, IconSet, Image };
PropertyPixmapItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName, Type t );
~PropertyPixmapItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
virtual bool hasCustomContents() const;
virtual void drawCustomContents( TQPainter *p, const TQRect &r );
private slots:
void getPixmap();
private:
TQGuardedPtr<TQHBox> box;
TQGuardedPtr<TQLabel> pixPrev;
TQPushButton *button;
Type type;
};
class PropertySizePolicyItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertySizePolicyItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName );
~PropertySizePolicyItem();
virtual void createChildren();
virtual void initChildren();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
virtual bool hasSubItems() const;
virtual void childValueChanged( PropertyItem *child );
private:
TQLineEdit *lined();
TQGuardedPtr<TQLineEdit> lin;
};
class PropertyPaletteItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyPaletteItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName );
~PropertyPaletteItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
virtual bool hasCustomContents() const;
virtual void drawCustomContents( TQPainter *p, const TQRect &r );
private slots:
void getPalette();
private:
TQGuardedPtr<TQHBox> box;
TQGuardedPtr<TQLabel> palettePrev;
TQGuardedPtr<TQPushButton> button;
};
class PropertyCursorItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyCursorItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName );
~PropertyCursorItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
private slots:
void setValue();
private:
TQComboBox *combo();
TQGuardedPtr<TQComboBox> comb;
};
class PropertyKeysequenceItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyKeysequenceItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName );
~PropertyKeysequenceItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
private slots:
void setValue();
private:
bool eventFilter( TQObject *o, TQEvent *e );
void handleKeyEvent( TQKeyEvent *e );
int translateModifiers( int state );
TQGuardedPtr<TQLineEdit> sequence;
TQGuardedPtr<TQHBox> box;
int k1,k2,k3,k4;
int num;
bool mouseEnter;
};
class PropertyDatabaseItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyDatabaseItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const TQString &propName, bool wField );
~PropertyDatabaseItem();
virtual void createChildren();
virtual void initChildren();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
virtual bool hasSubItems() const;
virtual void childValueChanged( PropertyItem *child );
private:
TQGuardedPtr<TQLineEdit> lined;
TQGuardedPtr<TQPushButton> button;
TQGuardedPtr<TQHBox> box;
bool withField;
};
struct EnumItem {
EnumItem( const TQString &k, bool s )
: key( k ), selected( s ) {}
EnumItem() : key( TQString() ), selected( FALSE ) {}
bool operator==( const EnumItem &item ) const {
return key == item.key;
}
TQString key;
bool selected;
};
class EnumPopup : public TQFrame
{
Q_OBJECT
public:
EnumPopup( TQWidget *parent, const char *name, WFlags f=0 );
~EnumPopup();
void insertEnums( TQValueList<EnumItem> lst );
TQValueList<EnumItem> enumList() const;
void closeWidget();
signals:
void closed();
void hidden();
protected:
void keyPressEvent( TQKeyEvent *e );
private:
TQValueList<EnumItem> itemList;
TQPtrList<TQCheckBox> checkBoxList;
TQVBoxLayout *popLayout;
};
class EnumBox : public TQComboBox
{
Q_OBJECT
public:
EnumBox( TQWidget *parent, const char *name = 0 );
~EnumBox() {}
void setText( const TQString &text );
void insertEnums( TQValueList<EnumItem> lst );
TQValueList<EnumItem> enumList() const;
signals:
void aboutToShowPopup();
void valueChanged();
protected:
void paintEvent( TQPaintEvent * );
void mousePressEvent( TQMouseEvent *e );
void keyPressEvent( TQKeyEvent *e );
protected slots:
void restoreArrow();
void popupHidden();
void popupClosed();
private:
void popup();
bool arrowDown;
TQString str;
bool popupShown;
EnumPopup *pop;
};
class PropertyEnumItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyEnumItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const TQString &propName );
~PropertyEnumItem();
void showEditor();
void hideEditor();
void setValue( const TQVariant &v );
TQString currentItem() const;
TQString currentItemFromObject() const;
void setCurrentValues( TQStrList lst );
private slots:
void setValue();
void insertEnums();
private:
TQGuardedPtr<EnumBox> box;
TQValueList<EnumItem> enumList;
TQString enumString;
};
class PropertyList : public TQListView
{
Q_OBJECT
public:
PropertyList( PropertyEditor *e );
virtual void setupProperties();
virtual void setCurrentItem( TQListViewItem *i );
virtual void valueChanged( PropertyItem *i );
virtual void refetchData();
virtual void setPropertyValue( PropertyItem *i );
virtual void setCurrentProperty( const TQString &n );
void layoutInitValue( PropertyItem *i, bool changed = FALSE );
PropertyEditor *propertyEditor() const;
TQString whatsThisAt( const TQPoint &p );
void showCurrentWhatsThis();
enum LastEventType { KeyEvent, MouseEvent };
LastEventType lastEvent();
public slots:
void updateEditorSize();
void resetProperty();
void toggleSort();
private slots:
void itemPressed( TQListViewItem *i, const TQPoint &p, int c );
void toggleOpen( TQListViewItem *i );
bool eventFilter( TQObject *o, TQEvent *e );
protected:
void resizeEvent( TQResizeEvent *e );
void paintEmptyArea( TQPainter *p, const TQRect &r );
bool addPropertyItem( PropertyItem *&item, const TQCString &name, TQVariant::Type t );
void viewportDragEnterEvent( TQDragEnterEvent * );
void viewportDragMoveEvent ( TQDragMoveEvent * );
void viewportDropEvent ( TQDropEvent * );
protected:
PropertyEditor *editor;
private:
void readPropertyDocs();
void setupCusWidgetProperties( MetaDataBase::CustomWidget *cw,
TQMap<TQString, bool> &unique,
PropertyItem *&item );
TQString whatsThisText( TQListViewItem *i );
private:
PropertyListItem* pressItem;
TQPoint pressPos;
bool mousePressed;
bool showSorted;
TQMap<TQString, TQString> propertyDocs;
PropertyWhatsThis *whatsThis;
LastEventType theLastEvent;
};
class EventList : public HierarchyList
{
Q_OBJECT
public:
EventList( TQWidget *parent, FormWindow *fw, PropertyEditor *e );
void setup();
void setCurrent( TQWidget *w );
protected:
void contentsMouseDoubleClickEvent( TQMouseEvent *e );
private:
void save( TQListViewItem *p );
private slots:
void objectClicked( TQListViewItem *i );
void showRMBMenu( TQListViewItem *, const TQPoint & );
void renamed( TQListViewItem *i );
private:
PropertyEditor *editor;
};
class PropertyEditor : public TQTabWidget
{
Q_OBJECT
public:
PropertyEditor( TQWidget *parent );
TQObject *widget() const;
void clear();
void setup();
void emitWidgetChanged();
void refetchData();
void closed( FormWindow *w );
PropertyList *propertyList() const;
FormWindow *formWindow() const;
EventList *eventList() const;
TQString currentProperty() const;
TQString classOfCurrentProperty() const;
TQMetaObject* metaObjectOfCurrentProperty() const;
void resetFocus();
void setPropertyEditorEnabled( bool b );
void setSignalHandlersEnabled( bool b );
signals:
void hidden();
public slots:
void setWidget( TQObject *w, FormWindow *fw );
protected:
void closeEvent( TQCloseEvent *e );
private:
void updateWindow();
private:
TQObject *wid;
PropertyList *listview;
EventList *eList;
FormWindow *formwindow;
};
class PropertyDateItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyDateItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const TQString &propName );
~PropertyDateItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
private slots:
void setValue();
private:
TQDateEdit *lined();
TQGuardedPtr<TQDateEdit> lin;
};
class PropertyTimeItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyTimeItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const TQString &propName );
~PropertyTimeItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
private slots:
void setValue();
private:
TQTimeEdit *lined();
TQGuardedPtr<TQTimeEdit> lin;
};
class PropertyDateTimeItem : public TQObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyDateTimeItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const TQString &propName );
~PropertyDateTimeItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const TQVariant &v );
private slots:
void setValue();
private:
TQDateTimeEdit *lined();
TQGuardedPtr<TQDateTimeEdit> lin;
};
#endif