home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Programmierung / SOURCE.mdf / programm / windows / c / fldrvw / fldrview.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-27  |  15.2 KB  |  528 lines

  1. /********************************************************************/
  2. /*             DirView - Drag and drop directory viewer             */
  3. /*             Public Domain (P) 1992  Benjamin Cooley              */
  4. /*              dirview.h - DirView Main Include File               */
  5. /********************************************************************/
  6.  
  7. #ifndef _FLDRVIEW_H
  8. #define _FLDRVIEW_H
  9.  
  10. /* DirView modules */
  11. #include "tarrays.h"
  12. #include "fvrc.h"
  13.  
  14. #define DESCLEN (41)
  15. #define TITLELEN (81)
  16. #define FILELEN (13)
  17.  
  18. const TIconClass = __firstUserClass;
  19.  
  20. #define _STREAMDEF(classname)\
  21. _CLASSDEF(classname)\
  22. inline Ripstream operator >> ( Ripstream is, classname & cl )\
  23.     { return is >> (RTStreamable)cl; }\
  24. inline Ripstream operator >> ( Ripstream is, classname * & cl )\
  25.     { return is >> (RPvoid)cl; }\
  26. inline Ropstream operator << ( Ropstream os, classname & cl )\
  27.     { return os << (RTStreamable)cl; }\
  28. inline Ropstream operator << ( Ropstream os, classname * cl )\
  29.     { return os << (PTStreamable)cl; }
  30.  
  31. /********************************************************************/
  32. /*                             Variables                            */
  33. /********************************************************************/
  34.  
  35. _STREAMDEF(TMainView)
  36. _STREAMDEF(TFolderView)
  37. _STREAMDEF(TIconImage)
  38. _STREAMDEF(TIcon)
  39. _STREAMDEF(TFileIcon)
  40. _STREAMDEF(TDirIcon)
  41. _STREAMDEF(TProgIcon)
  42. _CLASSDEF(TIconList)
  43.  
  44. /* FolderView main window */
  45. extern PTMainView FolderView;
  46.  
  47. #define MAXFONTNAME (41)
  48. #define BORDERSIZE  (3)
  49. #define FILEBUFSIZE (0x7FFF)
  50. #define TEXTBUFLEN  (81)
  51.  
  52. /* Program global values */
  53. extern HINSTANCE hInstance;
  54. extern char ProgramName[];
  55. extern char TextBuf[];
  56. extern char FolderViewFileName[];
  57. extern char FolderViewPath[];
  58. extern char DefaultFolderInfoDir[];
  59. extern char FolderInfoPath[];
  60. extern char FolderInfoFileName[];
  61. extern char FolderInfoWildcard[];
  62. extern int FolderInfoFileCountPos;
  63. extern int FolderInfoFileCountLen;
  64. extern char ProfileSettings[];
  65. extern char ProfileDirectories[];
  66. extern char ProfileName[];
  67. extern char FileIconName[];
  68. extern char DirIconName[];
  69. extern char ProgIconName[];
  70. extern char BatchIconName[];
  71. extern char PifIconName[];
  72. extern int IconWidth, IconHeight, SmallIconWidth, SmallIconHeight;
  73. extern int IconSpaceWidth, IconSpaceHeight;
  74. extern int DescWidth, DescHeight, WrapDesc;
  75. extern int IconNameWidth, IconNameHeight;
  76. extern char FontName[MAXFONTNAME];
  77. extern int FontPointSize;
  78. extern HFONT Font;
  79. extern COLORREF TextColor, TextBkColor, SelectedTextColor, SelectedTextBkColor;
  80. extern COLORREF WindowColor;
  81. extern HBRUSH WindowBrush, SelectedBrush;
  82. extern int IconLeft, IconTop;
  83. extern HDC MemDC;
  84. extern HBITMAP MemBitMap;
  85. extern HFONT MemFont;
  86. extern HBRUSH MemBrush;
  87. extern int AllNameWidth, AllDateWidth, AllTimeWidth, AllSizeWidth,
  88.            AllAttribWidth, AllDescWidth;
  89. extern BOOL ShuttingDown;
  90. extern BOOL MouseDown;
  91. extern PTIcon MouseDownIcon;
  92. extern int MouseDownIconX, MouseDownIconY;
  93. extern BOOL Dragging;
  94. extern HCURSOR DragIconCursor, DragCursor;
  95.  
  96. /* DIB Bitmap structures */
  97. extern BITMAPINFO *bmi2;
  98. extern BITMAPINFOHEADER *bmih2;
  99. extern BITMAPINFO *bmi16;
  100. extern BITMAPINFOHEADER *bmih16;
  101.  
  102. /* Icon list */
  103. extern TIconList IconList;
  104.  
  105. /********************************************************************/
  106. /*                            Icon Class                            */
  107. /********************************************************************/
  108.  
  109. class _CLASSTYPE TIconImage : public TStreamable, public Sortable
  110. {
  111.  
  112.   public:
  113.  
  114.     friend class TIconList;
  115.  
  116.     TIconImage(Pchar Afilename, int Animage, HICON Anicon);
  117.     virtual ~TIconImage();
  118.  
  119.     Pchar FileName() { return filename; }
  120.     int Image() { return image; }
  121.     HBITMAP XORBitmap() { return xorbitmap; }
  122.     HBITMAP ANDBitmap() { return andbitmap; }
  123.     HBITMAP SmallXORBitmap() { return smallxorbitmap; }
  124.     HBITMAP SmallANDBitmap() { return smallandbitmap; }
  125.  
  126.   /* Object stuff */
  127.     virtual classType isA() const { return 0; }
  128.     virtual Pchar nameOf() const { return "IconImage"; }
  129.     virtual int isEqual(RCObject object) const
  130.       {
  131.         return !strcmp(filename, ((RCTIconImage)object).filename) &&
  132.                image == ((RCTIconImage)object).image;
  133.       }
  134.     virtual int isLessThan(RCObject object) const
  135.       {
  136.         return (strcmp(filename, ((RCTIconImage)object).filename) < 0) ||
  137.                (image < ((RCTIconImage)object).image);
  138.       }
  139.     virtual hashValueType hashValue() const { return 0; }
  140.     #pragma argsused
  141.     virtual void printOn(Rostream os) const {}
  142.  
  143.     static PTStreamable build()
  144.      { return new TIconImage(streamableInit); }
  145.  
  146.   protected:
  147.     Pchar filename;
  148.     int image;
  149.     HBITMAP xorbitmap;
  150.     HBITMAP andbitmap;
  151.     HBITMAP smallxorbitmap;
  152.     HBITMAP smallandbitmap;
  153.  
  154.     TIconImage(StreamableInit s)
  155.      { filename = NULL; image = 0;
  156.        xorbitmap = andbitmap = smallxorbitmap = smallandbitmap = NULL; }
  157.  
  158.     virtual Pvoid read(Ripstream is);
  159.     virtual void write(Ropstream os);
  160.  
  161.   private:
  162.       virtual const Pchar streamableName() const { return "IconImage"; }
  163. };
  164.  
  165. class _CLASSTYPE TIconList : public TkSortedArray
  166. {
  167.   public:
  168.     TIconList() : TkSortedArray(0, 0, 15) {}
  169.  
  170.     int IconImages() { return itemsInArray(); }
  171.  
  172.     PTIconImage GetIconImage(int index)
  173.      { return (PTIconImage)ptrAt(index); }
  174.  
  175.     PTIconImage FindIconImage(Pchar filename, int image);
  176.     void AddIconImage(PTIconImage iconimage);
  177.  
  178. };
  179.  
  180. #define ICON_FILE      (1)
  181. #define ICON_PROGRAM   (2)
  182. #define ICON_DIRECTORY (3)
  183.  
  184. #define IS_SELECTED (1)
  185. #define IS_FOCUSED  (2)
  186.  
  187. #define PAINTICON_ALL       (1)
  188. #define PAINTICON_REDRAW    (2)
  189. #define PAINTICON_DESC        (3)
  190. #define PAINTICON_FOCUS        (4)
  191.  
  192. class _CLASSTYPE TIcon : public TStreamable, public Sortable
  193. {
  194.  
  195.   public:
  196.  
  197.     TIcon(RTFolderView AFolderView, ffblk &Affblk);
  198.  
  199.     PTFolderView FolderView() { return folderview; }
  200.     void SetFolderView(PTFolderView newfolderview)
  201.       { folderview = newfolderview; }
  202.  
  203.     int PosX() { return rect.left; }
  204.     int PosY() { return rect.top; }
  205.     Pchar Name() { return name; }
  206.     Pchar Desc() { return desc; }
  207.     int Attrib() { return (int)attrib; }
  208.     int Date() { return date; }
  209.     int Time() { return time; }
  210.     long Size() { return size; }
  211.     
  212.     virtual int Type() = 0;
  213.     virtual PTIconImage GetIconImage() = 0;
  214.     HCURSOR CreateCursor(int hotspotx, int hotspoty);
  215.     BOOL ShouldUpdate(ffblk &affblk);
  216.     void PaintIcon(HDC PaintDC, int drawmode = PAINTICON_ALL);
  217.     void PaintInfo(HDC PaintDC, int drawmode = PAINTICON_ALL);
  218.     void Paint(HDC PaintDC, int drawmode = PAINTICON_ALL);
  219.     void RedrawIcon();
  220.     void SetRect(RECT &r)
  221.      { rect.left = r.left; rect.top = r.top;
  222.        rect.right = r.right; rect.bottom = r.bottom; textrect.left = -1; }
  223.     RECT *GetRect() { return ▭ }
  224.     BOOL PointOn(POINT p);
  225.     void SetState(int flags);
  226.     int GetState() { return state; }
  227.     void SetStateFlag(int flag, BOOL true)
  228.      { if (true) SetState(flag | state); else SetState(state & (~flag)); }
  229.     int GetStateFlag(int flag) { return (state & flag) != 0; }
  230.     virtual void Open() {}
  231.     virtual void Delete();
  232.     virtual void Move(Pchar to);
  233.     virtual void Copy(Pchar to);
  234.  
  235.     int SortOrder() const;
  236.     int View() const;
  237.  
  238.     static PTIcon NewIcon(RTFolderView AFolderView, ffblk &Affblk);
  239.  
  240.   /* Object stuff */
  241.     virtual classType isA() const { return TIconClass; }
  242.     virtual Pchar nameOf() const { return "Icon"; }
  243.     virtual int isEqual(RCObject object) const;
  244.     virtual int isLessThan(RCObject object) const;
  245.     virtual hashValueType hashValue() const { return 0; }
  246.     #pragma argsused
  247.     virtual void printOn(Rostream os) const {}
  248.  
  249.   protected:
  250.     PTFolderView folderview; /* folder view icon is in */
  251.     char attrib;       /* attribute */
  252.     int  time;         /* file time */
  253.     int  date;         /* file date (must be right after time) */
  254.     long size;         /* file size */
  255.     char name[FILELEN];/* file name */
  256.     PTIconImage icon;  /* icon for file */
  257.     char desc[DESCLEN];/* icon description */
  258.     RECT rect;           /* icon position */
  259.     int state;           /* state of icon */    
  260.  
  261.     RECT textrect;       /* text rectangle */    
  262.  
  263.     TIcon(StreamableInit s) {}
  264.  
  265.     void RedrawDescription();
  266.     void ToggleFocusRect();
  267.  
  268.     virtual Pvoid read(Ripstream is);
  269.     virtual void write(Ropstream os);
  270. };
  271.  
  272. class _CLASSTYPE TFileIcon : public TIcon
  273. {
  274.  
  275.   public:
  276.  
  277.     TFileIcon(RTFolderView AFolderView, ffblk &Affblk) :
  278.       TIcon(AFolderView, Affblk) {}
  279.  
  280.     virtual int Type() { return ICON_FILE; }
  281.     virtual PTIconImage GetIconImage();
  282.     virtual void Open();
  283.  
  284.     static PTStreamable build()
  285.      { return new TFileIcon(streamableInit); }
  286.  
  287.   protected:
  288.     TFileIcon(StreamableInit s) : TIcon(s) {}
  289.  
  290.   private:
  291.       const Pchar streamableName() const { return "FileIcon"; }
  292. };
  293.  
  294. class _CLASSTYPE TDirIcon : public TIcon
  295. {
  296.  
  297.   public:
  298.  
  299.     TDirIcon(RTFolderView AFolderView, ffblk &Affblk) :
  300.       TIcon(AFolderView, Affblk) {}
  301.  
  302.     virtual int Type() { return ICON_DIRECTORY; }
  303.     virtual PTIconImage GetIconImage();
  304.     virtual void Open();
  305.  
  306.     static PTStreamable build()
  307.      { return new TDirIcon(streamableInit); }
  308.  
  309.   protected:
  310.     TDirIcon(StreamableInit s) : TIcon(s) {}
  311.  
  312.   private:
  313.       const Pchar streamableName() const { return "DirIcon"; }
  314. };
  315.  
  316. class _CLASSTYPE TProgIcon : public TIcon
  317. {
  318.  
  319.   public:
  320.  
  321.     TProgIcon(RTFolderView AFolderView, ffblk &Affblk) :
  322.       TIcon(AFolderView, Affblk) {}
  323.  
  324.     virtual int Type() { return ICON_PROGRAM; }
  325.     virtual PTIconImage GetIconImage();
  326.     virtual void Open();
  327.  
  328.     static PTStreamable build()
  329.      { return new TProgIcon(streamableInit); }
  330.  
  331.   protected:
  332.     TProgIcon(StreamableInit s) : TIcon(s) {}
  333.  
  334.   private:
  335.       const Pchar streamableName() const { return "ProgIcon"; }
  336. };
  337.  
  338. /********************************************************************/
  339. /*                         FolderView Class                         */
  340. /********************************************************************/
  341.  
  342. #define FOLDERVIEW_DRIVE     (1)
  343. #define FOLDERVIEW_DIRECTORY (2)
  344.  
  345. #define SORT_BYNAME (1)
  346. #define SORT_BYEXT  (2)
  347. #define SORT_BYDATE (3)
  348. #define SORT_BYSIZE (4)
  349. #define SORT_BYDESC (5)
  350.  
  351. #define VIEW_ICON (1)
  352. #define VIEW_NAME (2)
  353. #define VIEW_ALL  (3)
  354.  
  355. #define DISPLAY_NAME   (1)
  356. #define DISPLAY_DESC   (2)
  357. #define DISPLAY_DATE   (4)
  358. #define DISPLAY_TIME   (8)
  359. #define DISPLAY_SIZE   (16)
  360. #define DISPLAY_ATTRIB (32)
  361.  
  362. #define SELECT_SINGLE   (1)
  363. #define SELECT_RANGE    (2)
  364. #define SELECT_MULTIPLE (3)
  365.  
  366. #define ADJACENTICON_LEFT  (1)
  367. #define ADJACENTICON_RIGHT (2)
  368. #define ADJACENTICON_UP    (3)
  369. #define ADJACENTICON_DOWN  (4)
  370.  
  371. /**********************************/
  372. /* TMainView - Main folder window */
  373. /**********************************/
  374.  
  375. class _CLASSTYPE TMainView : public TMDIFrame
  376. {
  377.  
  378. public:
  379.     TMainView(Pchar APath);
  380.     virtual ~TMainView();
  381.  
  382.     virtual void ShutDownWindow();
  383.  
  384.     PTIcon GetAllIcon(int index) { return &(RTIcon)((*alliconsarray)[index]); }
  385.     int NumAllIcons() { return (alliconsarray)->itemsInArray(); }
  386.  
  387.     Pchar Title() { return title; }
  388.     Pchar Directory() { return dir; }
  389.     Pchar WildCard() { return wildcard; }
  390.     PTFolderView OtherView() { return otherview; }
  391.  
  392.     PTMainView MainView() { return this; }
  393.     void SaveWindow();
  394.     int FindAllIconIndex(Pchar name);
  395.     PTIcon FindAllIcon(Pchar name);
  396.     PTFolderView GetFileView(Pchar name, int attrib);
  397.     void UpdateAllIcons(PTFolderView newview = NULL);
  398.     void ArrangeAllIcons();
  399.     void UpdateMenu(PTFolderView view);
  400.     void FocusIcon(PTIcon icon);
  401.     PTIcon FocusedIcon() { return focusedicon; }
  402.  
  403.     PTkArray *AllIconsPtr() { return &alliconsarray; }
  404.  
  405.     static PTStreamable build() { return new TMainView(streamableInit); }
  406.     
  407. protected:
  408.     PTkArray alliconsarray;
  409.     PTIcon focusedicon;
  410.  
  411.     char title[TITLELEN];
  412.     char dir[MAXPATH];
  413.     char wildcard[MAXPATH];
  414.  
  415.     PTFolderView otherview;
  416.  
  417.     TMainView(StreamableInit s);
  418.     virtual Pvoid read(Ripstream is);
  419.     virtual void write(Ropstream os); 
  420.  
  421.     virtual void SetupWindow();
  422.     virtual void WMCommand(RTMessage Msg) = [WM_FIRST + WM_COMMAND];
  423.     int ViewType();
  424.     virtual Pchar GetClassName();
  425.     virtual void GetWindowClass(WNDCLASS &AWndClass);
  426.  
  427.   private:
  428.     virtual const Pchar streamableName() const { return "MainView"; }
  429. };
  430.  
  431. /**********************************/
  432. /* TFolderView - Folder subwindow */
  433. /**********************************/
  434.  
  435. class _CLASSTYPE TFolderView : public TWindow
  436. {
  437.  
  438. public:
  439.     void InitFolderView();
  440.     TFolderView(PTMainView AMainView, Pchar ATitle, Pchar AWildCard);
  441.     virtual ~TFolderView();
  442.  
  443.     virtual void ShutDownWindow();
  444.  
  445.     PTMainView MainView() { return mainview; }
  446.     void SetMainView(PTMainView newmainview);
  447.  
  448.     Pchar Title() { return title; }
  449.     Pchar Wildcard() { return wildcard; }
  450.  
  451.     PTIcon GetIcon(int index) { return &(RTIcon)((*icons)[index]); }
  452.     PTIcon GetAllIcon(int index) { return &(RTIcon)((**allicons)[index]); }
  453.     int NumIcons() { return icons->itemsInArray(); }
  454.     int NumAllIcons() { return (*allicons)->itemsInArray(); }
  455.     void AddIcon(PTIcon icon);
  456.     void DetachIcon(PTIcon icon);
  457.     void DeleteIcon(PTIcon icon);
  458.  
  459.     HDC GetDC();
  460.     void ReleaseDC(HDC dc);
  461.  
  462.     void SaveWindow();
  463.     virtual BOOL InvalidRect(RECT &r) { return FALSE; }
  464.     void ArrangeIcons();
  465.     int FindIconIndex(Pchar name);
  466.     PTIcon FindIcon(Pchar name);
  467.     void SetSortOrder(int neworder);
  468.     int GetSortOrder() { return sortorder; }
  469.     void SetView(int newview);
  470.     int GetView() { return view; }
  471.     void SetDisplayItems(int newdisplayitems);
  472.     int GetDisplayItems()
  473.      { if (view == VIEW_ICON) return DISPLAY_DESC;
  474.        else if (view == VIEW_NAME) return DISPLAY_DESC;
  475.        else return displayitems; }
  476.     PTIcon OnIcon(POINT p);
  477.     int GetIconNumber(PTIcon icon);
  478.     int GetAdjacentIcon(int startnum, int dir);
  479.     void ScrollToIcon(PTIcon icon);
  480.     void FocusIcon(PTIcon icon) { mainview->FocusIcon(icon); }
  481.     PTIcon FocusedIcon() { return mainview->FocusedIcon(); }
  482.     void MenuCommand(WORD command);
  483.  
  484.     void RedrawIcon(PTIcon icon);
  485.     void SelectIcons(PTIcon selicon, int mode);
  486.     void SelectIcon(PTIcon icon);
  487.     void DeselectIcon(PTIcon icon);
  488.     void ToggleIconSelection(PTIcon icon);
  489.     BOOL WildcardMatch(Pchar name, int attrib);
  490.  
  491.     static PTStreamable build() { return new TFolderView(streamableInit); }
  492.  
  493. protected:
  494.     PTMainView mainview;
  495.     char title[TITLELEN];
  496.     char wildcard[MAXPATH];
  497.     PTkArray icons;
  498.     PTkArray *allicons;
  499.  
  500.     int sortorder;        /* Icon display order */
  501.     int view;           /* Icon view */
  502.     int displayitems;     /* Items to display in VIEW_ALL mode */
  503.  
  504.     virtual void SetupWindow();
  505.     virtual void Paint(HDC PaintDC, PAINTSTRUCT &PaintInfo);
  506.     virtual Pchar GetClassName();
  507.     virtual void GetWindowClass(WNDCLASS _FAR &AWndClass);
  508.     virtual void WMKeyDown(RTMessage Msg) = [WM_FIRST + WM_KEYDOWN];
  509.     virtual void WMSize(RTMessage Msg) = [WM_FIRST + WM_SIZE];
  510.     virtual void WMLButtonDown(RTMessage Msg) = [WM_FIRST + WM_LBUTTONDOWN];
  511.     virtual void WMMouseMove(RTMessage Msg) = [WM_FIRST + WM_MOUSEMOVE];
  512.     virtual void WMLButtonUp(RTMessage Msg) = [WM_FIRST + WM_LBUTTONUP];
  513.     virtual void WMLButtonDblClk(RTMessage Msg) = [WM_FIRST + WM_LBUTTONDBLCLK];
  514.     virtual void WMMDIActivate(RTMessage Msg) = [WM_FIRST + WM_MDIACTIVATE];
  515.  
  516.     void SetScroller();
  517.  
  518.     TFolderView(StreamableInit s);
  519.     virtual Pvoid read(Ripstream is);
  520.     virtual void write(Ropstream os); 
  521.  
  522. private:
  523.     HFONT oldfont;
  524.  
  525.     virtual const Pchar streamableName() const { return "FolderView"; }
  526. };
  527.  
  528. #endif