• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

KIO

  • kio
  • kfile
kfilemetainfowidget.cpp
Go to the documentation of this file.
1/* This file is part of the KDE libraries
2 Copyright (C) 2001,2002 Rolf Magnus <ramagnus@kde.org>
3
4 library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License version 2 as published by the Free Software Foundation.
7
8 This library is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 Library General Public License for more details.
12
13 You should have received a copy of the GNU Library General Public License
14 along with this library; see the file COPYING.LIB. If not, write to
15 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16 Boston, MA 02110-1301, USA.
17 */
18
19#include "kfilemetainfowidget.h"
20
21#include <ktextedit.h>
22#include <klocale.h>
23#include <knuminput.h>
24#include <kcombobox.h>
25#include <klineedit.h>
26#include <kstringvalidator.h>
27#include <kdebug.h>
28
29#include <QtGui/QLabel>
30#include <QtGui/QCheckBox>
31#include <QtGui/QDoubleSpinBox>
32#include <QtGui/QDateEdit>
33#include <QtGui/QPixmap>
34#include <QtGui/QImage>
35#include <QtGui/QLayout>
36#include <QtGui/QSizePolicy>
37#include <QtGui/QDoubleValidator>
38
39class KFileMetaInfoWidgetPrivate
40{
41public:
42 KFileMetaInfoWidgetPrivate(KFileMetaInfoWidget *qq)
43 : q(qq)
44 {
45 }
46
47 void init(KFileMetaInfoItem item, KFileMetaInfoWidget::Mode mode);
48
49 KFileMetaInfoWidget *q;
50 QVariant m_value; // the value will be saved here until apply() is called
51 KFileMetaInfoItem m_item;
52 QWidget *m_widget;
53 QValidator *m_validator;
54 bool m_dirty : 1;
55};
56
57/*
58 Widgets used for different types:
59
60 bool : QCheckBox
61 int : QSpinBox
62 QString : KComboBox if the validator is a KStringListValidator, else lineedit
63 QDateTime : QDateTimeEdit
64
65*/
66
67KFileMetaInfoWidget::KFileMetaInfoWidget(KFileMetaInfoItem item,
68 QValidator* val,
69 QWidget* parent )
70 : QWidget(parent), d(new KFileMetaInfoWidgetPrivate(this))
71{
72 d->m_value = item.value();
73 d->m_item = item;
74 d->m_validator = val;
75 d->init(item, ReadWrite);
76}
77
78KFileMetaInfoWidget::KFileMetaInfoWidget(KFileMetaInfoItem item,
79 Mode mode,
80 QValidator* val,
81 QWidget* parent)
82 : QWidget(parent), d(new KFileMetaInfoWidgetPrivate(this))
83{
84 d->m_value = item.value();
85 d->m_item = item;
86 d->m_validator = val;
87 d->init(item, mode);
88}
89
90void KFileMetaInfoWidgetPrivate::init(KFileMetaInfoItem item, KFileMetaInfoWidget::Mode mode)
91{
92 Q_UNUSED(item)
93 kDebug(7033) << "*** item " << m_item.name()
94 << " is a " << m_value.typeName() << endl;
95
96 if (m_item.isEditable() && !(mode & KFileMetaInfoWidget::ReadOnly))
97 m_widget = q->makeWidget();
98 else
99 switch (m_value.type())
100 {
101 case QVariant::Image :
102 m_widget = new QLabel(q);
103 m_widget->setObjectName(QLatin1String("info image"));
104 static_cast<QLabel*>(m_widget)->setPixmap(QPixmap::fromImage(m_value.value<QImage>()));
105 break;
106 case QVariant::Pixmap :
107 m_widget = new QLabel(q);
108 m_widget->setObjectName(QLatin1String("info pixmap"));
109 static_cast<QLabel*>(m_widget)->setPixmap(m_value.value<QPixmap>());
110 break;
111 default:
112 m_widget = new QLabel(m_value.toString(), q);
113 m_widget->setObjectName(QLatin1String("info label"));
114 }
115
116 QHBoxLayout* lay = new QHBoxLayout(q);
117 lay->setMargin(0);
118 lay->addWidget(m_widget);
119
120 QSizePolicy sp = q->sizePolicy();
121 sp.setVerticalPolicy(QSizePolicy::Minimum);
122 q->setSizePolicy(sp);
123}
124
125KFileMetaInfoWidget::~KFileMetaInfoWidget()
126{
127 delete d;
128}
129
130bool KFileMetaInfoWidget::apply()
131{
132 return d->m_item.isEditable() && d->m_item.setValue(d->m_value);
133}
134
135void KFileMetaInfoWidget::setValue(const QVariant &value)
136{
137 d->m_value = value;
138}
139
140QVariant KFileMetaInfoWidget::value() const
141{
142 return d->m_value;
143}
144
145QValidator* KFileMetaInfoWidget::validator() const
146{
147 return d->m_validator;
148}
149
150KFileMetaInfoItem KFileMetaInfoWidget::item() const
151{
152 return d->m_item;
153}
154
155QWidget* KFileMetaInfoWidget::makeWidget()
156{
157 QString valClass;
158 QWidget* w;
159
160 switch (d->m_value.type()) {
161 case QVariant::Invalid: // no type
162 // just make a label
163 w = new QLabel(i18n("<Error>"), this);
164 w->setObjectName(QLatin1String("label"));
165 break;
166
167 case QVariant::Int: // an int
168 case QVariant::UInt: // an unsigned int
169 w = makeIntWidget();
170 break;
171
172 case QVariant::Bool: // a bool
173 w = makeBoolWidget();
174 break;
175
176 case QVariant::Double: // a double
177 w = makeDoubleWidget();
178 break;
179
180
181 case QVariant::Date: // a QDate
182 w = makeDateWidget();
183 break;
184
185 case QVariant::Time: // a QTime
186 w = makeTimeWidget();
187 break;
188
189 case QVariant::DateTime: // a QDateTime
190 w = makeDateTimeWidget();
191 break;
192
193#if 0
194 case QVariant::Size: // a QSize
195 case QVariant::String: // a QString
196 case QVariant::List: // a QValueList
197 case QVariant::Map: // a QMap
198 case QVariant::StringList: // a QStringList
199 case QVariant::Font: // a QFont
200 case QVariant::Pixmap: // a QPixmap
201 case QVariant::Brush: // a QBrush
202 case QVariant::Rect: // a QRect
203 case QVariant::Color: // a QColor
204 case QVariant::Palette: // a QPalette
205 case QVariant::ColorGroup: // a QColorGroup
206 case QCoreVariant::Icon: // a QIconSet
207 case QVariant::Point: // a QPoint
208 case QVariant::Image: // a QImage
209 case QVariant::CString: // a QCString
210 case QVariant::PointArray: // a QPointArray
211 case QVariant::Region: // a QRegion
212 case QVariant::Bitmap: // a QBitmap
213 case QVariant::Cursor: // a QCursor
214 case QVariant::ByteArray: // a QByteArray
215 case QVariant::BitArray: // a QBitArray
216 case QVariant::SizePolicy: // a QSizePolicy
217 case QVariant::KeySequence: // a QKeySequence
218#endif
219 default:
220 w = makeStringWidget();
221 }
222
223 kDebug(7033) << "*** item " << d->m_item.name()
224 << "is a " << d->m_item.value().typeName() << endl;
225 if (d->m_validator)
226 kDebug(7033) << " and validator is a "
227 << d->m_validator->metaObject()->className() << endl;
228
229 kDebug(7033) << "*** created a " << w->metaObject()->className()
230 << " for it\n";
231
232 return w;
233}
234
235// ****************************************************************
236// now the different methods to make the widgets for specific types
237// ****************************************************************
238
239QWidget* KFileMetaInfoWidget::makeBoolWidget()
240{
241 QCheckBox* cb = new QCheckBox(this);
242 cb->setObjectName(QLatin1String("metainfo bool widget"));
243 cb->setChecked(d->m_item.value().toBool());
244 connect(cb, SIGNAL(toggled(bool)), this, SLOT(slotChanged(bool)));
245 return cb;
246}
247
248QWidget* KFileMetaInfoWidget::makeIntWidget()
249{
250 QSpinBox* sb = new QSpinBox(this);
251 sb->setObjectName(QLatin1String("metainfo integer widget"));
252 sb->setValue(d->m_item.value().toInt());
253
254 if (d->m_validator) {
255 if (QIntValidator* iv = qobject_cast<QIntValidator*>(d->m_validator)) {
256 sb->setMinimum(iv->bottom());
257 sb->setMaximum(iv->top());
258 }
259 //reparentValidator(sb, m_validator);
260 //sb->setValidator(m_validator);
261 }
262
263#ifndef KDE_NO_DEPRECATED
264 // make sure that an uint cannot be set to a value < 0
265 if (d->m_item.properties().type() == QVariant::UInt)
266 sb->setMinimum(qMax(sb->minimum(), 0));
267#endif
268
269 connect(sb, SIGNAL(valueChanged(int)), this, SLOT(slotChanged(int)));
270 return sb;
271}
272
273QWidget* KFileMetaInfoWidget::makeDoubleWidget()
274{
275 double value = d->m_item.value().toDouble();
276
277 KDoubleNumInput* dni = new KDoubleNumInput(qMin(0.0,value), //krazy:exclude=qminmax
278 qMax(0.0,value), //krazy:exclude=qminmax
279 value, this, 0.01 ,2);
280
281
282 if (d->m_validator) {
283 if (QDoubleValidator* dv = qobject_cast<QDoubleValidator*>(d->m_validator)) {
284 dni->setMinimum(dv->bottom());
285 dni->setMaximum(dv->top());
286 }
287 reparentValidator(dni, d->m_validator);
288 }
289
290 connect(dni, SIGNAL(valueChanged(double)), this, SLOT(slotChanged(double)));
291 return dni;
292}
293
294QWidget* KFileMetaInfoWidget::makeStringWidget()
295{
296 if (KStringListValidator* val = qobject_cast<KStringListValidator*>(d->m_validator)) {
297 KComboBox* b = new KComboBox(true, this);
298 b->addItems(val->stringList());
299 int i = b->findText(d->m_item.value().toString());
300 if (i != -1)
301 b->setCurrentIndex(i);
302 else
303 b->setEditText(d->m_item.value().toString());
304 connect(b, SIGNAL(activated(QString)), this, SLOT(slotComboChanged(QString)));
305 b->setValidator(val);
306 reparentValidator(b, val);
307 return b;
308 }
309
310#ifndef KDE_NO_DEPRECATED
311 if (d->m_item.properties().attributes() & PredicateProperties::MultiLine) {
312 KTextEdit *edit = new KTextEdit( this );
313 edit->setAcceptRichText(false);
314 edit->setPlainText(d->m_item.value().toString());
315 connect( edit, SIGNAL(textChanged()),
316 this, SLOT(slotMultiLineEditChanged()));
317 // can't use a validator with a KTextEdit, but we may need to delete it
318 if (d->m_validator)
319 reparentValidator(edit, d->m_validator);
320 return edit;
321 }
322#endif
323
324 KLineEdit* e = new KLineEdit(d->m_item.value().toString(), this);
325 if (d->m_validator) {
326 e->setValidator(d->m_validator);
327 reparentValidator(e, d->m_validator);
328 }
329 connect(e, SIGNAL(textChanged(QString)),
330 this, SLOT(slotLineEditChanged(QString)));
331 return e;
332}
333
334QWidget* KFileMetaInfoWidget::makeDateWidget()
335{
336 QWidget *e = new QDateEdit(d->m_item.value().toDate(), this);
337 connect(e, SIGNAL(valueChanged(QDate)),
338 this, SLOT(slotDateChanged(QDate)));
339 return e;
340}
341
342QWidget* KFileMetaInfoWidget::makeTimeWidget()
343{
344 return new QTimeEdit(d->m_item.value().toTime(), this);
345}
346
347QWidget* KFileMetaInfoWidget::makeDateTimeWidget()
348{
349 return new QDateTimeEdit(d->m_item.value().toDateTime(), this);
350}
351
352void KFileMetaInfoWidget::reparentValidator( QWidget *widget,
353 QValidator *validator )
354{
355 if ( !validator->parent() )
356 validator->setParent( widget );
357}
358
359// ****************************************************************
360// now the slots that let us get notified if the value changed in the child
361// ****************************************************************
362
363void KFileMetaInfoWidget::slotChanged(bool value)
364{
365 Q_ASSERT(qobject_cast<QComboBox*>(d->m_widget));
366 d->m_value = QVariant(value);
367 emit valueChanged(d->m_value);
368 d->m_dirty = true;
369}
370
371void KFileMetaInfoWidget::slotChanged(int value)
372{
373 Q_ASSERT(qobject_cast<QSpinBox*>(d->m_widget));
374 d->m_value = QVariant(value);
375 emit valueChanged(d->m_value);
376 d->m_dirty = true;
377}
378
379void KFileMetaInfoWidget::slotChanged(double value)
380{
381 Q_ASSERT(qobject_cast<KDoubleNumInput*>(d->m_widget));
382 d->m_value = QVariant(value);
383 emit valueChanged(d->m_value);
384 d->m_dirty = true;
385}
386
387void KFileMetaInfoWidget::slotComboChanged(const QString &value)
388{
389 Q_ASSERT(qobject_cast<KComboBox*>(d->m_widget));
390 d->m_value = QVariant(value);
391 emit valueChanged(d->m_value);
392 d->m_dirty = true;
393}
394
395void KFileMetaInfoWidget::slotLineEditChanged(const QString& value)
396{
397 Q_ASSERT(qobject_cast<KLineEdit*>(d->m_widget));
398 d->m_value = QVariant(value);
399 emit valueChanged(d->m_value);
400 d->m_dirty = true;
401}
402
403// that may be a little expensive for long texts, but what can we do?
404void KFileMetaInfoWidget::slotMultiLineEditChanged()
405{
406 Q_ASSERT(qobject_cast<KTextEdit*>(d->m_widget));
407 d->m_value = QVariant(static_cast<const KTextEdit*>(sender())->toPlainText());
408 emit valueChanged(d->m_value);
409 d->m_dirty = true;
410}
411
412void KFileMetaInfoWidget::slotDateChanged(const QDate& value)
413{
414 Q_ASSERT(qobject_cast<QDateEdit*>(d->m_widget));
415 d->m_value = QVariant(value);
416 emit valueChanged(d->m_value);
417 d->m_dirty = true;
418}
419
420void KFileMetaInfoWidget::slotTimeChanged(const QTime& value)
421{
422 Q_ASSERT(qobject_cast<QTimeEdit*>(d->m_widget));
423 d->m_value = QVariant(value);
424 emit valueChanged(d->m_value);
425 d->m_dirty = true;
426}
427
428void KFileMetaInfoWidget::slotDateTimeChanged(const QDateTime& value)
429{
430 Q_ASSERT(qobject_cast<QDateTimeEdit*>(d->m_widget));
431 d->m_value = QVariant(value);
432 emit valueChanged(d->m_value);
433 d->m_dirty = true;
434}
435
436#include "kfilemetainfowidget.moc"
KComboBox
KDoubleNumInput
KDoubleNumInput::setMaximum
void setMaximum(double max)
KDoubleNumInput::setMinimum
void setMinimum(double min)
KFileMetaInfoItem
Definition: kfilemetainfoitem.h:34
KFileMetaInfoItem::value
const QVariant & value() const
Retrieve the current value of this item.
Definition: kfilemetainfoitem.cpp:66
KFileMetaInfoWidget
Definition: kfilemetainfowidget.h:33
KFileMetaInfoWidget::makeDateTimeWidget
QWidget * makeDateTimeWidget()
Definition: kfilemetainfowidget.cpp:347
KFileMetaInfoWidget::makeStringWidget
QWidget * makeStringWidget()
Definition: kfilemetainfowidget.cpp:294
KFileMetaInfoWidget::KFileMetaInfoWidget
KFileMetaInfoWidget(KFileMetaInfoItem item, QValidator *val=0, QWidget *parent=0)
Definition: kfilemetainfowidget.cpp:67
KFileMetaInfoWidget::validator
QValidator * validator() const
Definition: kfilemetainfowidget.cpp:145
KFileMetaInfoWidget::makeWidget
virtual QWidget * makeWidget()
Definition: kfilemetainfowidget.cpp:155
KFileMetaInfoWidget::value
QVariant value() const
Definition: kfilemetainfowidget.cpp:140
KFileMetaInfoWidget::makeIntWidget
QWidget * makeIntWidget()
Definition: kfilemetainfowidget.cpp:248
KFileMetaInfoWidget::makeBoolWidget
QWidget * makeBoolWidget()
Definition: kfilemetainfowidget.cpp:239
KFileMetaInfoWidget::Mode
Mode
Definition: kfilemetainfowidget.h:37
KFileMetaInfoWidget::ReadWrite
@ ReadWrite
Only display the meta information, and do not permit the user to edit them.
Definition: kfilemetainfowidget.h:39
KFileMetaInfoWidget::ReadOnly
@ ReadOnly
Definition: kfilemetainfowidget.h:38
KFileMetaInfoWidget::~KFileMetaInfoWidget
virtual ~KFileMetaInfoWidget()
Definition: kfilemetainfowidget.cpp:125
KFileMetaInfoWidget::makeDateWidget
QWidget * makeDateWidget()
Definition: kfilemetainfowidget.cpp:334
KFileMetaInfoWidget::valueChanged
void valueChanged(const QVariant &value)
KFileMetaInfoWidget::makeTimeWidget
QWidget * makeTimeWidget()
Definition: kfilemetainfowidget.cpp:342
KFileMetaInfoWidget::reparentValidator
void reparentValidator(QWidget *widget, QValidator *validator)
Definition: kfilemetainfowidget.cpp:352
KFileMetaInfoWidget::setValue
void setValue(const QVariant &value)
Definition: kfilemetainfowidget.cpp:135
KFileMetaInfoWidget::makeDoubleWidget
QWidget * makeDoubleWidget()
Definition: kfilemetainfowidget.cpp:273
KFileMetaInfoWidget::apply
bool apply()
Definition: kfilemetainfowidget.cpp:130
KFileMetaInfoWidget::item
KFileMetaInfoItem item() const
Definition: kfilemetainfowidget.cpp:150
KLineEdit
KStringListValidator
KTextEdit
PredicateProperties::MultiLine
@ MultiLine
This attribute says that a string item is likely to be more than one line long, so for editing,...
Definition: predicateproperties.h:59
QDoubleValidator
QLabel
QValidator
QWidget
kDebug
#define kDebug
kcombobox.h
kdebug.h
kfilemetainfowidget.h
klineedit.h
klocale.h
i18n
QString i18n(const char *text)
knuminput.h
kstringvalidator.h
ktextedit.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KIO

Skip menu "KIO"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal