diff options
Diffstat (limited to 'tdeio/tdefile/tdefilemetainfowidget.cpp')
-rw-r--r-- | tdeio/tdefile/tdefilemetainfowidget.cpp | 375 |
1 files changed, 375 insertions, 0 deletions
diff --git a/tdeio/tdefile/tdefilemetainfowidget.cpp b/tdeio/tdefile/tdefilemetainfowidget.cpp new file mode 100644 index 000000000..dea9ea353 --- /dev/null +++ b/tdeio/tdefile/tdefilemetainfowidget.cpp @@ -0,0 +1,375 @@ +/* This file is part of the KDE libraries + Copyright (C) 2001,2002 Rolf Magnus <[email protected]> + + library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + $Id$ + */ + +#include "tdefilemetainfowidget.h" + +#include <keditcl.h> +#include <klocale.h> +#include <knuminput.h> +#include <kcombobox.h> +#include <klineedit.h> +#include <kstringvalidator.h> +#include <kdebug.h> + +#include <tqlabel.h> +#include <tqcheckbox.h> +#include <tqspinbox.h> +#include <tqdatetimeedit.h> +#include <tqpixmap.h> +#include <tqimage.h> +#include <tqlayout.h> +#include <tqvalidator.h> + +/* + Widgets used for different types: + + bool : QCheckBox + int : QSpinBox + TQString : KComboBox if the validator is a KStringListValidator, else lineedit + TQDateTime : QDateTimeEdit + +*/ + +KFileMetaInfoWidget::KFileMetaInfoWidget(KFileMetaInfoItem item, + TQValidator* val, + TQWidget* parent, const char* name) + : TQWidget(parent, name), + m_value(item.value()), + m_item(item), + m_validator(val) +{ + init(item, ReadWrite); +} + +KFileMetaInfoWidget::KFileMetaInfoWidget(KFileMetaInfoItem item, + Mode mode, + TQValidator* val, + TQWidget* parent, const char* name) + : TQWidget(parent, name), + m_value(item.value()), + m_item(item), + m_validator(val) +{ + init(item, mode); +} + +void KFileMetaInfoWidget::init(KFileMetaInfoItem item, Mode mode) +{ + kdDebug(7033) << "*** item " << m_item.key() + << " is a " << value().typeName() << endl; + + if (m_item.isEditable() && !(mode & ReadOnly)) + m_widget = makeWidget(); + else + switch (m_value.type()) + { + case TQVariant::Image : + m_widget = new TQLabel(this, "info image"); + static_cast<TQLabel*>(m_widget)->setPixmap(TQPixmap(m_value.toImage())); + break; + case TQVariant::Pixmap : + m_widget = new TQLabel(this, "info pixmap"); + static_cast<TQLabel*>(m_widget)->setPixmap(m_value.toPixmap()); + break; + default: + m_widget = new TQLabel(item.string(true), this, "info label"); + } + + (new TQHBoxLayout(this))->addWidget(m_widget); +} + +KFileMetaInfoWidget::~KFileMetaInfoWidget() +{ +} + +TQWidget* KFileMetaInfoWidget::makeWidget() +{ + TQString valClass; + TQWidget* w; + + switch (m_value.type()) + { + case TQVariant::Invalid: // no type + // just make a label + w = new TQLabel(i18n("<Error>"), this, "label"); + break; + + case TQVariant::Int: // an int + case TQVariant::UInt: // an unsigned int + w = makeIntWidget(); + break; + + case TQVariant::Bool: // a bool + w = makeBoolWidget(); + break; + + case TQVariant::Double: // a double + w = makeDoubleWidget(); + break; + + + case TQVariant::Date: // a QDate + w = makeDateWidget(); + break; + + case TQVariant::Time: // a QTime + w = makeTimeWidget(); + break; + + case TQVariant::DateTime: // a QDateTime + w = makeDateTimeWidget(); + break; + +#if 0 + case TQVariant::Size: // a QSize + case TQVariant::String: // a QString + case TQVariant::List: // a QValueList + case TQVariant::Map: // a QMap + case TQVariant::StringList: // a QStringList + case TQVariant::Font: // a QFont + case TQVariant::Pixmap: // a QPixmap + case TQVariant::Brush: // a QBrush + case TQVariant::Rect: // a QRect + case TQVariant::Color: // a QColor + case TQVariant::Palette: // a QPalette + case TQVariant::ColorGroup: // a QColorGroup + case TQVariant::IconSet: // a QIconSet + case TQVariant::Point: // a QPoint + case TQVariant::Image: // a QImage + case TQVariant::CString: // a QCString + case TQVariant::PointArray: // a QPointArray + case TQVariant::Region: // a QRegion + case TQVariant::Bitmap: // a QBitmap + case TQVariant::Cursor: // a QCursor + case TQVariant::ByteArray: // a QByteArray + case TQVariant::BitArray: // a QBitArray + case TQVariant::SizePolicy: // a QSizePolicy + case TQVariant::KeySequence: // a QKeySequence +#endif + default: + w = makeStringWidget(); + } + + kdDebug(7033) << "*** item " << m_item.key() + << "is a " << m_item.value().typeName() << endl; + if (m_validator) + kdDebug(7033) << " and validator is a " << m_validator->className() << endl; + + kdDebug(7033) << "*** created a " << w->className() << " for it\n"; + + return w; +} + +// **************************************************************** +// now the different methods to make the widgets for specific types +// **************************************************************** + +TQWidget* KFileMetaInfoWidget::makeBoolWidget() +{ + TQCheckBox* cb = new TQCheckBox(this, "metainfo bool widget"); + cb->setChecked(m_item.value().toBool()); + connect(cb, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotChanged(bool))); + return cb; +} + +TQWidget* KFileMetaInfoWidget::makeIntWidget() +{ + TQSpinBox* sb = new TQSpinBox(this, "metainfo integer widget"); + sb->setValue(m_item.value().toInt()); + + if (m_validator) + { + if (m_validator->inherits(TQINTVALIDATOR_OBJECT_NAME_STRING)) + { + sb->setMinValue(static_cast<TQIntValidator*>(m_validator)->bottom()); + sb->setMaxValue(static_cast<TQIntValidator*>(m_validator)->top()); + } + reparentValidator(sb, m_validator); + sb->setValidator(m_validator); + } + + // make sure that an uint cannot be set to a value < 0 + if (m_item.type() == TQVariant::UInt) + sb->setMinValue(QMAX(sb->minValue(), 0)); + + connect(sb, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(slotChanged(int))); + return sb; +} + +TQWidget* KFileMetaInfoWidget::makeDoubleWidget() +{ + KDoubleNumInput* dni = new KDoubleNumInput(m_item.value().toDouble(), + this, "metainfo double widget"); + + + if (m_validator) + { + if (m_validator->inherits("QDoubleValidator")) + { + dni->setMinValue(static_cast<TQDoubleValidator*>(m_validator)->bottom()); + dni->setMaxValue(static_cast<TQDoubleValidator*>(m_validator)->top()); + } + reparentValidator(dni, m_validator); + } + + connect(dni, TQT_SIGNAL(valueChanged(double)), this, TQT_SLOT(slotChanged(double))); + return dni; +} + +TQWidget* KFileMetaInfoWidget::makeStringWidget() +{ + if (m_validator && m_validator->inherits("KStringListValidator")) + { + KComboBox* b = new KComboBox(true, this, "metainfo combobox"); + KStringListValidator* val = static_cast<KStringListValidator*> + (m_validator); + b->insertStringList(val->stringList()); + b->setCurrentText(m_item.value().toString()); + connect(b, TQT_SIGNAL(activated(const TQString &)), this, TQT_SLOT(slotComboChanged(const TQString &))); + b->setValidator(val); + reparentValidator(b, val); + return b; + } + + if ( m_item.attributes() & KFileMimeTypeInfo::MultiLine ) { + KEdit *edit = new KEdit( this ); + edit->setText( m_item.value().toString() ); + connect( edit, TQT_SIGNAL( textChanged() ), + this, TQT_SLOT( slotMultiLineEditChanged() )); + // can't use a validator with a TQTextEdit, but we may need to delete it + if ( m_validator ) + reparentValidator( edit, m_validator ); + return edit; + } + + KLineEdit* e = new KLineEdit(m_item.value().toString(), this); + if (m_validator) + { + e->setValidator(m_validator); + reparentValidator(e, m_validator); + } + connect(e, TQT_SIGNAL(textChanged(const TQString&)), + this, TQT_SLOT(slotLineEditChanged(const TQString&))); + return e; +} + +TQWidget* KFileMetaInfoWidget::makeDateWidget() +{ + TQWidget *e = new TQDateEdit(m_item.value().toDate(), this); + connect(e, TQT_SIGNAL(valueChanged(const TQDate&)), + this, TQT_SLOT(slotDateChanged(const TQDate&))); + return e; +} + +TQWidget* KFileMetaInfoWidget::makeTimeWidget() +{ + return new TQTimeEdit(m_item.value().toTime(), this); +} + +TQWidget* KFileMetaInfoWidget::makeDateTimeWidget() +{ + return new TQDateTimeEdit(m_item.value().toDateTime(), this); +} + +void KFileMetaInfoWidget::reparentValidator( TQWidget *widget, + TQValidator *validator ) +{ + if ( !validator->parent() ) + widget->insertChild( validator ); +} + +// **************************************************************** +// now the slots that let us get notified if the value changed in the child +// **************************************************************** + +void KFileMetaInfoWidget::slotChanged(bool value) +{ + Q_ASSERT(m_widget->inherits(TQCOMBOBOX_OBJECT_NAME_STRING)); + m_value = TQVariant(value); + emit valueChanged(m_value); + m_dirty = true; +} + +void KFileMetaInfoWidget::slotChanged(int value) +{ + Q_ASSERT(m_widget->inherits(TQSPINBOX_OBJECT_NAME_STRING)); + m_value = TQVariant(value); + emit valueChanged(m_value); + m_dirty = true; +} + +void KFileMetaInfoWidget::slotChanged(double value) +{ + Q_ASSERT(m_widget->inherits("KDoubleNumInput")); + m_value = TQVariant(value); + emit valueChanged(m_value); + m_dirty = true; +} + +void KFileMetaInfoWidget::slotComboChanged(const TQString &value) +{ + Q_ASSERT(m_widget->inherits("KComboBox")); + m_value = TQVariant(value); + emit valueChanged(m_value); + m_dirty = true; +} + +void KFileMetaInfoWidget::slotLineEditChanged(const TQString& value) +{ + Q_ASSERT(m_widget->inherits("KLineEdit")); + m_value = TQVariant(value); + emit valueChanged(m_value); + m_dirty = true; +} + +// that may be a little expensive for long texts, but what can we do? +void KFileMetaInfoWidget::slotMultiLineEditChanged() +{ + Q_ASSERT(m_widget->inherits(TQTEXTEDIT_OBJECT_NAME_STRING)); + m_value = TQVariant( static_cast<const TQTextEdit*>( sender() )->text() ); + emit valueChanged(m_value); + m_dirty = true; +} + +void KFileMetaInfoWidget::slotDateChanged(const TQDate& value) +{ + Q_ASSERT(m_widget->inherits(TQDATEEDIT_OBJECT_NAME_STRING)); + m_value = TQVariant(value); + emit valueChanged(m_value); + m_dirty = true; +} + +void KFileMetaInfoWidget::slotTimeChanged(const TQTime& value) +{ + Q_ASSERT(m_widget->inherits(TQTIMEEDIT_OBJECT_NAME_STRING)); + m_value = TQVariant(value); + emit valueChanged(m_value); + m_dirty = true; +} + +void KFileMetaInfoWidget::slotDateTimeChanged(const TQDateTime& value) +{ + Q_ASSERT(m_widget->inherits(TQDATETIMEEDIT_OBJECT_NAME_STRING)); + m_value = TQVariant(value); + emit valueChanged(m_value); + m_dirty = true; +} + +#include "tdefilemetainfowidget.moc" |