X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77db639d44f9a72eee90c05a1f8c5635b09bd22b..1afe8c83072c52d957db8a9877ca28011258ecac:/src/propgrid/manager.cpp diff --git a/src/propgrid/manager.cpp b/src/propgrid/manager.cpp index 96494fea55..d844503d38 100644 --- a/src/propgrid/manager.cpp +++ b/src/propgrid/manager.cpp @@ -235,7 +235,7 @@ IMPLEMENT_CLASS(wxPropertyGridManager, wxPanel) #define ID_ADVTOOLBAR_OFFSET 1 #define ID_ADVHELPCAPTION_OFFSET 2 #define ID_ADVHELPCONTENT_OFFSET 3 -#define ID_ADVBUTTON_OFFSET 4 +//#define ID_ADVBUTTON_OFFSET 4 #define ID_ADVTBITEMSBASE_OFFSET 5 // Must be last. // ----------------------------------------------------------------------- @@ -281,6 +281,8 @@ bool wxPropertyGridManager::Create( wxWindow *parent, long style, const wxString& name ) { + if ( !m_pPropGrid ) + m_pPropGrid = CreatePropertyGrid(); bool res = wxPanel::Create( parent, id, pos, size, (style&0xFFFF0000)|wxWANTS_CHARS, @@ -298,16 +300,15 @@ bool wxPropertyGridManager::Create( wxWindow *parent, void wxPropertyGridManager::Init1() { - //m_pPropGrid = (wxPropertyGrid*) NULL; - m_pPropGrid = CreatePropertyGrid(); + m_pPropGrid = NULL; #if wxUSE_TOOLBAR - m_pToolbar = (wxToolBar*) NULL; + m_pToolbar = NULL; #endif - m_pTxtHelpCaption = (wxStaticText*) NULL; - m_pTxtHelpContent = (wxStaticText*) NULL; + m_pTxtHelpCaption = NULL; + m_pTxtHelpContent = NULL; - m_emptyPage = (wxPropertyGridPage*) NULL; + m_emptyPage = NULL; m_selPage = -1; @@ -980,44 +981,33 @@ bool wxPropertyGridManager::ProcessEvent( wxEvent& event ) // ----------------------------------------------------------------------- -void wxPropertyGridManager::RepaintSplitter( wxDC& dc, int new_splittery, int new_width, - int new_height, bool desc_too ) +void wxPropertyGridManager::RepaintDescBoxDecorations( wxDC& dc, + int newSplitterY, + int newWidth, + int newHeight ) { - int use_hei = new_height; - // Draw background wxColour bgcol = GetBackgroundColour(); - dc.SetBrush( bgcol ); - dc.SetPen( bgcol ); - int rect_hei = use_hei-new_splittery; - if ( !desc_too ) - rect_hei = m_splitterHeight; - dc.DrawRectangle(0,new_splittery,new_width,rect_hei); - dc.SetPen ( wxSystemSettings::GetColour ( wxSYS_COLOUR_3DDKSHADOW ) ); - int splitter_bottom = new_splittery+m_splitterHeight - 1; - int box_height = use_hei-splitter_bottom; - if ( box_height > 1 ) - dc.DrawRectangle(0,splitter_bottom,new_width,box_height); + dc.SetBrush(bgcol); + dc.SetPen(bgcol); + int rectHeight = m_splitterHeight; + dc.DrawRectangle(0, newSplitterY, newWidth, rectHeight); + dc.SetPen( wxSystemSettings::GetColour(wxSYS_COLOUR_3DDKSHADOW) ); + int splitterBottom = newSplitterY + m_splitterHeight - 1; + int boxHeight = newHeight - splitterBottom; + if ( boxHeight > 1 ) + dc.DrawRectangle(0, splitterBottom, newWidth, boxHeight); else - dc.DrawLine(0,splitter_bottom,new_width,splitter_bottom); + dc.DrawLine(0, splitterBottom, newWidth, splitterBottom); } // ----------------------------------------------------------------------- -void wxPropertyGridManager::RefreshHelpBox( int new_splittery, int new_width, int new_height ) +void wxPropertyGridManager::UpdateDescriptionBox( int new_splittery, int new_width, int new_height ) { - //if ( new_splittery == m_splitterY && new_width == m_width ) - // return; - int use_hei = new_height; use_hei--; - //wxRendererNative::Get().DrawSplitterSash(this,dc, - //wxSize(width,m_splitterHeight),new_splittery,wxHORIZONTAL); - - //wxRendererNative::Get().DrawSplitterBorder(this,dc, - // wxRect(0,new_splittery,new_width,m_splitterHeight)); - // Fix help control positions. int cap_hei = m_pPropGrid->m_fontHeight; int cap_y = new_splittery+m_splitterHeight+5; @@ -1050,8 +1040,8 @@ void wxPropertyGridManager::RefreshHelpBox( int new_splittery, int new_width, in } } - wxClientDC dc(this); - RepaintSplitter( dc, new_splittery, new_width, new_height, true ); + wxRect r(0, new_splittery, new_width, new_height-new_splittery); + RefreshRect(r); m_splitterY = new_splittery; @@ -1069,24 +1059,7 @@ void wxPropertyGridManager::RecalculatePositions( int width, int height ) #if wxUSE_TOOLBAR if ( m_pToolbar ) { - int tbHeight; - - #if ( wxMINOR_VERSION < 6 || (wxMINOR_VERSION == 6 && wxRELEASE_NUMBER < 2) ) - tbHeight = -1; - #else - // In wxWidgets 2.6.2+, Toolbar default height may be broken - #if defined(__WXMSW__) - tbHeight = 24; - #elif defined(__WXGTK__) - tbHeight = -1; // 22; - #elif defined(__WXMAC__) - tbHeight = 22; - #else - tbHeight = 22; - #endif - #endif - - m_pToolbar->SetSize(0,0,width,tbHeight); + m_pToolbar->SetSize(0, 0, width, -1); propgridY += m_pToolbar->GetSize().y; } #endif @@ -1120,12 +1093,14 @@ void wxPropertyGridManager::RecalculatePositions( int width, int height ) propgridBottomY = new_splittery; - RefreshHelpBox( new_splittery, width, height ); + UpdateDescriptionBox( new_splittery, width, height ); } if ( m_iFlags & wxPG_FL_INITIALIZED ) { int pgh = propgridBottomY - propgridY; + if ( pgh < 0 ) + pgh = 0; m_pPropGrid->SetSize( 0, propgridY, width, pgh ); m_extraHeight = height - pgh; @@ -1166,11 +1141,9 @@ void wxPropertyGridManager::OnPaint( wxPaintEvent& WXUNUSED(event) ) // Update everything inside the box wxRect r = GetUpdateRegion().GetBox(); - // Repaint splitter? - int r_bottom = r.y + r.height; - int splitter_bottom = m_splitterY + m_splitterHeight; - if ( r.y < splitter_bottom && r_bottom >= m_splitterY ) - RepaintSplitter( dc, m_splitterY, m_width, m_height, false ); + // Repaint splitter and any other description box decorations + if ( (r.y + r.height) >= m_splitterY ) + RepaintDescBoxDecorations( dc, m_splitterY, m_width, m_height ); } // ----------------------------------------------------------------------- @@ -1214,6 +1187,7 @@ void wxPropertyGridManager::RecreateControls() wxDefaultPosition,wxDefaultSize, ((GetExtraStyle()&wxPG_EX_NO_FLAT_TOOLBAR)?0:wxTB_FLAT) /*| wxTB_HORIZONTAL | wxNO_BORDER*/ ); + m_pToolbar->SetToolBitmapSize(wxSize(16, 15)); #if defined(__WXMSW__) // Eliminate toolbar flicker on XP @@ -1272,7 +1246,7 @@ void wxPropertyGridManager::RecreateControls() // No toolbar. if ( m_pToolbar ) m_pToolbar->Destroy(); - m_pToolbar = (wxToolBar*) NULL; + m_pToolbar = NULL; } #endif @@ -1283,15 +1257,24 @@ void wxPropertyGridManager::RecreateControls() if ( !m_pTxtHelpCaption ) { - m_pTxtHelpCaption = new wxStaticText (this,baseId+ID_ADVHELPCAPTION_OFFSET,wxEmptyString); + m_pTxtHelpCaption = new wxStaticText(this, + baseId+ID_ADVHELPCAPTION_OFFSET, + wxT(""), + wxDefaultPosition, + wxDefaultSize, + wxALIGN_LEFT|wxST_NO_AUTORESIZE); m_pTxtHelpCaption->SetFont( m_pPropGrid->m_captionFont ); - m_pTxtHelpCaption->SetCursor ( *wxSTANDARD_CURSOR ); + m_pTxtHelpCaption->SetCursor( *wxSTANDARD_CURSOR ); } if ( !m_pTxtHelpContent ) { - m_pTxtHelpContent = new wxStaticText (this,baseId+ID_ADVHELPCONTENT_OFFSET, - wxEmptyString,wxDefaultPosition,wxDefaultSize,wxALIGN_LEFT|wxST_NO_AUTORESIZE); - m_pTxtHelpContent->SetCursor ( *wxSTANDARD_CURSOR ); + m_pTxtHelpContent = new wxStaticText(this, + baseId+ID_ADVHELPCONTENT_OFFSET, + wxT(""), + wxDefaultPosition, + wxDefaultSize, + wxALIGN_LEFT|wxST_NO_AUTORESIZE); + m_pTxtHelpContent->SetCursor( *wxSTANDARD_CURSOR ); } SetDescribedProperty(GetSelection()); @@ -1304,12 +1287,12 @@ void wxPropertyGridManager::RecreateControls() if ( m_pTxtHelpCaption ) m_pTxtHelpCaption->Destroy(); - m_pTxtHelpCaption = (wxStaticText*) NULL; + m_pTxtHelpCaption = NULL; if ( m_pTxtHelpContent ) m_pTxtHelpContent->Destroy(); - m_pTxtHelpContent = (wxStaticText*) NULL; + m_pTxtHelpContent = NULL; } int width, height; @@ -1414,7 +1397,7 @@ void wxPropertyGridManager::OnToolbarClick( wxCommandEvent &event ) { // Event dispatching must be last. - m_pPropGrid->SendEvent( wxEVT_PG_PAGE_CHANGED, (wxPGProperty*) NULL ); + m_pPropGrid->SendEvent( wxEVT_PG_PAGE_CHANGED, NULL ); } else @@ -1464,8 +1447,7 @@ void wxPropertyGridManager::SetDescription( const wxString& label, const wxStrin m_pTxtHelpCaption->SetSize(-1,osz1.y); m_pTxtHelpContent->SetSize(-1,osz2.y); - if ( (m_iFlags & wxPG_FL_DESC_REFRESH_REQUIRED) || (osz2.x<(m_width-10)) ) - RefreshHelpBox( m_splitterY, m_width, m_height ); + UpdateDescriptionBox( m_splitterY, m_width, m_height ); } } @@ -1481,8 +1463,7 @@ void wxPropertyGridManager::SetDescribedProperty( wxPGProperty* p ) } else { - m_pTxtHelpCaption->SetLabel(wxEmptyString); - m_pTxtHelpContent->SetLabel(wxEmptyString); + SetDescription( wxEmptyString, wxEmptyString ); } } } @@ -1583,7 +1564,7 @@ void wxPropertyGridManager::OnMouseMove( wxMouseEvent &event ) m_splitterY = sy; m_pPropGrid->SetSize( m_width, m_splitterY - m_pPropGrid->GetPosition().y ); - RefreshHelpBox( m_splitterY, m_width, m_height ); + UpdateDescriptionBox( m_splitterY, m_width, m_height ); m_extraHeight -= change; InvalidateBestSize();