diff options
Diffstat (limited to 'kate/tabbarextension/plugin_katetabbarextension.h')
-rw-r--r-- | kate/tabbarextension/plugin_katetabbarextension.h | 322 |
1 files changed, 322 insertions, 0 deletions
diff --git a/kate/tabbarextension/plugin_katetabbarextension.h b/kate/tabbarextension/plugin_katetabbarextension.h new file mode 100644 index 0000000..6b53444 --- /dev/null +++ b/kate/tabbarextension/plugin_katetabbarextension.h @@ -0,0 +1,322 @@ +/*************************************************************************** + plugin_katetabbarextension.h + ------------------- + begin : 2004-04-20 + copyright : (C) 2004 by Dominik Haumann + email : dhdev@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 _PLUGIN_TABBAREXTENSION_H_ +#define _PLUGIN_TABBAREXTENSION_H_ + +#include <kate/application.h> +#include <kate/documentmanager.h> +#include <kate/document.h> +#include <kate/mainwindow.h> +#include <kate/plugin.h> +#include <kate/view.h> +#include <kate/viewmanager.h> +#include <kate/pluginconfiginterface.h> +#include <kate/pluginconfiginterfaceextension.h> + +#include <klibloader.h> +#include <klocale.h> +#include <ktoolbar.h> + +#include <qwidget.h> +#include <qpushbutton.h> +#include <qptrlist.h> + +class QBoxLayout; +class QCheckBox; +class KateTabBarButton; + +/** + * Same as QPtrList. Only difference is: overwrite comapreItems() for sorting reason. + */ +class MyPtrList : public QPtrList <KateTabBarButton> +{ + public: + MyPtrList() { QPtrList<KateTabBarButton>::QPtrList(); } + + virtual int compareItems ( QPtrCollection::Item item1_, QPtrCollection::Item item2_ ); +}; + +class KatePluginFactory : public KLibFactory +{ + Q_OBJECT + + public: + KatePluginFactory(); + virtual ~KatePluginFactory(); + + virtual QObject* createObject( QObject* parent = 0, const char* pname = 0, + const char* name = "QObject", const QStringList &args = QStringList() ); + + private: + static KInstance* s_instance; +}; + +/** + * This class implements a single tab. Every tab represents a document and shows + * the current flag (modified: true or false). + */ +class KateTabBarButton: public QPushButton +{ + Q_OBJECT + + public: + /** + * constructor + * @param pViewManager pointer to kate's the view manager + * @param pDoc pointer to the document, that the tab button represents + * @param parent parent widget + * @param name name of the tab button + */ + KateTabBarButton(Kate::ViewManager* pViewManager, Kate::Document *pDoc, + QWidget* parent = 0, const char * name = 0); + + /** + * standard destructor (emtpy) + */ + ~KateTabBarButton(); + + /** + * @return the unique document ID + */ + uint documentNumber(); + + /** + * get the document's full name (eg. main.cpp), used for comparison + * @return the document's name + */ + QString fullName() const; + + /** + * negate the modified flag and change the button color + * (usually red or black) + */ + void triggerModified(); + + /** + * dirty flag indicates whether the file was modified on disk + * @param d if true, a small warning icon appears + */ + void setDirty(bool d); + + /** + * set text for this tab + * @param newText new text + */ + virtual void setText( const QString& newText); + + signals: + /** + * signal that is only emitted when the toggle button toggles to state 'on' + * @param tab pointer to the button that emitted the signal + */ + void myToggled(KateTabBarButton* tab); + + public slots: + /** + * control the ToggleButton + * @param on if true, the button is toggled on + */ + virtual void setOn(bool on); + + private: + bool modified; ///< if true, doc is modified + uint myDocID; ///< unique document ID + Kate::Document *doc; ///< pointer to the doc + Kate::ViewManager *viewManager; ///< pointer to the view manager +}; + +/** + * This class handels all tabs and implements a full-featured "tabbar". + */ +class KateTabBarExtension : public QWidget +{ + Q_OBJECT + + public: + /** + * constructor + * @param pDocManager pointer to kate's document manager + * @param win pinter to the main window + * @param bHorizOrientation true, if orientation is Qt::Horizontal + * @param bSort true, if orientation is Qt::Horizontal + * @param parent parent widget + * @param name name of widget + * @param f widget flags + */ + KateTabBarExtension( Kate::DocumentManager *pDocManager, + Kate::MainWindow *win, bool bHorizOrientation, bool bSort, + QWidget * parent = 0, const char * name = 0, WFlags f = 0 ); + + /** standard destructor */ + ~KateTabBarExtension(); + + /** + * @return the tabbar's orientation + */ + Qt::Orientation orientation() const; + + /** + * @return true, when sorting is alphabetically + */ + bool sortByName() const; + + /** + * set sorting type + * @param sbn if true, sort by filename.lower() + */ + void setSortByName(bool sbn); + + /** + * sort all tabs + */ + void updateSort(); + + public slots: + /** + * called when a new document is created/loaded + * @param doc the new document + */ + void slotDocumentCreated (Kate::Document *doc); + + /** + * called when an existing document is being deleted + * @param documentNumber ID of the document + */ + void slotDocumentDeleted (uint documentNumber); + + /** + * called whenever the view changes + * @param v pointer to the button that represents the active view + */ + void slotActivateView(KateTabBarButton* v); + + /** + * called when the document's modified flag changes + * @param doc the document + */ + void slotModChanged (Kate::Document *doc); + + /** + * called when the document changed on disk [NOT SUPPORTED AT THE MOMENT] + * @param doc the document + * @param b modified flag + * @param reason the reason why the file changed + */ + void slotModifiedOnDisc (Kate::Document *doc, bool b, unsigned char reason); + + /** + * called when the document's name changed + * @param doc the document + */ + void slotNameChanged (Kate::Document *doc); + + /** + * called when the active view changes + */ + void slotViewChanged (); + + /** + * called whenever the toolbar's orientation changes + * @param o new orientation [Qt::Horizontal or Qt::Vertical] + */ + void slotMoved(Orientation o); + + private: + KateTabBarButton* pCurrentTab; ///< pointer to the current tab + QBoxLayout* top; ///< layout that contains all tabs + Kate::MainWindow* m_win; ///< pointer to the main window + Kate::DocumentManager* m_docManager; ///< pointer to the document manager +// QPtrList <KateTabBarButton> m_tabs; ///< list containing all tabs + MyPtrList m_tabs; ///< list containing all tabs + Qt::Orientation m_orientation; ///< save tabbar's orientation + bool m_sort; ///< how to sort +}; + +/** + * The tabbar's config page + */ +class KateTabBarExtensionConfigPage : public Kate::PluginConfigPage +{ + Q_OBJECT + + friend class KatePluginTabBarExtension; + + public: + KateTabBarExtensionConfigPage (QObject* parent = 0L, QWidget *parentWidget = 0L); + ~KateTabBarExtensionConfigPage (); + + /** + * Reimplemented from Kate::PluginConfigPage + * just emits configPageApplyRequest( this ). + */ + virtual void apply(); + + virtual void reset () { ; } + virtual void defaults () { ; } + + signals: + /** + * Ask the plugin to set initial values + */ + void configPageApplyRequest( KateTabBarExtensionConfigPage* ); + + /** + * Ask the plugin to apply changes + */ + void configPageInitRequest( KateTabBarExtensionConfigPage* ); + + private: + QCheckBox* pSortAlpha; +}; + +class KatePluginTabBarExtension : public Kate::Plugin, Kate::PluginViewInterface, Kate::PluginConfigInterfaceExtension +{ + Q_OBJECT + + public: + KatePluginTabBarExtension( QObject* parent = 0, const char* name = 0 ); + virtual ~KatePluginTabBarExtension(); + + void addView (Kate::MainWindow *win); + void removeView (Kate::MainWindow *win); + + uint configPages () const { return 1; } + Kate::PluginConfigPage *configPage (uint , QWidget *w, const char *name=0); + QString configPageName(uint) const { return i18n("Tab Bar Extension"); } + QString configPageFullName(uint) const { return i18n("Configure Tab Bar Extension"); } + QPixmap configPagePixmap (uint number = 0, int size = KIcon::SizeSmall) const { return 0L; } + + public slots: + void applyConfig( KateTabBarExtensionConfigPage* ); + + private: + void initConfigPage( KateTabBarExtensionConfigPage* ); + + private: + QPtrList<class PluginView> m_views; + KConfig* pConfig; +}; + +#endif // _PLUGIN_TABBAREXTENSION_H_ |