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.
tdeartwork/kwin-styles/glow/glowclient.h

207 lines
5.8 KiB

/***************************************************************************
glowclient.h - description
-------------------
begin : Thu Sep 6 2001
copyright : (C) 2001 by Henning Burchardt
email : h_burchardt@gmx.net
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#ifndef GLOW_CLIENT_H
#define GLOW_CLIENT_H
#include <vector>
#include <map>
#include <kdecoration.h>
#include <kdecorationfactory.h>
class TQPixmap;
class TQBitmap;
class TQTimer;
class TQBoxLayout;
class TQGridLayout;
class TQVBoxLayout;
class TQSpacerItem;
namespace Glow
{
class GlowButton;
class GlowButtonFactory;
//-----------------------------------------------------------------------------
// GlowTheme
//-----------------------------------------------------------------------------
struct GlowTheme
{
TQSize buttonSize;
TQString backgroundPixmap;
TQString backgroundAlphaPixmap;
TQString stickyOnPixmap;
TQString stickyOffPixmap;
TQString maximizeOnPixmap;
TQString maximizeOffPixmap;
TQString helpPixmap;
TQString closePixmap;
TQString iconifyPixmap;
TQString stickyOnGlowPixmap;
TQString stickyOffGlowPixmap;
TQString maximizeOnGlowPixmap;
TQString maximizeOffGlowPixmap;
TQString helpGlowPixmap;
TQString closeGlowPixmap;
TQString iconifyGlowPixmap;
};
static GlowTheme default_glow_theme = {
TQSize (17, 17),
"background.png", "background_alpha.png",
"stickyon.png", "stickyoff.png",
"maximizeon.png", "maximizeoff.png",
"help.png", "close.png", "iconify.png",
"stickyon_glow.png", "stickyoff_glow.png",
"maximizeon_glow.png", "maximizeoff_glow.png",
"help_glow.png", "close_glow.png", "iconify_glow.png" };
//-----------------------------------------------------------------------------
// GlowClientConfig
//-----------------------------------------------------------------------------
class GlowClientConfig
{
public:
GlowClientConfig();
void load (KDecorationFactory *factory);
TQColor stickyButtonGlowColor;
TQColor helpButtonGlowColor;
TQColor iconifyButtonGlowColor;
TQColor maximizeButtonGlowColor;
TQColor closeButtonGlowColor;
bool showResizeHandle;
int titlebarGradientType;
TQString themeName;
};
//-----------------------------------------------------------------------------
// GlowClientGlobals
//-----------------------------------------------------------------------------
class GlowClientGlobals : public KDecorationFactory
{
public:
enum PixmapType { StickyOn, StickyOff, Help, Iconify, MaximizeOn,
MaximizeOff, Close };
static GlowClientGlobals *instance();
~GlowClientGlobals();
virtual KDecoration* createDecoration( KDecorationBridge* b );
virtual bool reset( unsigned long changed );
virtual bool supports( Ability ability );
TQValueList< GlowClientGlobals::BorderSize > borderSizes() const;
TQString getPixmapName(PixmapType type, bool isActive);
GlowTheme * theme() const { return _theme; }
GlowClientConfig * config() const { return _config; }
GlowButtonFactory * buttonFactory() { return _button_factory; }
private:
static GlowClientGlobals *m_instance;
GlowTheme * _theme;
GlowClientConfig * _config;
GlowButtonFactory * _button_factory;
GlowClientGlobals();
void readConfig();
void readTheme ();
bool createPixmaps();
void deletePixmaps();
bool createPixmap(PixmapType type,bool isActive);
const TQString getPixmapTypeName(PixmapType type);
};
//-----------------------------------------------------------------------------
// GlowClient
//-----------------------------------------------------------------------------
class GlowClient : public KDecoration
{
Q_OBJECT
TQ_OBJECT
public:
GlowClient( KDecorationBridge* b, KDecorationFactory* f );
~GlowClient();
virtual void init();
virtual void borders( int&, int&, int&, int& ) const;
virtual void resize( const TQSize& );
virtual TQSize tqminimumSize() const;
protected:
virtual void resizeEvent( TQResizeEvent * );
virtual void paintEvent( TQPaintEvent * );
virtual void showEvent( TQShowEvent * );
virtual void mouseDoubleClickEvent( TQMouseEvent * );
virtual void wheelEvent( TQWheelEvent * );
virtual void maximizeChange();
virtual void activeChange();
virtual void iconChange();
virtual void desktopChange();
virtual void shadeChange();
virtual void captionChange();
virtual Position mousePosition(const TQPoint &) const;
virtual bool eventFilter( TQObject* o, TQEvent* e );
private:
std::vector<GlowButton*> m_buttonList;
std::vector<GlowButton*> m_leftButtonList;
std::vector<GlowButton*> m_rightButtonList;
GlowButton *m_stickyButton;
GlowButton *m_helpButton;
GlowButton *m_minimizeButton;
GlowButton *m_maximizeButton;
GlowButton *m_closeButton;
TQBoxLayout *m_leftButtonLayout;
TQBoxLayout *m_rightButtonLayout;
TQSpacerItem * _bottom_spacer;
TQSpacerItem * _title_spacer;
TQVBoxLayout * _main_layout;
void createButtons();
void updateButtonPositions();
/**
* Before this method is called we have to update the button
* positions with updateButtonPositions() because the pixmaps
* depend on the position
*/
void updateButtonPixmaps();
void resetLayout();
void doShape();
bool isLeft(GlowButton *button);
bool isRight(GlowButton *button);
protected slots:
void slotMaximize();
};
} // namespace
#endif