2007-05-22 18:53:17 +04:00
|
|
|
/*
|
|
|
|
* $Id$
|
|
|
|
*
|
2008-10-02 13:42:19 +04:00
|
|
|
* ede-desktop, desktop and icon manager
|
2007-05-22 18:53:17 +04:00
|
|
|
* Part of Equinox Desktop Environment (EDE).
|
2008-10-02 13:42:19 +04:00
|
|
|
* Copyright (c) 2006-2008 EDE Authors.
|
2007-05-22 18:53:17 +04:00
|
|
|
*
|
|
|
|
* This program is licensed under terms of the
|
|
|
|
* GNU General Public License version 2 or newer.
|
|
|
|
* See COPYING for details.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __DESKTOPICON_H__
|
|
|
|
#define __DESKTOPICON_H__
|
|
|
|
|
2008-10-02 13:42:19 +04:00
|
|
|
#include <X11/Xlib.h> // Pixmap
|
|
|
|
|
2008-09-15 15:00:23 +04:00
|
|
|
#include <FL/Fl_Widget.H>
|
|
|
|
#include <FL/Fl_Window.H>
|
|
|
|
#include <FL/Fl_Box.H>
|
|
|
|
#include <FL/Fl_Button.H>
|
|
|
|
#include <FL/Fl_Image.H>
|
2007-05-22 18:53:17 +04:00
|
|
|
|
2008-08-07 18:22:05 +04:00
|
|
|
#include <edelib/String.h>
|
2009-07-09 17:44:16 +04:00
|
|
|
#include <edelib/MenuButton.h>
|
2008-08-07 18:22:05 +04:00
|
|
|
|
2007-05-22 18:53:17 +04:00
|
|
|
class GlobalIconSettings;
|
|
|
|
class IconSettings;
|
|
|
|
class MovableIcon;
|
|
|
|
|
2007-06-20 14:58:07 +04:00
|
|
|
class DesktopIcon : public Fl_Widget {
|
2009-02-26 14:15:27 +03:00
|
|
|
private:
|
2009-05-19 15:10:23 +04:00
|
|
|
IconSettings* settings;
|
|
|
|
const GlobalIconSettings* gsettings;
|
2009-02-26 14:15:27 +03:00
|
|
|
|
|
|
|
int lwidth;
|
|
|
|
int lheight;
|
|
|
|
bool focus;
|
|
|
|
|
|
|
|
MovableIcon* micon;
|
|
|
|
|
2009-07-09 17:44:16 +04:00
|
|
|
Fl_Image* darker_img;
|
|
|
|
edelib::MenuButton* imenu;
|
2009-02-26 14:15:27 +03:00
|
|
|
|
|
|
|
void load_icon(int face);
|
|
|
|
void update_label_size(void);
|
|
|
|
void fix_position(int X, int Y);
|
|
|
|
|
|
|
|
public:
|
|
|
|
DesktopIcon(GlobalIconSettings* gisett, IconSettings* isett, int bg);
|
|
|
|
~DesktopIcon();
|
|
|
|
|
|
|
|
virtual void draw(void);
|
|
|
|
virtual int handle(int event);
|
|
|
|
|
|
|
|
void drag(int x, int y, bool apply);
|
|
|
|
int drag_icon_x(void);
|
|
|
|
int drag_icon_y(void);
|
|
|
|
|
2009-07-09 17:59:51 +04:00
|
|
|
IconSettings* get_settings(void) { return settings; }
|
|
|
|
|
2009-02-26 14:15:27 +03:00
|
|
|
/*
|
|
|
|
* This is 'enhanced' (in some sense) redraw(). Redrawing
|
|
|
|
* icon will not fully redraw label nor focus box, which laid outside
|
|
|
|
* icon box. It will use damage() on given region, but called from
|
|
|
|
* parent, so parent can redraw that region on itself (since label does
|
|
|
|
* not laid on any box)
|
|
|
|
*
|
|
|
|
* Alternative way would be to redraw whole parent, but it is pretty unneeded
|
|
|
|
* and slow.
|
|
|
|
*/
|
|
|
|
void fast_redraw(void);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Here is implemented localy focus schema avoiding
|
|
|
|
* messy fltk one. Focus/unfocus is handled from Desktop.
|
|
|
|
*/
|
|
|
|
void do_focus(void) { focus = true; }
|
|
|
|
void do_unfocus(void) { focus = false; }
|
|
|
|
bool is_focused(void) { return focus; }
|
|
|
|
|
|
|
|
Fl_Image* icon_image(void) { return image(); }
|
|
|
|
|
|
|
|
void rename(const char* str);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* make sure this returns String since operator== is
|
|
|
|
* further used, especially in Desktop
|
|
|
|
*/
|
|
|
|
const edelib::String& path(void);
|
|
|
|
|
|
|
|
int icon_type(void);
|
|
|
|
void use_icon1(void);
|
|
|
|
void use_icon2(void);
|
2007-05-22 18:53:17 +04:00
|
|
|
};
|
|
|
|
|
2007-06-18 18:18:35 +04:00
|
|
|
class MovableIcon : public Fl_Window {
|
2009-02-26 14:15:27 +03:00
|
|
|
private:
|
|
|
|
DesktopIcon* icon;
|
|
|
|
Fl_Box* icon_box;
|
|
|
|
Pixmap mask;
|
|
|
|
|
|
|
|
public:
|
|
|
|
MovableIcon(DesktopIcon* i);
|
|
|
|
~MovableIcon();
|
|
|
|
virtual void show(void);
|
2007-05-22 18:53:17 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|