diff options
Diffstat (limited to 'konqueror/konq_frame.h')
-rw-r--r-- | konqueror/konq_frame.h | 410 |
1 files changed, 410 insertions, 0 deletions
diff --git a/konqueror/konq_frame.h b/konqueror/konq_frame.h new file mode 100644 index 000000000..24ff77faa --- /dev/null +++ b/konqueror/konq_frame.h @@ -0,0 +1,410 @@ +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Michael Reiher <michael.reiher@gmx.de> + + 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_frame_h__ +#define __konq_frame_h__ + +#include "konq_factory.h" + +#include <qguardedptr.h> +#include <qcolor.h> +#include <qwidget.h> +#include <qsplitter.h> +#include <qcheckbox.h> +#include <qlabel.h> + +#include <kpixmap.h> +#include <kpixmapeffect.h> +#include <kstatusbar.h> + +class QPixmap; +class QVBoxLayout; +class QHBoxLayout; +class QTimer; +class QPushButton; +class QToolButton; + +class KonqView; +class KonqViewManager; +class KonqFrameBase; +class KonqFrame; +class KonqFrameContainerBase; +class KonqFrameContainer; +class KonqFrameTabs; +class KConfig; +class KSeparator; +class KProgress; +class KAction; +class KSqueezedTextLabel; + +namespace KParts +{ + class ReadOnlyPart; +} + +/** + * A CheckBox with a special paintEvent(). It looks like the + * unchecked radiobutton in b2k style if unchecked and contains a little + * anchor if checked. + */ +class KonqCheckBox : public QCheckBox +{ + Q_OBJECT // for classname +public: + KonqCheckBox(QWidget *parent=0, const char *name=0) + :QCheckBox( parent, name ) {} +protected: + void drawButton( QPainter * ); +}; + + + +/** + * The KonqFrameStatusBar is the statusbar under each konqueror view. + * It indicates in particular whether a view is active or not. + */ +class KonqFrameStatusBar : public KStatusBar +{ + Q_OBJECT + + public: + KonqFrameStatusBar( KonqFrame *_parent = 0L, const char *_name = 0L ); + virtual ~KonqFrameStatusBar(); + + /** + * Checks/unchecks the linked-view checkbox + */ + void setLinkedView( bool b ); + /** + * Shows/hides the active-view indicator + */ + void showActiveViewIndicator( bool b ); + /** + * Shows/hides the linked-view indicator + */ + void showLinkedViewIndicator( bool b ); + /** + * Updates the active-view indicator and the statusbar color. + */ + void updateActiveStatus(); + + public slots: + void slotConnectToNewView(KonqView *, KParts::ReadOnlyPart *oldOne,KParts::ReadOnlyPart *newOne); + void slotLoadingProgress( int percent ); + void slotSpeedProgress( int bytesPerSecond ); + void slotDisplayStatusText(const QString& text); + + void slotClear(); + void message ( const QString & message ); + + signals: + /** + * This signal is emitted when the user clicked the bar. + */ + void clicked(); + + /** + * The "linked view" checkbox was clicked + */ + void linkedViewClicked( bool mode ); + + protected: + virtual bool eventFilter(QObject*,QEvent *); + virtual void resizeEvent( QResizeEvent* ); + virtual void mousePressEvent( QMouseEvent* ); + /** + * Brings up the context menu for this frame + */ + virtual void splitFrameMenu(); + + /** + * Takes care of the statusbars size + **/ + virtual void fontChange(const QFont &oldFont); + + private: + KonqFrame* m_pParentKonqFrame; + QCheckBox *m_pLinkedViewCheckBox; + KProgress *m_progressBar; + KSqueezedTextLabel *m_pStatusLabel; + QLabel* m_led; + QString m_savedMessage; +}; + + +typedef QPtrList<KonqView> ChildViewList; + +class KonqFrameBase +{ + public: + virtual ~KonqFrameBase() {} + + virtual void saveConfig( KConfig* config, const QString &prefix, bool saveURLs, KonqFrameBase* docContainer, int id = 0, int depth = 0) = 0; + + virtual void copyHistory( KonqFrameBase *other ) = 0; + + virtual void printFrameInfo( const QString& spaces ); + + virtual void reparentFrame( QWidget* parent, + const QPoint & p, bool showIt=FALSE ) = 0; + + virtual KonqFrameContainerBase* parentContainer() { return m_pParentContainer; } + virtual void setParentContainer(KonqFrameContainerBase* parent) { m_pParentContainer = parent; } + + virtual void setTitle( const QString &title , QWidget* sender) = 0; + virtual void setTabIcon( const KURL &url, QWidget* sender ) = 0; + + virtual QWidget* widget() = 0; + + virtual void listViews( ChildViewList *viewList ) = 0; + virtual QCString frameType() = 0; + + virtual void activateChild() = 0; + + virtual KonqView* activeChildView() = 0; + +protected: + KonqFrameBase() {} + + KonqFrameContainerBase* m_pParentContainer; +}; + +/** + * The KonqFrame is the actual container for the views. It takes care of the + * widget handling i.e. it attaches/detaches the view widget and activates + * them on click at the statusbar. + * + * KonqFrame makes the difference between built-in views and remote ones. + * We create a layout in it (with the KonqFrameStatusBar as top item in the layout) + * For builtin views we have the view as direct child widget of the layout + * For remote views we have an OPFrame, having the view attached, as child + * widget of the layout + */ + +class KonqFrame : public QWidget, public KonqFrameBase +{ + Q_OBJECT + +public: + KonqFrame( QWidget* parent, KonqFrameContainerBase *parentContainer = 0L, + const char *name = 0L ); + virtual ~KonqFrame(); + + /** + * Attach a view to the KonqFrame. + * @param viewFactory the view to attach (instead of the current one, if any) + */ + KParts::ReadOnlyPart *attach( const KonqViewFactory &viewFactory ); + + /** + * Filters the CTRL+Tab event from the views and emits ctrlTabPressed to + make KonqMainWindow switch to the next view + */ + virtual bool eventFilter(QObject*obj,QEvent *ev); + + /** + * Inserts the part's widget and the statusbar into the layout + */ + void attachInternal(); + + /** + * Inserts a widget at the top of the part's widget, in the layout + * (used for the find functionality) + */ + void insertTopWidget( QWidget * widget ); + + /** + * Returns the part that is currently connected to the Frame. + */ + KParts::ReadOnlyPart *part() { return m_pPart; } + /** + * Returns the view that is currently connected to the Frame. + */ + KonqView* childView()const { return m_pView; } + + bool isActivePart(); + + void setView( KonqView* child ); + virtual void listViews( ChildViewList *viewList ); + + virtual void saveConfig( KConfig* config, const QString &prefix, bool saveURLs, KonqFrameBase* docContainer, int id = 0, int depth = 0 ); + virtual void copyHistory( KonqFrameBase *other ); + + virtual void printFrameInfo( const QString& spaces ); + + virtual void setTitle( const QString &title, QWidget* sender ); + virtual void setTabIcon( const KURL &url, QWidget* sender ); + + virtual void reparentFrame(QWidget * parent, + const QPoint & p, bool showIt=FALSE ); + + //virtual KonqFrameContainerBase* parentContainer(); + virtual QWidget* widget() { return this; } + virtual QCString frameType() { return QCString("View"); } + + QVBoxLayout *layout()const { return m_pLayout; } + + KonqFrameStatusBar *statusbar() const { return m_pStatusBar; } + + virtual void activateChild(); + + KonqView* activeChildView() { return m_pView; } + + QString title() const { return m_title; } + +public slots: + + /** + * Is called when the frame statusbar has been clicked + */ + void slotStatusBarClicked(); + + void slotLinkedViewClicked( bool mode ); + + /** + * Is called when 'Remove View' is called from the popup menu + */ + void slotRemoveView(); + +protected: + virtual void paintEvent( QPaintEvent* ); + + QVBoxLayout *m_pLayout; + QGuardedPtr<KonqView> m_pView; + + QGuardedPtr<KParts::ReadOnlyPart> m_pPart; + + KonqViewManager* m_pViewManager; + + KSeparator *m_separator; + KonqFrameStatusBar* m_pStatusBar; + + QString m_title; +}; + +class KonqFrameContainerBase : public KonqFrameBase +{ +public: + virtual ~KonqFrameContainerBase() {} + + /** + * Call this after inserting a new frame into the splitter. + */ + virtual void insertChildFrame( KonqFrameBase * frame, int index = -1 ) = 0; + /** + * Call this before deleting one of our children. + */ + virtual void removeChildFrame( KonqFrameBase * frame ) = 0; + + //inherited + virtual void printFrameInfo( const QString& spaces ); + + virtual QCString frameType() { return QCString("ContainerBase"); } + + virtual void reparentFrame(QWidget * parent, + const QPoint & p, bool showIt=FALSE ) = 0; + + virtual KonqFrameBase* activeChild() { return m_pActiveChild; } + + virtual void setActiveChild( KonqFrameBase* activeChild ) { m_pActiveChild = activeChild; + m_pParentContainer->setActiveChild( this ); } + + virtual void activateChild() { if (m_pActiveChild) m_pActiveChild->activateChild(); } + + virtual KonqView* activeChildView() { if (m_pActiveChild) return m_pActiveChild->activeChildView(); + else return 0L; } + +protected: + KonqFrameContainerBase() {} + + KonqFrameBase* m_pActiveChild; +}; + +/** + * With KonqFrameContainers and @refKonqFrames we can create a flexible + * storage structure for the views. The top most element is a + * KonqFrameContainer. It's a direct child of the MainView. We can then + * build up a binary tree of containers. KonqFrameContainers are the nodes. + * That means that they always have two childs. Which are either again + * KonqFrameContainers or, as leaves, KonqFrames. + */ + +class KonqFrameContainer : public QSplitter, public KonqFrameContainerBase +{ + Q_OBJECT + friend class KonqFrame; //for emitting ctrlTabPressed() only, aleXXX +public: + KonqFrameContainer( Orientation o, + QWidget* parent, + KonqFrameContainerBase* parentContainer, + const char * name = 0); + virtual ~KonqFrameContainer(); + + virtual void listViews( ChildViewList *viewList ); + + virtual void saveConfig( KConfig* config, const QString &prefix, bool saveURLs, KonqFrameBase* docContainer, int id = 0, int depth = 0 ); + virtual void copyHistory( KonqFrameBase *other ); + + KonqFrameBase* firstChild() { return m_pFirstChild; } + KonqFrameBase* secondChild() { return m_pSecondChild; } + KonqFrameBase* otherChild( KonqFrameBase* child ); + + virtual void printFrameInfo( const QString& spaces ); + + void swapChildren(); + + virtual void setTitle( const QString &title, QWidget* sender ); + virtual void setTabIcon( const KURL &url, QWidget* sender ); + + virtual QWidget* widget() { return this; } + virtual QCString frameType() { return QCString("Container"); } + + /** + * 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 ); + + //inherited + virtual void reparentFrame(QWidget * parent, + const QPoint & p, bool showIt=FALSE ); + + //make this one public + int idAfter( QWidget* w ){ return QSplitter::idAfter( w ); } + + void setAboutToBeDeleted() { m_bAboutToBeDeleted = true; } + + //inherited + virtual void childEvent( QChildEvent * ); + +signals: + void ctrlTabPressed(); + void setRubberbandCalled(); + +protected: + virtual void setRubberband( int ); + + KonqFrameBase* m_pFirstChild; + KonqFrameBase* m_pSecondChild; + bool m_bAboutToBeDeleted; +}; + +#endif |