X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2197ec8012f27d18355d28ed91d2cff200c7b9cf..b6dc21e7689cf7bf9ecf74701fbe2df8168d33ac:/src/propgrid/manager.cpp?ds=sidebyside diff --git a/src/propgrid/manager.cpp b/src/propgrid/manager.cpp index f4052c044f..accb791fb8 100644 --- a/src/propgrid/manager.cpp +++ b/src/propgrid/manager.cpp @@ -289,6 +289,11 @@ bool wxPropertyGridManager::Create( wxWindow *parent, name ); Init2(style); + // FIXME: this changes call ordering so wxPropertyGrid is created + // immediately, before SetExtraStyle has a chance to be called. However, + // without it, we may get assertions if size is wxDefaultSize. + //SetInitialSize(size); + return res; } @@ -329,15 +334,9 @@ void wxPropertyGridManager::Init1() // ----------------------------------------------------------------------- // These flags are always used in wxPropertyGrid integrated in wxPropertyGridManager. -#ifndef __WXMAC__ - #define wxPG_MAN_PROPGRID_FORCED_FLAGS (wxSIMPLE_BORDER| \ - wxNO_FULL_REPAINT_ON_RESIZE| \ - wxCLIP_CHILDREN) -#else - #define wxPG_MAN_PROPGRID_FORCED_FLAGS (wxNO_BORDER| \ +#define wxPG_MAN_PROPGRID_FORCED_FLAGS ( wxBORDER_THEME | \ wxNO_FULL_REPAINT_ON_RESIZE| \ wxCLIP_CHILDREN) -#endif // Which flags can be passed to underlying wxPropertyGrid. #define wxPG_MAN_PASS_FLAGS_MASK (0xFFF0|wxTAB_TRAVERSAL) @@ -380,10 +379,23 @@ void wxPropertyGridManager::Init2( int style ) SetWindowVariant(wxWINDOW_VARIANT_SMALL); #endif + long propGridFlags = (m_windowStyle&wxPG_MAN_PASS_FLAGS_MASK) + |wxPG_MAN_PROPGRID_FORCED_FLAGS; + + propGridFlags &= ~wxBORDER_MASK; + + if ((style & wxPG_NO_INTERNAL_BORDER) == 0) + { + propGridFlags |= wxBORDER_THEME; + } + else + { + propGridFlags |= wxBORDER_NONE; + wxWindow::SetExtraStyle(wxPG_EX_TOOLBAR_SEPARATOR); + } + // Create propertygrid. - m_pPropGrid->Create(this,baseId,wxPoint(0,0),csz, - (m_windowStyle&wxPG_MAN_PASS_FLAGS_MASK) - |wxPG_MAN_PROPGRID_FORCED_FLAGS); + m_pPropGrid->Create(this,baseId,wxPoint(0,0),csz, propGridFlags); m_pPropGrid->m_eventObject = this; @@ -423,8 +435,9 @@ wxPropertyGridManager::~wxPropertyGridManager() { END_MOUSE_CAPTURE - m_pPropGrid->DoSelectProperty(NULL); - m_pPropGrid->m_pState = NULL; + //m_pPropGrid->ClearSelection(); + delete m_pPropGrid; + m_pPropGrid = NULL; size_t i; for ( i=0; iOnTLPChanging((wxWindow*)newParent); + + bool res = wxPanel::Reparent(newParent); + + return res; +} + +// ----------------------------------------------------------------------- + // Actually shows given page. bool wxPropertyGridManager::DoSelectPage( int index ) { @@ -541,7 +566,7 @@ bool wxPropertyGridManager::DoSelectPage( int index ) if ( m_selPage == index ) return true; - if ( m_pPropGrid->m_selected ) + if ( m_pPropGrid->GetSelection() ) { if ( !m_pPropGrid->ClearSelection() ) return false; @@ -657,6 +682,8 @@ wxPropertyGridPageState* wxPropertyGridManager::GetPageState( int page ) const void wxPropertyGridManager::Clear() { + m_pPropGrid->ClearSelection(false); + m_pPropGrid->Freeze(); int i; @@ -711,10 +738,10 @@ void wxPropertyGridManager::SetColumnCount( int colCount, int page ) size_t wxPropertyGridManager::GetPageCount() const { - if ( !(m_iFlags & wxPG_MAN_FL_PAGE_INSERTED) ) - return 0; + if ( !(m_iFlags & wxPG_MAN_FL_PAGE_INSERTED) ) + return 0; - return m_arrPages.size(); + return m_arrPages.size(); } // ----------------------------------------------------------------------- @@ -788,6 +815,9 @@ wxPropertyGridPage* wxPropertyGridManager::InsertPage( int index, pageObj->m_id = m_nextTbInd; + if ( !HasFlag(wxPG_SPLITTER_AUTO_CENTER) ) + pageObj->m_dontCenterSplitter = true; + if ( isPageInserted ) m_arrPages.push_back( pageObj ); @@ -869,6 +899,19 @@ bool wxPropertyGridManager::IsPageModified( size_t index ) const // ----------------------------------------------------------------------- +bool wxPropertyGridManager::IsPropertySelected( wxPGPropArg id ) const +{ + wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false) + for ( unsigned int i=0; iDoIsPropertySelected(p) ) + return true; + } + return false; +} + +// ----------------------------------------------------------------------- + wxPGProperty* wxPropertyGridManager::GetPageRoot( int index ) const { wxASSERT( index >= 0 ); @@ -1061,6 +1104,9 @@ void wxPropertyGridManager::RecalculatePositions( int width, int height ) { m_pToolbar->SetSize(0, 0, width, -1); propgridY += m_pToolbar->GetSize().y; + + if (GetExtraStyle() & wxPG_EX_TOOLBAR_SEPARATOR) + propgridY += 1; } #endif @@ -1141,8 +1187,20 @@ void wxPropertyGridManager::OnPaint( wxPaintEvent& WXUNUSED(event) ) // Update everything inside the box wxRect r = GetUpdateRegion().GetBox(); + if (GetExtraStyle() & wxPG_EX_TOOLBAR_SEPARATOR) + { + if (m_pToolbar && m_pPropGrid) + { + wxPen marginPen(m_pPropGrid->GetMarginColour()); + dc.SetPen(marginPen); + + int y = m_pPropGrid->GetPosition().y-1; + dc.DrawLine(0, y, GetClientSize().x, y); + } + } + // Repaint splitter and any other description box decorations - if ( (r.y + r.height) >= m_splitterY ) + if ( (r.y + r.height) >= m_splitterY && m_splitterY != -1) RepaintDescBoxDecorations( dc, m_splitterY, m_width, m_height ); } @@ -1183,10 +1241,13 @@ void wxPropertyGridManager::RecreateControls() // Has toolbar. if ( !m_pToolbar ) { + long toolBarFlags = ((GetExtraStyle()&wxPG_EX_NO_FLAT_TOOLBAR)?0:wxTB_FLAT); + if (GetExtraStyle() & wxPG_EX_NO_TOOLBAR_DIVIDER) + toolBarFlags |= wxTB_NODIVIDER; + m_pToolbar = new wxToolBar(this,baseId+ID_ADVTOOLBAR_OFFSET, wxDefaultPosition,wxDefaultSize, - ((GetExtraStyle()&wxPG_EX_NO_FLAT_TOOLBAR)?0:wxTB_FLAT) - /*| wxTB_HORIZONTAL | wxNO_BORDER*/ ); + toolBarFlags); m_pToolbar->SetToolBitmapSize(wxSize(16, 15)); #if defined(__WXMSW__) @@ -1490,12 +1551,11 @@ void wxPropertyGridManager::SetSplitterLeft( bool subProps, bool allPages ) maxW += m_pPropGrid->m_marginWidth; if ( maxW > highest ) highest = maxW; + m_pState->m_dontCenterSplitter = true; } if ( highest > 0 ) m_pPropGrid->SetSplitterPosition( highest ); - - m_pPropGrid->m_iFlags |= wxPG_FL_DONT_CENTER_SPLITTER; } } @@ -1517,12 +1577,30 @@ void wxPropertyGridManager::OnResize( wxSizeEvent& WXUNUSED(event) ) { int width, height; - GetClientSize(&width,&height); + GetClientSize(&width, &height); if ( m_width == -12345 ) RecreateControls(); - RecalculatePositions(width,height); + RecalculatePositions(width, height); + + if ( m_pPropGrid && m_pPropGrid->m_parent ) + { + int pgWidth, pgHeight; + m_pPropGrid->GetClientSize(&pgWidth, &pgHeight); + + // Regenerate splitter positions for non-current pages + for ( unsigned int i=0; iGetState() ) + { + page->OnClientWidthChange(pgWidth, + pgWidth - page->m_width, + true); + } + } + } } // ----------------------------------------------------------------------- @@ -1660,9 +1738,8 @@ void wxPropertyGridManager::SetSplitterPosition( int pos, int splitterColumn ) { wxPropertyGridPage* page = GetPage(i); page->DoSetSplitterPosition( pos, splitterColumn, false ); + page->m_isSplitterPreSet = true; } - - m_pPropGrid->SetInternalFlag(wxPG_FL_SPLITTER_PRE_SET); } // -----------------------------------------------------------------------