Mercurial > mercurial > hgweb_imcv.cgi
comparison myframe.cpp @ 0:ebc42d7a0010
First Release.
| author | pyon@macmini |
|---|---|
| date | Fri, 24 Jan 2014 20:35:59 +0900 |
| parents | |
| children | 593c93e904b5 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:ebc42d7a0010 |
|---|---|
| 1 // Filename : myframe.cpp | |
| 2 // Last Change: 24-Jan-2014. | |
| 3 // | |
| 4 | |
| 5 #include "myframe.h" | |
| 6 #include "dndfile.h" | |
| 7 #include "sample.xpm" | |
| 8 | |
| 9 MyFrame::MyFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) | |
| 10 : wxFrame( parent, id, title, pos, size, style ) | |
| 11 { | |
| 12 this->SetIcon( wxIcon( wxT("sample") ) ); | |
| 13 this->SetSizeHints( wxSize( 450, 200 ), wxSize( 450, 200 ) ); | |
| 14 this->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); | |
| 15 this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNTEXT ) ); | |
| 16 | |
| 17 wxBoxSizer* bSizerTop = new wxBoxSizer( wxVERTICAL ); | |
| 18 | |
| 19 // Source | |
| 20 wxBoxSizer* bSizerSource = new wxBoxSizer( wxHORIZONTAL ); | |
| 21 | |
| 22 m_staticTextSource = new wxStaticText( this, wxID_ANY, wxT("Source"), wxDefaultPosition, wxSize( 90,-1 ), wxALIGN_RIGHT ); | |
| 23 m_staticTextSource->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); | |
| 24 m_staticTextSource->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) ); | |
| 25 | |
| 26 bSizerSource->Add( m_staticTextSource, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | |
| 27 | |
| 28 m_textCtrlSource = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 200,-1 ), wxTAB_TRAVERSAL ); | |
| 29 bSizerSource->Add( m_textCtrlSource, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | |
| 30 | |
| 31 bSizerTop->Add( bSizerSource, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); | |
| 32 | |
| 33 // Config | |
| 34 // Type | |
| 35 wxBoxSizer* bSizerConfig = new wxBoxSizer( wxHORIZONTAL ); | |
| 36 | |
| 37 m_staticTextConfig = new wxStaticText( this, wxID_ANY, wxT("Config"), wxDefaultPosition, wxSize( 90,-1 ), wxALIGN_RIGHT ); | |
| 38 m_staticTextConfig->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); | |
| 39 m_staticTextConfig->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) ); | |
| 40 bSizerConfig->Add( m_staticTextConfig, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | |
| 41 | |
| 42 m_staticTextType = new wxStaticText( this, wxID_ANY, wxT("Type"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); | |
| 43 m_staticTextType->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); | |
| 44 m_staticTextType->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) ); | |
| 45 bSizerConfig->Add( m_staticTextType, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | |
| 46 | |
| 47 m_comboBoxType = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY|wxTAB_TRAVERSAL ); | |
| 48 m_comboBoxType->Append( wxT("Not change") ); | |
| 49 m_comboBoxType->Append( wxT("PNG") ); | |
| 50 m_comboBoxType->Append( wxT("XPM") ); | |
| 51 m_comboBoxType->Append( wxT("GIF") ); | |
| 52 m_comboBoxType->Append( wxT("ICON") ); | |
| 53 m_comboBoxType->Append( wxT("BMP") ); | |
| 54 m_comboBoxType->Append( wxT("TIFF") ); | |
| 55 m_comboBoxType->SetSelection( 0 ); | |
| 56 bSizerConfig->Add( m_comboBoxType, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | |
| 57 | |
| 58 // Size | |
| 59 m_staticTextSize = new wxStaticText( this, wxID_ANY, wxT("Size"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); | |
| 60 m_staticTextSize->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); | |
| 61 m_staticTextSize->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) ); | |
| 62 bSizerConfig->Add( m_staticTextSize, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | |
| 63 | |
| 64 m_staticTextWidth = new wxStaticText( this, wxID_ANY, wxT("Width"), wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); | |
| 65 m_staticTextWidth->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); | |
| 66 m_staticTextWidth->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) ); | |
| 67 bSizerConfig->Add( m_staticTextWidth, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); | |
| 68 | |
| 69 m_textCtrlWidth = new wxTextCtrl( this, wxID_ANY, wxT("0"), wxDefaultPosition, wxSize( 40, -1 ), wxTE_CENTRE ); | |
| 70 bSizerConfig->Add( m_textCtrlWidth, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | |
| 71 | |
| 72 m_staticTextHeight = new wxStaticText( this, wxID_ANY, wxT("Height"), wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); | |
| 73 m_staticTextHeight->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); | |
| 74 m_staticTextHeight->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) ); | |
| 75 bSizerConfig->Add( m_staticTextHeight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); | |
| 76 | |
| 77 m_textCtrlHeight = new wxTextCtrl( this, wxID_ANY, wxT("0"), wxDefaultPosition, wxSize( 50, -1 ), wxTE_CENTRE ); | |
| 78 bSizerConfig->Add( m_textCtrlHeight, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | |
| 79 | |
| 80 bSizerTop->Add( bSizerConfig, 1, wxEXPAND, 5 ); | |
| 81 | |
| 82 // Output | |
| 83 wxBoxSizer* bSizerOutput = new wxBoxSizer( wxHORIZONTAL ); | |
| 84 | |
| 85 m_staticTextOutput = new wxStaticText( this, wxID_ANY, wxT("Output folder"), wxDefaultPosition, wxSize( 90,-1 ), wxALIGN_RIGHT ); | |
| 86 m_staticTextOutput->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); | |
| 87 m_staticTextOutput->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) ); | |
| 88 bSizerOutput->Add( m_staticTextOutput, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | |
| 89 | |
| 90 m_dirPicker = new wxDirPickerCtrl( this, wxID_ANY, wxGetCwd(), wxT("Select a folder"), wxDefaultPosition, wxSize( 200,-1 ), wxDIRP_DEFAULT_STYLE ); | |
| 91 m_dirPicker->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DDKSHADOW ) ); | |
| 92 bSizerOutput->Add( m_dirPicker, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | |
| 93 | |
| 94 bSizerTop->Add( bSizerOutput, 1, wxEXPAND, 5 ); | |
| 95 | |
| 96 // Button | |
| 97 wxBoxSizer* bSizerButton = new wxBoxSizer( wxHORIZONTAL ); | |
| 98 | |
| 99 m_buttonExec = new wxButton( this, ID_EXEC, wxT("Exec"), wxDefaultPosition, wxDefaultSize, 0 ); | |
| 100 bSizerButton->Add( m_buttonExec, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | |
| 101 | |
| 102 m_buttonExit = new wxButton( this, ID_EXIT, wxT("Exit"), wxDefaultPosition, wxDefaultSize, 0 ); | |
| 103 bSizerButton->Add( m_buttonExit, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | |
| 104 | |
| 105 bSizerTop->Add( bSizerButton, 1, wxALIGN_RIGHT|wxALL, 5 ); | |
| 106 | |
| 107 // | |
| 108 this->SetSizer( bSizerTop ); | |
| 109 this->Layout(); | |
| 110 | |
| 111 this->SetDropTarget( new DnDFile( m_textCtrlSource ) ); | |
| 112 | |
| 113 this->Centre( wxBOTH ); | |
| 114 } | |
| 115 | |
| 116 MyFrame::~MyFrame() | |
| 117 { | |
| 118 } | |
| 119 | |
| 120 // Event Table | |
| 121 BEGIN_EVENT_TABLE( MyFrame, wxFrame ) | |
| 122 EVT_BUTTON( ID_EXEC, MyFrame::OnExec ) | |
| 123 EVT_BUTTON( ID_EXIT, MyFrame::OnExit ) | |
| 124 END_EVENT_TABLE() | |
| 125 | |
| 126 void MyFrame::OnExec( wxCommandEvent& WXUNUSED(event) ) | |
| 127 { | |
| 128 wxString buf; | |
| 129 | |
| 130 wxString file, path; | |
| 131 buf = m_textCtrlSource->GetValue(); | |
| 132 if ( wxFileName::FileExists( buf ) ) file = buf; | |
| 133 if ( wxFileName::DirExists( buf ) ) path = buf; | |
| 134 if ( file.IsEmpty() && path.IsEmpty() ) { | |
| 135 WarnMessage( wxT("no input !") ); | |
| 136 return; | |
| 137 } | |
| 138 | |
| 139 choice_type = m_comboBoxType->GetSelection(); | |
| 140 | |
| 141 buf = m_textCtrlWidth->GetValue(); | |
| 142 buf.ToLong( &w, 10 ); | |
| 143 buf = m_textCtrlHeight->GetValue(); | |
| 144 buf.ToLong( &h, 10 ); | |
| 145 | |
| 146 if ( choice_type == 0 && w == 0 && h == 0 ) { | |
| 147 WarnMessage( wxT("no change !") ); | |
| 148 return; | |
| 149 } | |
| 150 | |
| 151 buf = m_dirPicker->GetPath(); | |
| 152 if ( buf.IsEmpty() ) { | |
| 153 WarnMessage( wxT("no output directory !") ); | |
| 154 return; | |
| 155 } | |
| 156 out_dir = buf; | |
| 157 | |
| 158 bool result; | |
| 159 if ( file.IsEmpty() ) { | |
| 160 result = ConvertFiles( path ); | |
| 161 } | |
| 162 else { | |
| 163 result = ConvertAFile( file ); | |
| 164 } | |
| 165 if ( !result ) return; | |
| 166 | |
| 167 wxMessageDialog *md = new wxMessageDialog( this, wxT("Done !"), wxT("Message"), wxICON_INFORMATION|wxOK ); | |
| 168 md->ShowModal(); | |
| 169 md->Destroy(); | |
| 170 } | |
| 171 | |
| 172 void MyFrame::OnExit( wxCommandEvent& WXUNUSED(event) ) | |
| 173 { | |
| 174 Close(); | |
| 175 } | |
| 176 | |
| 177 void MyFrame::WarnMessage( wxString msg ) | |
| 178 { | |
| 179 wxMessageDialog *md = new wxMessageDialog( this, msg, wxT("Warning"), wxICON_ERROR|wxOK ); | |
| 180 md->ShowModal(); | |
| 181 md->Destroy(); | |
| 182 } | |
| 183 | |
| 184 bool MyFrame::ConvertAFile( wxString file ) | |
| 185 { | |
| 186 wxFileName f( file ); | |
| 187 wxString ext = f.GetExt(); | |
| 188 wxString name = f.GetName(); | |
| 189 int in_type; | |
| 190 | |
| 191 if ( ext.IsSameAs( wxT("jpg"), false ) ) in_type = wxBITMAP_TYPE_JPEG; | |
| 192 else if ( ext.IsSameAs( wxT("jpeg"), false ) ) in_type = wxBITMAP_TYPE_JPEG; | |
| 193 else if ( ext.IsSameAs( wxT("png"), false ) ) in_type = wxBITMAP_TYPE_PNG; | |
| 194 else if ( ext.IsSameAs( wxT("xpm"), false ) ) in_type = wxBITMAP_TYPE_XPM; | |
| 195 else if ( ext.IsSameAs( wxT("gif"), false ) ) in_type = wxBITMAP_TYPE_GIF; | |
| 196 else if ( ext.IsSameAs( wxT("ico"), false ) ) in_type = wxBITMAP_TYPE_ICO; | |
| 197 else if ( ext.IsSameAs( wxT("bmp"), false ) ) in_type = wxBITMAP_TYPE_BMP; | |
| 198 else if ( ext.IsSameAs( wxT("tif"), false ) ) in_type = wxBITMAP_TYPE_TIFF; | |
| 199 else if ( ext.IsSameAs( wxT("tiff"), false ) ) in_type = wxBITMAP_TYPE_TIFF; | |
| 200 | |
| 201 int out_type = in_type; | |
| 202 if ( choice_type == 1 ) { | |
| 203 out_type = wxBITMAP_TYPE_PNG; | |
| 204 ext = wxT("png"); | |
| 205 } | |
| 206 else if ( choice_type == 2 ) { | |
| 207 out_type = wxBITMAP_TYPE_XPM; | |
| 208 ext = wxT("xpm"); | |
| 209 } | |
| 210 else if ( choice_type == 3 ) { | |
| 211 out_type = wxBITMAP_TYPE_GIF; | |
| 212 ext = wxT("gif"); | |
| 213 } | |
| 214 else if ( choice_type == 4 ) { | |
| 215 out_type = wxBITMAP_TYPE_ICO; | |
| 216 ext = wxT("ico"); | |
| 217 } | |
| 218 else if ( choice_type == 5 ) { | |
| 219 out_type = wxBITMAP_TYPE_BMP; | |
| 220 ext = wxT("bmp"); | |
| 221 } | |
| 222 else if ( choice_type == 6 ) { | |
| 223 out_type = wxBITMAP_TYPE_TIFF; | |
| 224 ext = wxT("tiff"); | |
| 225 } | |
| 226 | |
| 227 wxImage image( file, in_type ); | |
| 228 if ( w == 0 || h == 0 ) { | |
| 229 w = (long)(image.GetWidth()); | |
| 230 h = (long)(image.GetHeight()); | |
| 231 } | |
| 232 wxImage output = image.Scale( (int)w, (int)h, wxIMAGE_QUALITY_HIGH ); | |
| 233 wxString outfile = out_dir + wxFILE_SEP_PATH + name + wxT(".") + ext; | |
| 234 | |
| 235 if ( file.IsSameAs( outfile ) ) { | |
| 236 WarnMessage( wxT("Output file is same as input file !") ); | |
| 237 return false; | |
| 238 } | |
| 239 | |
| 240 output.SaveFile( outfile, out_type ); | |
| 241 return true; | |
| 242 } | |
| 243 | |
| 244 bool MyFrame::ConvertFiles( wxString dir ) | |
| 245 { | |
| 246 wxFileName dn( dir ); | |
| 247 | |
| 248 if ( out_dir.IsSameAs( dn.GetPath() ) ) { | |
| 249 WarnMessage( wxT("Output directory is same as input directory !") ); | |
| 250 return false; | |
| 251 } | |
| 252 | |
| 253 int out_type = wxBITMAP_TYPE_INVALID; | |
| 254 wxString out_ext; | |
| 255 if ( choice_type == 1 ) { | |
| 256 out_type = wxBITMAP_TYPE_PNG; | |
| 257 out_ext = wxT("png"); | |
| 258 } | |
| 259 else if ( choice_type == 2 ) { | |
| 260 out_type = wxBITMAP_TYPE_XPM; | |
| 261 out_ext = wxT("xpm"); | |
| 262 } | |
| 263 else if ( choice_type == 3 ) { | |
| 264 out_type = wxBITMAP_TYPE_GIF; | |
| 265 out_ext = wxT("gif"); | |
| 266 } | |
| 267 else if ( choice_type == 4 ) { | |
| 268 out_type = wxBITMAP_TYPE_ICO; | |
| 269 out_ext = wxT("ico"); | |
| 270 } | |
| 271 else if ( choice_type == 5 ) { | |
| 272 out_type = wxBITMAP_TYPE_BMP; | |
| 273 out_ext = wxT("bmp"); | |
| 274 } | |
| 275 else if ( choice_type == 6 ) { | |
| 276 out_type = wxBITMAP_TYPE_TIFF; | |
| 277 out_ext = wxT("tiff"); | |
| 278 } | |
| 279 | |
| 280 wxArrayString files; | |
| 281 wxDir::GetAllFiles( dir, &files, wxT("*.*"), wxDIR_DEFAULT ); | |
| 282 | |
| 283 for ( int i = 0; i < files.GetCount(); i++ ) { | |
| 284 | |
| 285 wxFileName fn( files[i] ); | |
| 286 wxString in_ext = fn.GetExt(); | |
| 287 int in_type; | |
| 288 | |
| 289 if ( in_ext.IsSameAs( wxT("jpg"), false ) ) in_type = wxBITMAP_TYPE_JPEG; | |
| 290 else if ( in_ext.IsSameAs( wxT("jpeg"), false ) ) in_type = wxBITMAP_TYPE_JPEG; | |
| 291 else if ( in_ext.IsSameAs( wxT("png"), false ) ) in_type = wxBITMAP_TYPE_PNG; | |
| 292 else if ( in_ext.IsSameAs( wxT("xpm"), false ) ) in_type = wxBITMAP_TYPE_XPM; | |
| 293 else if ( in_ext.IsSameAs( wxT("gif"), false ) ) in_type = wxBITMAP_TYPE_GIF; | |
| 294 else if ( in_ext.IsSameAs( wxT("ico"), false ) ) in_type = wxBITMAP_TYPE_ICO; | |
| 295 else if ( in_ext.IsSameAs( wxT("bmp"), false ) ) in_type = wxBITMAP_TYPE_BMP; | |
| 296 else if ( in_ext.IsSameAs( wxT("tif"), false ) ) in_type = wxBITMAP_TYPE_TIFF; | |
| 297 else if ( in_ext.IsSameAs( wxT("tiff"), false ) ) in_type = wxBITMAP_TYPE_TIFF; | |
| 298 | |
| 299 if ( out_type == wxBITMAP_TYPE_INVALID ) out_type = in_type; | |
| 300 | |
| 301 wxString fullpath = fn.GetPath() + wxFILE_SEP_PATH + fn.GetName(); | |
| 302 | |
| 303 fullpath.Replace( dn.GetPath(), wxEmptyString, false ); | |
| 304 fullpath = out_dir + fullpath + wxT(".") + out_ext; | |
| 305 | |
| 306 wxFileName tf( fullpath ); | |
| 307 if ( !tf.Exists() ) tf.Mkdir( wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL ); | |
| 308 | |
| 309 wxImage image( files[i], in_type ); | |
| 310 if ( w == 0 || h == 0 ) { | |
| 311 w = (long)(image.GetWidth()); | |
| 312 h = (long)(image.GetHeight()); | |
| 313 } | |
| 314 wxImage output = image.Scale( (int)w, (int)h, wxIMAGE_QUALITY_HIGH ); | |
| 315 output.SaveFile( fullpath, out_type ); | |
| 316 } | |
| 317 | |
| 318 return true; | |
| 319 } | |
| 320 |
