X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/34c921fc4d717eb605a7c19e090f4a1735e4d8e4..8eca1205e2ddc9b24289c655b609ebdbd7bb853e:/src/propgrid/propgrid.cpp?ds=sidebyside diff --git a/src/propgrid/propgrid.cpp b/src/propgrid/propgrid.cpp index d74291cfd3..7e38cfb439 100644 --- a/src/propgrid/propgrid.cpp +++ b/src/propgrid/propgrid.cpp @@ -348,8 +348,8 @@ void wxPropertyGrid::Init1() m_mouseSide = 16; m_editorFocused = 0; - // Must set empty but valid data - m_unspecifiedAppearance.SetEmptyData(); + // Set up default unspecified value 'colour' + m_unspecifiedAppearance.SetFgCol(*wxLIGHT_GREY); // Set default keys AddActionTrigger( wxPG_ACTION_NEXT_PROPERTY, WXK_RIGHT ); @@ -1564,6 +1564,9 @@ void wxPropertyGrid::PrepareAfterItemsAdded() Sort(wxPG_SORT_TOP_LEVEL_ONLY); RecalculateVirtualSize(); + + // Fix editor position + CorrectEditorWidgetPosY(); } // ----------------------------------------------------------------------- @@ -2809,10 +2812,22 @@ void wxPropertyGrid::DoSetSplitterPosition( int newxpos, // ----------------------------------------------------------------------- -void wxPropertyGrid::CenterSplitter( bool enableAutoCentering ) +void wxPropertyGrid::ResetColumnSizes( bool enableAutoResizing ) +{ + wxPropertyGridPageState* state = m_pState; + if ( state ) + state->ResetColumnSizes(0); + + if ( enableAutoResizing && HasFlag(wxPG_SPLITTER_AUTO_CENTER) ) + m_pState->m_dontCenterSplitter = false; +} + +// ----------------------------------------------------------------------- + +void wxPropertyGrid::CenterSplitter( bool enableAutoResizing ) { SetSplitterPosition( m_width/2 ); - if ( enableAutoCentering && HasFlag(wxPG_SPLITTER_AUTO_CENTER) ) + if ( enableAutoResizing && HasFlag(wxPG_SPLITTER_AUTO_CENTER) ) m_pState->m_dontCenterSplitter = false; } @@ -3716,6 +3731,13 @@ private: m_propGrid->HandleCustomEditorEvent(event); + // + // NB: On wxMSW, a wxTextCtrl with wxTE_PROCESS_ENTER + // may beep annoyingly if that event is skipped + // and passed to parent event handler. + if ( event.GetEventType() == wxEVT_COMMAND_TEXT_ENTER ) + return true; + return wxEvtHandler::ProcessEvent(event); } @@ -4520,9 +4542,10 @@ bool wxPropertyGrid::SendEvent( int eventType, wxPGProperty* p, evt.SetCanVeto(true); } + wxPropertyGridEvent* prevProcessedEvent = m_processedEvent; m_processedEvent = &evt; m_eventObject->HandleWindowEvent(evt); - m_processedEvent = NULL; + m_processedEvent = prevProcessedEvent; return evt.WasVetoed(); } @@ -4623,7 +4646,7 @@ bool wxPropertyGrid::HandleMouseClick( int x, unsigned int y, wxMouseEvent &even // Double-clicking the splitter causes auto-centering if ( m_pState->GetColumnCount() <= 2 ) { - CenterSplitter( true ); + ResetColumnSizes( true ); SendEvent(wxEVT_PG_COL_DRAGGING, m_propHover, @@ -5037,8 +5060,14 @@ bool wxPropertyGrid::HandleMouseUp( int x, unsigned int WXUNUSED(y), wxPG_SEL_NOVALIDATE, (unsigned int)m_draggedSplitter); - // Disable splitter auto-centering - state->m_dontCenterSplitter = true; + // Disable splitter auto-centering (but only if moved any - + // otherwise we end up disabling auto-center even after a + // recentering double-click). + int posDiff = abs(m_startingSplitterX - + GetSplitterPosition(m_draggedSplitter)); + + if ( posDiff > 1 ) + state->m_dontCenterSplitter = true; // This is necessary to return cursor if ( m_iFlags & wxPG_FL_MOUSE_CAPTURED ) @@ -5618,6 +5647,27 @@ void wxPropertyGrid::OnIdle( wxIdleEvent& WXUNUSED(event) ) if ( tlp != m_tlp ) OnTLPChanging(tlp); } + + // + // Resolve pending property removals + if ( m_deletedProperties.size() > 0 ) + { + wxArrayPGProperty& arr = m_deletedProperties; + for ( unsigned int i=0; i 0 ) + { + wxArrayPGProperty& arr = m_removedProperties; + for ( unsigned int i=0; i