![]() |
wxIScan
|
A panel that can display a list of images (e. g. pages) and scroll. More...
#include <wximagepanel.h>
Public Member Functions | |
| wxImagePanel (wxWindow *poParent, wxWindowID nId=wxID_ANY, const wxPoint &oPos=wxDefaultPosition, const wxSize &oSize=wxDefaultSize, long nStyle=wxHSCROLL|wxVSCROLL|wxSUNKEN_BORDER, const wxString &strName=wxT("wxImagePanel")) | |
| Standard constructor. | |
| virtual | ~wxImagePanel () |
| Virtual destructor. | |
| virtual void | Reset () |
| Empty the panel. | |
| virtual void | AddImage (wxImage oImage) |
| Add images to the panel. | |
| virtual void | OnThreadEntry (int nId) |
| Create a thumbnail from the corresponding image in another thread. | |
Protected Attributes | |
| int | m_nPanelPagesCount |
| The number of the pages in the pages panel. | |
| wxImageHash | m_oImageHash |
| A hash map to get the image corresponding to event ID in OnThreadEntry(). | |
| int | m_nPanelPagesBitmapSize |
| Side ot the square that the image should fit to after resizing in pixels. | |
| int | m_nPanelPagesBitmapSpace |
| Space to surround the thumb nail image (padding). | |
Private Member Functions | |
| void | OnThreadExit (wxCommandEvent &oEvent) |
| Handle the exit of another thread. | |
A panel that can display a list of images (e. g. pages) and scroll.
...
Definition at line 30 of file wximagepanel.h.
| wxImagePanel::wxImagePanel | ( | wxWindow * | poParent, |
| wxWindowID | nId = wxID_ANY, |
||
| const wxPoint & | oPos = wxDefaultPosition, |
||
| const wxSize & | oSize = wxDefaultSize, |
||
| long | nStyle = wxHSCROLL | wxVSCROLL | wxSUNKEN_BORDER, |
||
| const wxString & | strName = wxT( "wxImagePanel" ) |
||
| ) |
Standard constructor.
| poParent | a pointer to the dialog windows's parent window. |
| nId | the window id, default: 1 |
| oPos | the window position, default: wxDefaultPosition |
| oSize | the window size, default: wxDefaultSize |
| nStyle | window style (default: wxHSCROLL | wxVSCROLL | wxSUNKEN_BORDER) |
| strName | class name (default: wxT( "wxIViewCanvas" )) |
Definition at line 34 of file wximagepanel.cpp.
: wxScrolledWindow( poParent, nId, oPos, oSize, nStyle, strName )
{
// Empty the panel.
Reset();
// Reset window settings.
wxConfigBase *poConfig = wxConfigBase::Get();
poConfig->SetRecordDefaults();
poConfig->SetPath( wxT( "/" ) );
poConfig->SetPath( GetName() );
// Reset bitmap and spacer size.
m_nPanelPagesBitmapSize= poConfig->Read( wxT( "PanelPagesBitmapSize" ), 160 );
m_nPanelPagesBitmapSpace= poConfig->Read( wxT( "PanelPagesBitmapSpace" ), 6 );
}
| wxImagePanel::~wxImagePanel | ( | ) | [virtual] |
Virtual destructor.
Definition at line 55 of file wximagepanel.cpp.
References m_nPanelPagesBitmapSize, and m_nPanelPagesBitmapSpace.
{
// Save configuration data.
wxConfigBase *poConfig= wxConfigBase::Get();
poConfig->SetPath( wxT( "/" ) );
poConfig->SetPath( GetName() );
// Save bitmap and spacer size.
poConfig->Write( wxT( "PanelPagesBitmapSize" ), (long)m_nPanelPagesBitmapSize );
poConfig->Write( wxT( "PanelPagesBitmapSpace" ), (long)m_nPanelPagesBitmapSpace );
}
| void wxImagePanel::AddImage | ( | wxImage | oImage | ) | [virtual] |
Add images to the panel.
| oImage | an image to convert to a thumbnail |
Note: I moved all GUI functions from AddImage() to OnThreadExit(). It should therefore be possible to call AddImage() from another (non-GUI-)thread.
Definition at line 70 of file wximagepanel.cpp.
References m_nPanelPagesCount, and m_oImageHash.
Referenced by wxIScanFrame::AddPdfPage().
{
m_oImageHash[m_nPanelPagesCount]= oImage;
wxImagePanelThread * poThread=new wxImagePanelThread( this, m_nPanelPagesCount );
poThread->Create(); // Create the thread instance.
poThread->SetPriority( 0 ); // Set the thread to the lowest possible priority.
poThread->Run(); // Run the the thread.
m_nPanelPagesCount++;
}
| void wxImagePanel::OnThreadEntry | ( | int | nId | ) | [virtual] |
Create a thumbnail from the corresponding image in another thread.
| nId | ID of the to image (in the hash map) to rescale. |
Definition at line 83 of file wximagepanel.cpp.
References m_nPanelPagesBitmapSize, and m_oImageHash.
{
wxImage oImage= m_oImageHash[nId];
double xfactor= (double)m_nPanelPagesBitmapSize
/ (double)( ( oImage.GetWidth() > oImage.GetHeight() ) ? oImage.GetWidth() : oImage.GetHeight() );
if( xfactor < 1.0 )
{
oImage.Rescale( (int)( (double)oImage.GetWidth() * xfactor ),
(int)( (double)oImage.GetHeight() * xfactor ),
wxIMAGE_QUALITY_HIGH );
m_oImageHash[nId]= oImage;
}
}
| void wxImagePanel::OnThreadExit | ( | wxCommandEvent & | oEvent | ) | [private] |
Handle the exit of another thread.
| oEvent | Event containing the ID of the corresponding image. |
Delete the corresponding image and adjust the scroll bar(s).
Definition at line 101 of file wximagepanel.cpp.
References m_nPanelPagesBitmapSize, m_nPanelPagesBitmapSpace, m_nPanelPagesCount, and m_oImageHash.
{
int nId= oEvent.GetInt();
wxImage oImage= m_oImageHash[nId];
m_oImageHash.erase( nId );
wxPoint oStartingPoint( m_nPanelPagesBitmapSpace,
m_nPanelPagesBitmapSpace + ( m_nPanelPagesBitmapSpace + m_nPanelPagesBitmapSize ) * nId );
SetScrollbars( 1, 1,
m_nPanelPagesBitmapSpace + m_nPanelPagesBitmapSize + m_nPanelPagesBitmapSpace,
m_nPanelPagesBitmapSpace + ( m_nPanelPagesBitmapSpace + m_nPanelPagesBitmapSize ) * m_nPanelPagesCount );
new wxStaticBitmap( this, wxID_ANY, wxBitmap( oImage ), oStartingPoint );
// new wxBitmapButton( this, wxID_ANY, wxBitmap( oImage ), oStartingPoint );
#if wxCHECK_VERSION( 2, 9, 0 )
#else // wxCHECK_VERSION( 2, 9, 0 )
Scroll( 0, m_nPanelPagesBitmapSpace + ( m_nPanelPagesBitmapSpace + m_nPanelPagesBitmapSize ) * ( m_nPanelPagesCount - 1 ) );
#endif // wxCHECK_VERSION( 2, 9, 0 )
}
| virtual void wxImagePanel::Reset | ( | ) | [inline, virtual] |
Empty the panel.
Definition at line 53 of file wximagepanel.h.
References m_nPanelPagesCount.
Referenced by wxIScanFrame::OnPdfBeginPdf().
{
DestroyChildren();
SetScrollbars( 1, 1, 1, 1 );
m_nPanelPagesCount= 0;
}
int wxImagePanel::m_nPanelPagesBitmapSize [protected] |
Side ot the square that the image should fit to after resizing in pixels.
Definition at line 95 of file wximagepanel.h.
Referenced by OnThreadEntry(), OnThreadExit(), and ~wxImagePanel().
int wxImagePanel::m_nPanelPagesBitmapSpace [protected] |
Space to surround the thumb nail image (padding).
Definition at line 96 of file wximagepanel.h.
Referenced by OnThreadExit(), and ~wxImagePanel().
int wxImagePanel::m_nPanelPagesCount [protected] |
The number of the pages in the pages panel.
Definition at line 91 of file wximagepanel.h.
Referenced by AddImage(), OnThreadExit(), and Reset().
wxImageHash wxImagePanel::m_oImageHash [protected] |
A hash map to get the image corresponding to event ID in OnThreadEntry().
Definition at line 92 of file wximagepanel.h.
Referenced by AddImage(), OnThreadEntry(), and OnThreadExit().