view src/cache.cpp @ 18:a8e6e5769e3b

Small fixes.
author pyon@macmini
date Sat, 29 Nov 2014 11:02:35 +0900
parents 52958cd4a073
children a2ad87cad48b
line wrap: on
line source

// Filename   : cache.cpp
// Last Change: 21-Nov-2014.
//

#include "cache.h"
#include "db.h"

CacheDialog::CacheDialog( 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( wxVERTICAL );
	
	m_datePickerBgn = new wxDatePickerCtrl( this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxDP_DEFAULT );
	bSizerTop->Add( m_datePickerBgn, 0, wxALL, 5 );
	
	m_datePickerEnd = new wxDatePickerCtrl( this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxDP_DEFAULT );
	bSizerTop->Add( m_datePickerEnd, 0, wxALL, 5 );
	
	m_buttonMake = new wxButton( this, ID_MKCACHE, wxT("作成"), wxDefaultPosition, wxDefaultSize, 0 );
	bSizerTop->Add( m_buttonMake, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
	
	m_buttonClose = new wxButton( this, ID_CLOSE, wxT("閉じる"), wxDefaultPosition, wxDefaultSize, 0 );
	m_buttonClose->SetDefault(); 
	bSizerTop->Add( m_buttonClose, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
	
	this->SetSizer( bSizerTop );
	this->Layout();
	bSizerTop->Fit( this );
	
	this->Centre( wxBOTH );
}

CacheDialog::~CacheDialog()
{
}

// Event Table
BEGIN_EVENT_TABLE( CacheDialog, wxDialog )
    EVT_BUTTON( ID_MKCACHE, CacheDialog::OnMakeCache )
    EVT_BUTTON( ID_CLOSE,   CacheDialog::OnClose )
END_EVENT_TABLE()

// Event Handlers & Functions
void CacheDialog::Setting( wxString rootdir, int w, int h )
{
    m_rootdir = rootdir;
    m_width   = w;
    m_height  = h;
}

void CacheDialog::OnMakeCache( wxCommandEvent& WXUNUSED(event) )	
{
    wxDateTime b = m_datePickerBgn->GetValue();
    wxDateTime e = m_datePickerEnd->GetValue();
    
    MakeCache( b.Format( wxT("%Y%m%d")), e.Format( wxT("%Y%m%d")) );
}

void CacheDialog::MakeCache( wxString from, wxString to )
{
    wxArrayString path = GetPathes( from, to );
    wxString cachedir = wxGetCwd() + wxFILE_SEP_PATH + wxT("cache");

    for ( int i = 0; i < path.GetCount(); i++ ) {

        wxArrayString files;
        wxDir::GetAllFiles( path[i], &files, wxT("*.jpg"), wxDIR_DEFAULT );

        for ( int j = 0; j < files.GetCount(); j++ ) {
            wxImage image( files[j], wxBITMAP_TYPE_JPEG );
            wxImage output = image.Scale( m_width, m_height, wxIMAGE_QUALITY_HIGH );

            wxString buf = files[j];
            buf.Replace( m_rootdir, cachedir, false );
            buf = buf.BeforeLast( '.' ) + wxT(".png");

            wxFileName tf( buf );
            if ( !tf.Exists() ) tf.Mkdir( wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL );
            output.SaveFile( buf, wxBITMAP_TYPE_PNG );
        }
        wxSleep( 30 );
    }

    wxMessageBox( wxT("cache updated.") );
}

void CacheDialog::OnClose( wxCommandEvent& WXUNUSED(event) )
{
    Close();
}