Removed AdvImageFileProperty from the wxPropertyGrid sample. It was somewhat impractical and bug-prone.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66458 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli
2010-12-27 11:50:34 +00:00
parent 6ea6c5127c
commit 61fac071c3

View File

@@ -198,255 +198,6 @@ private:
#endif // wxUSE_VALIDATORS
// -----------------------------------------------------------------------
// AdvImageFile Property
// -----------------------------------------------------------------------
class wxMyImageInfo;
WX_DECLARE_OBJARRAY(wxMyImageInfo, wxArrayMyImageInfo);
class wxMyImageInfo
{
public:
wxString m_path;
wxBitmap* m_pThumbnail1; // smaller thumbnail
wxBitmap* m_pThumbnail2; // larger thumbnail
wxMyImageInfo ( const wxString& str )
{
m_path = str;
m_pThumbnail1 = (wxBitmap*) NULL;
m_pThumbnail2 = (wxBitmap*) NULL;
}
virtual ~wxMyImageInfo()
{
if ( m_pThumbnail1 )
delete m_pThumbnail1;
if ( m_pThumbnail2 )
delete m_pThumbnail2;
}
};
#include <wx/arrimpl.cpp>
WX_DEFINE_OBJARRAY(wxArrayMyImageInfo);
wxArrayMyImageInfo g_myImageArray;
// Preferred thumbnail height.
#define PREF_THUMBNAIL_HEIGHT 64
wxPGChoices wxAdvImageFileProperty::ms_choices;
WX_PG_IMPLEMENT_PROPERTY_CLASS(wxAdvImageFileProperty,wxFileProperty,
wxString,const wxString&,ChoiceAndButton)
wxAdvImageFileProperty::wxAdvImageFileProperty( const wxString& label,
const wxString& name,
const wxString& value)
: wxFileProperty(label,name,value)
{
m_wildcard = wxPGGetDefaultImageWildcard();
m_index = -1;
m_pImage = (wxImage*) NULL;
// Only show names.
m_flags &= ~(wxPG_PROP_SHOW_FULL_FILENAME);
}
wxAdvImageFileProperty::~wxAdvImageFileProperty ()
{
// Delete old image
wxDELETE(m_pImage);
}
void wxAdvImageFileProperty::OnSetValue()
{
wxFileProperty::OnSetValue();
// Delete old image
wxDELETE(m_pImage);
wxString imagename = GetValueAsString(0);
if ( imagename.length() )
{
wxFileName filename = GetFileName();
size_t prevCount = g_myImageArray.GetCount();
int index = ms_choices.Index(imagename);
// If not in table, add now.
if ( index == wxNOT_FOUND )
{
ms_choices.Add( imagename );
g_myImageArray.Add( new wxMyImageInfo( filename.GetFullPath() ) );
index = g_myImageArray.GetCount() - 1;
}
// If no thumbnail ready, then need to load image.
if ( !g_myImageArray[index].m_pThumbnail2 )
{
// Load if file exists.
if ( filename.FileExists() )
m_pImage = new wxImage( filename.GetFullPath() );
}
m_index = index;
wxPropertyGrid* pg = GetGrid();
wxWindow* control = pg->GetEditorControl();
if ( pg->GetSelection() == this && control )
{
wxString name = GetValueAsString(0);
if ( g_myImageArray.GetCount() != prevCount )
{
wxASSERT( g_myImageArray.GetCount() == (prevCount+1) );
// Add to the control's array.
// (should be added to own array earlier)
if ( control )
GetEditorClass()->InsertItem(control, name, -1);
}
if ( control )
GetEditorClass()->UpdateControl(this, control);
}
}
else
m_index = -1;
}
bool wxAdvImageFileProperty::IntToValue( wxVariant& variant, int number, int WXUNUSED(argFlags) ) const
{
wxASSERT( number >= 0 );
return StringToValue( variant, ms_choices.GetLabel(number), wxPG_FULL_VALUE );
}
bool wxAdvImageFileProperty::OnEvent( wxPropertyGrid* propgrid, wxWindow* primary,
wxEvent& event )
{
if ( propgrid->IsMainButtonEvent(event) )
{
return wxFileProperty::OnEvent(propgrid,primary,event);
}
return false;
}
wxSize wxAdvImageFileProperty::OnMeasureImage( int item ) const
{
if ( item == -1 )
return wxPG_DEFAULT_IMAGE_SIZE;
return wxSize(PREF_THUMBNAIL_HEIGHT,PREF_THUMBNAIL_HEIGHT);
}
void wxAdvImageFileProperty::LoadThumbnails( size_t index )
{
wxMyImageInfo& mii = g_myImageArray[index];
if ( !mii.m_pThumbnail2 )
{
wxFileName filename = GetFileName();
if ( !m_pImage || !m_pImage->Ok() ||
filename != mii.m_path
)
{
if ( m_pImage )
delete m_pImage;
m_pImage = new wxImage( mii.m_path );
}
if ( m_pImage && m_pImage->Ok() )
{
int im_wid = m_pImage->GetWidth();
int im_hei = m_pImage->GetHeight();
if ( im_hei > PREF_THUMBNAIL_HEIGHT )
{
// TNW = (TNH*IW)/IH
im_wid = (PREF_THUMBNAIL_HEIGHT*m_pImage->GetWidth())/m_pImage->GetHeight();
im_hei = PREF_THUMBNAIL_HEIGHT;
}
m_pImage->Rescale( im_wid, im_hei );
mii.m_pThumbnail2 = new wxBitmap( *m_pImage );
wxSize cis = GetParentState()->GetGrid()->GetImageSize();
m_pImage->Rescale ( cis.x, cis.y );
mii.m_pThumbnail1 = new wxBitmap( *m_pImage );
}
wxDELETE(m_pImage);
}
}
void wxAdvImageFileProperty::OnCustomPaint( wxDC& dc,
const wxRect& rect,
wxPGPaintData& pd )
{
int index = m_index;
if ( pd.m_choiceItem >= 0 )
index = pd.m_choiceItem;
//wxLogDebug(wxT("%i"),index);
if ( index >= 0 )
{
LoadThumbnails(index);
// Is this a measure item call?
if ( rect.x < 0 )
{
// Variable height
//pd.m_drawnHeight = PREF_THUMBNAIL_HEIGHT;
wxBitmap* pBitmap = (wxBitmap*)g_myImageArray[index].m_pThumbnail2;
if ( pBitmap )
pd.m_drawnHeight = pBitmap->GetHeight();
else
pd.m_drawnHeight = 16;
return;
}
// Draw the thumbnail
wxBitmap* pBitmap;
if ( pd.m_choiceItem >= 0 )
pBitmap = (wxBitmap*)g_myImageArray[index].m_pThumbnail2;
else
pBitmap = (wxBitmap*)g_myImageArray[index].m_pThumbnail1;
if ( pBitmap )
{
dc.DrawBitmap ( *pBitmap, rect.x, rect.y, FALSE );
// Tell the caller how wide we drew.
pd.m_drawnWidth = pBitmap->GetWidth();
return;
}
}
// No valid file - just draw a white box.
dc.SetBrush ( *wxWHITE_BRUSH );
dc.DrawRectangle ( rect );
}
// -----------------------------------------------------------------------
// wxVectorProperty
// -----------------------------------------------------------------------
@@ -1381,12 +1132,6 @@ void FormMain::PopulateWithStandardItems ()
wxT("with custom action (dir dialog popup) defined.")
);
pg->Append( new wxAdvImageFileProperty(wxT("AdvImageFileProperty"),wxPG_LABEL) );
pg->SetPropertyHelpString( wxT("AdvImageFileProperty"),
wxT("This demonstrates wxAdvImageFileProperty class defined in this sample app. ")
wxT("Button can be used to add new images to the popup list.")
);
wxArrayDouble arrdbl;
arrdbl.Add(-1.0);
arrdbl.Add(-0.5);