From f54e54cdb5398b23c08508ad16b0388df746b670 Mon Sep 17 00:00:00 2001 From: James Hogan Date: Sat, 14 Feb 2009 21:10:03 +0000 Subject: [PATCH] More filter infrastructure filter manager import export mimetypes with save and open dialog boxes use moved mimetypes dir into kworship --- CMakeLists.txt | 1 - kworship/CMakeLists.txt | 6 + kworship/KwApplication.cpp | 13 +++ kworship/KwApplication.h | 7 ++ kworship/KwExportFilter.cpp | 11 ++ kworship/KwExportFilter.h | 17 ++- kworship/{KwImportFilter.cpp => KwFilterData.cpp} | 11 +- kworship/{KwImportFilter.cpp => KwFilterData.h} | 36 +++--- kworship/KwFilterManager.cpp | 128 +++++++++++++++++++++ kworship/{KwApplication.h => KwFilterManager.h} | 83 ++++++------- .../{KwImportFilter.cpp => KwFilterObject.cpp} | 14 ++- kworship/{KwImportFilter.h => KwFilterObject.h} | 33 +++--- kworship/KwImportFilter.cpp | 11 ++ kworship/KwImportFilter.h | 18 +++ .../{KwExportFilter.cpp => KwKWorshipFilter.cpp} | 55 ++++----- kworship/{KwImportFilter.h => KwKWorshipFilter.h} | 41 ++++--- ...KwExportFilter.cpp => KwKWorshipFilterData.cpp} | 62 ++++------ .../{KwImportFilter.h => KwKWorshipFilterData.h} | 50 +++++--- kworship/kworship.cpp | 28 ++++- {mimetypes => kworship/mimetypes}/CMakeLists.txt | 0 {mimetypes => kworship/mimetypes}/kworship.xml | 0 kworship/playlist/KwPlaylistItem.cpp | 3 +- kworship/playlist/KwPlaylistItem.h | 3 +- 23 files changed, 427 insertions(+), 204 deletions(-) copy kworship/{KwImportFilter.cpp => KwFilterData.cpp} (90%) copy kworship/{KwImportFilter.cpp => KwFilterData.h} (77%) create mode 100644 kworship/KwFilterManager.cpp copy kworship/{KwApplication.h => KwFilterManager.h} (57%) copy kworship/{KwImportFilter.cpp => KwFilterObject.cpp} (85%) copy kworship/{KwImportFilter.h => KwFilterObject.h} (77%) copy kworship/{KwExportFilter.cpp => KwKWorshipFilter.cpp} (64%) copy kworship/{KwImportFilter.h => KwKWorshipFilter.h} (70%) copy kworship/{KwExportFilter.cpp => KwKWorshipFilterData.cpp} (64%) copy kworship/{KwImportFilter.h => KwKWorshipFilterData.h} (61%) rename {mimetypes => kworship/mimetypes}/CMakeLists.txt (100%) rename {mimetypes => kworship/mimetypes}/kworship.xml (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 92c004c..56704de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,6 @@ set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/") include_directories(include) add_subdirectory (po) -add_subdirectory (mimetypes) add_subdirectory (design) add_subdirectory (kworship) add_subdirectory (unipresent) diff --git a/kworship/CMakeLists.txt b/kworship/CMakeLists.txt index 15e91ed..cf19671 100644 --- a/kworship/CMakeLists.txt +++ b/kworship/CMakeLists.txt @@ -14,6 +14,7 @@ include_directories(${KDE4_INCLUDES} playlist archive ) +add_subdirectory (mimetypes) add_subdirectory (songdb) add_subdirectory (bible) @@ -106,6 +107,11 @@ set(kworshipmain_SRCS KwImportFilter.cpp KwExportFilter.cpp KwLoadSaveFilter.cpp + KwFilterManager.cpp + KwFilterData.cpp + KwFilterObject.cpp + KwKWorshipFilter.cpp + KwKWorshipFilterData.cpp ${kworshiparchive_SRCS} ${kworshipcss_SRCS} ${kworshipdisplay_SRCS} diff --git a/kworship/KwApplication.cpp b/kworship/KwApplication.cpp index 28ed93f..3e3aef5 100644 --- a/kworship/KwApplication.cpp +++ b/kworship/KwApplication.cpp @@ -26,6 +26,8 @@ #include "KwApplication.h" #include "kworship.h" #include "KwPluginManager.h" +#include "KwFilterManager.h" +#include "KwKWorshipFilter.h" #include "KwDatabaseSetup.h" #include @@ -56,6 +58,7 @@ KwApplication::KwApplication() : m_app() , m_mainWindow(0) // soon to be initialised , m_pluginManager(new KwPluginManager()) +, m_filterManager(new KwFilterManager()) , m_database() { // Application must be lone. @@ -70,6 +73,9 @@ KwApplication::KwApplication() m_database = dbSetup.database(); } + // Set the default load save filter + m_filterManager->addLoadSaveFilter(new KwKWorshipFilter(), true); + // Set up the main window kworship *widget = new kworship; m_mainWindow = widget; @@ -113,6 +119,7 @@ KwApplication::~KwApplication() s_self = 0; delete m_pluginManager; + delete m_filterManager; } /* @@ -141,6 +148,12 @@ KwPluginManager* KwApplication::pluginManager() return m_pluginManager; } +/// Get the filter manager. +KwFilterManager* KwApplication::filterManager() +{ + return m_filterManager; +} + /// Get the database object. QSqlDatabase& KwApplication::database() { diff --git a/kworship/KwApplication.h b/kworship/KwApplication.h index e4c63ff..c179263 100644 --- a/kworship/KwApplication.h +++ b/kworship/KwApplication.h @@ -32,6 +32,7 @@ #include class KwPluginManager; +class KwFilterManager; class kworship; /// Application global data. @@ -73,6 +74,9 @@ class KDE_EXPORT KwApplication /// Get the plugin manager. KwPluginManager* pluginManager(); + /// Get the filter manager. + KwFilterManager* filterManager(); + /// Get the database object. QSqlDatabase& database(); @@ -98,6 +102,9 @@ class KDE_EXPORT KwApplication /// Plugin manager. KwPluginManager* m_pluginManager; + /// Filter manager. + KwFilterManager* m_filterManager; + /// Database object. QSqlDatabase m_database; }; diff --git a/kworship/KwExportFilter.cpp b/kworship/KwExportFilter.cpp index af9b6c4..f70dbe2 100644 --- a/kworship/KwExportFilter.cpp +++ b/kworship/KwExportFilter.cpp @@ -61,6 +61,7 @@ KwExportFilter::Limitations::~Limitations() /// Primary constructor. KwExportFilter::KwExportFilter() : KwFilter() +, m_exportMimeTypes() { } @@ -78,3 +79,13 @@ void KwExportFilter::saveLimitations(KwDocument* doc, Limitations* o_limitations { v_saveLimitations(doc, o_limitations); } + +/* + * Accessors + */ + +/// Get a list of export mime types. +QStringList KwExportFilter::exportMimeTypes() const +{ + return m_exportMimeTypes; +} diff --git a/kworship/KwExportFilter.h b/kworship/KwExportFilter.h index 7c19527..90a5406 100644 --- a/kworship/KwExportFilter.h +++ b/kworship/KwExportFilter.h @@ -31,6 +31,7 @@ #include #include +#include class KwDocument; class QString; @@ -108,13 +109,20 @@ class KDE_EXPORT KwExportFilter : public virtual KwFilter /* * Main interface */ - + /// Obtain information about any data that can not be saved. void saveLimitations(KwDocument* doc, Limitations* o_limitations); /// Save the document to file. virtual bool save(KwDocument* doc, const QString& filename) = 0; + /* + * Accessors + */ + + /// Get a list of export mime types. + QStringList exportMimeTypes() const; + protected: /* @@ -123,6 +131,13 @@ class KDE_EXPORT KwExportFilter : public virtual KwFilter /// Obtain information about any data that can not be saved. virtual void v_saveLimitations(KwDocument* doc, Limitations* o_limitations) = 0; + + /* + * Variables + */ + + /// List of export mime types. + QStringList m_exportMimeTypes; }; #endif // _KwExportFilter_h_ diff --git a/kworship/KwImportFilter.cpp b/kworship/KwFilterData.cpp similarity index 90% copy from kworship/KwImportFilter.cpp copy to kworship/KwFilterData.cpp index 0bc9da9..936818a 100644 --- a/kworship/KwImportFilter.cpp +++ b/kworship/KwFilterData.cpp @@ -18,24 +18,23 @@ ***************************************************************************/ /** - * @file KwImportFilter.cpp - * @brief Import file filter. + * @file KwFilterData.cpp + * @brief Additional data stored by the import filter. * @author James Hogan */ -#include "KwImportFilter.h" +#include "KwFilterData.h" /* * Constructors + destructor */ /// Primary constructor. -KwImportFilter::KwImportFilter() -: KwFilter() +KwFilterData::KwFilterData() { } /// Destructor. -KwImportFilter::~KwImportFilter() +KwFilterData::~KwFilterData() { } diff --git a/kworship/KwImportFilter.cpp b/kworship/KwFilterData.h similarity index 77% copy from kworship/KwImportFilter.cpp copy to kworship/KwFilterData.h index 0bc9da9..ac16f70 100644 --- a/kworship/KwImportFilter.cpp +++ b/kworship/KwFilterData.h @@ -17,25 +17,31 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ +#ifndef _KwFilterData_h_ +#define _KwFilterData_h_ + /** - * @file KwImportFilter.cpp - * @brief Import file filter. + * @file KwFilterData.h + * @brief Additional data stored by the import filter. * @author James Hogan */ -#include "KwImportFilter.h" - -/* - * Constructors + destructor - */ +#include -/// Primary constructor. -KwImportFilter::KwImportFilter() -: KwFilter() +/// Additional data stored by the import filter. +class KDE_EXPORT KwFilterData { -} + public: -/// Destructor. -KwImportFilter::~KwImportFilter() -{ -} + /* + * Constructors + destructor + */ + + /// Primary constructor. + KwFilterData(); + + /// Destructor. + virtual ~KwFilterData(); +}; + +#endif // _KwFilterData_h_ diff --git a/kworship/KwFilterManager.cpp b/kworship/KwFilterManager.cpp new file mode 100644 index 0000000..140c04f --- /dev/null +++ b/kworship/KwFilterManager.cpp @@ -0,0 +1,128 @@ +/*************************************************************************** + * This file is part of KWorship. * + * Copyright 2008 James Hogan * + * * + * KWorship is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * KWorship 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with KWorship. If not, write to the Free Software Foundation, * + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +/** + * @file KwFilterManager.cpp + * @brief Manages file filters. + * @author James Hogan + */ + +#include "KwFilterManager.h" +#include "KwLoadSaveFilter.h" + +/* + * Constructors + destructor + */ + +/// Primary constructor. +KwFilterManager::KwFilterManager() +: m_defaultLoadSaveFilter(0) +, m_loadSaveFilters() +, m_importFilters() +, m_exportFilters() +{ +} + +/// Destructor. +KwFilterManager::~KwFilterManager() +{ + // Delete all filters. + foreach (KwLoadSaveFilter* filter, m_loadSaveFilters) + { + delete filter; + } + foreach (KwImportFilter* filter, m_importFilters) + { + delete filter; + } + foreach (KwExportFilter* filter, m_exportFilters) + { + delete filter; + } +} + +/* + * Main interface + */ + +/// Add a load save filter. +void KwFilterManager::addLoadSaveFilter(KwLoadSaveFilter* loadSaveFilter, bool makeDefault) +{ + m_loadSaveFilters += loadSaveFilter; + if (makeDefault) + { + m_defaultLoadSaveFilter = loadSaveFilter; + } +} + +/// Add an import filter. +void KwFilterManager::addImportFilter(KwImportFilter* importFilter) +{ + m_importFilters += importFilter; +} + +/// Add an export filter. +void KwFilterManager::addExportFilter(KwExportFilter* exportFilter) +{ + m_exportFilters += exportFilter; +} + +/// Get load mime types. +QStringList KwFilterManager::loadMimeTypes() const +{ + QStringList result; + foreach (KwLoadSaveFilter* filter, m_loadSaveFilters) + { + result += filter->importMimeTypes(); + } + return result; +} + +/// Get save mime types. +QStringList KwFilterManager::saveMimeTypes() const +{ + QStringList result; + foreach (KwLoadSaveFilter* filter, m_loadSaveFilters) + { + result += filter->exportMimeTypes(); + } + return result; +} + +/// Get import mime types. +QStringList KwFilterManager::importMimeTypes() const +{ + QStringList result; + foreach (KwImportFilter* filter, m_importFilters) + { + result += filter->importMimeTypes(); + } + return result; +} + +/// Get export mime types. +QStringList KwFilterManager::exportMimeTypes() const +{ + QStringList result; + foreach (KwExportFilter* filter, m_exportFilters) + { + result += filter->exportMimeTypes(); + } + return result; +} diff --git a/kworship/KwApplication.h b/kworship/KwFilterManager.h similarity index 57% copy from kworship/KwApplication.h copy to kworship/KwFilterManager.h index e4c63ff..7c24ac8 100644 --- a/kworship/KwApplication.h +++ b/kworship/KwFilterManager.h @@ -17,90 +17,81 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef _KwApplication_h_ -#define _KwApplication_h_ +#ifndef _KwFilterManager_h_ +#define _KwFilterManager_h_ /** - * @file KwApplication.h - * @brief Application global data. + * @file KwFilterManager.h + * @brief Manages file filters. * @author James Hogan */ -#include #include -#include +#include +#include -class KwPluginManager; -class kworship; +class KwImportFilter; +class KwExportFilter; +class KwLoadSaveFilter; -/// Application global data. -class KDE_EXPORT KwApplication +/// Manages file filter. +class KDE_EXPORT KwFilterManager { public: /* - * Singletonhood - */ - - /// Get the singleton application object. - static KwApplication* self(); - - /* * Constructors + destructor */ /// Primary constructor. - KwApplication(); + KwFilterManager(); /// Destructor. - virtual ~KwApplication(); + virtual ~KwFilterManager(); /* * Main interface */ - /// Execute the application. - int exec(); + /// Add a load save filter. + void addLoadSaveFilter(KwLoadSaveFilter* loadSaveFilter, bool makeDefault = false); - /* - * Accessors - */ + /// Add an import filter. + void addImportFilter(KwImportFilter* importFilter); - /// Get the main window widget. - kworship* mainWindow(); + /// Add an export filter. + void addExportFilter(KwExportFilter* exportFilter); - /// Get the plugin manager. - KwPluginManager* pluginManager(); + /// Get load mime types. + QStringList loadMimeTypes() const; - /// Get the database object. - QSqlDatabase& database(); + /// Get save mime types. + QStringList saveMimeTypes() const; - private: + /// Get import mime types. + QStringList importMimeTypes() const; - /* - * Static singleton data - */ + /// Get export mime types. + QStringList exportMimeTypes() const; - /// Singleton application. - static KwApplication* s_self; + private: /* * Variables */ - /// KApplication object. - KApplication m_app; + /// Default load save filter. + KwLoadSaveFilter* m_defaultLoadSaveFilter; - /// Main window widget. - kworship* m_mainWindow; + /// List of load save filters. + QList m_loadSaveFilters; - /// Plugin manager. - KwPluginManager* m_pluginManager; + /// List of import filters. + QList m_importFilters; - /// Database object. - QSqlDatabase m_database; + /// List of export filters. + QList m_exportFilters; }; -#endif // _KwApplication_h_ - +#endif // _KwFilterManager_h_ diff --git a/kworship/KwImportFilter.cpp b/kworship/KwFilterObject.cpp similarity index 85% copy from kworship/KwImportFilter.cpp copy to kworship/KwFilterObject.cpp index 0bc9da9..571da06 100644 --- a/kworship/KwImportFilter.cpp +++ b/kworship/KwFilterObject.cpp @@ -18,24 +18,26 @@ ***************************************************************************/ /** - * @file KwImportFilter.cpp - * @brief Import file filter. + * @file KwFilterObject.cpp + * @brief An object which can be stored and loaded by filters. * @author James Hogan */ -#include "KwImportFilter.h" +#include "KwFilterObject.h" +#include "KwFilterData.h" /* * Constructors + destructor */ /// Primary constructor. -KwImportFilter::KwImportFilter() -: KwFilter() +KwFilterObject::KwFilterObject() +: m_filterData(0) { } /// Destructor. -KwImportFilter::~KwImportFilter() +KwFilterObject::~KwFilterObject() { + delete m_filterData; } diff --git a/kworship/KwImportFilter.h b/kworship/KwFilterObject.h similarity index 77% copy from kworship/KwImportFilter.h copy to kworship/KwFilterObject.h index a326215..9dc89a3 100644 --- a/kworship/KwImportFilter.h +++ b/kworship/KwFilterObject.h @@ -17,24 +17,21 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef _KwImportFilter_h_ -#define _KwImportFilter_h_ +#ifndef _KwFilterObject_h_ +#define _KwFilterObject_h_ /** - * @file KwImportFilter.h - * @brief Import file filter. + * @file KwFilterObject.h + * @brief An object which can be stored and loaded by filters. * @author James Hogan */ -#include "KwFilter.h" - #include -class KwDocument; -class QString; +class KwFilterData; -/// Import file filter. -class KDE_EXPORT KwImportFilter : public virtual KwFilter +/// Export file filter. +class KDE_EXPORT KwFilterObject { public: @@ -43,17 +40,19 @@ class KDE_EXPORT KwImportFilter : public virtual KwFilter */ /// Primary constructor. - KwImportFilter(); + KwFilterObject(); /// Destructor. - virtual ~KwImportFilter(); + virtual ~KwFilterObject(); + + protected: /* - * Main interface + * Variables */ - - /// Load the document from a file. - virtual KwDocument* load(const QString& filename) = 0; + + /// Filter data. + KwFilterData* m_filterData; }; -#endif // _KwImportFilter_h_ +#endif // _KwFilterObject_h_ diff --git a/kworship/KwImportFilter.cpp b/kworship/KwImportFilter.cpp index 0bc9da9..7378bb8 100644 --- a/kworship/KwImportFilter.cpp +++ b/kworship/KwImportFilter.cpp @@ -32,6 +32,7 @@ /// Primary constructor. KwImportFilter::KwImportFilter() : KwFilter() +, m_importMimeTypes() { } @@ -39,3 +40,13 @@ KwImportFilter::KwImportFilter() KwImportFilter::~KwImportFilter() { } + +/* + * Accessors + */ + +/// Get a list of importable mime types. +QStringList KwImportFilter::importMimeTypes() const +{ + return m_importMimeTypes; +} diff --git a/kworship/KwImportFilter.h b/kworship/KwImportFilter.h index a326215..cb4302e 100644 --- a/kworship/KwImportFilter.h +++ b/kworship/KwImportFilter.h @@ -30,6 +30,8 @@ #include +#include + class KwDocument; class QString; @@ -54,6 +56,22 @@ class KDE_EXPORT KwImportFilter : public virtual KwFilter /// Load the document from a file. virtual KwDocument* load(const QString& filename) = 0; + + /* + * Accessors + */ + + /// Get a list of importable mime types. + QStringList importMimeTypes() const; + + protected: + + /* + * Variables + */ + + /// List of import mime types. + QStringList m_importMimeTypes; }; #endif // _KwImportFilter_h_ diff --git a/kworship/KwExportFilter.cpp b/kworship/KwKWorshipFilter.cpp similarity index 64% copy from kworship/KwExportFilter.cpp copy to kworship/KwKWorshipFilter.cpp index af9b6c4..44cd9e6 100644 --- a/kworship/KwExportFilter.cpp +++ b/kworship/KwKWorshipFilter.cpp @@ -18,63 +18,54 @@ ***************************************************************************/ /** - * @file KwExportFilter.cpp - * @brief Export file filter. + * @file KwKWorshipFilter.cpp + * @brief Main KWorship archive load and save filter. * @author James Hogan */ -#include "KwExportFilter.h" +#include "KwKWorshipFilter.h" /* - * Limitation Constructors + destructor - */ - -/// Default constructor. -KwExportFilter::Limitation::Limitation() -{ -} - -/// Destructor. -KwExportFilter::Limitation::~Limitation() -{ -} - -/* - * Limitations Constructors + destructor + * Constructors + destructor */ -/// Default constructor. -KwExportFilter::Limitations::Limitations() -: m_limitations() +/// Primary constructor. +KwKWorshipFilter::KwKWorshipFilter() +: KwLoadSaveFilter() { + m_importMimeTypes += "application/x-kworship+xml"; + m_exportMimeTypes += "application/x-kworship+xml"; + m_importMimeTypes += "application/x-kworship-archive"; + m_exportMimeTypes += "application/x-kworship-archive"; } /// Destructor. -KwExportFilter::Limitations::~Limitations() +KwKWorshipFilter::~KwKWorshipFilter() { } /* - * Constructors + destructor + * Main interface */ -/// Primary constructor. -KwExportFilter::KwExportFilter() -: KwFilter() +KwDocument* KwKWorshipFilter::load(const QString& filename) { + /// @todo Implement KwKWorshipFilter::load + Q_ASSERT(false); } -/// Destructor. -KwExportFilter::~KwExportFilter() +bool KwKWorshipFilter::save(KwDocument* doc, const QString& filename) { + /// @todo Implement KwKWorshipFilter::save + Q_ASSERT(false); } /* - * Main interface + * Virtual interface */ -/// Obtain information about any data that can not be saved. -void KwExportFilter::saveLimitations(KwDocument* doc, Limitations* o_limitations) +void KwKWorshipFilter::v_saveLimitations(KwDocument* doc, Limitations* o_limitations) { - v_saveLimitations(doc, o_limitations); + /// @todo Implement KwKWorshipFilter::v_saveLimitations + Q_ASSERT(false); } diff --git a/kworship/KwImportFilter.h b/kworship/KwKWorshipFilter.h similarity index 70% copy from kworship/KwImportFilter.h copy to kworship/KwKWorshipFilter.h index a326215..445442b 100644 --- a/kworship/KwImportFilter.h +++ b/kworship/KwKWorshipFilter.h @@ -17,24 +17,19 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef _KwImportFilter_h_ -#define _KwImportFilter_h_ +#ifndef _KwKWorshipFilter_h_ +#define _KwKWorshipFilter_h_ /** - * @file KwImportFilter.h - * @brief Import file filter. + * @file KwKWorshipFilter.h + * @brief Main KWorship archive load and save filter. * @author James Hogan */ -#include "KwFilter.h" +#include "KwLoadSaveFilter.h" -#include - -class KwDocument; -class QString; - -/// Import file filter. -class KDE_EXPORT KwImportFilter : public virtual KwFilter +/// Main KWorship archive load and save filter. +class KwKWorshipFilter : public KwLoadSaveFilter { public: @@ -43,17 +38,29 @@ class KDE_EXPORT KwImportFilter : public virtual KwFilter */ /// Primary constructor. - KwImportFilter(); + KwKWorshipFilter(); /// Destructor. - virtual ~KwImportFilter(); + virtual ~KwKWorshipFilter(); /* * Main interface */ - /// Load the document from a file. - virtual KwDocument* load(const QString& filename) = 0; + /// Reimplemented. + virtual KwDocument* load(const QString& filename); + + /// Reimplemented. + virtual bool save(KwDocument* doc, const QString& filename); + + protected: + + /* + * Virtual interface + */ + + /// Reimplemented. + virtual void v_saveLimitations(KwDocument* doc, Limitations* o_limitations); }; -#endif // _KwImportFilter_h_ +#endif // _KwKWorshipFilter_h_ diff --git a/kworship/KwExportFilter.cpp b/kworship/KwKWorshipFilterData.cpp similarity index 64% copy from kworship/KwExportFilter.cpp copy to kworship/KwKWorshipFilterData.cpp index af9b6c4..b405f3f 100644 --- a/kworship/KwExportFilter.cpp +++ b/kworship/KwKWorshipFilterData.cpp @@ -18,63 +18,49 @@ ***************************************************************************/ /** - * @file KwExportFilter.cpp - * @brief Export file filter. + * @file KwKWorshipFilterData.cpp + * @brief Additional KWorship import data. * @author James Hogan */ -#include "KwExportFilter.h" +#include "KwKWorshipFilterData.h" /* - * Limitation Constructors + destructor - */ - -/// Default constructor. -KwExportFilter::Limitation::Limitation() -{ -} - -/// Destructor. -KwExportFilter::Limitation::~Limitation() -{ -} - -/* - * Limitations Constructors + destructor + * Constructors + destructor */ -/// Default constructor. -KwExportFilter::Limitations::Limitations() -: m_limitations() +/// Primary constructor. +KwKWorshipFilterData::KwKWorshipFilterData() +: KwFilterData() { } /// Destructor. -KwExportFilter::Limitations::~Limitations() +KwKWorshipFilterData::~KwKWorshipFilterData() { } /* - * Constructors + destructor + * Import filter interface */ -/// Primary constructor. -KwExportFilter::KwExportFilter() -: KwFilter() -{ -} - -/// Destructor. -KwExportFilter::~KwExportFilter() +/// Indicate that elements of a particular tag name have been handled. +void KwKWorshipFilterData::elementsHandled(const QString& tagName) { + QDomElement current = m_domPreserve.firstChildElement(tagName); + while (!current.isNull()) + { + m_domPreserve.removeChild(current); + current = current.nextSiblingElement(tagName); + } } -/* - * Main interface - */ - -/// Obtain information about any data that can not be saved. -void KwExportFilter::saveLimitations(KwDocument* doc, Limitations* o_limitations) +/// Indicate that the first elements of a particular tag name have been handled. +void KwKWorshipFilterData::elementHandled(const QString& tagName) { - v_saveLimitations(doc, o_limitations); + QDomElement current = m_domPreserve.firstChildElement(tagName); + if (!current.isNull()) + { + m_domPreserve.removeChild(current); + } } diff --git a/kworship/KwImportFilter.h b/kworship/KwKWorshipFilterData.h similarity index 61% copy from kworship/KwImportFilter.h copy to kworship/KwKWorshipFilterData.h index a326215..655fd36 100644 --- a/kworship/KwImportFilter.h +++ b/kworship/KwKWorshipFilterData.h @@ -17,24 +17,22 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef _KwImportFilter_h_ -#define _KwImportFilter_h_ +#ifndef _KwKWorshipFilterData_h_ +#define _KwKWorshipFilterData_h_ /** - * @file KwImportFilter.h - * @brief Import file filter. + * @file KwKWorshipFilterData.h + * @brief Additional KWorship import data. * @author James Hogan */ -#include "KwFilter.h" +#include "KwFilterData.h" -#include +#include +#include -class KwDocument; -class QString; - -/// Import file filter. -class KDE_EXPORT KwImportFilter : public virtual KwFilter +/// Additional KWorship import data. +class KwKWorshipFilterData : public KwFilterData { public: @@ -43,17 +41,33 @@ class KDE_EXPORT KwImportFilter : public virtual KwFilter */ /// Primary constructor. - KwImportFilter(); + KwKWorshipFilterData(); /// Destructor. - virtual ~KwImportFilter(); + virtual ~KwKWorshipFilterData(); + + /* + * Import filter interface + */ + + /** Indicate that elements of a particular tag name have been handled. + * This clears the specified elements from the DOM preserve. + */ + void elementsHandled(const QString& tagName); + + /** Indicate that the first elements of a particular tag name have been handled. + * This clears the specified element from the DOM preserve. + */ + void elementHandled(const QString& tagName); + + private: /* - * Main interface + * Variables */ - - /// Load the document from a file. - virtual KwDocument* load(const QString& filename) = 0; + + /// Fragment of DOM from save file which needs preserving. + QDomDocumentFragment m_domPreserve; }; -#endif // _KwImportFilter_h_ +#endif // _KwKWorshipFilterData_h_ diff --git a/kworship/kworship.cpp b/kworship/kworship.cpp index d99247f..f380e01 100644 --- a/kworship/kworship.cpp +++ b/kworship/kworship.cpp @@ -26,6 +26,7 @@ #include "KwDocument.h" #include "KwApplication.h" #include "KwPluginManager.h" +#include "KwFilterManager.h" #include "KwPlaylistNode.h" #include "KwPlaylistList.h" @@ -505,13 +506,22 @@ void kworship::fileOpen() if (askToSave()) { // Do the open operation - QString filter = "*.kwz *.kw|" + i18n("All KWorship playlists"); + QStringList mimes = KwApplication::self()->filterManager()->loadMimeTypes(); + KUrl defaultUrl("kfiledialog:///playlist"); if (m_document->isSaved()) { defaultUrl = m_document->url(); } - KUrl url = KFileDialog::getOpenUrl(defaultUrl, filter, this); + + KFileDialog dlg(defaultUrl, QString(), this); + dlg.setMimeFilter(mimes); + dlg.setOperationMode(KFileDialog::Opening); + dlg.setCaption(i18n("Save As")); + dlg.setMode(KFile::File); + dlg.exec(); + + KUrl url = dlg.selectedUrl(); if (!url.isEmpty()) { loadPlaylist(url); @@ -533,14 +543,22 @@ void kworship::fileSave() void kworship::fileSaveAs() { - QString filter = "*.kwz|" + i18n("KWorship playlists") + "\n" - "*.kw|" + i18n("KWorship uncompressed playlists"); + QStringList mimes = KwApplication::self()->filterManager()->saveMimeTypes(); + KUrl defaultUrl("kfiledialog:///playlist"); if (m_document->isSaved()) { defaultUrl = m_document->url(); } - KUrl url = KFileDialog::getSaveUrl(defaultUrl, filter, this); + + KFileDialog dlg(defaultUrl, QString(), this); + dlg.setMimeFilter(mimes); + dlg.setOperationMode(KFileDialog::Opening); + dlg.setCaption(i18n("Save As")); + dlg.setMode(KFile::File); + dlg.exec(); + + KUrl url = dlg.selectedUrl(); if (!url.isEmpty()) { m_document->saveAs(url); diff --git a/mimetypes/CMakeLists.txt b/kworship/mimetypes/CMakeLists.txt similarity index 100% rename from mimetypes/CMakeLists.txt rename to kworship/mimetypes/CMakeLists.txt diff --git a/mimetypes/kworship.xml b/kworship/mimetypes/kworship.xml similarity index 100% rename from mimetypes/kworship.xml rename to kworship/mimetypes/kworship.xml diff --git a/kworship/playlist/KwPlaylistItem.cpp b/kworship/playlist/KwPlaylistItem.cpp index ea42be2..5e2651e 100644 --- a/kworship/playlist/KwPlaylistItem.cpp +++ b/kworship/playlist/KwPlaylistItem.cpp @@ -48,7 +48,8 @@ KwPlaylistItem::Factory* KwPlaylistItem::factory() /// Default constructor. KwPlaylistItem::KwPlaylistItem() -: KwCssScope(KwDisplayStyles::schema()) +: KwFilterObject() +, KwCssScope(KwDisplayStyles::schema()) , m_domDocument() , m_domPreserve(m_domDocument.createDocumentFragment()) { diff --git a/kworship/playlist/KwPlaylistItem.h b/kworship/playlist/KwPlaylistItem.h index abd7b47..9ec8a6e 100644 --- a/kworship/playlist/KwPlaylistItem.h +++ b/kworship/playlist/KwPlaylistItem.h @@ -27,6 +27,7 @@ */ #include "KwCssScope.h" +#include "KwFilterObject.h" #include "Factory.h" #include @@ -55,7 +56,7 @@ class KwPlaylistNode; /** * Inherit from this class for each playlist item type. */ -class KDE_EXPORT KwPlaylistItem : public KwCssScope +class KDE_EXPORT KwPlaylistItem : public KwFilterObject, public KwCssScope { public: -- 2.11.4.GIT