comparison src/preview.cpp @ 14:ac17a73e39b3

Zoom in / out in Preview Dialog.
author pyon@macmini
date Thu, 05 Jun 2014 04:19:03 +0900
parents bbd65edf71d4
children de222bc84e48
comparison
equal deleted inserted replaced
13:bbd65edf71d4 14:ac17a73e39b3
1 // Filename : preview.cpp 1 // Filename : preview.cpp
2 // Last Change: 23-May-2014. 2 // Last Change: 04-Jun-2014.
3 // 3 //
4 4
5 #include "marksheet.h" 5 #include "marksheet.h"
6 #include "preview.h" 6 #include "preview.h"
7 #define THUMB_W 60 7 #define THUMB_W 60
132 PreviewDialog::PreviewDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) 132 PreviewDialog::PreviewDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style )
133 : wxDialog( parent, id, title, pos, size, style ) 133 : wxDialog( parent, id, title, pos, size, style )
134 { 134 {
135 wxBoxSizer* bSizerTop = new wxBoxSizer( wxHORIZONTAL ); 135 wxBoxSizer* bSizerTop = new wxBoxSizer( wxHORIZONTAL );
136 136
137 m_scrolledWindow = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxALWAYS_SHOW_SB ); 137 m_scrolledWindow = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL|wxALWAYS_SHOW_SB );
138 m_scrolledWindow->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PreviewDialog::OnWheel ), NULL, this );
138 m_bitmap = new wxStaticBitmap( m_scrolledWindow, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); 139 m_bitmap = new wxStaticBitmap( m_scrolledWindow, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
140 m_bitmap->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( PreviewDialog::OnDClick ), NULL, this );
139 bSizerTop->Add( m_scrolledWindow, 1, wxALL|wxEXPAND, 5 ); 141 bSizerTop->Add( m_scrolledWindow, 1, wxALL|wxEXPAND, 5 );
140 142
141 wxBoxSizer* bSizerMenu = new wxBoxSizer( wxVERTICAL ); 143 wxBoxSizer* bSizerMenu = new wxBoxSizer( wxVERTICAL );
142 144
143 m_thumbPanel = new PThumbnailPanel( this, wxID_ANY, wxDefaultPosition, wxSize( 100, -1 ), wxSUNKEN_BORDER ); 145 m_thumbPanel = new PThumbnailPanel( this, wxID_ANY, wxDefaultPosition, wxSize( 100, -1 ), wxSUNKEN_BORDER );
162 this->Layout(); 164 this->Layout();
163 } 165 }
164 166
165 PreviewDialog::~PreviewDialog() 167 PreviewDialog::~PreviewDialog()
166 { 168 {
169 m_scrolledWindow->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PreviewDialog::OnWheel ), NULL, this );
170 m_bitmap->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( PreviewDialog::OnDClick ), NULL, this );
167 } 171 }
168 172
169 // Event Table 173 // Event Table
170 BEGIN_EVENT_TABLE( PreviewDialog, wxDialog ) 174 BEGIN_EVENT_TABLE( PreviewDialog, wxDialog )
171 EVT_BUTTON( ID_PRINT, PreviewDialog::OnPrint ) 175 EVT_BUTTON( ID_PRINT, PreviewDialog::OnPrint )
172 END_EVENT_TABLE() 176 END_EVENT_TABLE()
173 177
174 #define WIDTH 2480 178 #define WIDTH 2480
175 #define HEIGHT 3509 179 #define HEIGHT 3509
176 void PreviewDialog::SetPreviewImage( int n ) 180 void PreviewDialog::SetPreviewImage( int n )
177 { 181 {
178 int w, h;
179 m_scrolledWindow->GetSize( &w, &h );
180 h = h * WIDTH / ( w - 200 );
181
182 wxImage img;
183 img.LoadFile( m_imagefiles[n], wxBITMAP_TYPE_JPEG );
184 wxBitmap bmp( img.Scale( w, h, wxIMAGE_QUALITY_HIGH ) );
185 m_bitmap->SetBitmap( bmp );
186
187 m_scrolledWindow->Scroll( 0, 0 );
188 m_scrolledWindow->SetScrollbars( 10, 10, 0, h/10 );
189 m_preview = m_imagefiles[n]; 182 m_preview = m_imagefiles[n];
190 183 m_zoom = 1.0;
191 // 184 SetZoom( m_zoom );
185
186 // file info
192 float z; 187 float z;
193 long l; 188 long l;
194 GetScore( &z, &l, m_imagefiles[n] ); 189 GetScore( &z, &l, m_imagefiles[n] );
195 wxString info = m_imagefiles[n].AfterLast( wxFILE_SEP_PATH ); 190 wxString info = m_imagefiles[n].AfterLast( wxFILE_SEP_PATH );
196 info += wxString::Format( wxT("\n%z = %f"), z ); 191 info += wxString::Format( wxT("\n%z = %f"), z );
197 info += wxString::Format( wxT("\n%l = %ld"), l ); 192 info += wxString::Format( wxT("\n%l = %ld"), l );
198 m_textInfo->SetValue( info ); 193 m_textInfo->SetValue( info );
199 } 194 }
200 195
196 void PreviewDialog::SetZoom( float zoom )
197 {
198 int w, h;
199 m_scrolledWindow->GetSize( &w, &h );
200 w = (int)( zoom * h * WIDTH / HEIGHT );
201 h = (int)( zoom * h );
202
203 m_bitmap->SetBitmap( wxNullBitmap );
204 wxImage img;
205 img.LoadFile( m_preview, wxBITMAP_TYPE_JPEG );
206 wxBitmap bmp( img.Scale( w, h, wxIMAGE_QUALITY_HIGH ) );
207 m_bitmap->SetBitmap( bmp );
208 m_bitmap->Centre( wxHORIZONTAL );
209
210 m_scrolledWindow->Scroll( 0, 0 );
211 m_scrolledWindow->SetScrollbars( 10, 10, 0, h/10 );
212 }
213
201 void PreviewDialog::SetFiles( wxArrayString imagefiles, wxArrayString cachefiles, int select ) 214 void PreviewDialog::SetFiles( wxArrayString imagefiles, wxArrayString cachefiles, int select )
202 { 215 {
203 m_imagefiles = imagefiles; 216 m_imagefiles = imagefiles;
204 m_cachefiles = cachefiles; 217 m_cachefiles = cachefiles;
205 m_thumbPanel->SetFiles( m_imagefiles, m_cachefiles, select ); 218 m_thumbPanel->SetFiles( m_imagefiles, m_cachefiles, select );
206 219
207 wxString title = wxT("プレビュー @ ") + m_imagefiles[0].BeforeLast( wxFILE_SEP_PATH ); 220 wxString title = wxT("プレビュー @ ") + m_imagefiles[0].BeforeLast( wxFILE_SEP_PATH );
208 this->SetTitle( title ); 221 this->SetTitle( title );
209 } 222 }
210 223
224 void PreviewDialog::OnWheel( wxMouseEvent& event )
225 {
226 if ( event.ControlDown() ) {
227 if ( event.GetWheelRotation() < 0 ) {
228 if ( m_zoom > 2.1 ) return;
229 m_zoom *= 1.3;
230 }
231 else {
232 if ( m_zoom <= 1.0 ) return;
233 m_zoom /= 1.3;
234 }
235 SetZoom( m_zoom );
236 return;
237 }
238 event.Skip();
239 }
240
241 void PreviewDialog::OnDClick( wxMouseEvent& WXUNUSED(event) )
242 {
243 if ( m_zoom > 2.1 ) m_zoom = 1.0;
244 else m_zoom *= 1.3;
245
246 SetZoom( m_zoom );
247 }
248
211 void PreviewDialog::OnPrint( wxCommandEvent& WXUNUSED(event) ) 249 void PreviewDialog::OnPrint( wxCommandEvent& WXUNUSED(event) )
212 { 250 {
213 wxString html; 251 wxString html;
214 html = html + wxT("<html><body>\n"); 252 html = html + wxT("<html><body>\n");
215 253