|
Git commit 0a263ae6c29547a85ac248e8f0af4495994d884c by Angelo Naselli.
Committed on 26/01/2012 at 22:33. Pushed by anaselli into branch 'master'. Added Save and Load management to ImagesList and emitted: signalXMLSaveItem, signalXMLLoadImageElement, signalXMLCustomElements, signalXMLCustomElements to save and load custom attributes and elements. File format is XML: <?xml version="1.0" encoding="UTF-8"?> <Images> <Image url="file:///path/to/image" custom_attr1="value1"> <CustomImageElem CustomImageElemAttr="attribute value"/> </Image> <CustomElem customElemAttr="" /> <Images/> I suggest plugins to add a plugin prefix to allow loading imagelist also to those plugins that don't have custom elements/attributes. CCMAIL=[hidden email],[hidden email] M +127 -7 common/libkipiplugins/widgets/imageslist.cpp M +12 -5 common/libkipiplugins/widgets/imageslist.h http://commits.kde.org/kipi-plugins/0a263ae6c29547a85ac248e8f0af4495994d884c diff --git a/common/libkipiplugins/widgets/imageslist.cpp b/common/libkipiplugins/widgets/imageslist.cpp index 34c3ed7..003b9cb 100644 --- a/common/libkipiplugins/widgets/imageslist.cpp +++ b/common/libkipiplugins/widgets/imageslist.cpp @@ -36,6 +36,12 @@ #include <QPushButton> #include <QUrl> #include <QTimer> +#include <QFile> +#include <QPointer> +#include <QXmlStreamWriter> +#include <QXmlStreamReader> +#include <QXmlStreamAttributes> +#include <QStringRef> // KDE includes @@ -47,6 +53,8 @@ #include <knuminput.h> #include <kio/previewjob.h> #include <kpixmapsequence.h> +#include <KFileDialog> +#include <KGlobalSettings> // LibKIPI includes @@ -395,7 +403,7 @@ QModelIndex ImagesListView::indexFromItem ( ImagesListViewItem * item, int colum void ImagesListView::contextMenuEvent(QContextMenuEvent * e) { QTreeWidget::contextMenuEvent(e); - emit contextMenuRequested(); + emit signalContextMenuRequested(); } void ImagesListView::dragEnterEvent(QDragEnterEvent* e) @@ -578,8 +586,8 @@ ImagesList::ImagesList(Interface* iface, QWidget* parent, int iconSize) connect(d->listView, SIGNAL(signalItemClicked(QTreeWidgetItem*)), this, SIGNAL(signalItemClicked(QTreeWidgetItem*))); - connect(d->listView, SIGNAL(contextMenuRequested()), - this, SIGNAL(contextMenuRequested())); + connect(d->listView, SIGNAL(signalContextMenuRequested()), + this, SIGNAL(signalContextMenuRequested())); // queue this connection because itemSelectionChanged is emitted // while items are deleted, and accessing selectedItems at that @@ -912,9 +920,121 @@ void ImagesList::slotMoveDownItems() void ImagesList::slotClearItems() { - listView()->selectAll(); - slotRemoveItems(); - listView()->clear(); + listView()->selectAll(); + slotRemoveItems(); + listView()->clear(); +} + +void ImagesList::slotLoadItems() +{ + KUrl loadLevelsFile; + + loadLevelsFile = KFileDialog::getOpenUrl(KGlobalSettings::documentPath(), + QString( "*" ), this, + QString( i18n("Select the image file list to load")) ); + + if ( loadLevelsFile.isEmpty() ) + { + return; + } + QFile file(loadLevelsFile.path()); + + kDebug() << "file path " <<loadLevelsFile.path(); + file.open(QIODevice::ReadOnly); + QXmlStreamReader xmlReader; + xmlReader.setDevice(&file); + + while (!xmlReader.atEnd()) + { + if (xmlReader.isStartElement() && xmlReader.name() == "Image") + { + // get all attributes and its value of a tag in attrs variable. + QXmlStreamAttributes attrs = xmlReader.attributes(); + // get value of each attribute from QXmlStreamAttributes + QStringRef url = attrs.value("url"); + kDebug() << xmlReader.name() << " attributes test? " << url.toString(); + + if (url.isEmpty()) + { + xmlReader.readNext(); + continue; + } + KUrl::List urls; + urls.append(url.toString()); + + if (!urls.isEmpty()) + { + //allow plugins to append a new file + slotAddImages(urls); + // read plugin Image custom attributes and children element + emit signalXMLLoadImageElement(xmlReader); + } + } + else if (xmlReader.isStartElement() && xmlReader.name() != "Images") + { + // unmanaged start element (it should be plugins one) + emit signalXMLCustomElements(xmlReader); + } + else if(xmlReader.isEndElement() && xmlReader.name() == "Images") + { + // if EndElement is Images return + return; + } + xmlReader.readNext(); + } +} + +void ImagesList::slotSaveItems() +{ + KUrl saveLevelsFile; + saveLevelsFile = KFileDialog::getSaveUrl(KGlobalSettings::documentPath(), + QString( "*" ), this, + QString( i18n("Select the image file list to save")) ); + kDebug() << "file url " <<saveLevelsFile.prettyUrl().toAscii(); + + if ( saveLevelsFile.isEmpty() ) + { + kDebug() << "empty url "; + return; + } + + QFile file(saveLevelsFile.path() /*.prettyUrl().toAscii()*/); + file.open(QIODevice::WriteOnly); +// file.open(stdout, QIODevice::WriteOnly); + + QXmlStreamWriter xmlWriter; + xmlWriter.setDevice(&file); + + xmlWriter.setAutoFormatting(true); + xmlWriter.writeStartDocument(); + + xmlWriter.writeStartElement("Images"); + + QTreeWidgetItemIterator it(listView()); + + while (*it) + { + ImagesListViewItem* lvItem = dynamic_cast<ImagesListViewItem*>(*it); + + if (lvItem) + { + xmlWriter.writeStartElement("Image"); + + xmlWriter.writeAttribute("url", lvItem->url().prettyUrl().toAscii()); + + //emit xmlWriter, item? + emit signalXMLSaveItem(xmlWriter, lvItem); + + xmlWriter.writeEndElement(); //Image + } + ++it; + } + + emit signalXMLCustomElements(xmlWriter); + + xmlWriter.writeEndElement(); // Images + + xmlWriter.writeEndDocument(); //end document } void ImagesList::removeItemByUrl(const KUrl& url) @@ -1086,7 +1206,7 @@ void ImagesList::slotImageListChanged() // enabled, if the buttons are not explicitly disabled with enableControlButtons() d->addButton->setEnabled(d->controlButtonsEnabled); - // TODO: load and save are not yet implemented, when should they be enabled/disabled? + // TODO: should they be enabled by default now? d->loadButton->setEnabled(d->controlButtonsEnabled); d->saveButton->setEnabled(d->controlButtonsEnabled); } diff --git a/common/libkipiplugins/widgets/imageslist.h b/common/libkipiplugins/widgets/imageslist.h index 704a328..f893842 100644 --- a/common/libkipiplugins/widgets/imageslist.h +++ b/common/libkipiplugins/widgets/imageslist.h @@ -52,6 +52,9 @@ namespace KIPI class Interface; } +class QXmlStreamWriter; +class QXmlStreamReader; + using namespace KIPI; namespace KIPIPlugins @@ -155,7 +158,7 @@ Q_SIGNALS: void addedDropedItems(const KUrl::List& urls); void signalItemClicked(QTreeWidgetItem*); - void contextMenuRequested(); + void signalContextMenuRequested(); private Q_SLOTS: @@ -262,8 +265,12 @@ Q_SIGNALS: void signalImageListChanged(); void signalFoundRAWImages(bool); void signalItemClicked(QTreeWidgetItem*); - void contextMenuRequested(); - + void signalContextMenuRequested(); + void signalXMLSaveItem(QXmlStreamWriter&, KIPIPlugins::ImagesListViewItem*); + void signalXMLLoadImageElement(QXmlStreamReader&); + void signalXMLCustomElements(QXmlStreamWriter&); + void signalXMLCustomElements(QXmlStreamReader&); + public Q_SLOTS: virtual void slotAddImages(const KUrl::List& list); @@ -277,8 +284,8 @@ protected Q_SLOTS: virtual void slotMoveUpItems(); virtual void slotMoveDownItems(); virtual void slotClearItems(); - virtual void slotLoadItems(){}; - virtual void slotSaveItems(){}; + virtual void slotLoadItems(); + virtual void slotSaveItems(); virtual void slotThumbnail(const KUrl& url, const QPixmap& pix); virtual void slotImageListChanged(); _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
|
In data giovedì 26 gennaio 2012 22:45:37, Angelo Naselli ha scritto:
> I suggest plugins to add a plugin prefix to allow loading imagelist > also to those plugins that don't have custom elements/attributes. or to avoid confusion if the are using same name for attr and elem... -- Angelo _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
| Free forum by Nabble | Edit this page |
