lib
widget.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "widget.h"
00022 #include "property.h"
00023 #include "editoritem.h"
00024 #include "editor.h"
00025
00026 #include <qpainter.h>
00027 #include <qvariant.h>
00028
00029 #include <klistview.h>
00030 #include <kdebug.h>
00031
00032 using namespace KoProperty;
00033
00034 namespace KoProperty {
00035 class WidgetPrivate
00036 {
00037 public:
00038 WidgetPrivate()
00039 : property(0)
00040 , editor(0)
00041 , leaveTheSpaceForRevertButton(false)
00042 , hasBorders(true)
00043 , readOnly(false)
00044 , visibleFlag(true)
00045 {
00046 }
00047 ~WidgetPrivate() {}
00048
00049 Property *property;
00050 QWidget *editor;
00051 bool leaveTheSpaceForRevertButton : 1;
00052 bool hasBorders : 1;
00053 bool readOnly : 1;
00054 bool visibleFlag : 1;
00055 };
00056 }
00057
00058 Widget::Widget(Property *property, QWidget *parent, const char *name)
00059 : QWidget(parent, name)
00060 {
00061 d = new WidgetPrivate();
00062 d->property = property;
00063 }
00064
00065 Widget::~Widget()
00066 {
00067 delete d;
00068 d = 0;
00069 }
00070
00071 Property*
00072 Widget::property() const
00073 {
00074 return d ? d->property : 0;
00075 }
00076
00077 void
00078 Widget::setProperty(Property *property)
00079 {
00080 d->property = property;
00081 if(property)
00082 setValue(property->value(), false);
00083
00084
00085 }
00086
00087 void
00088 Widget::drawViewer(QPainter *p, const QColorGroup &, const QRect &r, const QVariant &value)
00089 {
00090 p->eraseRect(r);
00091 QRect rect(r);
00092 rect.setLeft(rect.left()+KPROPEDITOR_ITEM_MARGIN);
00093
00094
00095
00096
00097 p->drawText(rect, Qt::AlignLeft | Qt::AlignVCenter | Qt::SingleLine, value.toString());
00098 }
00099
00100 void
00101 Widget::undo()
00102 {
00103 if(d->property)
00104 d->property->resetValue();
00105 }
00106
00107 bool
00108 Widget::eventFilter(QObject*, QEvent* e)
00109 {
00110 if(e->type() == QEvent::KeyPress)
00111 {
00112 QKeyEvent* ev = static_cast<QKeyEvent*>(e);
00113 if(ev->key() == Key_Escape)
00114 {
00115 emit rejectInput(this);
00116 return true;
00117 }
00118 else if((ev->key() == Key_Return) || (ev->key() == Key_Enter))
00119 {
00120
00121 emit acceptInput(this);
00122 return true;
00123 }
00124 else {
00125 Editor *list = static_cast<KoProperty::Editor*>(parentWidget()->parentWidget());
00126 if (!list)
00127 return false;
00128 return list->handleKeyPress(ev);
00129 }
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146 }
00147
00148 return false;
00149 }
00150
00151 void
00152 Widget::setFocusWidget(QWidget*focusProxy)
00153 {
00154 if (focusProxy) {
00155 if (focusProxy->focusPolicy() != NoFocus)
00156 setFocusProxy(focusProxy);
00157 focusProxy->installEventFilter(this);
00158 }
00159 else if (this->focusProxy()) {
00160 this->focusProxy()->removeEventFilter(this);
00161 setFocusProxy(0);
00162 }
00163 }
00164
00165 bool
00166 Widget::leavesTheSpaceForRevertButton() const
00167 {
00168 return d->leaveTheSpaceForRevertButton;
00169 }
00170
00171 void
00172 Widget::setLeavesTheSpaceForRevertButton(bool set)
00173 {
00174 d->leaveTheSpaceForRevertButton = set;
00175 }
00176
00177 void
00178 Widget::setHasBorders(bool set)
00179 {
00180 d->hasBorders = set;
00181 }
00182
00183 bool
00184 Widget::hasBorders() const
00185 {
00186 return d->hasBorders;
00187 }
00188
00189 void
00190 Widget::setEditor(QWidget* editor)
00191 {
00192 d->editor = editor;
00193 if (!d->editor)
00194 return;
00195 d->editor->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
00196 d->editor->move(0,0);
00197 }
00198
00199 void
00200 Widget::resizeEvent(QResizeEvent *e)
00201 {
00202 QWidget::resizeEvent(e);
00203 if (d->editor)
00204 d->editor->resize(size());
00205 }
00206
00207 bool
00208 Widget::isReadOnly() const
00209 {
00210 return d->readOnly;
00211 }
00212
00213 void
00214 Widget::setReadOnly(bool readOnly)
00215 {
00216 d->readOnly = readOnly;
00217 setReadOnlyInternal(readOnly);
00218 }
00219
00220 bool
00221 Widget::visibleFlag() const
00222 {
00223 return d->visibleFlag;
00224 }
00225
00226 void
00227 Widget::setVisibleFlag(bool visible)
00228 {
00229 d->visibleFlag = visible;
00230 }
00231
00232 #include "widget.moc"
|