/******************************************************************** KWin - the KDE window manager This file is part of the KDE project. Copyright (C) 1999, 2000 Matthias Ettrich Copyright (C) 2003 Lubos Lunak Copyright (C) 2009 Martin Gräßlin 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, see . *********************************************************************/ #ifndef KWIN_TABBOX_H #define KWIN_TABBOX_H #include #include #include #include #include #include "utils.h" namespace KWin { class Workspace; class Client; class TabBox : public QGraphicsView { Q_OBJECT public: TabBox( Workspace *ws ); ~TabBox(); Client* currentClient(); ClientList currentClientList(); int currentDesktop(); QList< int > currentDesktopList(); void setCurrentClient( Client* newClient ); void setCurrentDesktop( int newDesktop ); enum SortOrder { StaticOrder, MostRecentlyUsedOrder }; void setMode( TabBoxMode mode ); TabBoxMode mode() const; void reset( bool partial_reset = false ); void initScene(); void nextPrev( bool next = true); void delayedShow(); void hide(); void refDisplay(); void unrefDisplay(); bool isDisplayed() const; void handleMouseEvent( XEvent* ); Workspace* workspace() const; void reconfigure(); void createClientList(ClientList &list, int desktop /*-1 = all*/, Client *start, bool chain); Plasma::FrameSvg* itemFrame(); public slots: void show(); protected: void showEvent( QShowEvent* ); void hideEvent( QHideEvent* ); virtual void drawBackground( QPainter * painter, const QRectF & rect ); private: void createDesktopList(QList< int > &list, int start, SortOrder order); void updateOutline(); private: Workspace* wspace; TabBoxMode m; ClientList clients; Client* client; QList< int > desktops; int desk; QTimer delayedShowTimer; int display_refcount; QString no_tasks; int lineHeight; bool showMiniIcon; bool options_traverse_all; QGraphicsScene* scene; Plasma::FrameSvg frame; Plasma::FrameSvg item_frame; Window outline_left, outline_right, outline_top, outline_bottom; }; class TabBoxWindowItem : public QGraphicsItem { public: TabBoxWindowItem( Client* client, TabBox* parent ); ~TabBoxWindowItem(); virtual QRectF boundingRect() const; virtual void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget ); void setWidth( int width ); void setHeight( int height ); void setShowMiniIcons( bool showMiniIcons ); protected: virtual void drawBackground( QPainter* painter, const QStyleOptionGraphicsItem*, QWidget* ); private: Client* m_client; TabBox* m_parent; int m_width; int m_height; bool m_showMiniIcons; }; class TabBoxDesktopItem : public QGraphicsItem { public: TabBoxDesktopItem( int desktop, TabBox* parent ); ~TabBoxDesktopItem(); virtual QRectF boundingRect() const; virtual void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget ); void setWidth( int width ); void setHeight( int height ); protected: virtual void drawBackground( QPainter* painter, const QStyleOptionGraphicsItem*, QWidget* ); private: int m_desktop; TabBox* m_parent; int m_width; int m_height; }; /*! Returns the tab box' workspace */ inline Workspace* TabBox::workspace() const { return wspace; } /*! Returns the current mode, either TabBoxDesktopListMode or TabBoxWindowsMode \sa setMode() */ inline TabBoxMode TabBox::mode() const { return m; } /*! Increase the reference count, preventing the default tabbox from showing. \sa unrefDisplay(), isDisplayed() */ inline void TabBox::refDisplay() { ++display_refcount; } /*! Returns whether the tab box is being displayed, either natively or by an effect. \sa refDisplay(), unrefDisplay() */ inline bool TabBox::isDisplayed() const { return display_refcount > 0; } inline Plasma::FrameSvg* TabBox::itemFrame() { return &item_frame; } } // namespace #endif