Added check to allow multiple selection by dragging only if property under mouse was adjacent to a property already in the selection.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61838 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
6c254c5203
commit
169dc97542
@ -669,6 +669,11 @@ public:
|
||||
|
||||
protected:
|
||||
|
||||
// Utility to check if two properties are visibly next to each other
|
||||
bool ArePropertiesAdjacent( wxPGProperty* prop1,
|
||||
wxPGProperty* prop2,
|
||||
int iterFlags = wxPG_ITERATE_VISIBLE ) const;
|
||||
|
||||
int DoGetSplitterPosition( int splitterIndex = 0 ) const;
|
||||
|
||||
/** Returns column at x coordinate (in GetGrid()->GetPanel()).
|
||||
|
@ -4798,13 +4798,32 @@ bool wxPropertyGrid::HandleMouseMove( int x, unsigned int y, wxMouseEvent &event
|
||||
//
|
||||
// Multi select by dragging
|
||||
//
|
||||
if ( GetExtraStyle() & wxPG_EX_MULTIPLE_SELECTION &&
|
||||
if ( (GetExtraStyle() & wxPG_EX_MULTIPLE_SELECTION) &&
|
||||
event.LeftIsDown() &&
|
||||
m_propHover &&
|
||||
GetSelection() &&
|
||||
!state->DoIsPropertySelected(m_propHover) )
|
||||
{
|
||||
DoAddToSelection(m_propHover);
|
||||
// Additional requirement is that the hovered property
|
||||
// is adjacent to edges of selection.
|
||||
const wxArrayPGProperty& selection = GetSelectedProperties();
|
||||
|
||||
// Since categories cannot be selected along with 'other'
|
||||
// properties, exclude them from iterator flags.
|
||||
int iterFlags = wxPG_ITERATE_VISIBLE & (~wxPG_PROP_CATEGORY);
|
||||
|
||||
for ( int i=(selection.size()-1); i>=0; i-- )
|
||||
{
|
||||
// TODO: This could be optimized by keeping track of
|
||||
// which properties are at the edges of selection.
|
||||
wxPGProperty* selProp = selection[i];
|
||||
if ( state->ArePropertiesAdjacent(m_propHover, selProp,
|
||||
iterFlags) )
|
||||
{
|
||||
DoAddToSelection(m_propHover);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -1139,6 +1139,29 @@ int wxPropertyGridPageState::HitTestH( int x, int* pSplitterHit, int* pSplitterH
|
||||
return col;
|
||||
}
|
||||
|
||||
bool wxPropertyGridPageState::ArePropertiesAdjacent( wxPGProperty* prop1,
|
||||
wxPGProperty* prop2,
|
||||
int iterFlags ) const
|
||||
{
|
||||
const wxPGProperty* ap1 =
|
||||
wxPropertyGridConstIterator::OneStep(this,
|
||||
iterFlags,
|
||||
prop1,
|
||||
1);
|
||||
if ( ap1 && ap1 == prop2 )
|
||||
return true;
|
||||
|
||||
const wxPGProperty* ap2 =
|
||||
wxPropertyGridConstIterator::OneStep(this,
|
||||
iterFlags,
|
||||
prop1,
|
||||
-1);
|
||||
if ( ap2 && ap2 == prop2 )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// wxPropertyGridPageState property value setting and getting
|
||||
// -----------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user