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.
368 lines
12 KiB
368 lines
12 KiB
/* This file is part of the KDE project
|
|
Copyright (C) 1999 Simon Hausmann <hausmann@kde.org>
|
|
|
|
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; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
#ifndef __konq_viewmgr_h__
|
|
#define __konq_viewmgr_h__
|
|
|
|
#include "konq_factory.h"
|
|
|
|
#include <qnamespace.h>
|
|
#include <qobject.h>
|
|
#include <qmap.h>
|
|
#include <qguardedptr.h>
|
|
|
|
#include <ktrader.h>
|
|
|
|
#include <kparts/partmanager.h>
|
|
#include "konq_openurlrequest.h"
|
|
|
|
class QString;
|
|
class QStringList;
|
|
class QTimer;
|
|
class KConfig;
|
|
class KonqMainWindow;
|
|
class KonqFrameBase;
|
|
class KonqFrameContainer;
|
|
class KonqFrameContainerBase;
|
|
class KonqFrameTabs;
|
|
class KonqView;
|
|
class BrowserView;
|
|
class KActionMenu;
|
|
|
|
namespace KParts
|
|
{
|
|
class ReadOnlyPart;
|
|
}
|
|
|
|
class KonqViewManager : public KParts::PartManager
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
KonqViewManager( KonqMainWindow *mainWindow );
|
|
~KonqViewManager();
|
|
|
|
KonqView* Initialize( const QString &serviceType, const QString &serviceName );
|
|
|
|
/**
|
|
* Splits the view, depending on orientation, either horizontally or
|
|
* vertically. The first of the resulting views will contain the initial
|
|
* view, the other will be a new one, constructed from the given
|
|
* Service Type.
|
|
* If no Service Type was provided it takes the one from the current view.
|
|
* Returns the newly created view or 0L if the view couldn't be created.
|
|
*
|
|
* @param newOneFirst if true, move the new view as the first one (left or top)
|
|
*/
|
|
KonqView* splitView( Qt::Orientation orientation,
|
|
const QString & serviceType = QString::null,
|
|
const QString & serviceName = QString::null,
|
|
bool newOneFirst = false, bool forceAutoEmbed = false );
|
|
|
|
/**
|
|
* Does basically the same as splitView() but inserts the new view at the top
|
|
* of the view tree.
|
|
* Returns the newly created view or 0L if the view couldn't be created.
|
|
*
|
|
* @param newOneFirst if true, move the new view as the first one (left or top)
|
|
*/
|
|
KonqView* splitWindow( Qt::Orientation orientation,
|
|
const QString & serviceType = QString::null,
|
|
const QString & serviceName = QString::null,
|
|
bool newOneFirst = false);
|
|
|
|
/**
|
|
* Converts a Container or View docContainer into a Tabs
|
|
*/
|
|
void convertDocContainer();
|
|
|
|
|
|
/**
|
|
* Adds a tab to m_pMainContainer
|
|
*/
|
|
KonqView* addTab(const QString &serviceType = QString::null,
|
|
const QString &serviceName = QString::null,
|
|
bool passiveMode = false, bool openAfterCurrentPage = false );
|
|
|
|
|
|
|
|
/**
|
|
* Duplicates the specified tab, or else the current one if none is specified
|
|
*/
|
|
void duplicateTab( KonqFrameBase* tab = 0L, bool openAfterCurrentPage = false );
|
|
|
|
/**
|
|
* creates a new tab from a history entry
|
|
* used for MMB on back/forward
|
|
*/
|
|
KonqView* addTabFromHistory( int steps, bool openAfterCurrentPage );
|
|
|
|
/**
|
|
* Break the current tab off into a new window,
|
|
* if none is specified, the current one is used
|
|
*/
|
|
void breakOffTab( KonqFrameBase* tab = 0L );
|
|
|
|
/**
|
|
* Guess!:-)
|
|
* Also takes care of setting another view as active if @p view was the active view
|
|
*/
|
|
void removeView( KonqView *view );
|
|
|
|
/**
|
|
* Removes specified tab, if none is specified it remvoe the current tab
|
|
* Also takes care of setting another view as active if the active view was in this tab
|
|
*/
|
|
void removeTab( KonqFrameBase* tab = 0L );
|
|
|
|
/**
|
|
* Removes all, but the specified tab. If no tab is specified every tab, but the current will be removed
|
|
* Also takes care of setting the specified tab as active if the active view was not in this tab
|
|
*/
|
|
void removeOtherTabs( KonqFrameBase* tab = 0L );
|
|
|
|
/**
|
|
* Locates and activates the next tab
|
|
*
|
|
*/
|
|
void activateNextTab();
|
|
|
|
/**
|
|
* Locates and activates the previous tab
|
|
*
|
|
*/
|
|
void activatePrevTab();
|
|
|
|
/**
|
|
* Activate given tab
|
|
*
|
|
*/
|
|
void activateTab(int position);
|
|
|
|
void moveTabBackward();
|
|
void moveTabForward();
|
|
|
|
void reloadAllTabs();
|
|
|
|
/**
|
|
* Brings the tab specified by @p view to the front of the stack
|
|
*
|
|
*/
|
|
void showTab( KonqView *view );
|
|
|
|
/**
|
|
* Updates favicon pixmaps used in tabs
|
|
*
|
|
*/
|
|
void updatePixmaps();
|
|
|
|
/**
|
|
* Saves the current view layout to a config file.
|
|
* Remove config file before saving, especially if saveURLs is false.
|
|
* @param cfg the config file
|
|
* @param saveURLs whether to save the URLs in the profile
|
|
* @param saveWindowSize whether to save the size of the window in the profile
|
|
*/
|
|
void saveViewProfile( KConfig & cfg, bool saveURLs, bool saveWindowSize );
|
|
|
|
/**
|
|
* Saves the current view layout to a config file.
|
|
* Remove config file before saving, especially if saveURLs is false.
|
|
* @param fileName the name of the config file
|
|
* @param profileName the name of the profile
|
|
* @param saveURLs whether to save the URLs in the profile
|
|
* @param saveWindowSize whether to save the size of the window in the profile
|
|
*/
|
|
void saveViewProfile( const QString & fileName, const QString & profileName,
|
|
bool saveURLs, bool saveWindowSize );
|
|
|
|
/**
|
|
* Loads a view layout from a config file. Removes all views before loading.
|
|
* @param cfg the config file
|
|
* @param filename if set, remember the file name of the profile (for save settings)
|
|
* It has to be under the profiles dir. Otherwise, set to QString::null
|
|
* @param forcedURL if set, the URL to open, whatever the profile says
|
|
* @param req attributes related to @p forcedURL
|
|
* @param resetWindow if the profile doesn't have attributes like size or toolbar
|
|
* settings, they will be reset to the defaults
|
|
*/
|
|
void loadViewProfile( KConfig &cfg, const QString & filename,
|
|
const KURL & forcedURL = KURL(),
|
|
const KonqOpenURLRequest &req = KonqOpenURLRequest(),
|
|
bool resetWindow = false, bool openURL = true );
|
|
|
|
/**
|
|
* Loads a view layout from a config file. Removes all views before loading.
|
|
* @param path the full path to the config file
|
|
* @param filename if set, remember the file name of the profile (for save settings)
|
|
* It has to be under the profiles dir. Otherwise, set to QString::null
|
|
* @param forcedURL if set, the URL to open, whatever the profile says
|
|
* @param req attributes related to @p forcedURL
|
|
* @param resetWindow if the profile doesn't have attributes like size or toolbar
|
|
* settings, they will be reset to the defaults
|
|
*/
|
|
void loadViewProfile( const QString & path, const QString & filename,
|
|
const KURL & forcedURL = KURL(),
|
|
const KonqOpenURLRequest &req = KonqOpenURLRequest(),
|
|
bool resetWindow = false, bool openURL = true );
|
|
/**
|
|
* Return the filename of the last profile that was loaded
|
|
* by the view manager. For "save settings".
|
|
*/
|
|
QString currentProfile() const { return m_currentProfile; }
|
|
/**
|
|
* Return the name (i18n'ed) of the last profile that was loaded
|
|
* by the view manager. For "save settings".
|
|
*/
|
|
QString currentProfileText() const { return m_currentProfileText; }
|
|
|
|
/**
|
|
* Whether we are currently loading a profile
|
|
*/
|
|
bool isLoadingProfile() const { return m_bLoadingProfile; }
|
|
|
|
void clear();
|
|
|
|
KonqView *chooseNextView( KonqView *view );
|
|
|
|
/**
|
|
* Called whenever
|
|
* - the total number of views changed
|
|
* - the number of views in passive mode changed
|
|
* The implementation takes care of showing or hiding the statusbar indicators
|
|
*/
|
|
void viewCountChanged();
|
|
|
|
void setProfiles( KActionMenu *profiles );
|
|
|
|
void profileListDirty( bool broadcast = true );
|
|
|
|
KonqFrameBase *docContainer() const { return m_pDocContainer; }
|
|
void setDocContainer( KonqFrameBase* docContainer ) { m_pDocContainer = docContainer; }
|
|
|
|
KonqMainWindow *mainWindow() const { return m_pMainWindow; }
|
|
|
|
/**
|
|
* Reimplemented from PartManager
|
|
*/
|
|
virtual void removePart( KParts::Part * part );
|
|
|
|
/**
|
|
* Reimplemented from PartManager
|
|
*/
|
|
virtual void setActivePart( KParts::Part *part, QWidget *widget = 0L );
|
|
|
|
void setActivePart( KParts::Part *part, bool immediate );
|
|
|
|
void showProfileDlg( const QString & preselectProfile );
|
|
|
|
/**
|
|
* The widget is the one which you are referring to.
|
|
*/
|
|
static QSize readConfigSize( KConfig &cfg, QWidget *widget = NULL);
|
|
|
|
#ifndef NDEBUG
|
|
void printFullHierarchy( KonqFrameContainerBase * container );
|
|
#endif
|
|
|
|
void setLoading( KonqView *view, bool loading );
|
|
|
|
void showHTML(bool b);
|
|
|
|
QString profileHomeURL() const { return m_profileHomeURL; }
|
|
|
|
protected slots:
|
|
void emitActivePartChanged();
|
|
|
|
void slotProfileDlg();
|
|
|
|
void slotProfileActivated( int id );
|
|
|
|
void slotProfileListAboutToShow();
|
|
|
|
void slotPassiveModePartDeleted();
|
|
|
|
void slotActivePartChanged ( KParts::Part *newPart );
|
|
|
|
protected:
|
|
|
|
/**
|
|
* Load the config entries for a view.
|
|
* @param cfg the config file
|
|
* ...
|
|
* @param defaultURL the URL to use if the profile doesn't contain urls
|
|
* @param openURL whether to open urls at all (from the profile or using @p defaultURL).
|
|
* (this is set to false when we have a forcedURL to open)
|
|
*/
|
|
void loadItem( KConfig &cfg, KonqFrameContainerBase *parent,
|
|
const QString &name, const KURL & defaultURL, bool openURL, bool openAfterCurrentPage = false );
|
|
|
|
// Disabled - we do it ourselves
|
|
virtual void setActiveInstance( KInstance * ) {}
|
|
|
|
private:
|
|
|
|
/**
|
|
* Creates a new View based on the given ServiceType. If serviceType is empty
|
|
* it clones the current view.
|
|
* Returns the newly created view.
|
|
*/
|
|
KonqViewFactory createView( const QString &serviceType,
|
|
const QString &serviceName,
|
|
KService::Ptr &service,
|
|
KTrader::OfferList &partServiceOffers,
|
|
KTrader::OfferList &appServiceOffers,
|
|
bool forceAutoEmbed = false );
|
|
|
|
/**
|
|
* Mainly creates the backend structure(KonqView) for a view and
|
|
* connects it
|
|
*/
|
|
KonqView *setupView( KonqFrameContainerBase *parentContainer,
|
|
KonqViewFactory &viewFactory,
|
|
const KService::Ptr &service,
|
|
const KTrader::OfferList &partServiceOffers,
|
|
const KTrader::OfferList &appServiceOffers,
|
|
const QString &serviceType,
|
|
bool passiveMode, bool openAfterCurrentPage = false);
|
|
|
|
#ifndef NDEBUG
|
|
//just for debugging
|
|
void printSizeInfo( KonqFrameBase* frame,
|
|
KonqFrameContainerBase* parent,
|
|
const char* msg );
|
|
#endif
|
|
|
|
KonqMainWindow *m_pMainWindow;
|
|
|
|
KonqFrameBase *m_pDocContainer;
|
|
|
|
QGuardedPtr<KActionMenu> m_pamProfiles;
|
|
bool m_bProfileListDirty;
|
|
bool m_bLoadingProfile;
|
|
QString m_currentProfile;
|
|
QString m_currentProfileText;
|
|
QString m_profileHomeURL;
|
|
|
|
QMap<QString, QString> m_mapProfileNames;
|
|
|
|
QTimer *m_activePartChangedTimer;
|
|
};
|
|
|
|
#endif
|