File: imaglist.h

package info (click to toggle)
wxwidgets3.0 3.0.5.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 120,464 kB
  • sloc: cpp: 896,633; makefile: 52,303; ansic: 21,971; sh: 5,713; python: 2,940; xml: 1,534; perl: 264; javascript: 33
file content (205 lines) | stat: -rw-r--r-- 7,818 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/////////////////////////////////////////////////////////////////////////////
// Name:        wx/msw/imaglist.h
// Purpose:     wxImageList class
// Author:      Julian Smart
// Modified by:
// Created:     01/02/97
// Copyright:   (c) Julian Smart
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////

#ifndef _WX_IMAGLIST_H_
#define _WX_IMAGLIST_H_

#include "wx/bitmap.h"

// Eventually we'll make this a reference-counted wxGDIObject. For
// now, the app must take care of ownership issues. That is, the
// image lists must be explicitly deleted after the control(s) that uses them
// is (are) deleted, or when the app exits.
class WXDLLIMPEXP_CORE wxImageList : public wxObject
{
public:
  /*
   * Public interface
   */

  wxImageList();

  // Creates an image list.
  // Specify the width and height of the images in the list,
  // whether there are masks associated with them (e.g. if creating images
  // from icons), and the initial size of the list.
  wxImageList(int width, int height, bool mask = true, int initialCount = 1)
  {
    Create(width, height, mask, initialCount);
  }
  virtual ~wxImageList();


  // Attributes
  ////////////////////////////////////////////////////////////////////////////

  // Returns the number of images in the image list.
  int GetImageCount() const;

  // Returns the size (same for all images) of the images in the list
  bool GetSize(int index, int &width, int &height) const;

  // Operations
  ////////////////////////////////////////////////////////////////////////////

  // Creates an image list
  // width, height specify the size of the images in the list (all the same).
  // mask specifies whether the images have masks or not.
  // initialNumber is the initial number of images to reserve.
  bool Create(int width, int height, bool mask = true, int initialNumber = 1);

  // Adds a bitmap, and optionally a mask bitmap.
  // Note that wxImageList creates *new* bitmaps, so you may delete
  // 'bitmap' and 'mask' after calling Add.
  int Add(const wxBitmap& bitmap, const wxBitmap& mask = wxNullBitmap);

  // Adds a bitmap, using the specified colour to create the mask bitmap
  // Note that wxImageList creates *new* bitmaps, so you may delete
  // 'bitmap' after calling Add.
  int Add(const wxBitmap& bitmap, const wxColour& maskColour);

  // Adds a bitmap and mask from an icon.
  int Add(const wxIcon& icon);

  // Replaces a bitmap, optionally passing a mask bitmap.
  // Note that wxImageList creates new bitmaps, so you may delete
  // 'bitmap' and 'mask' after calling Replace.
  bool Replace(int index, const wxBitmap& bitmap, const wxBitmap& mask = wxNullBitmap);

/* Not supported by Win95
  // Replacing a bitmap, using the specified colour to create the mask bitmap
  // Note that wxImageList creates new bitmaps, so you may delete
  // 'bitmap'.
  bool Replace(int index, const wxBitmap& bitmap, const wxColour& maskColour);
*/

  // Replaces a bitmap and mask from an icon.
  // You can delete 'icon' after calling Replace.
  bool Replace(int index, const wxIcon& icon);

  // Removes the image at the given index.
  bool Remove(int index);

  // Remove all images
  bool RemoveAll();

  // Draws the given image on a dc at the specified position.
  // If 'solidBackground' is true, Draw sets the image list background
  // colour to the background colour of the wxDC, to speed up
  // drawing by eliminating masked drawing where possible.
  bool Draw(int index, wxDC& dc, int x, int y,
            int flags = wxIMAGELIST_DRAW_NORMAL,
            bool solidBackground = false);

  // Get a bitmap
  wxBitmap GetBitmap(int index) const;

  // Get an icon
  wxIcon GetIcon(int index) const;

  // TODO: miscellaneous functionality
/*
  wxIcon *MakeIcon(int index);
  bool SetOverlayImage(int index, int overlayMask);

*/

  // TODO: Drag-and-drop related functionality.

#if 0
  // Creates a new drag image by combining the given image (typically a mouse cursor image)
  // with the current drag image.
  bool SetDragCursorImage(int index, const wxPoint& hotSpot);

  // If successful, returns a pointer to the temporary image list that is used for dragging;
  // otherwise, NULL.
  // dragPos: receives the current drag position.
  // hotSpot: receives the offset of the drag image relative to the drag position.
  static wxImageList *GetDragImageList(wxPoint& dragPos, wxPoint& hotSpot);

  // Call this function to begin dragging an image. This function creates a temporary image list
  // that is used for dragging. The image combines the specified image and its mask with the
  // current cursor. In response to subsequent mouse move messages, you can move the drag image
  // by using the DragMove member function. To end the drag operation, you can use the EndDrag
  // member function.
  bool BeginDrag(int index, const wxPoint& hotSpot);

  // Ends a drag operation.
  bool EndDrag();

  // Call this function to move the image that is being dragged during a drag-and-drop operation.
  // This function is typically called in response to a mouse move message. To begin a drag
  // operation, use the BeginDrag member function.
  static bool DragMove(const wxPoint& point);

  // During a drag operation, locks updates to the window specified by lockWindow and displays
  // the drag image at the position specified by point.
  // The coordinates are relative to the window's upper left corner, so you must compensate
  // for the widths of window elements, such as the border, title bar, and menu bar, when
  // specifying the coordinates.
  // If lockWindow is NULL, this function draws the image in the display context associated
  // with the desktop window, and coordinates are relative to the upper left corner of the screen.
  // This function locks all other updates to the given window during the drag operation.
  // If you need to do any drawing during a drag operation, such as highlighting the target
  // of a drag-and-drop operation, you can temporarily hide the dragged image by using the
  // wxImageList::DragLeave function.

  // lockWindow: pointer to the window that owns the drag image.
  // point:      position at which to display the drag image. Coordinates are relative to the
  //             upper left corner of the window (not the client area).

  static bool DragEnter( wxWindow *lockWindow, const wxPoint& point );

  // Unlocks the window specified by pWndLock and hides the drag image, allowing the
  // window to be updated.
  static bool DragLeave( wxWindow *lockWindow );

  /* Here's roughly how you'd use these functions if implemented in this Win95-like way:

  1) Starting to drag:

  wxImageList *dragImageList = new wxImageList(16, 16, true);
  dragImageList->Add(myDragImage); // Provide an image to combine with the current cursor
  dragImageList->BeginDrag(0, wxPoint(0, 0));
  wxShowCursor(false);        // wxShowCursor not yet implemented in wxWin
  myWindow->CaptureMouse();

  2) Dragging:

  // Called within mouse move event. Could also use dragImageList instead of assuming
  // these are static functions.
  // These two functions could possibly be combined into one, since DragEnter is
  // a bit obscure.
  wxImageList::DragMove(wxPoint(x, y));  // x, y are current cursor position
  wxImageList::DragEnter(NULL, wxPoint(x, y)); // NULL assumes dragging across whole screen

  3) Finishing dragging:

  dragImageList->EndDrag();
  myWindow->ReleaseMouse();
  wxShowCursor(true);
*/

#endif

  // Implementation
  ////////////////////////////////////////////////////////////////////////////

  // Returns the native image list handle
  WXHIMAGELIST GetHIMAGELIST() const { return m_hImageList; }

protected:
  WXHIMAGELIST m_hImageList;

  DECLARE_DYNAMIC_CLASS_NO_COPY(wxImageList)
};

#endif
    // _WX_IMAGLIST_H_