ede/eiconman/eiconman.h

143 lines
3.4 KiB
C
Raw Normal View History

/*
* $Id$
*
2007-05-22 18:53:17 +04:00
* Eiconman, desktop and icon manager
* Part of Equinox Desktop Environment (EDE).
2007-05-22 18:53:17 +04:00
* Copyright (c) 2000-2007 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.
*/
2007-05-22 18:53:17 +04:00
#ifndef __EICONMAN_H__
#define __EICONMAN_H__
2007-05-22 18:53:17 +04:00
#include <fltk/Window.h>
#include <fltk/PopupMenu.h>
#include <fltk/Image.h>
2007-05-22 18:53:17 +04:00
#include <edelib/String.h>
#include <edelib/Config.h>
#include <edelib/Vector.h>
2007-05-22 18:53:17 +04:00
struct DesktopSettings {
int color; // background color
bool wp_use; // use wallpaper or not
fltk::Image* wp_image; // wallpaper image (can be NULL)
edelib::String wp_path; // wallpaper path
2007-05-22 18:53:17 +04:00
};
2007-05-22 18:53:17 +04:00
struct GlobalIconSettings {
int label_background;
int label_foreground;
int label_fontsize;
int label_maxwidth;
int gridspacing;
bool label_transparent;
bool label_draw;
bool one_click_exec;
bool auto_arr;
bool same_size;
};
#define ICON_NORMAL 1 // .desktop file
#define ICON_TRASH 2 // trash.desktop (specific since have two icons for empty/full)
#define ICON_FILE 3 // real file
#define ICON_SYMLINK 4 // symbolic link
/*
* Settings representing related to icon on desktop. To complicate our lives
* (and to, at least, simplify code) it can be:
* - .desktop file content (normal or trash like)
* - real file copied/moved inside ~/Desktop directory
* - symlink in ~/Desktop directory pointing to the real file
*/
2007-05-22 18:53:17 +04:00
struct IconSettings {
int x, y;
int type;
bool cmd_is_url; // interpret cmd as url, like system:/,trash:/,$HOME
2007-05-22 18:53:17 +04:00
edelib::String name;
edelib::String cmd;
edelib::String icon;
edelib::String icon2; // for stateable icons, like trash (empty/full)
edelib::String key_name; // name used as key when storing positions
2007-05-22 18:53:17 +04:00
};
2007-05-22 20:27:33 +04:00
// selection overlay
struct SelectionOverlay {
int x, y, w, h;
bool show;
};
2007-05-22 18:53:17 +04:00
class DesktopIcon;
typedef edelib::vector<DesktopIcon*> DesktopIconList;
2007-05-22 18:53:17 +04:00
class Desktop : public fltk::Window {
private:
static Desktop* pinstance;
2007-05-22 18:53:17 +04:00
int desktops_num;
int curr_desktop;
2007-05-22 18:53:17 +04:00
int bg_color;
bool wp_use;
bool moving;
int selection_x;
int selection_y;
2007-05-22 20:27:33 +04:00
SelectionOverlay* selbox;
2007-05-22 18:53:17 +04:00
GlobalIconSettings gisett;
IconSettings isett;
DesktopSettings* dsett;
DesktopIconList icons;
DesktopIconList selectionbuff;
2007-05-22 18:53:17 +04:00
fltk::PopupMenu* pmenu;
void init_desktops(void);
2007-05-22 18:53:17 +04:00
void load_icons(const char* path, edelib::Config& conf);
bool read_desktop_file(const char* path, IconSettings& is);
2007-05-22 18:53:17 +04:00
void add_icon(DesktopIcon* ic);
void unfocus_all(void);
void select(DesktopIcon* ic);
void select_only(DesktopIcon* ic);
bool in_selection(const DesktopIcon* ic);
2007-05-23 16:43:50 +04:00
void select_in_area(void);
void select_noredraw(DesktopIcon* ic);
2007-05-22 18:53:17 +04:00
void move_selection(int x, int y, bool apply);
2007-05-23 16:43:50 +04:00
DesktopIcon* below_mouse(int x, int y);
void drop_source(const char* src, int x, int y);
2007-05-23 16:43:50 +04:00
2007-05-22 18:53:17 +04:00
public:
static void init(void);
static void shutdown(void);
static Desktop* instance(void);
2007-05-22 18:53:17 +04:00
Desktop();
~Desktop();
void update_workarea(void);
void read_config(void);
void save_config(void);
void set_wallpaper(const char* path, bool do_redraw = true);
void set_wallpaper(fltk::Image* im, bool do_redraw = true);
void set_bg_color(unsigned int c, bool do_redraw = true);
2007-05-22 18:53:17 +04:00
void create(void);
virtual void draw(void);
virtual int handle(int event);
};
#endif