diff src/preview.cpp @ 10:29021e6e1ebe

Implement thumbnail list in PreviewDialog.
author pyon@macmini
date Mon, 28 Apr 2014 18:14:04 +0900
parents b455f2d8aac9
children dfcf8c973219
line wrap: on
line diff
--- a/src/preview.cpp	Thu Apr 24 18:31:39 2014 +0900
+++ b/src/preview.cpp	Mon Apr 28 18:14:04 2014 +0900
@@ -1,16 +1,94 @@
 // Filename   : preview.cpp
-// Last Change: 24-Apr-2014.
+// Last Change: 28-Apr-2014.
 //
 
 #include "preview.h"
 #define THUMB_W 60
 #define THUMB_H 75
 
+// サムネイルパネル
+PThumbnailPanel::PThumbnailPanel( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) 
+    : wxPanel( parent, id, pos, size, style )
+{
+    m_parent = (PreviewDialog*)parent;
+
+	wxBoxSizer* bSizer = new wxBoxSizer( wxVERTICAL );
+	this->SetBackgroundColour( wxColour( 192, 192, 192 ) );
+
+    wxString thumb = wxGetCwd() + wxFILE_SEP_PATH + wxT("image") + wxFILE_SEP_PATH + wxT("thumbnail.png");
+    wxBitmap bmp = wxBitmap( thumb, wxBITMAP_TYPE_PNG );
+	
+	m_bitmap0 = new wxStaticBitmap( this, wxID_ANY, bmp, wxDefaultPosition, wxSize( THUMB_W, THUMB_H ), 0 );
+	bSizer->Add( m_bitmap0, 0, wxALL|wxALIGN_CENTER, 5 );
+    m_bitmap0->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( PThumbnailPanel::OnClick0 ), NULL, this );
+	
+	m_bitmap1 = new wxStaticBitmap(this, wxID_ANY, bmp, wxDefaultPosition, wxSize( THUMB_W, THUMB_H ), 0 );
+	bSizer->Add( m_bitmap1, 0, wxALL|wxALIGN_CENTER, 5 );
+    m_bitmap1->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( PThumbnailPanel::OnClick1 ), NULL, this );
+	
+	m_bitmap2 = new wxStaticBitmap( this, wxID_ANY, bmp, wxDefaultPosition, wxSize( THUMB_W, THUMB_H ), 0 );
+	bSizer->Add( m_bitmap2, 0, wxALL|wxALIGN_CENTER, 5 );
+    m_bitmap2->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( PThumbnailPanel::OnClick2 ), NULL, this );
+	
+	m_bitmap3 = new wxStaticBitmap(this, wxID_ANY, bmp, wxDefaultPosition, wxSize( THUMB_W, THUMB_H ), 0 );
+	bSizer->Add( m_bitmap3, 0, wxALL|wxALIGN_CENTER, 5 );
+    m_bitmap3->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( PThumbnailPanel::OnClick3 ), NULL, this );
+	
+	m_bitmap4 = new wxStaticBitmap( this, wxID_ANY, bmp, wxDefaultPosition, wxSize( THUMB_W, THUMB_H ), 0 );
+	bSizer->Add( m_bitmap4, 0, wxALL|wxALIGN_CENTER, 5 );
+    m_bitmap4->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( PThumbnailPanel::OnClick4 ), NULL, this );
+	
+	m_bitmap5 = new wxStaticBitmap(this, wxID_ANY, bmp, wxDefaultPosition, wxSize( THUMB_W, THUMB_H ), 0 );
+	bSizer->Add( m_bitmap5, 0, wxALL|wxALIGN_CENTER, 5 );
+    m_bitmap5->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( PThumbnailPanel::OnClick5 ), NULL, this );
+	
+	this->SetSizer( bSizer );
+	this->Layout();
+}
+
+PThumbnailPanel::~PThumbnailPanel()
+{
+    m_bitmap0->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( PThumbnailPanel::OnClick0 ), NULL, this );
+    m_bitmap1->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( PThumbnailPanel::OnClick1 ), NULL, this );
+    m_bitmap2->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( PThumbnailPanel::OnClick2 ), NULL, this );
+    m_bitmap3->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( PThumbnailPanel::OnClick3 ), NULL, this );
+    m_bitmap4->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( PThumbnailPanel::OnClick4 ), NULL, this );
+    m_bitmap5->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( PThumbnailPanel::OnClick5 ), NULL, this );
+}
+
+// Functions
+/* サムネイル表示 */
+void PThumbnailPanel::SetFiles( wxArrayString imagefiles, wxArrayString cachefiles )
+{
+    m_imagefiles = imagefiles;
+
+    wxBitmap bmp;
+    bmp.LoadFile( cachefiles[0], wxBITMAP_TYPE_PNG ); m_bitmap0->SetBitmap( bmp );
+    bmp.LoadFile( cachefiles[1], wxBITMAP_TYPE_PNG ); m_bitmap1->SetBitmap( bmp );
+    bmp.LoadFile( cachefiles[2], wxBITMAP_TYPE_PNG ); m_bitmap2->SetBitmap( bmp );
+    bmp.LoadFile( cachefiles[3], wxBITMAP_TYPE_PNG ); m_bitmap3->SetBitmap( bmp );
+    bmp.LoadFile( cachefiles[4], wxBITMAP_TYPE_PNG ); m_bitmap4->SetBitmap( bmp );
+    bmp.LoadFile( cachefiles[5], wxBITMAP_TYPE_PNG ); m_bitmap5->SetBitmap( bmp );
+}
+/* 画像クリックで拡大表示 */
+void PThumbnailPanel::OnClick0( wxMouseEvent& WXUNUSED(event) ) { Preview( 0 ); }
+void PThumbnailPanel::OnClick1( wxMouseEvent& WXUNUSED(event) ) { Preview( 1 ); }
+void PThumbnailPanel::OnClick2( wxMouseEvent& WXUNUSED(event) ) { Preview( 2 ); }
+void PThumbnailPanel::OnClick3( wxMouseEvent& WXUNUSED(event) ) { Preview( 3 ); }
+void PThumbnailPanel::OnClick4( wxMouseEvent& WXUNUSED(event) ) { Preview( 4 ); }
+void PThumbnailPanel::OnClick5( wxMouseEvent& WXUNUSED(event) ) { Preview( 5 ); }
+void PThumbnailPanel::Preview( int n )
+{
+    if ( m_imagefiles.GetCount() < n + 1 ) return;
+    m_parent->SetPreviewImage( n );
+}
+
+
+////////////////////////////////////////////////////////
+// プレビューダイアログ
 PreviewDialog::PreviewDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) 
     : wxDialog( parent, id, title, pos, size, style )
 {
-	//this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-	
 	wxBoxSizer* bSizerTop = new wxBoxSizer( wxHORIZONTAL );
 
     m_scrolledWindow = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxALWAYS_SHOW_SB );
@@ -19,12 +97,8 @@
 	
 	wxBoxSizer* bSizerMenu = new wxBoxSizer( wxVERTICAL );
 	
-    /*
-	m_listCtrl = new wxListCtrl( this, ID_PLIST, wxDefaultPosition, wxSize( 140, -1 ), wxLC_ICON );
-    m_imageList = new wxImageList( THUMB_W, THUMB_H );
-    m_listCtrl->AssignImageList( m_imageList, wxIMAGE_LIST_NORMAL );
-	bSizerMenu->Add( m_listCtrl, 1, wxRIGHT|wxLEFT|wxBOTTOM|wxEXPAND, 5 );
-    */
+    m_thumbPanel = new PThumbnailPanel( this, wxID_ANY, wxDefaultPosition, wxSize( 100, -1 ), wxSUNKEN_BORDER );
+	bSizerMenu->Add( m_thumbPanel, 0, wxALL|wxEXPAND, 5 );
 
 	m_buttonPrint = new wxButton( this, ID_PRINT, wxT("印刷"), wxDefaultPosition, wxDefaultSize, 0 );
 	bSizerMenu->Add( m_buttonPrint, 0, wxALL, 5 );
@@ -51,19 +125,26 @@
 
 #define WIDTH  2480
 #define HEIGHT 3509
-void PreviewDialog::SetImage( wxString file )
+void PreviewDialog::SetPreviewImage( int n )
 {
     int w, h;
     m_scrolledWindow->GetSize( &w, &h );
     h = h * WIDTH / ( w - 200 );
 
     wxImage img;
-    img.LoadFile( file, wxBITMAP_TYPE_JPEG );
+    img.LoadFile( m_imagefiles[n], wxBITMAP_TYPE_JPEG );
     wxBitmap bmp( img.Scale( w, h, wxIMAGE_QUALITY_HIGH ) );
     m_bitmap->SetBitmap( bmp );
 
     m_scrolledWindow->SetScrollbars( 10, 10, 0, h/10 );
-    m_preview = file;
+    m_preview = m_imagefiles[n];
+}
+
+void PreviewDialog::SetFiles( wxArrayString imagefiles, wxArrayString cachefiles )
+{ 
+    m_imagefiles = imagefiles;
+    m_cachefiles = cachefiles;
+    m_thumbPanel->SetFiles( m_imagefiles, m_cachefiles );
 }
 
 void PreviewDialog::OnPrint( wxCommandEvent& WXUNUSED(envet) )