ede/eiconman/eiconman.h
Sanel Zukan 530a815246 eiconman:
Implemented dialog for icon properties.
EDEBUG, EWARNING, EASSERT replaced with E_DEBUG, E_WARNING, E_ASSERT

ehelp:
Imported ehelp. It is meant for displaying ede help or some of
documented programs in the browser, no matter where help is installed.

Remanining thing is to be added in configure script so it can set correct
paths, when configure be written.

Documented ehelp.
2008-08-07 14:22:05 +00:00

177 lines
4.3 KiB
C++

/*
* $Id$
*
* Eiconman, desktop and icon manager
* Part of Equinox Desktop Environment (EDE).
* Copyright (c) 2000-2007 EDE Authors.
*
* This program is licensed under terms of the
* GNU General Public License version 2 or newer.
* See COPYING for details.
*/
#ifndef __EICONMAN_H__
#define __EICONMAN_H__
#ifdef USE_EDELIB_WINDOW
#include <edelib/Window.h>
#else
#include <FL/Fl_Window.h>
#include <FL/Fl_Double_Window.h>
#endif
#include <FL/Fl_Image.h>
#include <edelib/String.h>
#include <edelib/Resource.h>
#include <edelib/List.h>
#include <edelib/EdbusConnection.h>
#define EDAMAGE_CHILD_LABEL 0x10
#define EDAMAGE_OVERLAY 0x20
struct DesktopSettings {
int color; // background color
bool wp_use; // use wallpaper or not
};
struct GlobalIconSettings {
int label_background;
int label_foreground;
int label_fontsize;
int label_maxwidth;
bool label_transparent;
bool label_draw;
bool one_click_exec;
bool auto_arrange;
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
#define ICON_FACE_ONE 1 // use icon
#define ICON_FACE_TWO 2 // use icon2
/*
* 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
*/
struct IconSettings {
int x, y;
int type; // ICON_NORMAL, ICON_TRASH,...
bool cmd_is_url; // interpret cmd as url, like system:/,trash:/,$HOME
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
edelib::String full_path; // for tracking changes
};
// Selection overlay
struct SelectionOverlay {
int x, y, w, h;
bool show;
};
class Wallpaper;
class DesktopIcon;
class Fl_Menu_Button;
typedef edelib::list<DesktopIcon*> DesktopIconList;
typedef edelib::list<DesktopIcon*>::iterator DesktopIconListIter;
typedef edelib::list<edelib::String> StringList;
typedef edelib::list<edelib::String>::iterator StringListIter;
#ifdef USE_EDELIB_WINDOW
#define DESKTOP_WINDOW edelib::Window
#else
#define DESKTOP_WINDOW Fl_Window
#endif
class Desktop : public DESKTOP_WINDOW {
private:
static Desktop* pinstance;
int selection_x, selection_y;
bool moving;
bool do_dirwatch;
SelectionOverlay* selbox;
GlobalIconSettings gisett;
DesktopSettings* dsett;
Fl_Menu_Button* dmenu;
Wallpaper* wallpaper;
edelib::EdbusConnection* dbus;
DesktopIconList icons;
DesktopIconList selectionbuff;
edelib::String trash_path;
void init_internals(void);
void load_icons(const char* path);
void save_icons(void);
bool read_desktop_file(const char* path, IconSettings& is);
void add_icon(DesktopIcon* ic);
bool add_icon_pathed(const char* path, edelib::Resource* conf);
DesktopIcon* find_icon_pathed(const char* path);
bool remove_icon_pathed(const char* path);
bool update_icon_pathed(const char* path);
void unfocus_all(void);
void select(DesktopIcon* ic, bool do_redraw = true);
void select_only(DesktopIcon* ic);
bool in_selection(const DesktopIcon* ic);
void move_selection(int x, int y, bool apply);
void select_in_area(void);
void drop_source(const char* src, int src_len, int x, int y);
DesktopIcon* below_mouse(int px, int py);
public:
Desktop();
~Desktop();
virtual void show(void);
virtual void hide(void);
virtual void draw(void);
virtual int handle(int event);
static void init(void);
static void shutdown(void);
static Desktop* instance(void);
void read_config(void);
void update_workarea(void);
void area(int& X, int& Y, int& W, int& H) { X = x(); Y = y(); W = w(); H = h(); }
void set_bg_color(int c, bool do_redraw = true);
void notify_desktop_changed(void);
void dir_watch(const char* dir, const char* changed, int flags);
void dir_watch_on(void) { do_dirwatch = true; }
void dir_watch_off(void) { do_dirwatch = false; }
void execute(const char* cmd);
};
#endif