/*
* icon.h
*
* Copyright (C) 1995-2001 Kenichi Kourai
*
* 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, 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 qvwm; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _ICON_H_
#define _ICON_H_
#include "misc.h"
#include "menu.h"
#include "util.h"
#include "list.h"
class Icon;
/*
* IconMenu class
*/
class IconMenu : public Menu {
private:
Icon* icon;
public:
IconMenu(MenuElem* mItem, XFontSet& menufs, Menu* par, Icon* owner)
: Menu(mItem, menufs, par, rootQvwm), icon(owner) {}
~IconMenu() {}
void SetIcon(Icon* owner) { icon = owner; }
void ExecFunction(FuncNumber fn, int i);
};
class QvImage;
class Tooltip;
/*
* Icon class
*/
class Icon {
private:
Window frame; // frame window for image
Window text; // text window for name
Window wrap; // window accepting events around icon
Rect rc; // position and size of icon
Rect rcVirt; // the same in virtual coordinates
QvImage* img; // icon image
char* name; // icon name
char* exec; // icon function (external)
FuncNumber fn; // icon function (built-in)
Bool isBuiltin; // icon type
Time iconClickTime; // click interval when icon executes function
Rect rcText; // size and position of icon text
unsigned int textLines; // number of icon text lines
Pixmap shapeMask;
GC gcShape;
Pixmap pixIconBack;
Window shadow; // a window used when dragging this icon
Bool dragging; // a flag of dragging
Bool enableDrop;
Tooltip* toolTip;
public:
enum { SFACTOR = 100000 };
static Icon* focusIcon; // icon with focus
static XContext context;
static QvImage* imgIcon;
static IconMenu* ctrlMenu; // popup menu on right-click
private:
void init(char* iconname, int x, int y);
void AlterIconName(char* iconname);
void SetIconImage();
void CreateShapedWindow();
void CreateShapedShadowWindow();
public:
Icon(QvImage* image, char* iconname, char* execname, int x, int y);
Icon(QvImage* image, char* iconname, FuncNumber func, int x, int y);
~Icon();
Rect GetRect() const { return rc; }
void SetRect(Rect rect) { rc = rect; }
Rect GetVirtRect() const { return rcVirt; }
void SetVirtRect(Rect rect) { rcVirt = rect; }
Bool CheckMenuMapped() const { return ctrlMenu->CheckMapped(); }
void UnmapMenu() { ctrlMenu->UnmapMenu(); }
char* GetExec() const { return exec; }
FuncNumber GetFunc() const { return fn; }
Bool IsBuiltin() const { return isBuiltin; }
void SetFocus();
void ResetFocus();
void MapIcon();
void UnmapIcon();
void DrawIcon(Bool focus);
void DrawText(Drawable d, GC dGc, Rect rect);
void MoveIcon(const Point& pt);
void Button1Press(Time clickTime, const Point& ptRoot);
void Button1Motion(const Point& ptRoot);
void Button3Release(const Point& ptRoot);
void Enter();
void Leave();
void PointerMotion();
static void Initialize();
};
#endif // _ICON_H_
syntax highlighted by Code2HTML, v. 0.9.1