/********************************************************************** ** 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 #include #include #include #include #include #include #include #include #include #include #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 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 lin; TQGuardedPtr 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 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 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 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 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 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 lined; TQGuardedPtr button; TQGuardedPtr 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 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 box; TQGuardedPtr colorPrev; TQGuardedPtr 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 box; TQGuardedPtr 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 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 box; TQGuardedPtr palettePrev; TQGuardedPtr 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 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 sequence; TQGuardedPtr 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 lined; TQGuardedPtr button; TQGuardedPtr 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 lst ); TQValueList enumList() const; void closeWidget(); signals: void closed(); void hidden(); protected: void keyPressEvent( TQKeyEvent *e ); private: TQValueList itemList; TQPtrList 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 lst ); TQValueList 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 box; TQValueList 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 &unique, PropertyItem *&item ); TQString whatsThisText( TQListViewItem *i ); private: PropertyListItem* pressItem; TQPoint pressPos; bool mousePressed; bool showSorted; TQMap 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 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 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 lin; }; #endif