| 1 | ///////////////////////////////////////////////////////////////////////////// |
| 2 | // Name: wx/palmos/imaglist.h |
| 3 | // Purpose: wxImageList class |
| 4 | // Author: William Osborne - minimal working wxPalmOS port |
| 5 | // Modified by: |
| 6 | // Created: 10/13/04 |
| 7 | // RCS-ID: $Id$ |
| 8 | // Copyright: (c) William Osborne |
| 9 | // Licence: wxWindows licence |
| 10 | ///////////////////////////////////////////////////////////////////////////// |
| 11 | |
| 12 | #ifndef _WX_IMAGLIST_H_ |
| 13 | #define _WX_IMAGLIST_H_ |
| 14 | |
| 15 | #include "wx/bitmap.h" |
| 16 | |
| 17 | /* |
| 18 | * wxImageList is used for wxListCtrl, wxTreeCtrl. These controls refer to |
| 19 | * images for their items by an index into an image list. |
| 20 | * A wxImageList is capable of creating images with optional masks from |
| 21 | * a variety of sources - a single bitmap plus a colour to indicate the mask, |
| 22 | * two bitmaps, or an icon. |
| 23 | * |
| 24 | * Image lists can also create and draw images used for drag and drop functionality. |
| 25 | * This is not yet implemented in wxImageList. We need to discuss a generic API |
| 26 | * for doing drag and drop and see whether it ties in with the Win95 view of it. |
| 27 | * See below for candidate functions and an explanation of how they might be |
| 28 | * used. |
| 29 | */ |
| 30 | |
| 31 | // Flags for Draw |
| 32 | #define wxIMAGELIST_DRAW_NORMAL 0x0001 |
| 33 | #define wxIMAGELIST_DRAW_TRANSPARENT 0x0002 |
| 34 | #define wxIMAGELIST_DRAW_SELECTED 0x0004 |
| 35 | #define wxIMAGELIST_DRAW_FOCUSED 0x0008 |
| 36 | |
| 37 | // Flag values for Set/GetImageList |
| 38 | enum { |
| 39 | wxIMAGE_LIST_NORMAL, // Normal icons |
| 40 | wxIMAGE_LIST_SMALL, // Small icons |
| 41 | wxIMAGE_LIST_STATE // State icons: unimplemented (see WIN32 documentation) |
| 42 | }; |
| 43 | |
| 44 | // Eventually we'll make this a reference-counted wxGDIObject. For |
| 45 | // now, the app must take care of ownership issues. That is, the |
| 46 | // image lists must be explicitly deleted after the control(s) that uses them |
| 47 | // is (are) deleted, or when the app exits. |
| 48 | class WXDLLEXPORT wxImageList : public wxObject |
| 49 | { |
| 50 | public: |
| 51 | /* |
| 52 | * Public interface |
| 53 | */ |
| 54 | |
| 55 | wxImageList(); |
| 56 | |
| 57 | // Creates an image list. |
| 58 | // Specify the width and height of the images in the list, |
| 59 | // whether there are masks associated with them (e.g. if creating images |
| 60 | // from icons), and the initial size of the list. |
| 61 | wxImageList(int width, int height, bool mask = TRUE, int initialCount = 1) |
| 62 | { |
| 63 | Create(width, height, mask, initialCount); |
| 64 | } |
| 65 | virtual ~wxImageList(); |
| 66 | |
| 67 | |
| 68 | // Attributes |
| 69 | //////////////////////////////////////////////////////////////////////////// |
| 70 | |
| 71 | // Returns the number of images in the image list. |
| 72 | int GetImageCount() const; |
| 73 | |
| 74 | // Returns the size (same for all images) of the images in the list |
| 75 | bool GetSize(int index, int &width, int &height) const; |
| 76 | |
| 77 | // Operations |
| 78 | //////////////////////////////////////////////////////////////////////////// |
| 79 | |
| 80 | // Creates an image list |
| 81 | // width, height specify the size of the images in the list (all the same). |
| 82 | // mask specifies whether the images have masks or not. |
| 83 | // initialNumber is the initial number of images to reserve. |
| 84 | bool Create(int width, int height, bool mask = TRUE, int initialNumber = 1); |
| 85 | |
| 86 | // Adds a bitmap, and optionally a mask bitmap. |
| 87 | // Note that wxImageList creates *new* bitmaps, so you may delete |
| 88 | // 'bitmap' and 'mask' after calling Add. |
| 89 | int Add(const wxBitmap& bitmap, const wxBitmap& mask = wxNullBitmap); |
| 90 | |
| 91 | // Adds a bitmap, using the specified colour to create the mask bitmap |
| 92 | // Note that wxImageList creates *new* bitmaps, so you may delete |
| 93 | // 'bitmap' after calling Add. |
| 94 | int Add(const wxBitmap& bitmap, const wxColour& maskColour); |
| 95 | |
| 96 | // Adds a bitmap and mask from an icon. |
| 97 | int Add(const wxIcon& icon); |
| 98 | |
| 99 | // Replaces a bitmap, optionally passing a mask bitmap. |
| 100 | // Note that wxImageList creates new bitmaps, so you may delete |
| 101 | // 'bitmap' and 'mask' after calling Replace. |
| 102 | bool Replace(int index, const wxBitmap& bitmap, const wxBitmap& mask = wxNullBitmap); |
| 103 | |
| 104 | /* Not supported by Win95 |
| 105 | // Replacing a bitmap, using the specified colour to create the mask bitmap |
| 106 | // Note that wxImageList creates new bitmaps, so you may delete |
| 107 | // 'bitmap'. |
| 108 | bool Replace(int index, const wxBitmap& bitmap, const wxColour& maskColour); |
| 109 | */ |
| 110 | |
| 111 | // Replaces a bitmap and mask from an icon. |
| 112 | // You can delete 'icon' after calling Replace. |
| 113 | bool Replace(int index, const wxIcon& icon); |
| 114 | |
| 115 | // Removes the image at the given index. |
| 116 | bool Remove(int index); |
| 117 | |
| 118 | // Remove all images |
| 119 | bool RemoveAll(); |
| 120 | |
| 121 | // Draws the given image on a dc at the specified position. |
| 122 | // If 'solidBackground' is TRUE, Draw sets the image list background |
| 123 | // colour to the background colour of the wxDC, to speed up |
| 124 | // drawing by eliminating masked drawing where possible. |
| 125 | bool Draw(int index, wxDC& dc, int x, int y, |
| 126 | int flags = wxIMAGELIST_DRAW_NORMAL, |
| 127 | bool solidBackground = FALSE); |
| 128 | |
| 129 | // TODO: miscellaneous functionality |
| 130 | /* |
| 131 | wxIcon *MakeIcon(int index); |
| 132 | bool SetOverlayImage(int index, int overlayMask); |
| 133 | |
| 134 | */ |
| 135 | |
| 136 | // TODO: Drag-and-drop related functionality. |
| 137 | |
| 138 | #if 0 |
| 139 | // Creates a new drag image by combining the given image (typically a mouse cursor image) |
| 140 | // with the current drag image. |
| 141 | bool SetDragCursorImage(int index, const wxPoint& hotSpot); |
| 142 | |
| 143 | // If successful, returns a pointer to the temporary image list that is used for dragging; |
| 144 | // otherwise, NULL. |
| 145 | // dragPos: receives the current drag position. |
| 146 | // hotSpot: receives the offset of the drag image relative to the drag position. |
| 147 | static wxImageList *GetDragImageList(wxPoint& dragPos, wxPoint& hotSpot); |
| 148 | |
| 149 | // Call this function to begin dragging an image. This function creates a temporary image list |
| 150 | // that is used for dragging. The image combines the specified image and its mask with the |
| 151 | // current cursor. In response to subsequent mouse move messages, you can move the drag image |
| 152 | // by using the DragMove member function. To end the drag operation, you can use the EndDrag |
| 153 | // member function. |
| 154 | bool BeginDrag(int index, const wxPoint& hotSpot); |
| 155 | |
| 156 | // Ends a drag operation. |
| 157 | bool EndDrag(); |
| 158 | |
| 159 | // Call this function to move the image that is being dragged during a drag-and-drop operation. |
| 160 | // This function is typically called in response to a mouse move message. To begin a drag |
| 161 | // operation, use the BeginDrag member function. |
| 162 | static bool DragMove(const wxPoint& point); |
| 163 | |
| 164 | // During a drag operation, locks updates to the window specified by lockWindow and displays |
| 165 | // the drag image at the position specified by point. |
| 166 | // The coordinates are relative to the window's upper left corner, so you must compensate |
| 167 | // for the widths of window elements, such as the border, title bar, and menu bar, when |
| 168 | // specifying the coordinates. |
| 169 | // If lockWindow is NULL, this function draws the image in the display context associated |
| 170 | // with the desktop window, and coordinates are relative to the upper left corner of the screen. |
| 171 | // This function locks all other updates to the given window during the drag operation. |
| 172 | // If you need to do any drawing during a drag operation, such as highlighting the target |
| 173 | // of a drag-and-drop operation, you can temporarily hide the dragged image by using the |
| 174 | // wxImageList::DragLeave function. |
| 175 | |
| 176 | // lockWindow: pointer to the window that owns the drag image. |
| 177 | // point: position at which to display the drag image. Coordinates are relative to the |
| 178 | // upper left corner of the window (not the client area). |
| 179 | |
| 180 | static bool DragEnter( wxWindow *lockWindow, const wxPoint& point ); |
| 181 | |
| 182 | // Unlocks the window specified by pWndLock and hides the drag image, allowing the |
| 183 | // window to be updated. |
| 184 | static bool DragLeave( wxWindow *lockWindow ); |
| 185 | |
| 186 | /* Here's roughly how you'd use these functions if implemented in this Win95-like way: |
| 187 | |
| 188 | 1) Starting to drag: |
| 189 | |
| 190 | wxImageList *dragImageList = new wxImageList(16, 16, TRUE); |
| 191 | dragImageList->Add(myDragImage); // Provide an image to combine with the current cursor |
| 192 | dragImageList->BeginDrag(0, wxPoint(0, 0)); |
| 193 | wxShowCursor(FALSE); // wxShowCursor not yet implemented in wxWin |
| 194 | myWindow->CaptureMouse(); |
| 195 | |
| 196 | 2) Dragging: |
| 197 | |
| 198 | // Called within mouse move event. Could also use dragImageList instead of assuming |
| 199 | // these are static functions. |
| 200 | // These two functions could possibly be combined into one, since DragEnter is |
| 201 | // a bit obscure. |
| 202 | wxImageList::DragMove(wxPoint(x, y)); // x, y are current cursor position |
| 203 | wxImageList::DragEnter(NULL, wxPoint(x, y)); // NULL assumes dragging across whole screen |
| 204 | |
| 205 | 3) Finishing dragging: |
| 206 | |
| 207 | dragImageList->EndDrag(); |
| 208 | myWindow->ReleaseMouse(); |
| 209 | wxShowCursor(TRUE); |
| 210 | */ |
| 211 | |
| 212 | #endif |
| 213 | |
| 214 | // Implementation |
| 215 | //////////////////////////////////////////////////////////////////////////// |
| 216 | |
| 217 | // Returns the native image list handle |
| 218 | WXHIMAGELIST GetHIMAGELIST() const { return m_hImageList; } |
| 219 | |
| 220 | protected: |
| 221 | WXHIMAGELIST m_hImageList; |
| 222 | |
| 223 | DECLARE_DYNAMIC_CLASS(wxImageList) |
| 224 | }; |
| 225 | |
| 226 | #endif |
| 227 | // _WX_IMAGLIST_H_ |