// Name: wx/generic/grid.h
// Purpose: wxGrid and related classes
// Author: Michael Bedward (based on code by Julian Smart, Robin Dunn)
-// Modified by:
+// Modified by: Santiago Palacios
// Created: 1/08/1999
// RCS-ID: $Id$
// Copyright: (c) Michael Bedward
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#include "wx/defs.h"
+#ifndef _WX_GENERIC_GRID_H_
+#define _WX_GENERIC_GRID_H_
-#ifndef __WXGRID_H__
-#define __WXGRID_H__
+#include "wx/defs.h"
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma interface "grid.h"
-#endif
+#if wxUSE_GRID
-#include "wx/hashmap.h"
-#include "wx/panel.h"
#include "wx/scrolwin.h"
-#include "wx/string.h"
-#include "wx/arrstr.h"
-#include "wx/scrolbar.h"
-#include "wx/event.h"
-#include "wx/combobox.h"
-#include "wx/dynarray.h"
-#include "wx/timer.h"
-#include "wx/clntdata.h"
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
+extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxGridNameStr[];
+
// Default parameters for wxGrid
//
#define WXGRID_DEFAULT_NUMBER_ROWS 10
class WXDLLIMPEXP_ADV wxGridColLabelWindow;
class WXDLLIMPEXP_ADV wxGridCornerLabelWindow;
class WXDLLIMPEXP_ADV wxGridRowLabelWindow;
-class WXDLLIMPEXP_ADV wxGridTableBase;
class WXDLLIMPEXP_ADV wxGridWindow;
class WXDLLIMPEXP_ADV wxGridTypeRegistry;
class WXDLLIMPEXP_ADV wxGridSelection;
// calling DecRef() once will delete it. Calling IncRef() allows to lock
// it until the matching DecRef() is called
void IncRef() { m_nRef++; }
- void DecRef() { if ( !--m_nRef ) delete this; }
+ void DecRef() { if ( --m_nRef == 0 ) delete this; }
// interpret renderer parameters: arbitrary string whose interpretatin is
// left to the derived classes
protected:
// set the text colours before drawing
- void SetTextColoursAndFont(wxGrid& grid,
- wxGridCellAttr& attr,
+ void SetTextColoursAndFont(const wxGrid& grid,
+ const wxGridCellAttr& attr,
wxDC& dc,
bool isSelected);
// calc the string extent for given string/font
- wxSize DoGetBestSize(wxGridCellAttr& attr,
+ wxSize DoGetBestSize(const wxGridCellAttr& attr,
wxDC& dc,
const wxString& text);
};
{ return new wxGridCellNumberRenderer; }
protected:
- wxString GetString(wxGrid& grid, int row, int col);
+ wxString GetString(const wxGrid& grid, int row, int col);
};
class WXDLLIMPEXP_ADV wxGridCellFloatRenderer : public wxGridCellStringRenderer
virtual wxGridCellRenderer *Clone() const;
protected:
- wxString GetString(wxGrid& grid, int row, int col);
+ wxString GetString(const wxGrid& grid, int row, int col);
private:
// formatting parameters
virtual void Reset();
virtual void StartingClick();
+ virtual void StartingKey(wxKeyEvent& event);
virtual wxGridCellEditor *Clone() const
{ return new wxGridCellBoolEditor; }
// calling DecRef() once will delete it. Calling IncRef() allows to lock
// it until the matching DecRef() is called
void IncRef() { m_nRef++; }
- void DecRef() { if ( !--m_nRef ) delete this; }
+ void DecRef() { if ( --m_nRef == 0 ) delete this; }
// setters
void SetTextColour(const wxColour& colText) { m_colText = colText; }
bool HasEditor() const { return m_editor != NULL; }
bool HasReadWriteMode() const { return m_isReadOnly != Unset; }
bool HasOverflowMode() const { return m_overflow != UnsetOverflow; }
+ bool HasSize() const { return m_sizeRows != 1 || m_sizeCols != 1; }
const wxColour& GetTextColour() const;
const wxColour& GetBackgroundColour() const;
void SetDefAttr(wxGridCellAttr* defAttr) { m_defGridAttr = defAttr; }
+protected:
+ // the dtor is private because only DecRef() can delete us
+ virtual ~wxGridCellAttr()
+ {
+ wxSafeDecRef(m_renderer);
+ wxSafeDecRef(m_editor);
+ }
+
private:
enum wxAttrReadMode
{
// the common part of all ctors
void Init(wxGridCellAttr *attrDefault = NULL);
- // the dtor is private because only DecRef() can delete us
- ~wxGridCellAttr()
- {
- wxSafeDecRef(m_renderer);
- wxSafeDecRef(m_editor);
- }
// the ref count - when it goes to 0, we die
size_t m_nRef;
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxWANTS_CHARS,
- const wxString& name = wxPanelNameStr );
+ const wxString& name = wxGridNameStr );
bool Create( wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxWANTS_CHARS,
- const wxString& name = wxPanelNameStr );
+ const wxString& name = wxGridNameStr );
virtual ~wxGrid();
void DoEndDragResizeRow();
void DoEndDragResizeCol();
+ void DoEndDragMoveCol();
wxGridTableBase * GetTable() const { return m_table; }
bool SetTable( wxGridTableBase *table, bool takeOwnership = false,
//
void StringToLines( const wxString& value, wxArrayString& lines );
- void GetTextBoxSize( wxDC& dc,
+ void GetTextBoxSize( const wxDC& dc,
const wxArrayString& lines,
long *width, long *height );
//
void XYToCell( int x, int y, wxGridCellCoords& );
int YToRow( int y );
- int XToCol( int x );
+ int XToCol( int x, bool clipToMinMax = false );
int YToEdgeOfRow( int y );
int XToEdgeOfCol( int x );
wxString GetRowLabelValue( int row );
wxString GetColLabelValue( int col );
wxColour GetGridLineColour() { return m_gridLineColour; }
+
+ // these methods may be overridden to customize individual grid lines
+ // appearance
+ virtual wxPen GetDefaultGridLinePen();
+ virtual wxPen GetRowGridLinePen(int row);
+ virtual wxPen GetColGridLinePen(int col);
wxColour GetCellHighlightColour() { return m_cellHighlightColour; }
int GetCellHighlightPenWidth() { return m_cellHighlightPenWidth; }
int GetCellHighlightROPenWidth() { return m_cellHighlightROPenWidth; }
void EnableDragColSize( bool enable = true );
void DisableDragColSize() { EnableDragColSize( false ); }
bool CanDragColSize() { return m_canDragColSize; }
+ void EnableDragColMove( bool enable = true );
+ void DisableDragColMove() { EnableDragColMove( false ); }
+ bool CanDragColMove() { return m_canDragColMove; }
void EnableDragGridSize(bool enable = true);
void DisableDragGridSize() { EnableDragGridSize(false); }
bool CanDragGridSize() { return m_canDragGridSize; }
// DecRef() must be called on the returned pointer, as usual
wxGridCellAttr *GetOrCreateCellAttr(int row, int col) const;
-
+
// shortcuts for setting the column parameters
// set the format for the data in the column: default is string
void SetColSize( int col, int width );
+ //Column positions
+ int GetColAt( int colPos ) const
+ {
+ if ( m_colAt.IsEmpty() )
+ return colPos;
+ else
+ return m_colAt[colPos];
+ }
+
+ void SetColPos( int colID, int newPos );
+
+ int GetColPos( int colID ) const
+ {
+ if ( m_colAt.IsEmpty() )
+ return colID;
+ else
+ {
+ for ( int i = 0; i < m_numCols; i++ )
+ {
+ if ( m_colAt[i] == colID )
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
// automatically size the column or row to fit to its contents, if
// setAsMin is true, this optimal width will also be set as minimal width
// for this column
WXGRID_CURSOR_RESIZE_ROW,
WXGRID_CURSOR_RESIZE_COL,
WXGRID_CURSOR_SELECT_ROW,
- WXGRID_CURSOR_SELECT_COL
+ WXGRID_CURSOR_SELECT_COL,
+ WXGRID_CURSOR_MOVE_COL
};
// this method not only sets m_cursorMode but also sets the correct cursor
wxWindow *m_winCapture; // the window which captured the mouse
CursorMode m_cursorMode;
+ //Column positions
+ wxArrayInt m_colAt;
+ int m_moveToCol;
+
bool m_canDragRowSize;
bool m_canDragColSize;
+ bool m_canDragColMove;
bool m_canDragGridSize;
bool m_canDragCell;
int m_dragLastPos;
void OnSize( wxSizeEvent& );
void OnKeyDown( wxKeyEvent& );
void OnKeyUp( wxKeyEvent& );
+ void OnChar( wxKeyEvent& );
void OnEraseBackground( wxEraseEvent& );
bool MetaDown() { return m_meta; }
bool ShiftDown() { return m_shift; }
bool AltDown() { return m_alt; }
+ bool CmdDown()
+ {
+#if defined(__WXMAC__) || defined(__WXCOCOA__)
+ return MetaDown();
+#else
+ return ControlDown();
+#endif
+ }
+
+ virtual wxEvent *Clone() const { return new wxGridEvent(*this); }
protected:
int m_row;
bool m_shift;
bool m_alt;
- DECLARE_DYNAMIC_CLASS_NO_COPY(wxGridEvent)
+ DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridEvent)
};
class WXDLLIMPEXP_ADV wxGridSizeEvent : public wxNotifyEvent
bool MetaDown() { return m_meta; }
bool ShiftDown() { return m_shift; }
bool AltDown() { return m_alt; }
+ bool CmdDown()
+ {
+#if defined(__WXMAC__) || defined(__WXCOCOA__)
+ return MetaDown();
+#else
+ return ControlDown();
+#endif
+ }
+
+ virtual wxEvent *Clone() const { return new wxGridSizeEvent(*this); }
protected:
int m_rowOrCol;
bool m_shift;
bool m_alt;
- DECLARE_DYNAMIC_CLASS_NO_COPY(wxGridSizeEvent)
+ DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridSizeEvent)
};
bool MetaDown() { return m_meta; }
bool ShiftDown() { return m_shift; }
bool AltDown() { return m_alt; }
+ bool CmdDown()
+ {
+#if defined(__WXMAC__) || defined(__WXCOCOA__)
+ return MetaDown();
+#else
+ return ControlDown();
+#endif
+ }
+
+ virtual wxEvent *Clone() const { return new wxGridRangeSelectEvent(*this); }
protected:
wxGridCellCoords m_topLeft;
bool m_shift;
bool m_alt;
- DECLARE_DYNAMIC_CLASS_NO_COPY(wxGridRangeSelectEvent)
+ DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridRangeSelectEvent)
};
void SetRow(int row) { m_row = row; }
void SetCol(int col) { m_col = col; }
void SetControl(wxControl* ctrl) { m_ctrl = ctrl; }
+
+ virtual wxEvent *Clone() const { return new wxGridEditorCreatedEvent(*this); }
private:
int m_row;
int m_col;
wxControl* m_ctrl;
- DECLARE_DYNAMIC_CLASS(wxGridEditorCreatedEvent)
- DECLARE_NO_COPY_CLASS(wxGridEditorCreatedEvent)
+ DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridEditorCreatedEvent)
};
typedef void (wxEvtHandler::*wxGridEditorCreatedEventFunction)(wxGridEditorCreatedEvent&);
#define wxGridEventHandler(func) \
- (wxObjectEventFunction)wxStaticCastEvent(wxGridEventFunction, &func)
+ (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxGridEventFunction, &func)
#define wxGridSizeEventHandler(func) \
- (wxObjectEventFunction)wxStaticCastEvent(wxGridSizeEventFunction, &func)
+ (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxGridSizeEventFunction, &func)
#define wxGridRangeSelectEventHandler(func) \
- (wxObjectEventFunction)wxStaticCastEvent(wxGridRangeSelectEventFunction, &func)
+ (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxGridRangeSelectEventFunction, &func)
#define wxGridEditorCreatedEventHandler(func) \
- (wxObjectEventFunction)wxStaticCastEvent(wxGridEditorCreatedEventFunction, &func)
+ (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxGridEditorCreatedEventFunction, &func)
#define wx__DECLARE_GRIDEVT(evt, id, fn) \
wx__DECLARE_EVT1(wxEVT_GRID_ ## evt, id, wxGridEventHandler(fn))
#endif
-#endif // ifndef wxUSE_GRID
-
+#endif // wxUSE_GRID
+#endif // _WX_GENERIC_GRID_H_