summaryrefslogtreecommitdiffstats
path: root/kspy/propsview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kspy/propsview.cpp')
-rw-r--r--kspy/propsview.cpp196
1 files changed, 196 insertions, 0 deletions
diff --git a/kspy/propsview.cpp b/kspy/propsview.cpp
new file mode 100644
index 00000000..12b855c0
--- /dev/null
+++ b/kspy/propsview.cpp
@@ -0,0 +1,196 @@
+/***************************************************************************
+ propsview.cpp - description
+ -------------------
+ begin : Tue May 1 2001
+ copyright : (C) 2001 by Richard Moore
+ email : rich@kde.org
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include <qobjectdict.h>
+#include <qobjectlist.h>
+#include <qmetaobject.h>
+#include <qstrlist.h>
+#include <qvariant.h>
+#include <qcursor.h>
+
+#include <klocale.h>
+
+#include "propsview.h"
+
+class KSpyItem : KListViewItem
+{
+public:
+ KSpyItem( QListView * parent, QString label1, QString label2 = QString::null, QString label3 = QString::null, QString label4 = QString::null, QString label5 = QString::null, QString label6 = QString::null )
+ : KListViewItem(parent, label1, label2, label3, label4, label5, label6)
+ {
+ }
+protected:
+ void paintCell( QPainter * p, const QColorGroup & cg,
+ int column, int width, int alignment )
+ {
+ if (column == 1 && text(2) == "QColor") {
+ QColorGroup color_cg( cg.foreground(), cg.background(),
+ cg.light(), cg.dark(), cg.mid(),
+ QColor(text(1)), QColor(text(1)) );
+ QListViewItem::paintCell(p, color_cg, column, width, alignment);
+ } else {
+ KListViewItem::paintCell(p, cg, column, width, alignment);
+ }
+ }
+};
+
+PropsView::PropsView(QWidget *parent, const char *name ) : KListView(parent,name)
+{
+ addColumn( i18n( "Name" ) );
+ addColumn( i18n( "Value" ) );
+ addColumn( i18n( "Type" ) );
+ addColumn( i18n( "Access" ) );
+ addColumn( i18n( "Designable" ) );
+ addColumn( i18n( "Type Flags" ) );
+
+ setAllColumnsShowFocus( true );
+ setColumnAlignment( 3, AlignCenter );
+ setColumnAlignment( 4, AlignCenter );
+ setFullWidth( true );
+}
+
+PropsView::~PropsView()
+{
+}
+
+void PropsView::buildList( QObject *o )
+{
+ QMetaObject *mo = o->metaObject();
+ QStrList names = mo->propertyNames( true );
+
+ for ( uint i = 0; i < names.count(); i++ ) {
+ char *prop = names.at( i );
+ QVariant v = o->property( prop );
+ const QMetaProperty *mp = mo->property( mo->findProperty(prop, true), true );
+
+ QString val( "????" );
+ switch( v.type() ) {
+ case QVariant::String:
+ case QVariant::CString:
+ val = v.toString();
+ break;
+ case QVariant::Bool:
+ val = ( v.toBool() ? "True" : "False" );
+ break;
+ case QVariant::Color:
+ {
+ QColor c = v.toColor();
+ val = c.name();
+ break;
+ }
+ case QVariant::Cursor:
+ {
+ QCursor c = v.toCursor();
+ val = QString("shape=%1").arg(c.shape());
+ break;
+ }
+ case QVariant::Font:
+ {
+ QFont f = v.toFont();
+ val = QString("family=%1, pointSize=%2, weight=%3, italic=%4, bold=%5, underline=%6, strikeOut=%7")
+ .arg(f.family())
+ .arg(f.pointSize())
+ .arg(f.weight())
+ .arg(f.italic())
+ .arg(f.bold())
+ .arg(f.underline())
+ .arg(f.strikeOut());
+ break;
+ }
+ case QVariant::Int:
+ val.setNum( v.toInt() );
+ if (mp->isEnumType()) {
+ QMetaObject * metaObject = *(mp->meta);
+ val = QString("%1::%2").arg(metaObject->className()).arg(mp->valueToKey(val.toInt()));
+ }
+ break;
+ case QVariant::Point:
+ {
+ QPoint p = v.toPoint();
+ val = QString("x=%1, y=%2").arg(p.x()).arg(p.y());
+ break;
+ }
+ case QVariant::Rect:
+ {
+ QRect r = v.toRect();
+ val = QString("left=%1, right=%2, top=%3, bottom=%4")
+ .arg(r.left())
+ .arg(r.right())
+ .arg(r.top())
+ .arg(r.bottom());
+ break;
+ }
+ case QVariant::Size:
+ {
+ QSize s = v.toSize();
+ val = QString("width=%1, height=%2").arg(s.width()).arg(s.height());
+ break;
+ }
+ case QVariant::SizePolicy:
+ {
+ QSizePolicy s = v.toSizePolicy();
+ val = QString("horData=%1, verData=%2").arg(s.horData()).arg(s.verData());
+ break;
+ }
+ case QVariant::Double:
+ val.setNum( v.toDouble() );
+ break;
+ default:
+ break;
+ }
+
+ QString ro("R/O");
+ QString rw("R/W");
+ QString st("Set");
+ QString et("Enum");
+ QString yes("Yes");
+ QString no("No");
+
+ QString writable = ( mp->writable() ? rw : ro );
+ QString setType = ( mp->isSetType() ? st : QString::null );
+ QString enumType = ( mp->isEnumType() ? et : QString::null );
+ QString designable = ( mp->designable(o) ? yes : no );
+
+ QString flags;
+ bool first = true;
+ if ( !setType.isNull() ) {
+ if ( first )
+ first = false;
+ else
+ flags += " | ";
+
+ flags += setType;
+ }
+ if ( !enumType.isNull() ) {
+ if ( first )
+ first = false;
+ else
+ flags += " | ";
+
+ flags += enumType;
+ }
+
+ new KSpyItem( this, prop, val, v.typeName(), writable, designable, flags );
+ }
+}
+
+void PropsView::setTarget( QObject *o )
+{
+ clear();
+ buildList( o );
+}
+#include "propsview.moc"