summaryrefslogtreecommitdiffstats
path: root/kparts/part.h
diff options
context:
space:
mode:
Diffstat (limited to 'kparts/part.h')
-rw-r--r--kparts/part.h702
1 files changed, 0 insertions, 702 deletions
diff --git a/kparts/part.h b/kparts/part.h
deleted file mode 100644
index 7b5e39b2f..000000000
--- a/kparts/part.h
+++ /dev/null
@@ -1,702 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 1999 Simon Hausmann <hausmann@kde.org>
- (C) 1999 David Faure <faure@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 _KPART_H
-#define _KPART_H
-
-#include <tqstring.h>
-#include <tqdom.h>
-#include <tqguardedptr.h>
-#include <kurl.h>
-
-#include <kxmlguiclient.h>
-
-class TDEInstance;
-class TQWidget;
-class KAction;
-class KActionCollection;
-class TQEvent;
-struct QUnknownInterface;
-
-namespace TDEIO {
- class Job;
-}
-
-namespace KParts
-{
-
-class PartManager;
-class Plugin;
-class PartPrivate;
-class PartActivateEvent;
-class PartSelectEvent;
-class GUIActivateEvent;
-class PartBasePrivate;
-
-/**
- * Base class for all parts.
- *
- * @short Base class for all parts.
- */
-class KPARTS_EXPORT PartBase : virtual public KXMLGUIClient
-{
- friend class PartBasePrivate;
-public:
-
- /**
- * Constructor.
- */
- PartBase();
-
- /**
- * Destructor.
- */
- virtual ~PartBase();
-
- /**
- * Internal method. Called by KParts::Part to specify the parent object for plugin objects.
- *
- * @internal
- */
- void setPartObject( TQObject *object );
- TQObject *partObject() const;
-
-protected:
- /**
- * Set the instance ( TDEInstance) for this part.
- *
- * Call this *first* in the inherited class constructor,
- * because it loads the i18n catalogues.
- */
- virtual void setInstance( TDEInstance *instance );
-
- /**
- * Set the instance ( TDEInstance) for this part.
- *
- * Call this *first* in the inherited class constructor,
- * because it loads the i18n catalogues.
- */
- virtual void setInstance( TDEInstance *instance, bool loadPlugins );
-
- /**
- * We have three different policies, whether to load new plugins or not. The
- * value in the TDEConfig object of the TDEInstance object always overrides
- * LoadPlugins and LoadPluginsIfEnabled.
- */
- enum PluginLoadingMode {
- /**
- * Don't load any plugins at all.
- */
- DoNotLoadPlugins = 0,
- /**
- * Load new plugins automatically. Can be
- * overridden by the plugin if it sets
- * EnabledByDefault=false in the corresponding
- * .desktop file.
- */
- LoadPlugins = 1,
- /**
- * New plugins are disabled by default. Can be
- * overridden by the plugin if it sets
- * EnabledByDefault=true in the corresponding
- * .desktop file.
- */
- LoadPluginsIfEnabled = 2
- };
-
- /**
- * Load the Plugins honoring the PluginLoadingMode.
- *
- * If you call this method in an already constructed GUI (like when the user
- * has changed which plugins are enabled) you need to add the new plugins to
- * the KXMLGUIFactory:
- * \code
- * if( factory() )
- * {
- * TQPtrList<KParts::Plugin> plugins = KParts::Plugin::pluginObjects( this );
- * TQPtrListIterator<KParts::Plugin> it( plugins );
- * KParts::Plugin * plugin;
- * while( ( plugin = it.current() ) != 0 )
- * {
- * ++it;
- * factory()->addClient( plugin );
- * }
- * }
- * \endcode
- */
- void loadPlugins( TQObject *parent, KXMLGUIClient *parentGUIClient, TDEInstance *instance );
-
- /**
- * For a KParts::Part: call this before setInstance().
- * For a KParts::MainWindow: call this before createGUI().
- */
- void setPluginLoadingMode( PluginLoadingMode loadingMode );
-
-private:
- PartBasePrivate *d;
- TQObject *m_obj;
-};
-
-/**
- * Base class for parts.
- *
- * A "part" is a GUI component, featuring:
- * @li A widget embeddedable in any application.
- * @li GUI elements that will be merged in the "host" user interface
- * (menubars, toolbars... ).
- *
- * <b>About the widget:</b>\n
- *
- * Note that KParts::Part does not inherit TQWidget.
- * This is due to the fact that the "visual representation"
- * will probably not be a mere TQWidget, but an elaborate one.
- * That's why when implementing your KParts::Part (or derived)
- * you should call KParts::Part::setWidget() in your constructor.
- *
- * <b>About the GUI elements:</b>\n
- *
- * Those elements trigger actions, defined by the part (action()).
- * The layout of the actions in the GUI is defined by an XML file (setXMLFile()).
- *
- * See also ReadOnlyPart and ReadWritePart, which define the
- * framework for a "viewer" part and for an "editor"-like part.
- * Use Part directly only if your part doesn't fit into those.
- */
-class KPARTS_EXPORT Part : public TQObject, public PartBase
-{
- Q_OBJECT
-
-public:
-
- /**
- * Constructor.
- *
- * @param parent Parent object of the part.
- * @param name QT-internal name of the part.
- */
- Part( TQObject *parent = 0, const char* name = 0 );
-
- /**
- * Destructor.
- */
- virtual ~Part();
-
- /**
- * Embed this part into a host widget.
- *
- * You don't need to do this if you created the widget with the
- * correct parent widget - this is just a TQWidget::reparent().
- * Note that the Part is still the holder
- * of the TQWidget, meaning that if you delete the Part,
- * then the widget gets destroyed as well, and vice-versa.
- * This method is not recommended since creating the widget with the correct
- * parent is simpler anyway.
- */
- virtual void embed( TQWidget * parentWidget );
-
- /**
- * @return The widget defined by this part, set by setWidget().
- */
- virtual TQWidget *widget();
-
- /**
- * @internal
- * Used by the part manager.
- */
- virtual void setManager( PartManager * manager );
-
- /**
- * Returns the part manager handling this part, if any (0L otherwise).
- */
- PartManager * manager() const;
-
- /**
- * Returns the part (this, or a child part) at the given global position.
- * This is called by the part manager to ask whether a part should be activated
- * when clicking somewhere. In most cases the default implementation is enough.
- * Reimplement this if your part has child parts in some areas (like in khtml or koffice)
- * @param widget the part widget being clicked - usually the same as widget(), except in koffice.
- * @param globalPos the mouse coordinates in global coordinates
- */
- virtual Part *hitTest( TQWidget *widget, const TQPoint &globalPos );
-
- /**
- * @param selectable Indicates whether the part is selectable or not.
- */
- virtual void setSelectable( bool selectable );
-
- /**
- * Returns whether the part is selectable or not.
- */
- bool isSelectable() const;
-
-signals:
- /**
- * Emitted by the part, to set the caption of the window(s)
- * hosting this part
- */
- void setWindowCaption( const TQString & caption );
- /**
- * Emited by the part, to set a text in the statusbar of the window(s)
- * hosting this part
- */
- void setStatusBarText( const TQString & text );
-
-protected:
-
- /**
- * Set the main widget.
- *
- * Call this in the Part-inherited class constructor.
- */
- virtual void setWidget( TQWidget * widget );
-
- /**
- * @internal
- */
- virtual void customEvent( TQCustomEvent *event );
-
- /**
- * Convenience method which is called when the Part received a PartActivateEvent .
- * Reimplement this if you don't want to reimplement event and test for the event yourself
- * or even install an event filter.
- */
- virtual void partActivateEvent( PartActivateEvent *event );
-
- /**
- * Convenience method which is called when the Part received a
- * PartSelectEvent .
- * Reimplement this if you don't want to reimplement event and
- * test for the event yourself or even install an event filter.
- */
- virtual void partSelectEvent( PartSelectEvent *event );
-
- /**
- * Convenience method which is called when the Part received a
- * GUIActivateEvent .
- * Reimplement this if you don't want to reimplement event and
- * test for the event yourself or even install an event filter.
- */
- virtual void guiActivateEvent( GUIActivateEvent *event );
-
- /**
- * Convenience method for KXMLGUIFactory::container.
- * @return a container widget owned by the Part's GUI.
- */
- TQWidget *hostContainer( const TQString &containerName );
-
-private slots:
- void slotWidgetDestroyed();
-
-private:
- TQGuardedPtr<TQWidget> m_widget;
-
- PartManager * m_manager;
-
- PartPrivate *d;
-};
-
-class ReadWritePart;
-class ReadOnlyPartPrivate;
-
-/**
- * Base class for any "viewer" part.
- *
- * This class takes care of network transparency for you,
- * in the simplest way (downloading to a temporary file, then letting the part
- * load from the temporary file).
- * To use the built-in network transparency, you only need to implement
- * openFile(), not openURL().
- *
- * To implement network transparency differently (e.g. for progressive loading,
- * like a web browser does for instance), or to prevent network transparency
- * (but why would you do that?), you can override openURL().
- *
- * KParts Application can use the signals to show feedback while the URL is being loaded.
- *
- * ReadOnlyPart handles the window caption by setting it to the current URL
- * (set in openURL(), and each time the part is activated).
- * If you want another caption, set it in openFile() and
- * (if the part might ever be used with a part manager) in guiActivateEvent()
- */
-class KPARTS_EXPORT ReadOnlyPart : public Part
-{
- Q_OBJECT
- friend class ReadWritePart;
-public:
- /**
- * Constructor
- * See also Part for the setXXX methods to call.
- */
- ReadOnlyPart( TQObject *parent = 0, const char *name = 0 );
-
- /**
- * Destructor
- */
- virtual ~ReadOnlyPart();
-
- /**
- * Call this to turn off the progress info dialog used by
- * the internal KIO job. Use this if you provide another way
- * of displaying progress info (e.g. a statusbar), using the
- * signals emitted by this class, and/or those emitted by
- * the Job given by started.
- */
- void setProgressInfoEnabled( bool show );
-
- /**
- * Returns whether the part shows the progress info dialog used by internal
- * KIO job.
- */
- bool isProgressInfoEnabled() const;
-
-#ifndef KDE_NO_COMPAT
- void showProgressInfo( bool show );
-#endif
-
-public slots:
- /**
- * Only reimplement openURL if you don't want the network transparency support
- * to download from the url into a temporary file (when the url isn't local).
- * Otherwise, reimplement openFile() only .
- *
- * If you reimplement it, don't forget to set the caption, usually with
- * emit setWindowCaption( url.prettyURL() );
- */
- virtual bool openURL( const KURL &url );
-
-public:
- /**
- * Returns the currently in part used URL.
- *
- * @return The current used URL.
- */
- KURL url() const { return m_url; }
-
- /**
- * Called when closing the current url (e.g. document), for instance
- * when switching to another url (note that openURL() calls it
- * automatically in this case).
- * If the current URL is not fully loaded yet, aborts loading.
- * Deletes the temporary file used when the url is remote.
- * @return always true, but the return value exists for reimplementations
- */
- virtual bool closeURL();
-
-public:
- /**
- * Initiate sending data to this part.
- * This is an alternative to openURL, which allows the user of the part
- * to load the data itself, and send it progressively to the part.
- *
- * @param mimeType the type of data that is going to be sent to this part.
- * @param url the URL representing this data. Although not directly used,
- * every ReadOnlyPart has a URL (see url()), so this simply sets it.
- * @return true if the part supports progressive loading and accepts data, false otherwise.
- */
- bool openStream( const TQString& mimeType, const KURL& url );
-
- /**
- * Send some data to the part. openStream must have been called previously,
- * and must have returned true.
- * @return true if the data was accepted by the part. If false is returned,
- * the application should stop sending data, and doesn't have to call closeStream.
- */
- bool writeStream( const TQByteArray& data );
-
- /**
- * Terminate the sending of data to the part.
- * With some data types (text, html...) closeStream might never actually be called,
- * in the case of continuous streams, for instance plain text or HTML data.
- */
- bool closeStream();
-
-private: // Makes no sense for inherited classes to call those. But make it protected there.
-
- /**
- * Called by openStream to initiate sending of data.
- * Parts which implement progress loading should check the @p mimeType
- * parameter, and return true if they can accept a data stream of that type.
- */
- virtual bool doOpenStream( const TQString& /*mimeType*/ ) { return false; }
- /**
- * Receive some data from the hosting application.
- * In this method the part should attempt to display the data progressively.
- * With some data types (text, html...) closeStream might never actually be called,
- * in the case of continuous streams. This can't happen with e.g. images.
- */
- virtual bool doWriteStream( const TQByteArray& /*data*/ ) { return false; }
- /**
- * This is called by closeStream(), to indicate that all the data has been sent.
- * Parts should ensure that all of the data is displayed at this point.
- * @return whether the data could be displayed correctly.
- */
- virtual bool doCloseStream() { return false; }
-
-signals:
- /**
- * The part emits this when starting data.
- * If using a TDEIO::Job, it sets the job in the signal, so that
- * progress information can be shown. Otherwise, job is 0.
- **/
- void started( TDEIO::Job * );
-
- /**
- * Emit this when you have completed loading data.
- * Hosting apps will want to know when the process of loading the data
- * is finished, so that they can access the data when everything is loaded.
- **/
- void completed();
-
- /**
- * Same as the above signal except it indicates whether there is
- * a pending action to be executed on a delay timer. An example of
- * this is the meta-refresh tags on web pages used to reload/redirect
- * after a certain period of time. This signal is useful if you want
- * to give the user the ability to cancel such pending actions.
- *
- * @param pendingAction true if a pending action exists, false otherwise.
- */
- void completed( bool pendingAction );
-
- /**
- * Emit this if loading is canceled by the user or by an error.
- * @param errMsg the error message, empty if the user canceled the loading voluntarily.
- */
- void canceled( const TQString &errMsg );
-
-protected slots:
- void slotJobFinished( TDEIO::Job * job );
-
-protected:
- /**
- * If the part uses the standard implementation of openURL(),
- * it must reimplement this, to open @p m_file.
- * Otherwise simply define it to { return false; }
- */
- virtual bool openFile() = 0;
-
- /**
- * @internal
- */
- void abortLoad();
-
- /**
- * Reimplemented from Part, so that the window caption is set to
- * the current url (decoded) when the part is activated.
- * This is the usual behavior in 99% of the apps.
- * Reimplement if you don't like it - test for event->activated() !
- *
- * Technical note : this is done with GUIActivateEvent and not with
- * PartActivateEvent because it's handled by the mainwindow
- * (which gets the even after the PartActivateEvent events have been sent)
- */
- virtual void guiActivateEvent( GUIActivateEvent *event );
-
- /**
- * Remote (or local) url - the one displayed to the user.
- */
- KURL m_url;
- /**
- * Local file - the only one the part implementation should deal with.
- */
- TQString m_file;
- /**
- * If @p true, @p m_file is a temporary file that needs to be deleted later.
- */
- bool m_bTemp;
-
-private:
- ReadOnlyPartPrivate *d;
-};
-
-/**
- * Base class for an "editor" part.
- *
- * This class handles network transparency for you.
- * Anything that can open a URL, allow modifications, and save
- * (to the same URL or a different one).
- *
- * A read-write part can be set to read-only mode, using setReadWrite().
- *
- * Part writers :
- * Any part inheriting ReadWritePart should check isReadWrite()
- * before allowing any action that modifies the part.
- * The part probably wants to reimplement setReadWrite, disable those
- * actions. Don't forget to call the parent setReadWrite().
- */
-class KPARTS_EXPORT ReadWritePart : public ReadOnlyPart
-{
- Q_OBJECT
-public:
- /**
- * Constructor.
- * See parent constructor for instructions.
- */
- ReadWritePart( TQObject *parent = 0, const char *name = 0 );
- /**
- * Destructor.
- * Applications using a ReadWritePart should make sure, before
- * destroying it, to call closeURL().
- * In KMainWindow::queryClose(), for instance, they should allow
- * closing only if the return value of closeURL() was true.
- * This allows to cancel.
- */
- virtual ~ReadWritePart();
-
- /**
- * @return true if the part is in read-write mode
- */
- bool isReadWrite() const { return m_bReadWrite; }
-
- /**
- * Changes the behavior of this part to readonly or readwrite.
- * @param readwrite set to true to enable readwrite mode
- */
- virtual void setReadWrite ( bool readwrite = true );
-
- /**
- * @return true if the document has been modified.
- */
- bool isModified() const { return m_bModified; }
-
- /**
- * If the document has been modified, ask the user to save changes.
- * This method is meant to be called from KMainWindow::queryClose().
- * It will also be called from closeURL().
- *
- * @return true if closeURL() can be called without the user losing
- * important data, false if the user chooses to cancel.
- *
- * @since 3.2
- */
- // TODO: Make virtual for KDE 4
- bool queryClose();
-
- /**
- * Called when closing the current url (e.g. document), for instance
- * when switching to another url (note that openURL() calls it
- * automatically in this case).
- *
- * If the current URL is not fully loaded yet, aborts loading.
- *
- * If isModified(), queryClose() will be called.
- *
- * @return false on cancel
- */
- virtual bool closeURL();
-
- /**
- * Call this method instead of the above if you need control if
- * the save prompt is shown. For example, if you call queryClose()
- * from KMainWindow::queryClose(), you would not want to prompt
- * again when closing the url.
- *
- * Equivalent to promptToSave ? closeURL() : ReadOnlyPart::closeURL()
- *
- * @since 3.2
- */
- // TODO: Make virtual for KDE 4
- bool closeURL( bool promptToSave );
-
- /**
- * Save the file to a new location.
- *
- * Calls save(), no need to reimplement
- */
- virtual bool saveAs( const KURL &url );
-
- /**
- * Sets the modified flag of the part.
- */
- virtual void setModified( bool modified );
-
-signals:
- /**
- * @since 3.2, remove in KDE 4, when queryClose is made virtual
- *
- * set handled to true, if you don't want the default handling
- * set abortClosing to true, if you handled the request,
- * but for any reason don't want to allow closing the document
- */
- void sigQueryClose(bool *handled, bool* abortClosing);
-
-public slots:
- /**
- * Call setModified() whenever the contents get modified.
- * This is a slot for convenience, so that you can connect it
- * to a signal, like textChanged().
- */
- virtual void setModified();
-
- /**
- * Save the file in the location from which it was opened.
- * You can connect this to the "save" action.
- * Calls saveFile() and saveToURL(), no need to reimplement.
- */
- virtual bool save();
-
- /**
- * Waits for any pending upload job to finish and returns whether the
- * last save() action was successful.
- */
- bool waitSaveComplete();
-
-protected:
- /**
- * Save to a local file.
- * You need to implement it, to save to @p m_file.
- * The framework takes care of re-uploading afterwards.
- *
- * @return true on success, false on failure.
- * On failure the function should inform the user about the
- * problem with an appropriate message box. Standard error
- * messages can be constructed using TDEIO::buildErrorString()
- * in combination with the error codes defined in kio/global.h
- */
- virtual bool saveFile() = 0;
-
- /**
- * Save the file.
- *
- * Uploads the file, if @p m_url is remote.
- * This will emit started(), and either completed() or canceled(),
- * in case you want to provide feedback.
- * @return true on success, false on failure.
- */
- virtual bool saveToURL();
-
-protected slots:
- /**
- * @internal
- */
- void slotUploadFinished( TDEIO::Job * job );
-
-private:
- void prepareSaving();
-
-private:
- bool m_bModified;
- bool m_bReadWrite;
- bool m_bClosing;
-};
-
-} // namespace
-
-#endif