You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/lib/kofficecore/KoFilterManager.h

180 lines
6.5 KiB

/* This file is part of the KDE project
Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
2000, 2001 Werner Trobin <trobin@kde.org>
Copyright (C) 2004 Nicolas Goutte <goutte@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
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.
*/
#ifndef __koffice_filter_manager_h__
#define __koffice_filter_manager_h__
#include <tqobject.h>
#include <tqmap.h>
#include <KoFilterChain.h>
#include <koffice_export.h>
class KoDocument;
/**
* @brief The class managing all the filters.
*
* This class manages all filters for a %KOffice application. Normally
* you will not have to use it, since KoMainWindow takes care of loading
* and saving documents.
*
* @ref KoFilter
*
* @author Kalle Dalheimer <kalle@kde.org>
* @author Torben Weis <weis@kde.org>
* @author Werner Trobin <trobin@kde.org>
*/
class KOFFICECORE_EXPORT KoFilterManager : public TQObject
{
TQ_OBJECT
public:
/**
* This enum is used to distinguish the import/export cases
*/
enum Direction { Import = 1, Export = 2 };
/**
* Create a filter manager for a document
*/
KoFilterManager( KoDocument* document );
/**
* Create a filter manager for a filter which wants to embed something.
* The url it passes is the file to convert, obviously. You cannot use
* the @ref import() method -- use @ref exp0rt() to convert the file to
* the destination mimetype you prefer.
*
* @param url The file you want to export
* @param mimetypeHint The mimetype of the file you want to export. You have
* to specify this information only if the automatic detection will
* fail because e.g. you saved an embedded stream to a *.tmp file.
* Most likely you do not have to care about that.
* @param parentChain The parent filter chain of this filter manager. Used
* to allow embedding for filters. Most likely you do not have to care.
*/
KoFilterManager( const TQString& url, const TQCString& mimetypeHint = "",
KoFilterChain* const parentChain = 0 );
virtual ~KoFilterManager();
/**
* Imports the passed URL and returns the resultant filename
* (most likely some file in /tmp).
* The @p status variable signals the success/error of the conversion
* If the TQString which is returned isEmpty() and the status is OK,
* then we imported the file directly into the document.
*/
TQString import( const TQString& url, KoFilter::ConversionStatus& status );
/**
* @brief Exports the given file/document to the specified URL/mimetype.
*
* If @p mimeType is empty, then the closest matching KOffice part is searched
* and when the method returns @p mimeType contains this mimetype.
* Oh, well, export is a C++ keyword ;)
*/
KoFilter::ConversionStatus exp0rt( const TQString& url, TQCString& mimeType );
///@name Static API
//@{
/**
* Suitable for passing to KFileDialog::setMimeFilter. The default mime
* gets set by the "users" of this method, as we do not have enough
* information here.
* Optionally, @p extraNativeMimeTypes are added after the native mimetype.
*/
KOFFICECORE_EXPORT static TQStringList mimeFilter( const TQCString& mimetype, Direction direction,
const TQStringList& extraNativeMimeTypes = TQStringList() );
/**
* The same method as KoFilterManager::mimeFilter but suited for KoShell.
* We do not need the mimetype, as we will simply use all available
* %KOffice mimetypes. The Direction enum is omitted, as we only
* call this for importing. When saving from KoShell we already
* know the KOffice part we are using.
*/
static TQStringList mimeFilter();
/**
* Method used to check if that filter is available at all.
* @note Slow, but cached
*/
static bool filterAvailable( KoFilterEntry::Ptr entry );
//@}
/**
* Set the filter manager is batch mode (no dialog shown)
* instead of the interactive mode (dialog shown)
* @since 1.4
*/
void setBatchMode ( const bool batch );
/**
* Get if the filter manager is batch mode (true)
* or in interactive mode (true)
* @since 1.4
*/
bool getBatchMode ( void ) const;
signals:
void sigProgress( int );
private:
// === API for KoFilterChains === (internal)
// The friend methods are private in KoFilterChain and
// just forward calls to the methods here. Should be
// pretty save.
friend TQString KoFilterChain::filterManagerImportFile() const;
TQString importFile() const { return m_importUrl; }
friend TQString KoFilterChain::filterManagerExportFile() const;
TQString exportFile() const { return m_exportUrl; }
friend KoDocument* KoFilterChain::filterManagerKoDocument() const;
KoDocument* document() const { return m_document; }
friend int KoFilterChain::filterManagerDirection() const;
int direction() const { return static_cast<int>( m_direction ); }
friend KoFilterChain* const KoFilterChain::filterManagerParentChain() const;
KoFilterChain* const parentChain() const { return m_parentChain; }
// Private API
KoFilterManager( const KoFilterManager& rhs );
KoFilterManager &operator=( const KoFilterManager& rhs );
void importErrorHelper( const TQString& mimeType, const bool suppressDialog = false );
static const int s_area;
KoDocument* m_document;
KoFilterChain* const m_parentChain;
TQString m_importUrl, m_exportUrl;
TQCString m_importUrlMimetypeHint; ///< suggested mimetype
KOffice::Graph m_graph;
Direction m_direction;
/// A static cache for the availability checks of filters
static TQMap<TQString, bool> m_filterAvailable;
class Private;
Private *d;
};
#endif // __koffice_filter_manager_h__