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

868 lines
19 KiB

/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qt 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 Qt Enterprise Edition or Qt Professional Edition
** licenses may use this file in accordance with the Qt 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 Qt 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 <qfeatures.h>
#include <qvariant.h>
#include <qlistview.h>
#include <qptrlist.h>
#include <qguardedptr.h>
#include <qtabwidget.h>
#include <qmodules.h>
#include <qptrlist.h>
#include <qlayout.h>
#include <qcheckbox.h>
#include <qcombobox.h>
#include "hierarchyview.h"
#include "metadatabase.h"
class PropertyList;
class PropertyEditor;
class QPainter;
class QColorGroup;
class QLineEdit;
class QPushButton;
class QHBox;
class QSpinBox;
class QLabel;
class QFrame;
class FormWindow;
class QCloseEvent;
class QResizeEvent;
class PropertyWhatsThis;
class QDateEdit;
class QTimeEdit;
class QDateTimeEdit;
class PropertyItem : public QListViewItem
{
public:
PropertyItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName );
~PropertyItem();
void paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int align );
void paintBranches( QPainter * p, const QColorGroup & cg,
int w, int y, int h );
void paintFocus( QPainter *p, const QColorGroup &cg, const QRect &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 QVariant &v );
QVariant value() const;
QString name() const;
virtual void notifyValueChange();
virtual void setChanged( bool b, bool updateDb = TRUE );
bool isChanged() const;
virtual void placeEditor( QWidget *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( QPainter *p, const QRect &r );
void updateBackColor();
void setup() { QListViewItem::setup(); setHeight( QListViewItem::height() + 2 ); }
virtual QString currentItem() const;
virtual int currentIntItem() const;
virtual void setCurrentItem( const QString &s );
virtual void setCurrentItem( int i );
virtual int currentIntItemFromObject() const;
virtual QString currentItemFromObject() const;
void setFocus( QWidget *w );
virtual void toggle();
void setText( int col, const QString &txt );
protected:
PropertyList *listview;
QVariant val;
private:
QColor backgroundColor();
void createResetButton();
void updateResetButtonState();
private:
bool open, changed;
PropertyItem *property;
QString propertyName;
QPtrList<PropertyItem> children;
QColor backColor;
QPushButton *resetButton;
};
class PropertyTextItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyTextItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &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 QVariant &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:
QLineEdit *lined();
QGuardedPtr<QLineEdit> lin;
QGuardedPtr<QHBox> box;
QPushButton *button;
bool withComment, hasMultiLines, asciiOnly, accel;
};
class PropertyBoolItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyBoolItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName );
~PropertyBoolItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
virtual void toggle();
private slots:
void setValue();
private:
QComboBox *combo();
QGuardedPtr<QComboBox> comb;
};
class PropertyIntItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyIntItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &propName, bool s );
~PropertyIntItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
private slots:
void setValue();
private:
QSpinBox *spinBox();
QGuardedPtr<QSpinBox> spinBx;
bool signedValue;
};
class PropertyLayoutItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyLayoutItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &propName );
~PropertyLayoutItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
private slots:
void setValue();
private:
QSpinBox *spinBox();
QGuardedPtr<QSpinBox> spinBx;
};
class PropertyDoubleItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyDoubleItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &propName );
~PropertyDoubleItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
private slots:
void setValue();
private:
QLineEdit *lined();
QGuardedPtr<QLineEdit> lin;
};
class PropertyListItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyListItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &propName, bool editable );
~PropertyListItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
QString currentItem() const;
int currentIntItem() const;
void setCurrentItem( const QString &s );
void setCurrentItem( int i );
int currentIntItemFromObject() const;
QString currentItemFromObject() const;
void addItem( const QString &s );
private slots:
void setValue();
private:
QComboBox *combo();
QGuardedPtr<QComboBox> comb;
int oldInt;
bool editable;
QString oldString;
};
class PropertyFontItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyFontItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName );
~PropertyFontItem();
virtual void createChildren();
virtual void initChildren();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
virtual bool hasSubItems() const;
virtual void childValueChanged( PropertyItem *child );
private slots:
void getFont();
private:
QGuardedPtr<QLineEdit> lined;
QGuardedPtr<QPushButton> button;
QGuardedPtr<QHBox> box;
};
class PropertyCoordItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
enum Type { Rect, Size, Point };
PropertyCoordItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &propName, Type t );
~PropertyCoordItem();
virtual void createChildren();
virtual void initChildren();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
virtual bool hasSubItems() const;
virtual void childValueChanged( PropertyItem *child );
private:
QLineEdit *lined();
QGuardedPtr<QLineEdit> lin;
Type typ;
};
class PropertyColorItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyColorItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &propName, bool children );
~PropertyColorItem();
virtual void createChildren();
virtual void initChildren();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
virtual bool hasSubItems() const;
virtual void childValueChanged( PropertyItem *child );
virtual bool hasCustomContents() const;
virtual void drawCustomContents( QPainter *p, const QRect &r );
private slots:
void getColor();
private:
QGuardedPtr<QHBox> box;
QGuardedPtr<QFrame> colorPrev;
QGuardedPtr<QPushButton> button;
bool withChildren;
};
class PropertyPixmapItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
enum Type { Pixmap, IconSet, Image };
PropertyPixmapItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &propName, Type t );
~PropertyPixmapItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
virtual bool hasCustomContents() const;
virtual void drawCustomContents( QPainter *p, const QRect &r );
private slots:
void getPixmap();
private:
QGuardedPtr<QHBox> box;
QGuardedPtr<QLabel> pixPrev;
QPushButton *button;
Type type;
};
class PropertySizePolicyItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertySizePolicyItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &propName );
~PropertySizePolicyItem();
virtual void createChildren();
virtual void initChildren();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
virtual bool hasSubItems() const;
virtual void childValueChanged( PropertyItem *child );
private:
QLineEdit *lined();
QGuardedPtr<QLineEdit> lin;
};
class PropertyPaletteItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyPaletteItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &propName );
~PropertyPaletteItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
virtual bool hasCustomContents() const;
virtual void drawCustomContents( QPainter *p, const QRect &r );
private slots:
void getPalette();
private:
QGuardedPtr<QHBox> box;
QGuardedPtr<QLabel> palettePrev;
QGuardedPtr<QPushButton> button;
};
class PropertyCursorItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyCursorItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &propName );
~PropertyCursorItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
private slots:
void setValue();
private:
QComboBox *combo();
QGuardedPtr<QComboBox> comb;
};
class PropertyKeysequenceItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyKeysequenceItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &propName );
~PropertyKeysequenceItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
private slots:
void setValue();
private:
bool eventFilter( QObject *o, QEvent *e );
void handleKeyEvent( QKeyEvent *e );
int translateModifiers( int state );
QGuardedPtr<QLineEdit> sequence;
QGuardedPtr<QHBox> box;
int k1,k2,k3,k4;
int num;
bool mouseEnter;
};
class PropertyDatabaseItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyDatabaseItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName, bool wField );
~PropertyDatabaseItem();
virtual void createChildren();
virtual void initChildren();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
virtual bool hasSubItems() const;
virtual void childValueChanged( PropertyItem *child );
private:
QGuardedPtr<QLineEdit> lined;
QGuardedPtr<QPushButton> button;
QGuardedPtr<QHBox> box;
bool withField;
};
struct EnumItem {
EnumItem( const QString &k, bool s )
: key( k ), selected( s ) {}
EnumItem() : key( QString::null ), selected( FALSE ) {}
bool operator==( const EnumItem &item ) const {
return key == item.key;
}
QString key;
bool selected;
};
class EnumPopup : public QFrame
{
Q_OBJECT
public:
EnumPopup( QWidget *parent, const char *name, WFlags f=0 );
~EnumPopup();
void insertEnums( QValueList<EnumItem> lst );
QValueList<EnumItem> enumList() const;
void closeWidget();
signals:
void closed();
void hidden();
protected:
void keyPressEvent( QKeyEvent *e );
private:
QValueList<EnumItem> itemList;
QPtrList<QCheckBox> checkBoxList;
QVBoxLayout *popLayout;
};
class EnumBox : public QComboBox
{
Q_OBJECT
public:
EnumBox( QWidget *parent, const char *name = 0 );
~EnumBox() {}
void setText( const QString &text );
void insertEnums( QValueList<EnumItem> lst );
QValueList<EnumItem> enumList() const;
signals:
void aboutToShowPopup();
void valueChanged();
protected:
void paintEvent( QPaintEvent * );
void mousePressEvent( QMouseEvent *e );
void keyPressEvent( QKeyEvent *e );
protected slots:
void restoreArrow();
void popupHidden();
void popupClosed();
private:
void popup();
bool arrowDown;
QString str;
bool popupShown;
EnumPopup *pop;
};
class PropertyEnumItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyEnumItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
const QString &propName );
~PropertyEnumItem();
void showEditor();
void hideEditor();
void setValue( const QVariant &v );
QString currentItem() const;
QString currentItemFromObject() const;
void setCurrentValues( QStrList lst );
private slots:
void setValue();
void insertEnums();
private:
QGuardedPtr<EnumBox> box;
QValueList<EnumItem> enumList;
QString enumString;
};
class PropertyList : public QListView
{
Q_OBJECT
public:
PropertyList( PropertyEditor *e );
virtual void setupProperties();
virtual void setCurrentItem( QListViewItem *i );
virtual void valueChanged( PropertyItem *i );
virtual void refetchData();
virtual void setPropertyValue( PropertyItem *i );
virtual void setCurrentProperty( const QString &n );
void layoutInitValue( PropertyItem *i, bool changed = FALSE );
PropertyEditor *propertyEditor() const;
QString whatsThisAt( const QPoint &p );
void showCurrentWhatsThis();
enum LastEventType { KeyEvent, MouseEvent };
LastEventType lastEvent();
public slots:
void updateEditorSize();
void resetProperty();
void toggleSort();
private slots:
void itemPressed( QListViewItem *i, const QPoint &p, int c );
void toggleOpen( QListViewItem *i );
bool eventFilter( QObject *o, QEvent *e );
protected:
void resizeEvent( QResizeEvent *e );
void paintEmptyArea( QPainter *p, const QRect &r );
bool addPropertyItem( PropertyItem *&item, const QCString &name, QVariant::Type t );
void viewportDragEnterEvent( QDragEnterEvent * );
void viewportDragMoveEvent ( QDragMoveEvent * );
void viewportDropEvent ( QDropEvent * );
protected:
PropertyEditor *editor;
private:
void readPropertyDocs();
void setupCusWidgetProperties( MetaDataBase::CustomWidget *cw,
QMap<QString, bool> &unique,
PropertyItem *&item );
QString whatsThisText( QListViewItem *i );
private:
PropertyListItem* pressItem;
QPoint pressPos;
bool mousePressed;
bool showSorted;
QMap<QString, QString> propertyDocs;
PropertyWhatsThis *whatsThis;
LastEventType theLastEvent;
};
class EventList : public HierarchyList
{
Q_OBJECT
public:
EventList( QWidget *parent, FormWindow *fw, PropertyEditor *e );
void setup();
void setCurrent( QWidget *w );
protected:
void contentsMouseDoubleClickEvent( QMouseEvent *e );
private:
void save( QListViewItem *p );
private slots:
void objectClicked( QListViewItem *i );
void showRMBMenu( QListViewItem *, const QPoint & );
void renamed( QListViewItem *i );
private:
PropertyEditor *editor;
};
class PropertyEditor : public QTabWidget
{
Q_OBJECT
public:
PropertyEditor( QWidget *parent );
QObject *widget() const;
void clear();
void setup();
void emitWidgetChanged();
void refetchData();
void closed( FormWindow *w );
PropertyList *propertyList() const;
FormWindow *formWindow() const;
EventList *eventList() const;
QString currentProperty() const;
QString classOfCurrentProperty() const;
QMetaObject* metaObjectOfCurrentProperty() const;
void resetFocus();
void setPropertyEditorEnabled( bool b );
void setSignalHandlersEnabled( bool b );
signals:
void hidden();
public slots:
void setWidget( QObject *w, FormWindow *fw );
protected:
void closeEvent( QCloseEvent *e );
private:
void updateWindow();
private:
QObject *wid;
PropertyList *listview;
EventList *eList;
FormWindow *formwindow;
};
class PropertyDateItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyDateItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName );
~PropertyDateItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
private slots:
void setValue();
private:
QDateEdit *lined();
QGuardedPtr<QDateEdit> lin;
};
class PropertyTimeItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyTimeItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName );
~PropertyTimeItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
private slots:
void setValue();
private:
QTimeEdit *lined();
QGuardedPtr<QTimeEdit> lin;
};
class PropertyDateTimeItem : public QObject,
public PropertyItem
{
Q_OBJECT
public:
PropertyDateTimeItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName );
~PropertyDateTimeItem();
virtual void showEditor();
virtual void hideEditor();
virtual void setValue( const QVariant &v );
private slots:
void setValue();
private:
QDateTimeEdit *lined();
QGuardedPtr<QDateTimeEdit> lin;
};
#endif