kmetaprops.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "kmetaprops.h"
00022
00023 #include <kfilemetainfo.h>
00024 #include <kglobal.h>
00025 #include <klocale.h>
00026 #include <kdebug.h>
00027 #include <kfilemetainfowidget.h>
00028
00029 #include <qvalidator.h>
00030 #include <qlayout.h>
00031 #include <qlabel.h>
00032 #include <qfileinfo.h>
00033 #include <qdatetime.h>
00034 #include <qstylesheet.h>
00035 #include <qvgroupbox.h>
00036
00037 #undef Bool
00038
00039 class MetaPropsScrollView : public QScrollView
00040 {
00041 public:
00042 MetaPropsScrollView(QWidget* parent = 0, const char* name = 0)
00043 : QScrollView(parent, name)
00044 {
00045 setFrameStyle(QFrame::NoFrame);
00046 m_frame = new QFrame(viewport(), "MetaPropsScrollView::m_frame");
00047 m_frame->setFrameStyle(QFrame::NoFrame);
00048 addChild(m_frame, 0, 0);
00049 };
00050
00051 QFrame* frame() {return m_frame;};
00052
00053 protected:
00054 virtual void viewportResizeEvent(QResizeEvent* ev)
00055 {
00056 QScrollView::viewportResizeEvent(ev);
00057 m_frame->resize( kMax(m_frame->sizeHint().width(), ev->size().width()),
00058 kMax(m_frame->sizeHint().height(), ev->size().height()));
00059 };
00060
00061 private:
00062 QFrame* m_frame;
00063 };
00064
00065 class KFileMetaPropsPlugin::KFileMetaPropsPluginPrivate
00066 {
00067 public:
00068 KFileMetaPropsPluginPrivate() {}
00069 ~KFileMetaPropsPluginPrivate() {}
00070
00071 QFrame* m_frame;
00072 QGridLayout* m_framelayout;
00073 KFileMetaInfo m_info;
00074
00075 QPtrList<KFileMetaInfoWidget> m_editWidgets;
00076 };
00077
00078 KFileMetaPropsPlugin::KFileMetaPropsPlugin(KPropertiesDialog* props)
00079 : KPropsDlgPlugin(props)
00080 {
00081 d = new KFileMetaPropsPluginPrivate;
00082
00083 KFileItem * fileitem = properties->item();
00084 kdDebug(250) << "KFileMetaPropsPlugin constructor" << endl;
00085
00086 d->m_info = fileitem->metaInfo();
00087 if (!d->m_info.isValid())
00088 {
00089 d->m_info = KFileMetaInfo(properties->kurl().path(-1));
00090 fileitem->setMetaInfo(d->m_info);
00091 }
00092
00093 if ( properties->items().count() > 1 )
00094 {
00095
00096
00097
00098 return;
00099 }
00100
00101 createLayout();
00102
00103 setDirty(true);
00104 }
00105
00106 void KFileMetaPropsPlugin::createLayout()
00107 {
00108 QFileInfo file_info(properties->item()->url().path());
00109
00110 kdDebug(250) << "KFileMetaPropsPlugin::createLayout" << endl;
00111
00112
00113 if ( !d->m_info.isValid() || (d->m_info.preferredKeys()).isEmpty() )
00114 return;
00115
00116
00117 KFileMetaInfoProvider* prov = KFileMetaInfoProvider::self();
00118 QStringList groupList = d->m_info.preferredGroups();
00119
00120 const KFileMimeTypeInfo* mtinfo = prov->mimeTypeInfo(d->m_info.mimeType());
00121 if (!mtinfo)
00122 {
00123 kdDebug(7034) << "no mimetype info there\n";
00124 return;
00125 }
00126
00127
00128 QFrame* topframe = properties->dialog()->addPage(i18n("&Meta Info"));
00129 topframe->setFrameStyle(QFrame::NoFrame);
00130 QVBoxLayout* tmp = new QVBoxLayout(topframe);
00131
00132
00133 MetaPropsScrollView* view = new MetaPropsScrollView(topframe);
00134
00135 tmp->addWidget(view);
00136
00137 d->m_frame = view->frame();
00138
00139 QVBoxLayout *toplayout = new QVBoxLayout(d->m_frame);
00140 toplayout->setSpacing(KDialog::spacingHint());
00141
00142 for (QStringList::Iterator git=groupList.begin();
00143 git!=groupList.end(); ++git)
00144 {
00145 kdDebug(7033) << *git << endl;
00146
00147 QStringList itemList = d->m_info.group(*git).preferredKeys();
00148 if (itemList.isEmpty())
00149 continue;
00150
00151 QGroupBox *groupBox = new QGroupBox(2, Qt::Horizontal,
00152 QStyleSheet::escape(mtinfo->groupInfo(*git)->translatedName()),
00153 d->m_frame);
00154
00155 toplayout->addWidget(groupBox);
00156
00157 QValueList<KFileMetaInfoItem> readItems;
00158 QValueList<KFileMetaInfoItem> editItems;
00159
00160 for (QStringList::Iterator iit = itemList.begin();
00161 iit!=itemList.end(); ++iit)
00162 {
00163 KFileMetaInfoItem item = d->m_info[*git][*iit];
00164 if ( !item.isValid() ) continue;
00165
00166 bool editable = file_info.isWritable() && item.isEditable();
00167
00168 if (editable)
00169 editItems.append( item );
00170 else
00171 readItems.append( item );
00172 }
00173
00174 KFileMetaInfoWidget* w = 0L;
00175
00176 for (QValueList<KFileMetaInfoItem>::Iterator iit= editItems.begin();
00177 iit!=editItems.end(); ++iit)
00178 {
00179 (new QLabel((*iit).translatedKey() + ":", groupBox));
00180 QValidator* val = mtinfo->createValidator(*git, (*iit).key());
00181 if (!val) kdDebug(7033) << "didn't get a validator for " << *git << "/" << (*iit).key() << endl;
00182 w = new KFileMetaInfoWidget(*iit, val, groupBox);
00183 d->m_editWidgets.append( w );
00184 connect(w, SIGNAL(valueChanged(const QVariant&)), this, SIGNAL(changed()));
00185 }
00186
00187
00188 for (QValueList<KFileMetaInfoItem>::Iterator iit= readItems.begin();
00189 iit!=readItems.end(); ++iit)
00190 {
00191 (new QLabel((*iit).translatedKey() + ":", groupBox));
00192 (new KFileMetaInfoWidget(*iit, 0L, groupBox));
00193 }
00194 }
00195
00196 toplayout->addStretch(1);
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224 }
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236 KFileMetaPropsPlugin::~KFileMetaPropsPlugin()
00237 {
00238 delete d;
00239 }
00240
00241 bool KFileMetaPropsPlugin::supports( KFileItemList _items )
00242 {
00243 #ifdef _GNUC
00244 #warning TODO: Add support for more than one item
00245 #endif
00246 if (_items.count()!=1) return false;
00247 return true;
00248 }
00249
00250 void KFileMetaPropsPlugin::applyChanges()
00251 {
00252 kdDebug(250) << "applying changes" << endl;
00253
00254
00255 QPtrListIterator<KFileMetaInfoWidget> it( d->m_editWidgets );
00256 KFileMetaInfoWidget* w;
00257 for (; (w = it.current()); ++it) w->apply();
00258 d->m_info.applyChanges();
00259 }
00260
00261 #include "kmetaprops.moc"
This file is part of the documentation for kdelibs Version 3.1.5.