bool editor/renderer added
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6112 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -28,7 +28,6 @@
 | 
			
		||||
#include "wx/string.h"
 | 
			
		||||
#include "wx/scrolbar.h"
 | 
			
		||||
#include "wx/event.h"
 | 
			
		||||
#include "wx/textctrl.h"
 | 
			
		||||
#include "wx/combobox.h"
 | 
			
		||||
#include "wx/dynarray.h"
 | 
			
		||||
#include "wx/timer.h"
 | 
			
		||||
@@ -63,6 +62,9 @@ class WXDLLEXPORT wxGridRowLabelWindow;
 | 
			
		||||
class WXDLLEXPORT wxGridTableBase;
 | 
			
		||||
class WXDLLEXPORT wxGridWindow;
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxCheckBox;
 | 
			
		||||
class WXDLLEXPORT wxTextCtrl;
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxGridCellRenderer: this class is responsible for actually drawing the cell
 | 
			
		||||
// in the grid. You may pass it to the wxGridCellAttr (below) to change the
 | 
			
		||||
@@ -102,6 +104,19 @@ public:
 | 
			
		||||
                      bool isSelected);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// renderer for boolean fields
 | 
			
		||||
class WXDLLEXPORT wxGridCellBoolRenderer : public wxGridCellRenderer
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    // draw a check mark or nothing
 | 
			
		||||
    virtual void Draw(wxGrid& grid,
 | 
			
		||||
                      wxGridCellAttr& attr,
 | 
			
		||||
                      wxDC& dc,
 | 
			
		||||
                      const wxRect& rect,
 | 
			
		||||
                      int row, int col,
 | 
			
		||||
                      bool isSelected);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxGridCellEditor:  This class is responsible for providing and manipulating
 | 
			
		||||
@@ -168,7 +183,7 @@ protected:
 | 
			
		||||
    wxFont m_fontOld;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// the editor for string/text data
 | 
			
		||||
class WXDLLEXPORT wxGridCellTextEditor : public wxGridCellEditor
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
@@ -192,6 +207,32 @@ private:
 | 
			
		||||
    wxString m_startValue;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// the editor for boolean data
 | 
			
		||||
class WXDLLEXPORT wxGridCellBoolEditor : public wxGridCellEditor
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    virtual void Create(wxWindow* parent,
 | 
			
		||||
                        wxWindowID id,
 | 
			
		||||
                        wxEvtHandler* evtHandler);
 | 
			
		||||
 | 
			
		||||
    virtual void SetSize(const wxRect& rect);
 | 
			
		||||
    virtual void Show(bool show, wxGridCellAttr *attr = (wxGridCellAttr *)NULL);
 | 
			
		||||
 | 
			
		||||
    virtual void BeginEdit(int row, int col, wxGrid* grid);
 | 
			
		||||
    virtual bool EndEdit(int row, int col,  bool saveValue, wxGrid* grid);
 | 
			
		||||
 | 
			
		||||
    virtual void Reset();
 | 
			
		||||
    virtual void StartingKey(wxKeyEvent& event);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    wxCheckBox *CBox() const { return (wxCheckBox *)m_control; }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    bool m_startValue;
 | 
			
		||||
 | 
			
		||||
    wxRect m_rectCell;  // the total size of the cell
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxGridCellAttr: this class can be used to alter the cells appearance in
 | 
			
		||||
// the grid by changing their colour/font/... from default. An object of this
 | 
			
		||||
@@ -541,17 +582,17 @@ public:
 | 
			
		||||
        return *this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool operator==( const wxGridCellCoords& other )
 | 
			
		||||
    bool operator==( const wxGridCellCoords& other ) const
 | 
			
		||||
    {
 | 
			
		||||
        return (m_row == other.m_row  &&  m_col == other.m_col);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool operator!=( const wxGridCellCoords& other )
 | 
			
		||||
    bool operator!=( const wxGridCellCoords& other ) const
 | 
			
		||||
    {
 | 
			
		||||
        return (m_row != other.m_row  ||  m_col != other.m_col);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool operator!()
 | 
			
		||||
    bool operator!() const
 | 
			
		||||
    {
 | 
			
		||||
        return (m_row == -1 && m_col == -1 );
 | 
			
		||||
    }
 | 
			
		||||
@@ -1071,6 +1112,9 @@ public:
 | 
			
		||||
           wxGRID_CHOICE,
 | 
			
		||||
           wxGRID_COMBOBOX };
 | 
			
		||||
 | 
			
		||||
    // for wxGridCellBoolEditor
 | 
			
		||||
    wxWindow *GetGridWindow() const;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    bool m_created;
 | 
			
		||||
    bool m_displayed;
 | 
			
		||||
 
 | 
			
		||||
@@ -208,6 +208,10 @@ GridFrame::GridFrame()
 | 
			
		||||
    grid->SetCellAlignment(4, 4, wxCENTRE, wxCENTRE);
 | 
			
		||||
    grid->SetCellRenderer(4, 4, new MyGridCellRenderer);
 | 
			
		||||
 | 
			
		||||
    grid->SetCellValue(3, 0, "1");
 | 
			
		||||
    grid->SetCellRenderer(3, 0, new wxGridCellBoolRenderer);
 | 
			
		||||
    grid->SetCellEditor(3, 0, new wxGridCellBoolEditor);
 | 
			
		||||
 | 
			
		||||
    wxGridCellAttr *attr;
 | 
			
		||||
    attr = new wxGridCellAttr;
 | 
			
		||||
    attr->SetTextColour(*wxBLUE);
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,8 @@
 | 
			
		||||
    #include "wx/dcclient.h"
 | 
			
		||||
    #include "wx/settings.h"
 | 
			
		||||
    #include "wx/log.h"
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
    #include "wx/checkbox.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// this include needs to be outside precomp for BCC
 | 
			
		||||
@@ -289,10 +291,18 @@ wxGridCellEditor::~wxGridCellEditor()
 | 
			
		||||
    Destroy();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxGridCellEditor::Create(wxWindow* WXUNUSED(parent),
 | 
			
		||||
                              wxWindowID WXUNUSED(id),
 | 
			
		||||
                              wxEvtHandler* evtHandler)
 | 
			
		||||
{
 | 
			
		||||
    if (evtHandler)
 | 
			
		||||
        m_control->PushEventHandler(evtHandler);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxGridCellEditor::Destroy()
 | 
			
		||||
{
 | 
			
		||||
    if (m_control) {
 | 
			
		||||
    if (m_control)
 | 
			
		||||
    {
 | 
			
		||||
        m_control->Destroy();
 | 
			
		||||
        m_control = NULL;
 | 
			
		||||
    }
 | 
			
		||||
@@ -388,15 +398,14 @@ void wxGridCellTextEditor::Create(wxWindow* parent,
 | 
			
		||||
                                  wxWindowID id,
 | 
			
		||||
                                  wxEvtHandler* evtHandler)
 | 
			
		||||
{
 | 
			
		||||
    m_control = new wxTextCtrl(parent, -1, "",
 | 
			
		||||
    m_control = new wxTextCtrl(parent, id, wxEmptyString,
 | 
			
		||||
                               wxDefaultPosition, wxDefaultSize
 | 
			
		||||
#if defined(__WXMSW__)
 | 
			
		||||
                               , wxTE_MULTILINE | wxTE_NO_VSCROLL // necessary ???
 | 
			
		||||
#endif
 | 
			
		||||
                              );
 | 
			
		||||
 | 
			
		||||
    if (evtHandler)
 | 
			
		||||
        m_control->PushEventHandler(evtHandler);
 | 
			
		||||
    wxGridCellEditor::Create(parent, id, evtHandler);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -412,7 +421,6 @@ void wxGridCellTextEditor::BeginEdit(int row, int col, wxGrid* grid)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool wxGridCellTextEditor::EndEdit(int row, int col, bool saveValue,
 | 
			
		||||
                                   wxGrid* grid)
 | 
			
		||||
{
 | 
			
		||||
@@ -483,6 +491,107 @@ void wxGridCellTextEditor::HandleReturn(wxKeyEvent& event)
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxGridCellBoolEditor
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void wxGridCellBoolEditor::Create(wxWindow* parent,
 | 
			
		||||
                                  wxWindowID id,
 | 
			
		||||
                                  wxEvtHandler* evtHandler)
 | 
			
		||||
{
 | 
			
		||||
    m_control = new wxCheckBox(parent, id, wxEmptyString,
 | 
			
		||||
                               wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                               wxNO_BORDER);
 | 
			
		||||
 | 
			
		||||
    wxGridCellEditor::Create(parent, id, evtHandler);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxGridCellBoolEditor::SetSize(const wxRect& r)
 | 
			
		||||
{
 | 
			
		||||
    m_rectCell = r;
 | 
			
		||||
    // position it in the centre of the rectangle (TODO: support alignment?)
 | 
			
		||||
    wxCoord w, h;
 | 
			
		||||
    m_control->GetSize(&w, &h);
 | 
			
		||||
 | 
			
		||||
    // the checkbox without label still has some space to the right in wxGTK,
 | 
			
		||||
    // so shift it to the right
 | 
			
		||||
#ifdef __WXGTK__
 | 
			
		||||
    w += 8;
 | 
			
		||||
#endif // GTK
 | 
			
		||||
 | 
			
		||||
    m_control->Move(r.x + r.width/2 - w/2, r.y + r.height/2 - h/2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxGridCellBoolEditor::Show(bool show, wxGridCellAttr *attr)
 | 
			
		||||
{
 | 
			
		||||
    wxGridCellEditor::Show(show, attr);
 | 
			
		||||
    if ( !show )
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    // get the bg colour to use
 | 
			
		||||
    wxColour colBg = attr ? attr->GetBackgroundColour() : *wxLIGHT_GREY;
 | 
			
		||||
 | 
			
		||||
    // erase the background because we don't fill the cell
 | 
			
		||||
    if ( m_rectCell.width > 0 )
 | 
			
		||||
    {
 | 
			
		||||
        wxClientDC dc(m_control->GetParent());
 | 
			
		||||
        dc.SetPen(*wxTRANSPARENT_PEN);
 | 
			
		||||
        dc.SetBrush(wxBrush(colBg, wxSOLID));
 | 
			
		||||
        dc.DrawRectangle(m_rectCell);
 | 
			
		||||
 | 
			
		||||
        m_rectCell.width = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    CBox()->SetBackgroundColour(colBg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxGridCellBoolEditor::BeginEdit(int row, int col, wxGrid* grid)
 | 
			
		||||
{
 | 
			
		||||
    wxASSERT_MSG(m_control,
 | 
			
		||||
                 wxT("The wxGridCellEditor must be Created first!"));
 | 
			
		||||
 | 
			
		||||
    m_startValue = !!grid->GetTable()->GetValue(row, col); // FIXME-DATA
 | 
			
		||||
    CBox()->SetValue(m_startValue);
 | 
			
		||||
    CBox()->SetFocus();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxGridCellBoolEditor::EndEdit(int row, int col,
 | 
			
		||||
                                   bool saveValue,
 | 
			
		||||
                                   wxGrid* grid)
 | 
			
		||||
{
 | 
			
		||||
    wxASSERT_MSG(m_control,
 | 
			
		||||
                 wxT("The wxGridCellEditor must be Created first!"));
 | 
			
		||||
 | 
			
		||||
    bool changed = FALSE;
 | 
			
		||||
    bool value = CBox()->GetValue();
 | 
			
		||||
    if ( value != m_startValue )
 | 
			
		||||
        changed = TRUE;
 | 
			
		||||
 | 
			
		||||
    if ( changed )
 | 
			
		||||
    {
 | 
			
		||||
        // FIXME-DATA
 | 
			
		||||
        grid->GetTable()->SetValue(row, col, value ? _T("1") : wxEmptyString);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return changed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxGridCellBoolEditor::Reset()
 | 
			
		||||
{
 | 
			
		||||
    wxASSERT_MSG(m_control,
 | 
			
		||||
                 wxT("The wxGridCellEditor must be Created first!"));
 | 
			
		||||
 | 
			
		||||
    CBox()->SetValue(m_startValue);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxGridCellBoolEditor::StartingKey(wxKeyEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Skip();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxGridCellEditorEvtHandler
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void wxGridCellEditorEvtHandler::OnKeyDown(wxKeyEvent& event)
 | 
			
		||||
{
 | 
			
		||||
@@ -522,6 +631,10 @@ void wxGridCellEditorEvtHandler::OnChar(wxKeyEvent& event)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// renderer classes
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxGridCellRenderer
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
@@ -548,6 +661,10 @@ void wxGridCellRenderer::Draw(wxGrid& grid,
 | 
			
		||||
    dc.DrawRectangle(rect);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxGridCellStringRenderer
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void wxGridCellStringRenderer::Draw(wxGrid& grid,
 | 
			
		||||
                                    wxGridCellAttr& attr,
 | 
			
		||||
                                    wxDC& dc,
 | 
			
		||||
@@ -587,6 +704,40 @@ void wxGridCellStringRenderer::Draw(wxGrid& grid,
 | 
			
		||||
                           rect, hAlign, vAlign);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxGridCellBoolRenderer
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void wxGridCellBoolRenderer::Draw(wxGrid& grid,
 | 
			
		||||
                                  wxGridCellAttr& attr,
 | 
			
		||||
                                  wxDC& dc,
 | 
			
		||||
                                  const wxRect& rect,
 | 
			
		||||
                                  int row, int col,
 | 
			
		||||
                                  bool isSelected)
 | 
			
		||||
{
 | 
			
		||||
    wxGridCellRenderer::Draw(grid, attr, dc, rect, row, col, isSelected);
 | 
			
		||||
 | 
			
		||||
    // position it in the centre (ignoring alignment - TODO)
 | 
			
		||||
    static const wxCoord checkSize = 16;
 | 
			
		||||
 | 
			
		||||
    wxRect rectMark;
 | 
			
		||||
    rectMark.x = rect.x + rect.width/2 - checkSize/2;
 | 
			
		||||
    rectMark.y = rect.y + rect.height/2 - checkSize/2;
 | 
			
		||||
    rectMark.width = rectMark.height = checkSize;
 | 
			
		||||
 | 
			
		||||
    dc.SetBrush(*wxTRANSPARENT_BRUSH);
 | 
			
		||||
    dc.SetPen(wxPen(attr.GetTextColour(), 1, wxSOLID));
 | 
			
		||||
    dc.DrawRectangle(rectMark);
 | 
			
		||||
 | 
			
		||||
    rectMark.Inflate(-4);
 | 
			
		||||
 | 
			
		||||
    if ( !!grid.GetTable()->GetValue(row, col) ) // FIXME-DATA
 | 
			
		||||
    {
 | 
			
		||||
        dc.SetTextForeground(attr.GetTextColour());
 | 
			
		||||
        dc.DrawCheckMark(rectMark);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxGridCellAttr
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
@@ -594,10 +745,15 @@ void wxGridCellStringRenderer::Draw(wxGrid& grid,
 | 
			
		||||
const wxColour& wxGridCellAttr::GetTextColour() const
 | 
			
		||||
{
 | 
			
		||||
    if (HasTextColour())
 | 
			
		||||
    {
 | 
			
		||||
        return m_colText;
 | 
			
		||||
    }
 | 
			
		||||
    else if (m_defGridAttr != this)
 | 
			
		||||
    {
 | 
			
		||||
        return m_defGridAttr->GetTextColour();
 | 
			
		||||
    else {
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxFAIL_MSG(wxT("Missing default cell attribute"));
 | 
			
		||||
        return wxNullColour;
 | 
			
		||||
    }
 | 
			
		||||
@@ -610,7 +766,8 @@ const wxColour& wxGridCellAttr::GetBackgroundColour() const
 | 
			
		||||
        return m_colBack;
 | 
			
		||||
    else if (m_defGridAttr != this)
 | 
			
		||||
        return m_defGridAttr->GetBackgroundColour();
 | 
			
		||||
    else {
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxFAIL_MSG(wxT("Missing default cell attribute"));
 | 
			
		||||
        return wxNullColour;
 | 
			
		||||
    }
 | 
			
		||||
@@ -623,7 +780,8 @@ const wxFont& wxGridCellAttr::GetFont() const
 | 
			
		||||
        return m_font;
 | 
			
		||||
    else if (m_defGridAttr != this)
 | 
			
		||||
        return m_defGridAttr->GetFont();
 | 
			
		||||
    else {
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxFAIL_MSG(wxT("Missing default cell attribute"));
 | 
			
		||||
        return wxNullFont;
 | 
			
		||||
    }
 | 
			
		||||
@@ -632,13 +790,15 @@ const wxFont& wxGridCellAttr::GetFont() const
 | 
			
		||||
 | 
			
		||||
void wxGridCellAttr::GetAlignment(int *hAlign, int *vAlign) const
 | 
			
		||||
{
 | 
			
		||||
    if (HasAlignment()) {
 | 
			
		||||
    if (HasAlignment())
 | 
			
		||||
    {
 | 
			
		||||
        if ( hAlign ) *hAlign = m_hAlign;
 | 
			
		||||
        if ( vAlign ) *vAlign = m_vAlign;
 | 
			
		||||
    }
 | 
			
		||||
    else if (m_defGridAttr != this)
 | 
			
		||||
        m_defGridAttr->GetAlignment(hAlign, vAlign);
 | 
			
		||||
    else {
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxFAIL_MSG(wxT("Missing default cell attribute"));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -650,7 +810,8 @@ wxGridCellRenderer* wxGridCellAttr::GetRenderer() const
 | 
			
		||||
        return m_renderer;
 | 
			
		||||
    else if (m_defGridAttr != this)
 | 
			
		||||
        return m_defGridAttr->GetRenderer();
 | 
			
		||||
    else {
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxFAIL_MSG(wxT("Missing default cell attribute"));
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
@@ -662,7 +823,8 @@ wxGridCellEditor* wxGridCellAttr::GetEditor() const
 | 
			
		||||
        return m_editor;
 | 
			
		||||
    else if (m_defGridAttr != this)
 | 
			
		||||
        return m_defGridAttr->GetEditor();
 | 
			
		||||
    else {
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxFAIL_MSG(wxT("Missing default cell attribute"));
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
@@ -2861,8 +3023,10 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
 | 
			
		||||
 | 
			
		||||
        // Don't start doing anything until the mouse has been drug at
 | 
			
		||||
        // least 3 pixels in any direction...
 | 
			
		||||
        if (! m_isDragging) {
 | 
			
		||||
            if (m_startDragPos == wxDefaultPosition) {
 | 
			
		||||
        if (! m_isDragging)
 | 
			
		||||
        {
 | 
			
		||||
            if (m_startDragPos == wxDefaultPosition)
 | 
			
		||||
            {
 | 
			
		||||
                m_startDragPos = pos;
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
@@ -2879,7 +3043,8 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
 | 
			
		||||
                HideCellEditControl();
 | 
			
		||||
 | 
			
		||||
            // Have we captured the mouse yet?
 | 
			
		||||
            if (! m_winCapture) {
 | 
			
		||||
            if (! m_winCapture)
 | 
			
		||||
            {
 | 
			
		||||
                m_winCapture = m_gridWin;
 | 
			
		||||
                m_winCapture->CaptureMouse();
 | 
			
		||||
            }
 | 
			
		||||
@@ -2895,7 +3060,8 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
 | 
			
		||||
                    SelectBlock( m_currentCellCoords, coords );
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (! IsVisible(coords)) {
 | 
			
		||||
                if (! IsVisible(coords))
 | 
			
		||||
                {
 | 
			
		||||
                    MakeCellVisible(coords);
 | 
			
		||||
                    // TODO: need to introduce a delay or something here.  The
 | 
			
		||||
                    // scrolling is way to fast, at least on MSW.
 | 
			
		||||
@@ -3024,7 +3190,8 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
 | 
			
		||||
            {
 | 
			
		||||
                if ( IsSelection() )
 | 
			
		||||
                {
 | 
			
		||||
                    if (m_winCapture) {
 | 
			
		||||
                    if (m_winCapture)
 | 
			
		||||
                    {
 | 
			
		||||
                        m_winCapture->ReleaseMouse();
 | 
			
		||||
                        m_winCapture = NULL;
 | 
			
		||||
                    }
 | 
			
		||||
@@ -3758,10 +3925,8 @@ void wxGrid::OnKeyDown( wxKeyEvent& event )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void wxGrid::OnEraseBackground(wxEraseEvent&)
 | 
			
		||||
{ }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxGrid::SetCurrentCell( const wxGridCellCoords& coords )
 | 
			
		||||
{
 | 
			
		||||
@@ -3882,6 +4047,10 @@ void wxGrid::DrawCell( wxDC& dc, const wxGridCellCoords& coords )
 | 
			
		||||
        DrawCellBorder( dc, coords );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    // don't draw the cell over the active edit control!
 | 
			
		||||
    if ( (coords == m_currentCellCoords) && IsCellEditControlEnabled() )
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    // but all the rest is drawn by the cell renderer and hence may be
 | 
			
		||||
    // customized
 | 
			
		||||
    wxRect rect;
 | 
			
		||||
@@ -3986,7 +4155,8 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & reg )
 | 
			
		||||
 | 
			
		||||
    int top, bottom, left, right;
 | 
			
		||||
 | 
			
		||||
    if (reg.IsEmpty()){
 | 
			
		||||
    if (reg.IsEmpty())
 | 
			
		||||
    {
 | 
			
		||||
      int cw, ch;
 | 
			
		||||
      m_gridWin->GetClientSize(&cw, &ch);
 | 
			
		||||
 | 
			
		||||
@@ -3995,7 +4165,8 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & reg )
 | 
			
		||||
      CalcUnscrolledPosition( 0, 0, &left, &top );
 | 
			
		||||
      CalcUnscrolledPosition( cw, ch, &right, &bottom );
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      wxCoord x, y, w, h;
 | 
			
		||||
      reg.GetBox(x, y, w, h);
 | 
			
		||||
      CalcUnscrolledPosition( x, y, &left, &top );
 | 
			
		||||
@@ -4334,6 +4505,11 @@ bool wxGrid::IsCellEditControlEnabled() const
 | 
			
		||||
    return m_cellEditCtrlEnabled ? !IsCurrentCellReadOnly() : FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxWindow *wxGrid::GetGridWindow() const
 | 
			
		||||
{
 | 
			
		||||
    return m_gridWin;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxGrid::ShowCellEditControl()
 | 
			
		||||
{
 | 
			
		||||
    if ( IsCellEditControlEnabled() )
 | 
			
		||||
@@ -4353,9 +4529,12 @@ void wxGrid::ShowCellEditControl()
 | 
			
		||||
            int left, top, right, bottom;
 | 
			
		||||
            CalcScrolledPosition( rect.GetLeft(), rect.GetTop(), &left, &top );
 | 
			
		||||
            CalcScrolledPosition( rect.GetRight(), rect.GetBottom(), &right, &bottom );
 | 
			
		||||
            left--; top--; right--; bottom--;   // cell is shifted by one pixel
 | 
			
		||||
            int cw, ch;
 | 
			
		||||
            m_gridWin->GetClientSize( &cw, &ch );
 | 
			
		||||
 | 
			
		||||
            // cell is shifted by one pixel
 | 
			
		||||
            left--;
 | 
			
		||||
            top--;
 | 
			
		||||
            right--;
 | 
			
		||||
            bottom--;
 | 
			
		||||
 | 
			
		||||
            // Make the edit control large enough to allow for internal
 | 
			
		||||
            // margins
 | 
			
		||||
@@ -5515,9 +5694,12 @@ wxGridCellAttr *wxGrid::GetCellAttr(int row, int col) const
 | 
			
		||||
        attr = m_table ? m_table->GetAttr(row, col) : (wxGridCellAttr *)NULL;
 | 
			
		||||
        CacheAttr(row, col, attr);
 | 
			
		||||
    }
 | 
			
		||||
    if (attr) {
 | 
			
		||||
    if (attr)
 | 
			
		||||
    {
 | 
			
		||||
        attr->SetDefAttr(m_defaultCellAttr);
 | 
			
		||||
    } else {
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        attr = m_defaultCellAttr;
 | 
			
		||||
        attr->IncRef();
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user