diff options
Diffstat (limited to 'konqueror/konq_mainwindow.h')
-rw-r--r-- | konqueror/konq_mainwindow.h | 771 |
1 files changed, 771 insertions, 0 deletions
diff --git a/konqueror/konq_mainwindow.h b/konqueror/konq_mainwindow.h new file mode 100644 index 000000000..a99c485bf --- /dev/null +++ b/konqueror/konq_mainwindow.h @@ -0,0 +1,771 @@ +/* -*- c-basic-offset:2 -*- + This file is part of the KDE project + Copyright (C) 1998, 1999 Simon Hausmann <[email protected]> + Copyright (C) 2000-2004 David Faure <[email protected]> + + This program 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. + + This program 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 this program; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef __konq_mainwindow_h__ +#define __konq_mainwindow_h__ + +#include <qmap.h> +#include <qpoint.h> +#include <qtimer.h> +#include <qguardedptr.h> + +#include <kfileitem.h> +#include "konq_openurlrequest.h" + +#include <kparts/mainwindow.h> +#include <kbookmarkmanager.h> +#include <kcompletion.h> +#include <kurlcompletion.h> +#include <kglobalsettings.h> +#include <dcopobject.h> +#include <kxmlguifactory.h> +#include <kxmlguiclient.h> +#include <ktrader.h> +#include "konq_combo.h" +#include "konq_frame.h" + +class QFile; +class KAction; +class KActionCollection; +class KActionMenu; +class KBookmarkMenu; +class KCMultiDialog; +class KHistoryCombo; +class KNewMenu; +class KProgress; +class KSelectAction; +class KToggleAction; +class KonqBidiHistoryAction; +class KBookmarkBar; +class KonqView; +class KonqComboAction; +class KonqFrame; +class KonqFrameBase; +class KonqFrameContainerBase; +class KonqFrameContainer; +class KToolBarPopupAction; +class KonqLogoAction; +class KonqViewModeAction; +class KonqPart; +class KonqViewManager; +class OpenWithGUIClient; +class ToggleViewGUIClient; +class ViewModeGUIClient; +class KonqMainWindowIface; +class KonqDirPart; +class KonqRun; +class KURLRequester; +class KZip; +struct HistoryEntry; + +namespace KParts { + class BrowserExtension; + class BrowserHostExtension; + class ReadOnlyPart; + struct URLArgs; +} + +class KonqExtendedBookmarkOwner; + +class KonqMainWindow : public KParts::MainWindow, public KonqFrameContainerBase +{ + Q_OBJECT + Q_PROPERTY( int viewCount READ viewCount ) + Q_PROPERTY( int activeViewsCount READ activeViewsCount ) + Q_PROPERTY( int linkableViewsCount READ linkableViewsCount ) + Q_PROPERTY( QString locationBarURL READ locationBarURL ) + Q_PROPERTY( bool fullScreenMode READ fullScreenMode ) + Q_PROPERTY( QString currentTitle READ currentTitle ) + Q_PROPERTY( QString currentURL READ currentURL ) + Q_PROPERTY( bool isHTMLAllowed READ isHTMLAllowed ) + Q_PROPERTY( QString currentProfile READ currentProfile ) +public: + enum ComboAction { ComboClear, ComboAdd, ComboRemove }; + enum PageSecurity { NotCrypted, Encrypted, Mixed }; + + KonqMainWindow( const KURL &initialURL = KURL(), bool openInitialURL = true, const char *name = 0, const QString& xmluiFile="konqueror.rc"); + ~KonqMainWindow(); + + + /** + * Filters the URL and calls the main openURL method. + */ + void openFilteredURL( const QString & _url, KonqOpenURLRequest& _req); + + /** + * Filters the URL and calls the main openURL method. + */ + void openFilteredURL( const QString &_url, bool inNewTab = false, bool tempFile = false ); + + /** + * The main openURL method. + */ + void openURL( KonqView * view, const KURL & url, + const QString &serviceType = QString::null, + KonqOpenURLRequest & req = KonqOpenURLRequest::null, bool trustedSource = false ); + + /** + * Called by openURL when it knows the service type (either directly, + * or using KonqRun) + */ + bool openView( QString serviceType, const KURL &_url, KonqView *childView, + KonqOpenURLRequest & req = KonqOpenURLRequest::null ); + + + void abortLoading(); + + void openMultiURL( KURL::List url ); + + KonqViewManager *viewManager() const { return m_pViewManager; } + + // Central widget of the mainwindow, never 0L + QWidget *mainWidget() const; + + virtual QWidget *createContainer( QWidget *parent, int index, const QDomElement &element, int &id ); + virtual void removeContainer( QWidget *container, QWidget *parent, QDomElement &element, int id ); + + virtual void saveProperties( KConfig *config ); + virtual void readProperties( KConfig *config ); + + void setInitialFrameName( const QString &name ); + + KonqMainWindowIface * dcopObject(); + + void reparseConfiguration(); + + void insertChildView( KonqView *childView ); + void removeChildView( KonqView *childView ); + KonqView *childView( KParts::ReadOnlyPart *view ); + KonqView *childView( KParts::ReadOnlyPart *callingPart, const QString &name, KParts::BrowserHostExtension **hostExtension, KParts::ReadOnlyPart **part ); + + // dcop idl bug! it can't handle KonqMainWindow *&mainWindow + static KonqView *findChildView( KParts::ReadOnlyPart *callingPart, const QString &name, KonqMainWindow **mainWindow, KParts::BrowserHostExtension **hostExtension, KParts::ReadOnlyPart **part ); + + // Total number of views + int viewCount() const { return m_mapViews.count(); } + + // Number of views not in "passive" mode + int activeViewsCount() const; + + // Number of views that can be linked, i.e. not with "follow active view" behavior + int linkableViewsCount() const; + + // Number of main views (non-toggle non-passive views) + int mainViewsCount() const; + + typedef QMap<KParts::ReadOnlyPart *, KonqView *> MapViews; + + const MapViews & viewMap() const { return m_mapViews; } + + KonqView *currentView() const { return m_currentView; } + + KParts::ReadOnlyPart *currentPart() const; + + /** URL of current part, or URLs of selected items for directory views */ + KURL::List currentURLs() const; + + // Only valid if there are one or two views + KonqView * otherView( KonqView * view ) const; + + virtual void customEvent( QCustomEvent *event ); + + /// Overloaded of KMainWindow + virtual void setCaption( const QString &caption ); + + /** + * Reimplemented for internal reasons. The API is not affected. + */ + virtual void show(); + + /** + * Change URL displayed in the location bar + */ + void setLocationBarURL( const QString &url ); + /** + * Overload for convenience + */ + void setLocationBarURL( const KURL &url ); + /** + * Return URL displayed in the location bar - for KonqViewManager + */ + QString locationBarURL() const; + void focusLocationBar(); + + /** + * Set page security related to current view + */ + void setPageSecurity( PageSecurity ); + + void enableAllActions( bool enable ); + + void disableActionsNoView(); + + void updateToolBarActions( bool pendingActions = false ); + void updateOpenWithActions(); + void updateViewModeActions(); + void updateViewActions(); + + bool sidebarVisible() const; + + void setShowHTML( bool b ); + + void showHTML( KonqView * view, bool b, bool _activateView ); + + bool fullScreenMode() const { return m_ptaFullScreen->isChecked(); } + + /** + * @return the "link view" action, for checking/unchecking from KonqView + */ + KToggleAction * linkViewAction()const { return m_paLinkView; } + + void enableAction( const char * name, bool enabled ); + void setActionText( const char * name, const QString& text ); + + /** + * The default settings "allow HTML" - the one used when creating a new view + * Might not match the current view ! + */ + bool isHTMLAllowed() const { return m_bHTMLAllowed; } + + bool saveViewPropertiesLocally() const { return m_bSaveViewPropertiesLocally; } + + static QPtrList<KonqMainWindow> *mainWindowList() { return s_lstViews; } + + // public for konq_guiclients + void viewCountChanged(); + + // for the view manager + void currentProfileChanged(); + + // operates on all combos of all mainwindows of this instance + // up to now adds an entry or clears all entries + static void comboAction( int action, const QString& url, + const QCString& objId ); + +#ifndef NDEBUG + void dumpViewList(); +#endif + + // KonqFrameContainerBase implementation BEGIN + + /** + * Call this after inserting a new frame into the splitter. + */ + void insertChildFrame( KonqFrameBase * frame, int index = -1 ); + /** + * Call this before deleting one of our children. + */ + void removeChildFrame( KonqFrameBase * frame ); + + void saveConfig( KConfig* config, const QString &prefix, bool saveURLs, KonqFrameBase* docContainer, int id = 0, int depth = 0 ); + + void copyHistory( KonqFrameBase *other ); + + void printFrameInfo( const QString &spaces ); + + void reparentFrame( QWidget* parent, + const QPoint & p, bool showIt=FALSE ); + + KonqFrameContainerBase* parentContainer()const; + void setParentContainer(KonqFrameContainerBase* parent); + + void setTitle( const QString &title , QWidget* sender); + void setTabIcon( const KURL &url, QWidget* sender ); + + QWidget* widget(); + + void listViews( ChildViewList *viewList ); + QCString frameType(); + + KonqFrameBase* childFrame()const; + + void setActiveChild( KonqFrameBase* activeChild ); + + // KonqFrameContainerBase implementation END + + KonqFrameBase* workingTab()const { return m_pWorkingTab; } + void setWorkingTab( KonqFrameBase* tab ) { m_pWorkingTab = tab; } + + static bool isMimeTypeAssociatedWithSelf( const QString &mimeType ); + static bool isMimeTypeAssociatedWithSelf( const QString &mimeType, const KService::Ptr &offer ); + + void resetWindow(); + + static void setPreloadedFlag( bool preloaded ); + static bool isPreloaded() { return s_preloaded; } + static void setPreloadedWindow( KonqMainWindow* ); + static KonqMainWindow* preloadedWindow() { return s_preloadedWindow; } + + QString currentTitle() const; + QString currentURL() const; + QString currentProfile() const; + + QStringList configModules() const; + + void saveWindowSize() const; + void restoreWindowSize(); + +signals: + void viewAdded( KonqView *view ); + void viewRemoved( KonqView *view ); + void popupItemsDisturbed(); + +public slots: + void slotCtrlTabPressed(); + + // for KBookmarkMenu and KBookmarkBar + void slotFillContextMenu( const KBookmark &, QPopupMenu * ); + void slotOpenBookmarkURL( const QString & url, Qt::ButtonState state ); + + void slotPopupMenu( const QPoint &_global, const KURL &_url, const QString &_mimeType, mode_t mode ); + void slotPopupMenu( KXMLGUIClient *client, const QPoint &_global, const KURL &_url, const QString &_mimeType, mode_t mode ); + void slotPopupMenu( KXMLGUIClient *client, const QPoint &_global, const KURL &_url, const KParts::URLArgs &_args, KParts::BrowserExtension::PopupFlags f, mode_t mode ); + + void slotPopupMenu( const QPoint &_global, const KFileItemList &_items ); + void slotPopupMenu( KXMLGUIClient *client, const QPoint &_global, const KFileItemList &_items ); + void slotPopupMenu( KXMLGUIClient *client, const QPoint &_global, const KFileItemList &_items, const KParts::URLArgs &_args, KParts::BrowserExtension::PopupFlags _flags ); + + + void slotPopupMenu( KXMLGUIClient *client, const QPoint &_global, const KFileItemList &_items, const KParts::URLArgs &_args, KParts::BrowserExtension::PopupFlags f, bool showProperties ); + + /** + * __NEEEEVER__ call this method directly. It relies on sender() (the part) + */ + void slotOpenURLRequest( const KURL &url, const KParts::URLArgs &args ); + + void openURL( KonqView *childView, const KURL &url, const KParts::URLArgs &args ); + + void slotCreateNewWindow( const KURL &url, const KParts::URLArgs &args ); + void slotCreateNewWindow( const KURL &url, const KParts::URLArgs &args, + const KParts::WindowArgs &windowArgs, KParts::ReadOnlyPart *&part ); + + void slotNewWindow(); + void slotDuplicateWindow(); + void slotSendURL(); + void slotSendFile(); + void slotCopyFiles(); + void slotMoveFiles(); + void slotNewDir(); + void slotOpenTerminal(); + void slotOpenLocation(); + void slotToolFind(); + + // View menu + void slotViewModeToggle( bool toggle ); + void slotShowHTML(); + void slotLockView(); + void slotLinkView(); + void slotReload( KonqView* view = 0L ); + void slotStop(); + + // Go menu + void slotUp(); + void slotUp(KAction::ActivationReason, Qt::ButtonState state); + void slotUpDelayed(); + void slotBack(); + void slotBack(KAction::ActivationReason, Qt::ButtonState state); + void slotForward(); + void slotForward(KAction::ActivationReason, Qt::ButtonState state); + void slotHome(); + void slotHome(KAction::ActivationReason, Qt::ButtonState state); + void slotGoSystem(); + void slotGoApplications(); + void slotGoMedia(); + void slotGoNetworkFolders(); + void slotGoSettings(); + void slotGoDirTree(); + void slotGoTrash(); + void slotGoAutostart(); + void slotGoHistory(); + + void slotConfigure(); + void slotConfigureToolbars(); + void slotConfigureExtensions(); + void slotConfigureSpellChecking(); + void slotNewToolbarConfig(); + + void slotUndoAvailable( bool avail ); + + void slotPartChanged( KonqView *childView, KParts::ReadOnlyPart *oldPart, KParts::ReadOnlyPart *newPart ); + + void slotRunFinished(); + void slotClearLocationBar( KAction::ActivationReason reason, Qt::ButtonState state ); + + // reimplement from KParts::MainWindow + virtual void slotSetStatusBarText( const QString &text ); + + // public for KonqViewManager + void slotPartActivated( KParts::Part *part ); + + virtual void setIcon( const QPixmap& ); + void slotGoHistoryActivated( int steps ); + void slotGoHistoryActivated( int steps, Qt::ButtonState state ); + + void slotAddTab(); + void slotSplitViewHorizontal(); + void slotSplitViewVertical(); + +protected slots: + void slotViewCompleted( KonqView * view ); + + void slotURLEntered( const QString &text, int ); + + void slotFileNewAboutToShow(); + void slotLocationLabelActivated(); + + void slotDuplicateTab(); + void slotDuplicateTabPopup(); + + void slotBreakOffTab(); + void slotBreakOffTabPopup(); + void slotBreakOffTabPopupDelayed(); + + void slotPopupNewWindow(); + void slotPopupThisWindow(); + void slotPopupNewTab(); + void slotPopupNewTabRight(); + void slotPopupPasteTo(); + void slotRemoveView(); + + void slotRemoveOtherTabsPopup(); + void slotRemoveOtherTabsPopupDelayed(); + + void slotReloadPopup(); + void slotReloadAllTabs(); + void slotRemoveTab(); + void slotRemoveTabPopup(); + void slotRemoveTabPopupDelayed(); + + void slotActivateNextTab(); + void slotActivatePrevTab(); + void slotActivateTab(); + + void slotDumpDebugInfo(); + + void slotSaveViewProfile(); + void slotSaveViewPropertiesLocally(); + void slotRemoveLocalProperties(); + + void slotOpenEmbedded(); + void slotOpenEmbeddedDoIt(); + + // Connected to KSycoca + void slotDatabaseChanged(); + + // Connected to KApp + void slotReconfigure(); + + void slotForceSaveMainWindowSettings(); + + void slotOpenWith(); + + void slotGoMenuAboutToShow(); + void slotUpAboutToShow(); + void slotBackAboutToShow(); + void slotForwardAboutToShow(); + + void slotUpActivated( int id ); + void slotBackActivated( int id ); + void slotForwardActivated( int id ); + void slotGoHistoryDelayed(); + + void slotCompletionModeChanged( KGlobalSettings::Completion ); + void slotMakeCompletion( const QString& ); + void slotSubstringcompletion( const QString& ); + void slotRotation( KCompletionBase::KeyBindingType ); + void slotMatch( const QString& ); + void slotClearHistory(); + void slotClearComboHistory(); + + void slotClipboardDataChanged(); + void slotCheckComboSelection(); + + void slotShowMenuBar(); + + void slotOpenURL( const KURL& ); + + void slotActionStatusText( const QString &text ); + void slotClearStatusText(); + + void slotFindOpen( KonqDirPart * dirPart ); + void slotFindClosed( KonqDirPart * dirPart ); + + void slotIconsChanged(); + + virtual bool event( QEvent* ); + + void slotMoveTabLeft(); + void slotMoveTabRight(); + + void slotAddWebSideBar(const KURL& url, const QString& name); + + void slotUpdateFullScreen( bool set ); // do not call directly + +protected: + virtual bool eventFilter(QObject*obj,QEvent *ev); + + void fillHistoryPopup( QPopupMenu *menu, const QPtrList<HistoryEntry> &history ); + + bool makeViewsFollow( const KURL & url, const KParts::URLArgs &args, const QString & serviceType, + KonqView * senderView ); + + void applyKonqMainWindowSettings(); + + void saveToolBarServicesMap(); + + void viewsChanged(); + + void updateLocalPropsActions(); + + virtual void closeEvent( QCloseEvent * ); + virtual bool queryExit(); + + bool askForTarget(const QString& text, KURL& url); + +private slots: + void slotRequesterClicked( KURLRequester * ); + void slotIntro(); + void slotItemsRemoved( const KFileItemList & ); + /** + * Loads the url displayed currently in the lineedit of the locationbar, by + * emulating a enter key press event. + */ + void goURL(); + + void bookmarksIntoCompletion(); + + void initBookmarkBar(); + void slotTrashActivated( KAction::ActivationReason reason, Qt::ButtonState state ); + + void showPageSecurity(); + +private: + /** + * takes care of hiding the bookmarkbar and calling setChecked( false ) on the + * corresponding action + */ + void updateBookmarkBar(); + + /** + * Adds all children of @p group to the static completion object + */ + static void bookmarksIntoCompletion( const KBookmarkGroup& group ); + + /** + * Returns all matches of the url-history for @p s. If there are no direct + * matches, it will try completing with http:// prepended, and if there's + * still no match, then http://www. Due to that, this is only usable for + * popupcompletion and not for manual or auto-completion. + */ + static QStringList historyPopupCompletionItems( const QString& s = QString::null); + + void startAnimation(); + void stopAnimation(); + + void setUpEnabled( const KURL &url ); + + void initCombo(); + void initActions(); + + void popupNewTab(bool infront, bool openAfterCurrentPage); + + /** + * Tries to find a index.html (.kde.html) file in the specified directory + */ + static QString findIndexFile( const QString &directory ); + + void connectExtension( KParts::BrowserExtension *ext ); + void disconnectExtension( KParts::BrowserExtension *ext ); + + void plugViewModeActions(); + void unplugViewModeActions(); + static QString viewModeActionKey( KService::Ptr service ); + + void connectActionCollection( KActionCollection *coll ); + void disconnectActionCollection( KActionCollection *coll ); + + bool stayPreloaded(); + bool checkPreloadResourceUsage(); + + QObject* lastFrame( KonqView *view ); + + KNewMenu * m_pMenuNew; + + KAction *m_paPrint; + + KActionMenu *m_pamBookmarks; + + KToolBarPopupAction *m_paUp; + KToolBarPopupAction *m_paBack; + KToolBarPopupAction *m_paForward; + KAction *m_paHome; + + KonqBidiHistoryAction *m_paHistory; + + KAction *m_paSaveViewProfile; + KToggleAction *m_paSaveViewPropertiesLocally; + KAction *m_paRemoveLocalProperties; + + KAction *m_paSplitViewHor; + KAction *m_paSplitViewVer; + KAction *m_paAddTab; + KAction *m_paDuplicateTab; + KAction *m_paBreakOffTab; + KAction *m_paRemoveView; + KAction *m_paRemoveTab; + KAction *m_paRemoveOtherTabs; + KAction *m_paActivateNextTab; + KAction *m_paActivatePrevTab; + + KAction *m_paSaveRemoveViewProfile; + KActionMenu *m_pamLoadViewProfile; + + KToggleAction *m_paLockView; + KToggleAction *m_paLinkView; + KAction *m_paReload; + KAction *m_paReloadAllTabs; + KAction *m_paUndo; + KAction *m_paCut; + KAction *m_paCopy; + KAction *m_paPaste; + KAction *m_paStop; + KAction *m_paRename; + + KAction *m_paTrash; + KAction *m_paDelete; + + KAction *m_paCopyFiles; + KAction *m_paMoveFiles; + KAction *m_paNewDir; + + KAction *m_paMoveTabLeft; + KAction *m_paMoveTabRight; + + KAction *m_paConfigureExtensions; + KAction *m_paConfigureSpellChecking; + + KonqLogoAction *m_paAnimatedLogo; + + KBookmarkBar *m_paBookmarkBar; + + KToggleAction * m_paFindFiles; + KToggleAction *m_ptaUseHTML; + + KToggleAction *m_paShowMenuBar; + KToggleAction *m_paShowStatusBar; + + KToggleFullScreenAction *m_ptaFullScreen; + + uint m_bLocationBarConnected:1; + uint m_bURLEnterLock:1; + // Global settings + uint m_bSaveViewPropertiesLocally:1; + uint m_bHTMLAllowed:1; + // Set in constructor, used in slotRunFinished + uint m_bNeedApplyKonqMainWindowSettings:1; + uint m_bViewModeToggled:1; + + int m_goBuffer; + Qt::ButtonState m_goState; + + MapViews m_mapViews; + + QGuardedPtr<KonqView> m_currentView; + + KBookmarkMenu* m_pBookmarkMenu; + KonqExtendedBookmarkOwner *m_pBookmarksOwner; + KActionCollection* m_bookmarksActionCollection; + KActionCollection* m_bookmarkBarActionCollection; + + KonqViewManager *m_pViewManager; + KonqFrameBase* m_pChildFrame; + + KonqFrameBase* m_pWorkingTab; + + KFileItemList popupItems; + KParts::URLArgs popupUrlArgs; + + KonqRun *m_initialKonqRun; + + QString m_title; + + /** + * @since 3.4 + */ + KCMultiDialog* m_configureDialog; + + /** + * A list of the modules to be shown in + * the configure dialog. + * @since 3.4 + */ + QStringList m_configureModules; + + QLabel* m_locationLabel; + QGuardedPtr<KonqCombo> m_combo; + static KConfig *s_comboConfig; + KURLCompletion *m_pURLCompletion; + // just a reference to KonqHistoryManager's completionObject + static KCompletion *s_pCompletion; + + ToggleViewGUIClient *m_toggleViewGUIClient; + + KTrader::OfferList m_popupEmbeddingServices; + QString m_popupService; + QString m_popupServiceType; + KURL m_popupURL; + + QString m_initialFrameName; + + QPtrList<KAction> m_openWithActions; + KActionMenu *m_viewModeMenu; + QPtrList<KAction> m_toolBarViewModeActions; // basically holds two KonqViewActions, one of + // iconview and one for listview + QPtrList<KRadioAction> m_viewModeActions; + QMap<QString,KService::Ptr> m_viewModeToolBarServices; // similar to m_toolBarViewModeActions + // it holds a map library name (libkonqiconview/libkonqlistview) ==> service (service for + // iconview, multicolumnview, treeview, etc .) + + KonqMainWindowIface * m_dcopObject; + + static QStringList *s_plstAnimatedLogo; + + static QPtrList<KonqMainWindow> *s_lstViews; + + QString m_currentDir; // stores current dir for relative URLs whenever applicable + + bool m_urlCompletionStarted; + + bool m_prevMenuBarVisible; + + static bool s_preloaded; + static KonqMainWindow* s_preloadedWindow; + static int s_initialMemoryUsage; + static time_t s_startupTime; + static int s_preloadUsageCount; + +public: + + static QFile *s_crashlog_file; +}; + +#endif + |