ASPiK SDK
cdatabrowser.h
1 // This file is part of VSTGUI. It is subject to the license terms
2 // in the LICENSE file found in the top-level directory of this
3 // distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
4 
5 #ifndef __cdatabrowser__
6 #define __cdatabrowser__
7 
8 #include "vstguifwd.h"
9 #include "cscrollview.h"
10 #include "cfont.h"
11 #include "ccolor.h"
12 #include "cstring.h"
13 #include <vector>
14 
15 namespace VSTGUI {
16 
17 //-----------------------------------------------------------------------------
18 // IDataBrowserDelegate Declaration
20 //-----------------------------------------------------------------------------------------------
22 {
23 public:
25  virtual int32_t dbGetNumRows (CDataBrowser* browser) = 0;
27  virtual int32_t dbGetNumColumns (CDataBrowser* browser) = 0;
28  virtual bool dbGetColumnDescription (int32_t index, CCoord& minWidth, CCoord& maxWidth, CDataBrowser* browser) { return false; }
29  virtual CCoord dbGetCurrentColumnWidth (int32_t index, CDataBrowser* browser) = 0;
30  virtual void dbSetCurrentColumnWidth (int32_t index, const CCoord& width, CDataBrowser* browser) {}
31  virtual CCoord dbGetRowHeight (CDataBrowser* browser) = 0;
32  virtual CCoord dbGetHeaderHeight (CDataBrowser* browser) { return dbGetRowHeight (browser); }
33  virtual bool dbGetLineWidthAndColor (CCoord& width, CColor& color, CDataBrowser* browser) { return false; }
34  virtual void dbAttached (CDataBrowser* browser) {}
35  virtual void dbRemoved (CDataBrowser* browser) {}
36 
39  virtual void dbDrawHeader (CDrawContext* context, const CRect& size, int32_t column, int32_t flags, CDataBrowser* browser) = 0;
41  virtual void dbDrawCell (CDrawContext* context, const CRect& size, int32_t row, int32_t column, int32_t flags, CDataBrowser* browser) = 0;
42 
45  virtual CMouseEventResult dbOnMouseDown (const CPoint& where, const CButtonState& buttons, int32_t row, int32_t column, CDataBrowser* browser) { return kMouseDownEventHandledButDontNeedMovedOrUpEvents; }
47  virtual CMouseEventResult dbOnMouseMoved (const CPoint& where, const CButtonState& buttons, int32_t row, int32_t column, CDataBrowser* browser) { return kMouseEventNotHandled; }
48  virtual CMouseEventResult dbOnMouseUp (const CPoint& where, const CButtonState& buttons, int32_t row, int32_t column, CDataBrowser* browser) { return kMouseEventNotHandled; }
49 
52  virtual void dbOnDragEnterBrowser (IDataPackage* drag, CDataBrowser* browser) {}
54  virtual void dbOnDragExitBrowser (IDataPackage* drag, CDataBrowser* browser) {}
55  virtual void dbOnDragEnterCell (int32_t row, int32_t column, const CPoint& where, IDataPackage* drag, CDataBrowser* browser) {}
56  virtual void dbOnDragMoveInCell (int32_t row, int32_t column, const CPoint& where, IDataPackage* drag, CDataBrowser* browser) {}
57  virtual void dbOnDragExitCell (int32_t row, int32_t column, IDataPackage* drag, CDataBrowser* browser) {}
58  virtual bool dbOnDropInCell (int32_t row, int32_t column, const CPoint& where, IDataPackage* drag, CDataBrowser* browser) { return false; }
60 
62  virtual void dbSelectionChanged (CDataBrowser* browser) {}
64 
67  virtual void dbCellTextChanged (int32_t row, int32_t column, UTF8StringPtr newText, CDataBrowser* browser) {}
69  virtual void dbCellSetupTextEdit (int32_t row, int32_t column, CTextEdit* textEditControl, CDataBrowser* browser) {}
70 
71 
73  virtual int32_t dbOnKeyDown (const VstKeyCode& key, CDataBrowser* browser) { return -1; }
76 
77  enum {
78  kRowSelected = 1 << 1
79  };
80 };
81 
82 // forward private internal views
83 class CDataBrowserView;
84 class CDataBrowserHeader;
85 
86 //-----------------------------------------------------------------------------
87 // CDataBrowser Declaration
90 //-----------------------------------------------------------------------------------------------
91 class CDataBrowser : public CScrollView
92 {
93 protected:
94  enum
95  {
96  kDrawRowLinesFlag = kLastScrollViewStyleFlag,
97  kDrawColumnLinesFlag,
98  kDrawHeaderFlag,
99  kMultiSelectionStyleFlag
100  };
101 
102 public:
103  CDataBrowser (const CRect& size, IDataBrowserDelegate* db, int32_t style = 0, CCoord scrollbarWidth = 16, CBitmap* pBackground = nullptr);
104 
105  enum CDataBrowserStyle
106  {
107  // see CScrollView for more styles
108  kDrawRowLines = 1 << kDrawRowLinesFlag,
109  kDrawColumnLines = 1 << kDrawColumnLinesFlag,
110  kDrawHeader = 1 << kDrawHeaderFlag,
111  kMultiSelectionStyle = 1 << kMultiSelectionStyleFlag
112  };
113 
114  enum
115  {
116  kNoSelection = -1
117  };
118 
120  struct Cell {
121  int32_t row {-1};
122  int32_t column {-1};
123 
124  Cell () = default;
125  Cell (int32_t row, int32_t column) : row (row), column (column) {}
126  bool isValid () const { return row > -1 && column > -1; }
127  };
128 
129  using Selection = std::vector<int32_t>;
130 
131  //-----------------------------------------------------------------------------
133  //-----------------------------------------------------------------------------
135  virtual void recalculateLayout (bool rememberSelection = false);
136  virtual void invalidate (const Cell& cell);
137  virtual void invalidateRow (int32_t row);
138  virtual void makeRowVisible (int32_t row);
139 
140  virtual CRect getCellBounds (const Cell& cell);
141  virtual Cell getCellAt (const CPoint& where) const;
142 
143  virtual int32_t getSelectedRow () const;
144  virtual void setSelectedRow (int32_t row, bool makeVisible = false);
145 
146  const Selection& getSelection () const { return selection; }
147  virtual void selectRow (int32_t row);
148  virtual void unselectRow (int32_t row);
149  virtual void unselectAll ();
150 
151  virtual void beginTextEdit (const Cell& cell, UTF8StringPtr initialText);
152 
153  IDataBrowserDelegate* getDelegate () const { return db; }
154 
155 
156  void setAutosizeFlags (int32_t flags) override;
157  void setViewSize (const CRect& size, bool invalid) override;
158  void setWantsFocus (bool state) override;
159 
160  int32_t onKeyDown (VstKeyCode& keyCode) override;
161  CMouseEventResult onMouseDown (CPoint& where, const CButtonState& buttons) override;
162 protected:
163  ~CDataBrowser () noexcept override;
164  void valueChanged (CControl *pControl) override;
165  CMessageResult notify (CBaseObject* sender, IdStringPtr message) override;
166  bool attached (CView *parent) override;
167  bool removed (CView* parent) override;
168  bool wantsFocus () const override;
169 
170  void recalculateSubViews () override;
171  void validateSelection ();
172 
174  CDataBrowserView* dbView;
175  CDataBrowserHeader* dbHeader;
176  CViewContainer* dbHeaderContainer;
177  Selection selection;
178 };
179 
180 //-----------------------------------------------------------------------------
182 {
183 public:
184  virtual void dbSelectionChanged (int32_t selectedRow, GenericStringListDataBrowserSource* source) = 0;
185  virtual void dbRowDoubleClick (int32_t row, GenericStringListDataBrowserSource* source) {};
186 };
187 
188 //-----------------------------------------------------------------------------
189 // GenericStringListDataBrowserSource Declaration
191 //-----------------------------------------------------------------------------------------------
193 {
194 public:
195  using StringVector = std::vector<UTF8String>;
196 
197  GenericStringListDataBrowserSource (const StringVector* stringList, IGenericStringListDataBrowserSourceSelectionChanged* delegate = nullptr);
198  ~GenericStringListDataBrowserSource () noexcept override;
199 
200  void setStringList (const StringVector* stringList);
201  const StringVector* getStringList () const { return stringList; }
202 
203  void setupUI (const CColor& selectionColor, const CColor& fontColor, const CColor& rowlineColor, const CColor& rowBackColor, const CColor& rowAlteranteBackColor, CFontRef font = nullptr, int32_t rowHeight = -1, CCoord textInset = 2.);
204 
205 protected:
206  void drawRowBackground (CDrawContext* context, const CRect& size, int32_t row, int32_t flags, CDataBrowser* browser) const;
207  void drawRowString (CDrawContext* context, const CRect& size, int32_t row, int32_t flags, CDataBrowser* browser) const;
208 
209  int32_t dbGetNumRows (CDataBrowser* browser) override;
210  int32_t dbGetNumColumns (CDataBrowser* browser) override { return 1; }
211  bool dbGetColumnDescription (int32_t index, CCoord& minWidth, CCoord& maxWidth, CDataBrowser* browser) override{ return false; }
212  CCoord dbGetCurrentColumnWidth (int32_t index, CDataBrowser* browser) override;
213  void dbSetCurrentColumnWidth (int32_t index, const CCoord& width, CDataBrowser* browser) override {}
214  CCoord dbGetRowHeight (CDataBrowser* browser) override;
215  bool dbGetLineWidthAndColor (CCoord& width, CColor& color, CDataBrowser* browser) override;
216 
217  void dbDrawHeader (CDrawContext* context, const CRect& size, int32_t column, int32_t flags, CDataBrowser* browser) override;
218  void dbDrawCell (CDrawContext* context, const CRect& size, int32_t row, int32_t column, int32_t flags, CDataBrowser* browser) override;
219 
220  CMouseEventResult dbOnMouseDown (const CPoint& where, const CButtonState& buttons, int32_t row, int32_t column, CDataBrowser* browser) override;
221  CMouseEventResult dbOnMouseMoved (const CPoint& where, const CButtonState& buttons, int32_t row, int32_t column, CDataBrowser* browser) override { return kMouseEventNotHandled; }
222  CMouseEventResult dbOnMouseUp (const CPoint& where, const CButtonState& buttons, int32_t row, int32_t column, CDataBrowser* browser) override { return kMouseEventNotHandled; }
223 
224  void dbSelectionChanged (CDataBrowser* browser) override;
225 
226  void dbCellTextChanged (int32_t row, int32_t column, UTF8StringPtr newText, CDataBrowser* browser) override {}
227  void dbCellSetupTextEdit (int32_t row, int32_t column, CTextEdit* textEditControl, CDataBrowser* browser) override {}
228 
229  int32_t dbOnKeyDown (const VstKeyCode& key, CDataBrowser* browser) override;
230 
231  void dbAttached (CDataBrowser* browser) override;
232  void dbRemoved (CDataBrowser* browser) override;
233 
234  CMessageResult notify (CBaseObject* sender, IdStringPtr message) override;
235 
236  const StringVector* stringList;
237  int32_t rowHeight;
238  CColor fontColor;
239  CColor selectionColor;
240  CColor rowlineColor;
241  CColor rowBackColor;
242  CColor rowAlternateBackColor;
243  CPoint textInset;
244  CHoriTxtAlign textAlignment;
245  SharedPointer<CFontDesc> drawFont;
246  CDataBrowser* dataBrowser;
248 
250  std::string keyDownFindString;
251 };
252 
253 } // namespace
254 
255 #endif
virtual void dbCellSetupTextEdit(int32_t row, int32_t column, CTextEdit *textEditControl, CDataBrowser *browser)
beginTextEdit calls this, so you can setup the textedit control
Definition: cdatabrowser.h:69
virtual void dbSelectionChanged(CDataBrowser *browser)
the selection of the db changed
Definition: cdatabrowser.h:63
CMouseEventResult dbOnMouseMoved(const CPoint &where, const CButtonState &buttons, int32_t row, int32_t column, CDataBrowser *browser) override
mouse was moved over a cell
Definition: cdatabrowser.h:221
virtual CCoord dbGetCurrentColumnWidth(int32_t index, CDataBrowser *browser)=0
return current width of index column
virtual Cell getCellAt(const CPoint &where) const
get the cell at position where
Definition: cdatabrowser.cpp:525
void invalid() override
mark whole view as invalid
Definition: cviewcontainer.cpp:618
Container Class of CView objects.
Definition: cviewcontainer.h:52
virtual CMouseEventResult dbOnMouseUp(const CPoint &where, const CButtonState &buttons, int32_t row, int32_t column, CDataBrowser *browser)
mouse button was released on a cell
Definition: cdatabrowser.h:48
bool attached(CView *parent) override
view is attached to a parent view
Definition: cdatabrowser.cpp:144
virtual void invalidateRow(int32_t row)
invalidates a complete row
Definition: cdatabrowser.cpp:349
void setViewSize(const CRect &size, bool invalid) override
set views size
Definition: cdatabrowser.cpp:119
font class
Definition: cfont.h:31
Rect structure.
Definition: crect.h:17
bool removed(CView *parent) override
view is removed from parent view
Definition: cdatabrowser.cpp:156
void dbCellTextChanged(int32_t row, int32_t column, UTF8StringPtr newText, CDataBrowser *browser) override
the text of the cell changed beginTextEdit was called for
Definition: cdatabrowser.h:226
Definition: vstkeycode.h:12
CDataBrowser(const CRect &size, IDataBrowserDelegate *db, int32_t style=0, CCoord scrollbarWidth=16, CBitmap *pBackground=nullptr)
Definition: cdatabrowser.cpp:88
Definition: vstguibase.h:299
a scrollable container view with scrollbars
Definition: cscrollview.h:21
virtual CRect getCellBounds(const Cell &cell)
get bounds of a cell
Definition: cdatabrowser.cpp:496
virtual void dbAttached(CDataBrowser *browser)
databrowser view was attached to a parent
Definition: cdatabrowser.h:34
A drawing context encapsulates the drawing context of the underlying OS.
Definition: cdrawcontext.h:29
CMouseEventResult onMouseDown(CPoint &where, const CButtonState &buttons) override
called when a mouse down event occurs
Definition: cdatabrowser.cpp:170
Base Object with reference counter.
Definition: vstguibase.h:276
RGBA Color structure.
Definition: ccolor.h:15
DataBrowser view.
Definition: cdatabrowser.h:91
virtual int32_t getSelectedRow() const
get first selected row
Definition: cdatabrowser.cpp:407
virtual void dbSetCurrentColumnWidth(int32_t index, const CCoord &width, CDataBrowser *browser)
the width of a column has changed
Definition: cdatabrowser.h:30
virtual void makeRowVisible(int32_t row)
scrolls the scrollview so that row is visible
Definition: cdatabrowser.cpp:358
virtual CCoord dbGetHeaderHeight(CDataBrowser *browser)
return height of header
Definition: cdatabrowser.h:32
virtual CCoord dbGetRowHeight(CDataBrowser *browser)=0
return height of one row
Generic string list data browser source.
Definition: cdatabrowser.h:192
virtual void unselectRow(int32_t row)
remove row from selection
Definition: cdatabrowser.cpp:436
virtual CMouseEventResult dbOnMouseMoved(const CPoint &where, const CButtonState &buttons, int32_t row, int32_t column, CDataBrowser *browser)
mouse was moved over a cell
Definition: cdatabrowser.h:47
virtual bool dbGetLineWidthAndColor(CCoord &width, CColor &color, CDataBrowser *browser)
return the line width and color
Definition: cdatabrowser.h:33
virtual void recalculateLayout(bool rememberSelection=false)
trigger recalculation, call if numRows or numColumns changed
Definition: cdatabrowser.cpp:232
Encapsulates various platform depended kinds of bitmaps.
Definition: cbitmap.h:21
CMouseEventResult dbOnMouseUp(const CPoint &where, const CButtonState &buttons, int32_t row, int32_t column, CDataBrowser *browser) override
mouse button was released on a cell
Definition: cdatabrowser.h:222
Definition: customcontrols.cpp:8
DataBrowser Interface.
Definition: cdatabrowser.h:21
base class of all VSTGUI controls
Definition: ccontrol.h:76
void dbSetCurrentColumnWidth(int32_t index, const CCoord &width, CDataBrowser *browser) override
the width of a column has changed
Definition: cdatabrowser.h:213
Button and Modifier state.
Definition: cbuttonstate.h:34
const Selection & getSelection() const
get all selected rows
Definition: cdatabrowser.h:146
Base Class of all view objects.
Definition: cview.h:44
interface for drag&drop and clipboard data
Definition: idatapackage.h:15
void dbCellSetupTextEdit(int32_t row, int32_t column, CTextEdit *textEditControl, CDataBrowser *browser) override
beginTextEdit calls this, so you can setup the textedit control
Definition: cdatabrowser.h:227
virtual int32_t dbGetNumRows(CDataBrowser *browser)=0
return number of rows for CDataBrowser browser
virtual void dbCellTextChanged(int32_t row, int32_t column, UTF8StringPtr newText, CDataBrowser *browser)
the text of the cell changed beginTextEdit was called for
Definition: cdatabrowser.h:68
virtual void setSelectedRow(int32_t row, bool makeVisible=false)
set the exclusive selected row
Definition: cdatabrowser.cpp:369
bool wantsFocus() const override
check if view supports focus
Definition: cdatabrowser.cpp:138
virtual void dbDrawHeader(CDrawContext *context, const CRect &size, int32_t column, int32_t flags, CDataBrowser *browser)=0
draw the db header
virtual int32_t dbGetNumColumns(CDataBrowser *browser)=0
return number of columns for CDataBrowser browser
virtual void selectRow(int32_t row)
add row to selection
Definition: cdatabrowser.cpp:415
int32_t onKeyDown(VstKeyCode &keyCode) override
called if a key down event occurs and this view has focus
Definition: cdatabrowser.cpp:164
virtual void invalidate(const Cell &cell)
invalidates an individual cell
Definition: cdatabrowser.cpp:340
virtual void unselectAll()
empty selection
Definition: cdatabrowser.cpp:457
void setAutosizeFlags(int32_t flags) override
set autosize flags
Definition: cdatabrowser.cpp:113
virtual void dbDrawCell(CDrawContext *context, const CRect &size, int32_t row, int32_t column, int32_t flags, CDataBrowser *browser)=0
draw a db cell
virtual CMouseEventResult dbOnMouseDown(const CPoint &where, const CButtonState &buttons, int32_t row, int32_t column, CDataBrowser *browser)
mouse button was pressed on a cell
Definition: cdatabrowser.h:46
int32_t dbGetNumColumns(CDataBrowser *browser) override
return number of columns for CDataBrowser browser
Definition: cdatabrowser.h:210
IDataBrowserDelegate * getDelegate() const
get delegate object
Definition: cdatabrowser.h:153
Point structure.
Definition: cpoint.h:17
CDataBrowser Cell position description.
Definition: cdatabrowser.h:120
virtual void dbRemoved(CDataBrowser *browser)
databrowser view will be removed from its parent
Definition: cdatabrowser.h:35
a text edit control
Definition: ctextedit.h:21
virtual void beginTextEdit(const Cell &cell, UTF8StringPtr initialText)
starts a text edit for a cell
Definition: cdatabrowser.cpp:544
void setWantsFocus(bool state) override
set focus support on/off
Definition: cdatabrowser.cpp:129