diff myframe.cpp @ 0:ebc42d7a0010

First Release.
author pyon@macmini
date Fri, 24 Jan 2014 20:35:59 +0900
parents
children 593c93e904b5
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/myframe.cpp	Fri Jan 24 20:35:59 2014 +0900
@@ -0,0 +1,320 @@
+// Filename   : myframe.cpp
+// Last Change: 24-Jan-2014.
+//
+
+#include "myframe.h"
+#include "dndfile.h"
+#include "sample.xpm"
+
+MyFrame::MyFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) 
+    : wxFrame( parent, id, title, pos, size, style )
+{
+    this->SetIcon( wxIcon( wxT("sample") ) );
+	this->SetSizeHints( wxSize( 450, 200 ), wxSize( 450, 200 ) );
+	this->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+	this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNTEXT ) );
+	
+	wxBoxSizer* bSizerTop = new wxBoxSizer( wxVERTICAL );
+	
+    // Source
+	wxBoxSizer* bSizerSource = new wxBoxSizer( wxHORIZONTAL );
+	
+	m_staticTextSource = new wxStaticText( this, wxID_ANY, wxT("Source"), wxDefaultPosition, wxSize( 90,-1 ), wxALIGN_RIGHT );
+	m_staticTextSource->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
+	m_staticTextSource->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) );
+	
+	bSizerSource->Add( m_staticTextSource, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+	
+	m_textCtrlSource = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 200,-1 ), wxTAB_TRAVERSAL );
+	bSizerSource->Add( m_textCtrlSource, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+	
+	bSizerTop->Add( bSizerSource, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
+	
+    // Config
+    // Type
+	wxBoxSizer* bSizerConfig = new wxBoxSizer( wxHORIZONTAL );
+	
+	m_staticTextConfig = new wxStaticText( this, wxID_ANY, wxT("Config"), wxDefaultPosition, wxSize( 90,-1 ), wxALIGN_RIGHT );
+	m_staticTextConfig->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
+	m_staticTextConfig->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) );
+	bSizerConfig->Add( m_staticTextConfig, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+	m_staticTextType = new wxStaticText( this, wxID_ANY, wxT("Type"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
+	m_staticTextType->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
+	m_staticTextType->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) );
+	bSizerConfig->Add( m_staticTextType, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+	
+	m_comboBoxType = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY|wxTAB_TRAVERSAL );
+	m_comboBoxType->Append( wxT("Not change") );
+	m_comboBoxType->Append( wxT("PNG")  );
+	m_comboBoxType->Append( wxT("XPM")  );
+	m_comboBoxType->Append( wxT("GIF")  );
+	m_comboBoxType->Append( wxT("ICON") );
+	m_comboBoxType->Append( wxT("BMP")  );
+	m_comboBoxType->Append( wxT("TIFF") );
+	m_comboBoxType->SetSelection( 0 );
+	bSizerConfig->Add( m_comboBoxType, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+	
+    // Size
+	m_staticTextSize = new wxStaticText( this, wxID_ANY, wxT("Size"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
+	m_staticTextSize->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
+	m_staticTextSize->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) );
+	bSizerConfig->Add( m_staticTextSize, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+	
+	m_staticTextWidth = new wxStaticText( this, wxID_ANY, wxT("Width"), wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+	m_staticTextWidth->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
+	m_staticTextWidth->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) );
+	bSizerConfig->Add( m_staticTextWidth, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+	
+	m_textCtrlWidth = new wxTextCtrl( this, wxID_ANY, wxT("0"), wxDefaultPosition, wxSize( 40, -1 ), wxTE_CENTRE );
+	bSizerConfig->Add( m_textCtrlWidth, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+	
+	m_staticTextHeight = new wxStaticText( this, wxID_ANY, wxT("Height"), wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+	m_staticTextHeight->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
+	m_staticTextHeight->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) );
+	bSizerConfig->Add( m_staticTextHeight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+	
+	m_textCtrlHeight = new wxTextCtrl( this, wxID_ANY, wxT("0"), wxDefaultPosition, wxSize( 50, -1 ), wxTE_CENTRE );
+	bSizerConfig->Add( m_textCtrlHeight, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+	
+	bSizerTop->Add( bSizerConfig, 1, wxEXPAND, 5 );
+	
+    // Output
+	wxBoxSizer* bSizerOutput = new wxBoxSizer( wxHORIZONTAL );
+	
+	m_staticTextOutput = new wxStaticText( this, wxID_ANY, wxT("Output folder"), wxDefaultPosition, wxSize( 90,-1 ), wxALIGN_RIGHT );
+	m_staticTextOutput->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
+	m_staticTextOutput->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) );
+	bSizerOutput->Add( m_staticTextOutput, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+	
+	m_dirPicker = new wxDirPickerCtrl( this, wxID_ANY, wxGetCwd(), wxT("Select a folder"), wxDefaultPosition, wxSize( 200,-1 ), wxDIRP_DEFAULT_STYLE );
+	m_dirPicker->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) );
+	bSizerOutput->Add( m_dirPicker, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+	
+	bSizerTop->Add( bSizerOutput, 1, wxEXPAND, 5 );
+	
+    // Button
+	wxBoxSizer* bSizerButton = new wxBoxSizer( wxHORIZONTAL );
+	
+	m_buttonExec = new wxButton( this, ID_EXEC, wxT("Exec"), wxDefaultPosition, wxDefaultSize, 0 );
+	bSizerButton->Add( m_buttonExec, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+	
+	m_buttonExit = new wxButton( this, ID_EXIT, wxT("Exit"), wxDefaultPosition, wxDefaultSize, 0 );
+	bSizerButton->Add( m_buttonExit, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+	
+	bSizerTop->Add( bSizerButton, 1, wxALIGN_RIGHT|wxALL, 5 );
+	
+    //
+	this->SetSizer( bSizerTop );
+	this->Layout();
+	
+    this->SetDropTarget( new DnDFile( m_textCtrlSource ) );
+
+	this->Centre( wxBOTH );
+}
+
+MyFrame::~MyFrame()
+{
+}
+
+// Event Table
+BEGIN_EVENT_TABLE( MyFrame, wxFrame )
+    EVT_BUTTON( ID_EXEC, MyFrame::OnExec )
+    EVT_BUTTON( ID_EXIT, MyFrame::OnExit )
+END_EVENT_TABLE()
+
+void MyFrame::OnExec( wxCommandEvent& WXUNUSED(event) )
+{
+    wxString buf;
+
+    wxString file, path;
+    buf = m_textCtrlSource->GetValue();
+    if ( wxFileName::FileExists( buf ) ) file = buf;
+    if ( wxFileName::DirExists( buf  ) ) path = buf;
+    if ( file.IsEmpty() && path.IsEmpty() ) {
+        WarnMessage( wxT("no input !") );
+        return;
+    }
+    
+    choice_type = m_comboBoxType->GetSelection();
+
+    buf = m_textCtrlWidth->GetValue();
+    buf.ToLong( &w, 10 );
+    buf = m_textCtrlHeight->GetValue();
+    buf.ToLong( &h, 10 );
+
+    if ( choice_type == 0 && w == 0 && h == 0 ) {
+        WarnMessage( wxT("no change !") );
+        return;
+    }
+
+    buf = m_dirPicker->GetPath();
+    if ( buf.IsEmpty() ) {
+        WarnMessage( wxT("no output directory !") );
+        return;
+    }
+    out_dir = buf;
+
+    bool result;
+    if ( file.IsEmpty() ) {
+        result = ConvertFiles( path );
+    }
+    else {
+        result = ConvertAFile( file );
+    }
+    if ( !result ) return;
+    
+    wxMessageDialog *md = new wxMessageDialog( this, wxT("Done !"), wxT("Message"), wxICON_INFORMATION|wxOK );
+    md->ShowModal();
+    md->Destroy();
+}
+
+void MyFrame::OnExit( wxCommandEvent& WXUNUSED(event) )
+{
+    Close();
+}
+
+void MyFrame::WarnMessage( wxString msg ) 
+{
+    wxMessageDialog *md = new wxMessageDialog( this, msg, wxT("Warning"), wxICON_ERROR|wxOK );
+    md->ShowModal();
+    md->Destroy();
+}
+
+bool MyFrame::ConvertAFile( wxString file )
+{
+    wxFileName f( file );
+    wxString ext = f.GetExt();
+    wxString name = f.GetName();
+    int in_type;
+
+    if      ( ext.IsSameAs( wxT("jpg"),  false ) ) in_type = wxBITMAP_TYPE_JPEG;
+    else if ( ext.IsSameAs( wxT("jpeg"), false ) ) in_type = wxBITMAP_TYPE_JPEG;
+    else if ( ext.IsSameAs( wxT("png"),  false ) ) in_type = wxBITMAP_TYPE_PNG;
+    else if ( ext.IsSameAs( wxT("xpm"),  false ) ) in_type = wxBITMAP_TYPE_XPM;
+    else if ( ext.IsSameAs( wxT("gif"),  false ) ) in_type = wxBITMAP_TYPE_GIF;
+    else if ( ext.IsSameAs( wxT("ico"),  false ) ) in_type = wxBITMAP_TYPE_ICO;
+    else if ( ext.IsSameAs( wxT("bmp"),  false ) ) in_type = wxBITMAP_TYPE_BMP;
+    else if ( ext.IsSameAs( wxT("tif"),  false ) ) in_type = wxBITMAP_TYPE_TIFF;
+    else if ( ext.IsSameAs( wxT("tiff"), false ) ) in_type = wxBITMAP_TYPE_TIFF;
+
+    int out_type = in_type;
+    if ( choice_type == 1 ) {
+        out_type = wxBITMAP_TYPE_PNG;
+        ext = wxT("png");
+    }
+    else if ( choice_type == 2 ) {
+        out_type = wxBITMAP_TYPE_XPM;
+        ext = wxT("xpm");
+    }
+    else if ( choice_type == 3 ) {
+        out_type = wxBITMAP_TYPE_GIF;
+        ext = wxT("gif");
+    }
+    else if ( choice_type == 4 ) {
+        out_type = wxBITMAP_TYPE_ICO;
+        ext = wxT("ico");
+    }
+    else if ( choice_type == 5 ) {
+        out_type = wxBITMAP_TYPE_BMP;
+        ext = wxT("bmp");
+    }
+    else if ( choice_type == 6 ) {
+        out_type = wxBITMAP_TYPE_TIFF;
+        ext = wxT("tiff");
+    }
+
+    wxImage image( file, in_type );
+    if ( w == 0 || h == 0 ) {
+        w = (long)(image.GetWidth());
+        h = (long)(image.GetHeight());
+    }
+    wxImage output = image.Scale( (int)w, (int)h, wxIMAGE_QUALITY_HIGH );
+    wxString outfile = out_dir + wxFILE_SEP_PATH + name + wxT(".") + ext;
+
+    if ( file.IsSameAs( outfile ) ) {
+        WarnMessage( wxT("Output file is same as input file !") );
+        return false;
+    }
+
+    output.SaveFile( outfile, out_type );
+    return true;
+}
+
+bool MyFrame::ConvertFiles( wxString dir )
+{
+    wxFileName dn( dir );
+
+    if ( out_dir.IsSameAs( dn.GetPath() ) ) {
+        WarnMessage( wxT("Output directory is same as input directory !") );
+        return false;
+    }
+
+    int out_type = wxBITMAP_TYPE_INVALID;
+    wxString out_ext;
+    if ( choice_type == 1 ) {
+        out_type = wxBITMAP_TYPE_PNG;
+        out_ext = wxT("png");
+    }
+    else if ( choice_type == 2 ) {
+        out_type = wxBITMAP_TYPE_XPM;
+        out_ext = wxT("xpm");
+    }
+    else if ( choice_type == 3 ) {
+        out_type = wxBITMAP_TYPE_GIF;
+        out_ext = wxT("gif");
+    }
+    else if ( choice_type == 4 ) {
+        out_type = wxBITMAP_TYPE_ICO;
+        out_ext = wxT("ico");
+    }
+    else if ( choice_type == 5 ) {
+        out_type = wxBITMAP_TYPE_BMP;
+        out_ext = wxT("bmp");
+    }
+    else if ( choice_type == 6 ) {
+        out_type = wxBITMAP_TYPE_TIFF;
+        out_ext = wxT("tiff");
+    }
+
+    wxArrayString files;
+    wxDir::GetAllFiles( dir, &files, wxT("*.*"), wxDIR_DEFAULT );
+
+    for ( int i = 0; i < files.GetCount(); i++ ) {
+
+        wxFileName fn( files[i] );
+        wxString in_ext = fn.GetExt();
+        int in_type;
+
+        if      ( in_ext.IsSameAs( wxT("jpg"),  false ) ) in_type = wxBITMAP_TYPE_JPEG;
+        else if ( in_ext.IsSameAs( wxT("jpeg"), false ) ) in_type = wxBITMAP_TYPE_JPEG;
+        else if ( in_ext.IsSameAs( wxT("png"),  false ) ) in_type = wxBITMAP_TYPE_PNG;
+        else if ( in_ext.IsSameAs( wxT("xpm"),  false ) ) in_type = wxBITMAP_TYPE_XPM;
+        else if ( in_ext.IsSameAs( wxT("gif"),  false ) ) in_type = wxBITMAP_TYPE_GIF;
+        else if ( in_ext.IsSameAs( wxT("ico"),  false ) ) in_type = wxBITMAP_TYPE_ICO;
+        else if ( in_ext.IsSameAs( wxT("bmp"),  false ) ) in_type = wxBITMAP_TYPE_BMP;
+        else if ( in_ext.IsSameAs( wxT("tif"),  false ) ) in_type = wxBITMAP_TYPE_TIFF;
+        else if ( in_ext.IsSameAs( wxT("tiff"), false ) ) in_type = wxBITMAP_TYPE_TIFF;
+
+        if ( out_type == wxBITMAP_TYPE_INVALID ) out_type = in_type;
+
+        wxString fullpath = fn.GetPath() + wxFILE_SEP_PATH + fn.GetName();
+
+        fullpath.Replace( dn.GetPath(), wxEmptyString, false );
+        fullpath = out_dir + fullpath + wxT(".") + out_ext;
+
+        wxFileName tf( fullpath );
+        if ( !tf.Exists() ) tf.Mkdir( wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL );
+
+        wxImage image( files[i], in_type );
+        if ( w == 0 || h == 0 ) {
+            w = (long)(image.GetWidth());
+            h = (long)(image.GetHeight());
+        }
+        wxImage output = image.Scale( (int)w, (int)h, wxIMAGE_QUALITY_HIGH );
+        output.SaveFile( fullpath, out_type );
+    }
+
+    return true;
+}
+