wxDEFINE_EVENT( wxEVT_GRID_LABEL_RIGHT_DCLICK, wxGridEvent );
wxDEFINE_EVENT( wxEVT_GRID_ROW_SIZE, wxGridSizeEvent );
wxDEFINE_EVENT( wxEVT_GRID_COL_SIZE, wxGridSizeEvent );
+wxDEFINE_EVENT( wxEVT_GRID_COL_AUTO_SIZE, wxGridSizeEvent );
wxDEFINE_EVENT( wxEVT_GRID_COL_MOVE, wxGridEvent );
wxDEFINE_EVENT( wxEVT_GRID_COL_SORT, wxGridEvent );
wxDEFINE_EVENT( wxEVT_GRID_RANGE_SELECT, wxGridRangeSelectEvent );
// adjust column width depending on label text
//
// TODO: generate RESIZING event, see #10754
- AutoSizeColLabelSize( colEdge );
+ if ( !SendGridSizeEvent(wxEVT_GRID_COL_AUTO_SIZE, -1, colEdge, event) )
+ AutoSizeColLabelSize( colEdge );
SendGridSizeEvent(wxEVT_GRID_COL_SIZE, -1, colEdge, event);
// event generation helpers
// ----------------------------------------------------------------------------
-void
+bool
wxGrid::SendGridSizeEvent(wxEventType type,
int row, int col,
const wxMouseEvent& mouseEv)
mouseEv.GetY() + GetColLabelSize(),
mouseEv);
- GetEventHandler()->ProcessEvent(gridEvt);
+ return GetEventHandler()->ProcessEvent(gridEvt);
}
// Generate a grid event based on a mouse event and return:
// Get the bottom or rightmost line that could match.
int line = oper.PosToLine(this, pos, true);
- // Go backwards until we find a line that is big enough.
- while ( oper.GetLineSize(this, line) <= WXGRID_LABEL_EDGE_ZONE )
+ if ( oper.GetLineSize(this, line) > WXGRID_LABEL_EDGE_ZONE )
{
- line = oper.GetLineBefore(this, line);
- if ( line <= 0 )
- break;
- }
+ // We know that we are in this line, test whether we are close enough
+ // to start or end border, respectively.
+ if ( abs(oper.GetLineEndPos(this, line) - pos) < WXGRID_LABEL_EDGE_ZONE )
+ return line;
+ else if ( line > 0 &&
+ pos - oper.GetLineStartPos(this,
+ line) < WXGRID_LABEL_EDGE_ZONE )
+ {
+ // We need to find the previous visible line, so skip all the
+ // hidden (of size 0) ones.
+ do
+ {
+ line = oper.GetLineBefore(this, line);
+ }
+ while ( line >= 0 && oper.GetLineSize(this, line) == 0 );
- // If the bottom or right touches then we have a match
- if ( abs(oper.GetLineEndPos(this, line) - pos) < WXGRID_LABEL_EDGE_ZONE )
- return line;
+ // It can possibly be -1 here.
+ return line;
+ }
+ }
return -1;
}