// Author: Jaakko Salli
// Modified by:
// Created: 2005-01-14
-// RCS-ID: $Id:
+// RCS-ID: $Id$
// Copyright: (c) Jaakko Salli
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// This define is necessary to prevent macro clearing
#define __wxPG_SOURCE_FILE__
-#include <wx/propgrid/propgrid.h>
+#include "wx/propgrid/propgrid.h"
-#include <wx/propgrid/manager.h>
+#include "wx/propgrid/manager.h"
#define wxPG_MAN_ALTERNATE_BASE_ID 11249 // Needed for wxID_ANY madnesss
// wxPropertyGridManager
// -----------------------------------------------------------------------
-const wxChar *wxPropertyGridManagerNameStr = wxT("wxPropertyGridManager");
+const char wxPropertyGridManagerNameStr[] = "wxPropertyGridManager";
// Categoric Mode Icon
DoSetSplitterPosition(splitterPos, col, false);
}
-void wxPropertyGridPage::DoSetSplitterPosition( int pos, int splitterColumn, bool allPages )
+void wxPropertyGridPage::DoSetSplitterPosition( int pos,
+ int splitterColumn,
+ bool allPages,
+ bool fromAutoCenter )
{
if ( allPages && m_manager->GetPageCount() )
m_manager->SetSplitterPosition( pos, splitterColumn );
else
- DoSetSplitterPositionThisPage( pos, splitterColumn );
+ wxPropertyGridPageState::DoSetSplitterPosition( pos,
+ splitterColumn,
+ allPages,
+ fromAutoCenter );
}
// -----------------------------------------------------------------------
#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.
// -----------------------------------------------------------------------
const wxPoint& pos,
const wxSize& size,
long style,
- const wxChar* name )
+ const wxString& name )
: wxPanel()
{
Init1();
const wxPoint& pos,
const wxSize& size,
long style,
- const wxChar* name )
+ const wxString& name )
{
+ if ( !m_pPropGrid )
+ m_pPropGrid = CreatePropertyGrid();
bool res = wxPanel::Create( parent, id, pos, size,
(style&0xFFFF0000)|wxWANTS_CHARS,
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;
#ifdef __WXMAC__
// Smaller controls on Mac
SetWindowVariant(wxWINDOW_VARIANT_SMALL);
-#endif
+#endif
// Create propertygrid.
m_pPropGrid->Create(this,baseId,wxPoint(0,0),csz,
void wxPropertyGridManager::SetWindowStyleFlag( long style )
{
+ int oldWindowStyle = GetWindowStyleFlag();
+
wxWindow::SetWindowStyleFlag( style );
m_pPropGrid->SetWindowStyleFlag( (m_pPropGrid->GetWindowStyleFlag()&~(wxPG_MAN_PASS_FLAGS_MASK)) |
(style&wxPG_MAN_PASS_FLAGS_MASK) );
+
+ // Need to re-position windows?
+ if ( (oldWindowStyle & (wxPG_TOOLBAR|wxPG_DESCRIPTION)) !=
+ (style & (wxPG_TOOLBAR|wxPG_DESCRIPTION)) )
+ {
+ RecreateControls();
+ }
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridManager::Reparent( wxWindowBase *newParent )
+{
+ if ( m_pPropGrid )
+ m_pPropGrid->OnTLPChanging((wxWindow*)newParent);
+
+ bool res = wxPanel::Reparent(newParent);
+
+ return res;
}
// -----------------------------------------------------------------------
void wxPropertyGridManager::Clear()
{
+ m_pPropGrid->ClearSelection(false);
+
m_pPropGrid->Freeze();
int i;
// -----------------------------------------------------------------------
-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;
}
}
- 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;
#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
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;
{
if ( m_windowStyle & wxPG_DESCRIPTION )
{
- m_nextDescBoxSize = ht;
- if ( refresh )
- RecalculatePositions(m_width, m_height);
+ if ( ht != GetDescBoxHeight() )
+ {
+ m_nextDescBoxSize = ht;
+ if ( refresh )
+ RecalculatePositions(m_width, m_height);
+ }
}
}
int wxPropertyGridManager::GetDescBoxHeight() const
{
- return GetClientSize().y - m_splitterY;
+ return GetClientSize().y - m_splitterY - m_splitterHeight;
}
// -----------------------------------------------------------------------
// 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 );
}
// -----------------------------------------------------------------------
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
// No toolbar.
if ( m_pToolbar )
m_pToolbar->Destroy();
- m_pToolbar = (wxToolBar*) NULL;
+ m_pToolbar = NULL;
}
#endif
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());
}
else
{
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;
{
// Categorized mode.
if ( m_pPropGrid->m_windowStyle & wxPG_HIDE_CATEGORIES )
+ {
+ if ( !m_pPropGrid->HasInternalFlag(wxPG_FL_CATMODE_AUTO_SORT) )
+ m_pPropGrid->m_windowStyle &= ~wxPG_AUTO_SORT;
m_pPropGrid->EnableCategories( true );
+ }
}
else if ( id == ( baseId + ID_ADVTBITEMSBASE_OFFSET + 1 ) )
{
// Alphabetic mode.
if ( !(m_pPropGrid->m_windowStyle & wxPG_HIDE_CATEGORIES) )
+ {
+ if ( m_pPropGrid->HasFlag(wxPG_AUTO_SORT) )
+ m_pPropGrid->SetInternalFlag(wxPG_FL_CATMODE_AUTO_SORT);
+ else
+ m_pPropGrid->ClearInternalFlag(wxPG_FL_CATMODE_AUTO_SORT);
+
+ m_pPropGrid->m_windowStyle |= wxPG_AUTO_SORT;
m_pPropGrid->EnableCategories( false );
+ }
}
else
{
{
// Event dispatching must be last.
- m_pPropGrid->SendEvent( wxEVT_PG_PAGE_CHANGED, (wxPGProperty*) NULL );
+ m_pPropGrid->SendEvent( wxEVT_PG_PAGE_CHANGED, NULL );
}
else
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 );
}
}
}
else
{
- m_pTxtHelpCaption->SetLabel(wxEmptyString);
- m_pTxtHelpContent->SetLabel(wxEmptyString);
+ SetDescription( wxEmptyString, wxEmptyString );
}
}
}
else
{
wxClientDC dc(this);
- dc.SetFont(m_pPropGrid->m_font);
+ dc.SetFont(m_pPropGrid->GetFont());
int highest = 0;
unsigned int i;
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();
for ( i=0; i<GetPageCount(); i++ )
{
wxPropertyGridPage* page = GetPage(i);
- page->DoSetSplitterPositionThisPage( pos, splitterColumn );
+ page->DoSetSplitterPosition( pos, splitterColumn, false );
}
m_pPropGrid->SetInternalFlag(wxPG_FL_SPLITTER_PRE_SET);