Separate mydocs and recent docs resources
[reactos.git] / reactos / subsys / system / explorer / globals.h
index d5339cc..a75549e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003 Martin Fuchs
+ * Copyright 2003, 2004 Martin Fuchs
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  //
 
 
+#include "utility/xmlstorage.h"
+
+using namespace XMLStorage;
+
+#include "taskbar/favorites.h"
+
+
  /// management of file types
 struct FileTypeInfo {
        String  _classname;
@@ -73,6 +80,14 @@ enum ICON_ID {
        ICID_NETWORK,
        ICID_COMPUTER,
        ICID_LOGOFF,
+    ICID_SHUTDOWN,
+       ICID_BOOKMARK,
+    ICID_MINIMIZE,
+    ICID_CONTROLPAN,
+    ICID_DESKSETTING,
+    ICID_NETCONNS,
+    ICID_ADMINISTRATION,
+    ICID_RECENT,
 
        ICID_DYNAMIC
 };
@@ -87,8 +102,10 @@ struct Icon {
 
        void    draw(HDC hdc, int x, int y, int cx, int cy, COLORREF bk_color, HBRUSH bk_brush) const;
        HBITMAP create_bitmap(COLORREF bk_color, HBRUSH hbrBkgnd, HDC hdc_wnd) const;
+       int             add_to_imagelist(HIMAGELIST himl, HDC hdc_wnd, COLORREF bk_color=GetSysColor(COLOR_WINDOW), HBRUSH bk_brush=GetSysColorBrush(COLOR_WINDOW)) const;
 
        int             get_sysiml_idx() const {return _itype==IT_SYSCACHE? _sys_idx: -1;}
+       HICON   get_hicon() const {return _itype!=IT_SYSCACHE? _hicon: 0;}
 
        bool    destroy() {if (_itype == IT_DYNAMIC) {DestroyIcon(_hicon); return true;} else return false;}
 
@@ -105,19 +122,20 @@ struct SysCacheIcon : public Icon {
 };
 
 struct IconCache {
-       IconCache() : _himlSys(0) {}
+       IconCache() : _himlSys_small(0) {}
 
        void    init();
 
-       const Icon&     extract(const String& path);
-       const Icon&     extract(LPCTSTR path, int idx);
-       const Icon&     extract(IExtractIcon* pExtract, LPCTSTR path, int idx);
+       const Icon&     extract(LPCTSTR path, ICONCACHE_FLAGS flags=ICF_NORMAL);
+       const Icon&     extract(LPCTSTR path, int idx, ICONCACHE_FLAGS flags=ICF_HICON);
+       const Icon&     extract(IExtractIcon* pExtract, LPCTSTR path, int idx, ICONCACHE_FLAGS flags=ICF_HICON);
 
        const Icon&     add(HICON hIcon, ICON_TYPE type=IT_DYNAMIC);
        const Icon&     add(int sys_idx/*, ICON_TYPE type=IT_SYSCACHE*/);
 
        const Icon&     get_icon(int icon_id);
-       HIMAGELIST get_sys_imagelist() const {return _himlSys;}
+
+       HIMAGELIST get_sys_imagelist() const {return _himlSys_small;}
 
        void    free_icon(int icon_id);
 
@@ -127,19 +145,31 @@ protected:
        typedef map<int, Icon> IconMap;
        IconMap _icons;
 
-       typedef map<String, ICON_ID> PathMap;
-       PathMap _pathMap;
+       typedef pair<String,int/*ICONCACHE_FLAGS*/> CacheKey;
+       typedef map<CacheKey, ICON_ID> PathCacheMap;
+       PathCacheMap _pathCache;
 
-       typedef pair<String, int> CachePair;
-       typedef map<CachePair, ICON_ID> PathIdxMap;
-       PathIdxMap _pathIdxMap;
+       typedef pair<String,pair<int,int/*ICONCACHE_FLAGS*/> > IdxCacheKey;
+       typedef map<IdxCacheKey, ICON_ID> IdxCacheMap;
+       IdxCacheMap _idxCache;
 
-       HIMAGELIST _himlSys;
+       HIMAGELIST _himlSys_small;
 };
 
 
+#define        ICON_SIZE_X             GetSystemMetrics(large_icons? SM_CXICON: SM_CXSMICON)
+#define        ICON_SIZE_Y             GetSystemMetrics(large_icons? SM_CYICON: SM_CYSMICON)
+
+
  /// create a bitmap from an icon
-extern HBITMAP create_bitmap_from_icon(HICON hIcon, HBRUSH hbrush_bkgnd, HDC hdc_wnd);
+extern HBITMAP create_bitmap_from_icon(HICON hIcon, HBRUSH hbrush_bkgnd, HDC hdc_wnd/*, bool large_icons*/);
+
+ /// add icon with alpha channel to imagelist using the specified background color
+extern int ImageList_AddAlphaIcon(HIMAGELIST himl, HICON hIcon, HBRUSH hbrush_bkgnd, HDC hdc_wnd);
+
+ /// retrieve icon from window
+extern HICON get_window_icon_small(HWND hwnd);
+extern HICON get_window_icon_big(HWND hwnd, bool allow_from_class=true);
 
 
  /// desktop management
@@ -177,9 +207,13 @@ protected:
 
 #else
 
+typedef pair<HWND, DWORD> MinimizeStruct;
+
 struct Desktop
 {
        set<HWND> _windows;
+       WindowHandle _hwndForeground;
+       list<MinimizeStruct> _minimized;
 };
 typedef Desktop DesktopRef;
 
@@ -195,8 +229,11 @@ struct Desktops : public vector<DesktopRef>
 
        void    init();
        void    SwitchToDesktop(int idx);
+       void    ToggleMinimize();
 
+#ifdef _USE_HDESK
        DesktopRef& get_current_Desktop() {return (*this)[_current_desktop];}
+#endif
 
        int             _current_desktop;
 };
@@ -207,14 +244,23 @@ extern struct ExplorerGlobals
 {
        ExplorerGlobals();
 
-       void            init(HINSTANCE hInstance);
+       void    init(HINSTANCE hInstance);
+
+       void    read_persistent();
+       void    write_persistent();
+
+       XMLPos  get_cfg();
+       XMLPos  get_cfg(const char* path);
 
        HINSTANCE       _hInstance;
-       ATOM            _hframeClass;
        UINT            _cfStrFName;
+
+#ifndef ROSSHELL
+       ATOM            _hframeClass;
        HWND            _hMainWnd;
-       bool            _prescan_nodes;
        bool            _desktop_mode;
+       bool            _prescan_nodes;
+#endif
 
        FILE*           _log;
 
@@ -227,8 +273,16 @@ extern struct ExplorerGlobals
 
        HWND            _hwndDesktopBar;
        HWND            _hwndShellView;
+       HWND            _hwndDesktop;
 
        Desktops        _desktops;
+
+       XMLDoc          _cfg;
+       String          _cfg_dir;
+       String          _cfg_path;
+
+       Favorites       _favorites;
+       String          _favorites_path;
 } g_Globals;