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

KIO

  • sources
  • kde-4.14
  • kdelibs
  • 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 
39 class KFileMetaInfoWidgetPrivate
40 {
41 public:
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 
67 KFileMetaInfoWidget::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 
78 KFileMetaInfoWidget::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 
90 void 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 
125 KFileMetaInfoWidget::~KFileMetaInfoWidget()
126 {
127  delete d;
128 }
129 
130 bool KFileMetaInfoWidget::apply()
131 {
132  return d->m_item.isEditable() && d->m_item.setValue(d->m_value);
133 }
134 
135 void KFileMetaInfoWidget::setValue(const QVariant &value)
136 {
137  d->m_value = value;
138 }
139 
140 QVariant KFileMetaInfoWidget::value() const
141 {
142  return d->m_value;
143 }
144 
145 QValidator* KFileMetaInfoWidget::validator() const
146 {
147  return d->m_validator;
148 }
149 
150 KFileMetaInfoItem KFileMetaInfoWidget::item() const
151 {
152  return d->m_item;
153 }
154 
155 QWidget* 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 
239 QWidget* 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 
248 QWidget* 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 
273 QWidget* 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 
294 QWidget* 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 
334 QWidget* 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 
342 QWidget* KFileMetaInfoWidget::makeTimeWidget()
343 {
344  return new QTimeEdit(d->m_item.value().toTime(), this);
345 }
346 
347 QWidget* KFileMetaInfoWidget::makeDateTimeWidget()
348 {
349  return new QDateTimeEdit(d->m_item.value().toDateTime(), this);
350 }
351 
352 void 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 
363 void 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 
371 void 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 
379 void 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 
387 void 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 
395 void 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?
404 void 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 
412 void 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 
420 void 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 
428 void 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"
i18n
QString i18n(const char *text)
knuminput.h
kcombobox.h
QSpinBox::setMinimum
void setMinimum(int min)
QWidget
KFileMetaInfoWidget::makeIntWidget
QWidget * makeIntWidget()
Definition: kfilemetainfowidget.cpp:248
KFileMetaInfoItem
Definition: kfilemetainfoitem.h:34
kdebug.h
QDateEdit
KFileMetaInfoWidget::KFileMetaInfoWidget
KFileMetaInfoWidget(KFileMetaInfoItem item, QValidator *val=0, QWidget *parent=0)
Definition: kfilemetainfowidget.cpp:67
QObject::sender
QObject * sender() const
KFileMetaInfoWidget::makeStringWidget
QWidget * makeStringWidget()
Definition: kfilemetainfowidget.cpp:294
QSizePolicy
KFileMetaInfoWidget::makeDateWidget
QWidget * makeDateWidget()
Definition: kfilemetainfowidget.cpp:334
KDoubleNumInput::setMaximum
void setMaximum(double max)
QObject::metaObject
virtual const QMetaObject * metaObject() const
QHBoxLayout
KStringListValidator
QPixmap::fromImage
QPixmap fromImage(const QImage &image, QFlags< Qt::ImageConversionFlag > flags)
QComboBox::setEditText
void setEditText(const QString &text)
KFileMetaInfoWidget::Mode
Mode
Definition: kfilemetainfowidget.h:36
KFileMetaInfoWidget::reparentValidator
void reparentValidator(QWidget *widget, QValidator *validator)
Definition: kfilemetainfowidget.cpp:352
QTextEdit::setPlainText
void setPlainText(const QString &text)
kDebug
static QDebug kDebug(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
klocale.h
QTime
PredicateProperties::MultiLine
This attribute says that a string item is likely to be more than one line long, so for editing...
Definition: predicateproperties.h:59
QComboBox::findText
int findText(const QString &text, QFlags< Qt::MatchFlag > flags) const
QBoxLayout::addWidget
void addWidget(QWidget *widget, int stretch, QFlags< Qt::AlignmentFlag > alignment)
KFileMetaInfoWidget::item
KFileMetaInfoItem item() const
Definition: kfilemetainfowidget.cpp:150
KFileMetaInfoWidget::value
QVariant value() const
Definition: kfilemetainfowidget.cpp:140
QCheckBox
KFileMetaInfoWidget::apply
bool apply()
Definition: kfilemetainfowidget.cpp:130
QObject::setObjectName
void setObjectName(const QString &name)
KFileMetaInfoWidget::~KFileMetaInfoWidget
virtual ~KFileMetaInfoWidget()
Definition: kfilemetainfowidget.cpp:125
kfilemetainfowidget.h
KFileMetaInfoWidget::makeWidget
virtual QWidget * makeWidget()
Definition: kfilemetainfowidget.cpp:155
QDate
KFileMetaInfoWidget::makeBoolWidget
QWidget * makeBoolWidget()
Definition: kfilemetainfowidget.cpp:239
QString
QLayout::setMargin
void setMargin(int margin)
QIntValidator
QPixmap
QSpinBox
QSizePolicy::setVerticalPolicy
void setVerticalPolicy(Policy policy)
QObject::setParent
void setParent(QObject *parent)
KFileMetaInfoWidget::makeDoubleWidget
QWidget * makeDoubleWidget()
Definition: kfilemetainfowidget.cpp:273
KFileMetaInfoWidget::setValue
void setValue(const QVariant &value)
Definition: kfilemetainfowidget.cpp:135
QMetaObject::className
const char * className() const
QImage
QSpinBox::setMaximum
void setMaximum(int max)
QAbstractButton::setChecked
void setChecked(bool)
KLineEdit
KFileMetaInfoWidget
Definition: kfilemetainfowidget.h:32
QDateTimeEdit
KDoubleNumInput
QLatin1String
QSpinBox::setValue
void setValue(int val)
ktextedit.h
KComboBox
QComboBox::setCurrentIndex
void setCurrentIndex(int index)
KFileMetaInfoWidget::makeDateTimeWidget
QWidget * makeDateTimeWidget()
Definition: kfilemetainfowidget.cpp:347
klineedit.h
QComboBox::addItems
void addItems(const QStringList &texts)
QDoubleValidator
KDoubleNumInput::setMinimum
void setMinimum(double min)
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QLabel
QObject::parent
QObject * parent() const
KFileMetaInfoWidget::makeTimeWidget
QWidget * makeTimeWidget()
Definition: kfilemetainfowidget.cpp:342
KFileMetaInfoWidget::validator
QValidator * validator() const
Definition: kfilemetainfowidget.cpp:145
KFileMetaInfoWidget::ReadWrite
Only display the meta information, and do not permit the user to edit them.
Definition: kfilemetainfowidget.h:39
QLineEdit::setValidator
void setValidator(const QValidator *v)
kstringvalidator.h
QTextEdit::setAcceptRichText
void setAcceptRichText(bool accept)
KFileMetaInfoWidget::valueChanged
void valueChanged(const QVariant &value)
QDateTime
KTextEdit
QValidator
QTimeEdit
QComboBox::setValidator
void setValidator(const QValidator *validator)
KFileMetaInfoItem::value
const QVariant & value() const
Retrieve the current value of this item.
Definition: kfilemetainfoitem.cpp:66
QVariant
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:24:53 by doxygen 1.8.7 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 API Reference

Skip menu "kdelibs 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

Search



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