# HG changeset patch # User pyon@macmini # Date 1317855372 -32400 # Node ID a505f7417742eadf68e96c693a67315a31f4015b # Parent a5bddd859104610ab67f3f341d44d98ed66a56e3 v0.1 release diff -r a5bddd859104 -r a505f7417742 TODO --- a/TODO Tue Oct 04 07:43:08 2011 +0900 +++ b/TODO Thu Oct 06 07:56:12 2011 +0900 @@ -2,6 +2,8 @@ TODO =========================================================================== * Log : moved time, files, distination +* Undo +* Open Explorer --------------------------------------------------------------------------- Memo diff -r a5bddd859104 -r a505f7417742 include/common.h --- a/include/common.h Tue Oct 04 07:43:08 2011 +0900 +++ b/include/common.h Thu Oct 06 07:56:12 2011 +0900 @@ -1,5 +1,5 @@ // Filename : common.h -// Last Change: 03-Oct-2011. +// Last Change: 05-Oct-2011. // #ifndef __COMMON__ #define __COMMON__ @@ -14,6 +14,7 @@ // mainframe ID_MAIN = wxID_HIGHEST + 1, + ID_OPWORK, ID_WORKDIR, ID_DTWHITE, ID_DRIVE, diff -r a5bddd859104 -r a505f7417742 include/delwhite.h --- a/include/delwhite.h Tue Oct 04 07:43:08 2011 +0900 +++ b/include/delwhite.h Thu Oct 06 07:56:12 2011 +0900 @@ -1,21 +1,28 @@ // Filename : delwhite.h -// Last Change: 03-Oct-2011. +// Last Change: 04-Oct-2011. // #ifndef __DELWHITE__ #define __DEWHITEL__ #include "common.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "wx/wxprec.h" +#ifndef WX_PRECOMP + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include +#endif + /////////////////////////////////////////////////////////////////////////////// /// Class FrameDelWhite /////////////////////////////////////////////////////////////////////////////// diff -r a5bddd859104 -r a505f7417742 include/marksheet.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/marksheet.h Thu Oct 06 07:56:12 2011 +0900 @@ -0,0 +1,97 @@ +// Filename : marksheet.h +// Last Change: 05-Oct-2011. +// +#ifndef __MARKSHEET__ +#define __MARKSHEET__ + + +#include "wx/utils.h" +#include "wx/file.h" +#include "wx/string.h" +#include "wx/image.h" + +bool IsBlack( int r, int g, int b ) +{ + if ( r == 0 && g == 0 && b == 0 ) { + return true; + } + return false; +}; + +wxString GuessHhs( wxString& file ) +{ + wxString hhs; + wxImage img( file, wxBITMAP_TYPE_JPEG ); + int sx = 1800; // start x + int sy = 315;; // start y + int bw = 60; // block width + int bh = 50; // block height + int area = bw * bh; + int black = 0; + int x, y; + unsigned char r, g, b; + + int max_n; + float max; + float bk; + for ( int c=0; c<10; c++ ) { + max = 0.0; + max_n = -1; + for ( int n=0; n<10; n++ ) { + + for ( x=sx+bw*c; x #include + #include #include #include #include - #include "wx/stattext.h" + #include #include - #include "wx/datectrl.h" + #include #include - #include "wx/textctrl.h" - #include "wx/filepicker.h" + #include + #include + #include #include - #include "wx/dir.h" - #include "wx/stdpaths.h" + #include + #include + #include + #include #include #include #include @@ -59,9 +63,11 @@ void OnMove( wxMoveEvent& event ); void OnQuit( wxCommandEvent& event ); void OnAbout( wxCommandEvent& event ); + void OnOpenWorkDir(wxCommandEvent& event); void OnDetectWhite( wxCommandEvent& event ); void SetDir( wxCommandEvent& event ); void MakeDir( wxCommandEvent& event ); + void MoveImages( wxCommandEvent& event ); void SaveConfig( wxCloseEvent& event ); void TellLocation( void ); }; diff -r a5bddd859104 -r a505f7417742 makefile --- a/makefile Tue Oct 04 07:43:08 2011 +0900 +++ b/makefile Thu Oct 06 07:56:12 2011 +0900 @@ -1,6 +1,6 @@ # # Makefile for wxWidgets Application -# Last Change: 01-Oct-2011. +# Last Change: 06-Oct-2011. # by Takayuki Mutoh # @@ -102,7 +102,7 @@ -mkdir -p $(OBJDIR) $(CXX) -c $< -o $@ $(CPPFLAGS) -$(OBJDIR)/myframe.o: myframe.cpp myframe.h symbol.h common.h +$(OBJDIR)/myframe.o: myframe.cpp myframe.h marksheet.h symbol.h common.h $(CXX) -c $< -o $@ $(CPPFLAGS) $(OBJDIR)/delwhite.o: delwhite.cpp delwhite.h common.h diff -r a5bddd859104 -r a505f7417742 src/delwhite.cpp --- a/src/delwhite.cpp Tue Oct 04 07:43:08 2011 +0900 +++ b/src/delwhite.cpp Thu Oct 06 07:56:12 2011 +0900 @@ -1,18 +1,9 @@ // Filename : delwhite.cpp -// Last Change: 03-Oct-2011. +// Last Change: 05-Oct-2011. // #include "delwhite.h" -// for all others, include the necessary headers (this file is usually all you -// need because it includes almost all "standard" wxWidgets headers) -#ifndef WX_PRECOMP - #include "wx/utils.h" - #include "wx/dir.h" - #include "wx/file.h" -#endif - - // constructor FrameDelWhite::FrameDelWhite( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style ) { @@ -71,6 +62,22 @@ void FrameDelWhite::DeleteImage(wxCommandEvent& WXUNUSED(event)) { + wxDateTime now = wxDateTime::Now(); + wxString trash = wxGetCwd() + wxFILE_SEP_PATH + wxT("trash") + wxFILE_SEP_PATH + now.Format(wxT("%Y%m%d%H%M%S")); + wxMkdir( trash ); + + long item = -1; + for ( ; ; ) { + item = m_listCtrl->GetNextItem( item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); + if ( item == -1 ) + break; + wxString file = m_listCtrl->GetItemText( item ); + + wxString from = m_dir + wxFILE_SEP_PATH + file; + wxString to = trash + wxFILE_SEP_PATH + file; + wxRenameFile( from, to, false ); + } + LoadImages(); return; } diff -r a5bddd859104 -r a505f7417742 src/myframe.cpp --- a/src/myframe.cpp Tue Oct 04 07:43:08 2011 +0900 +++ b/src/myframe.cpp Thu Oct 06 07:56:12 2011 +0900 @@ -1,10 +1,11 @@ // Filename : mainframe.cpp -// Last Change: 03-Oct-2011. +// Last Change: 05-Oct-2011. // #include "symbol.h" #include "common.h" #include "myframe.h" #include "delwhite.h" +#include "marksheet.h" #include "main.h" // resources @@ -47,8 +48,10 @@ m_menubar = new wxMenuBar(); m_menuFile = new wxMenu(); + m_menuFile->Append( ID_OPWORK, wxT("作業フォルダを開く"), wxT("Open work folder") ); + m_menuFile->AppendSeparator(); //---- m_menuFile->Append( wxID_ABOUT, wxT("&About...\tF1"), wxT("Show about dialog") ); - //m_menuFile->AppendSeparator(); //---- + m_menuFile->AppendSeparator(); //---- m_menuFile->Append( wxID_EXIT, wxT("終了(&X)\tAlt-X"), wxT("Quit this program") ); m_menubar->Append( m_menuFile, wxT("ファイル(&F)") ); @@ -126,20 +129,28 @@ bSizerDoMove->Add( m_textCtrlMoveDir, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_buttonDoMove = new wxButton( this, ID_DOMOVE, wxT("画像移動"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonDoMove->Enable( false ); bSizerDoMove->Add( m_buttonDoMove, 0, wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); bSizerTop->Add( bSizerDoMove, 0, wxEXPAND, 5 ); m_listCtrl = new wxListCtrl( this, ID_LIST, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_SINGLE_SEL ); + wxListItem itemCol; + itemCol.SetText( wxT("通番") ); + m_listCtrl->InsertColumn( 0, itemCol ); + m_listCtrl->SetColumnWidth( 0, 100 ); + itemCol.SetText( wxT("被保険者番号") ); + m_listCtrl->InsertColumn( 1, itemCol ); + m_listCtrl->SetColumnWidth( 1, 180 ); + itemCol.SetText( wxT("ファイル数") ); + m_listCtrl->InsertColumn( 2, itemCol ); + m_listCtrl->SetColumnWidth( 1, 100 ); bSizerTop->Add( m_listCtrl, 1, wxALL|wxEXPAND, 5 ); this->SetSizer( bSizerTop ); this->Layout(); this->Centre( wxBOTH ); - //this->SetDefaultItem(m_buttonDetWhite); m_buttonDetWhite->SetFocus(); } @@ -154,9 +165,11 @@ EVT_MOVE( MyFrame::OnMove ) EVT_MENU( wxID_EXIT, MyFrame::OnQuit ) EVT_MENU( wxID_ABOUT, MyFrame::OnAbout ) + EVT_MENU( ID_OPWORK, MyFrame::OnOpenWorkDir ) EVT_BUTTON( ID_DTWHITE, MyFrame::OnDetectWhite ) - EVT_BUTTON( ID_STDIR, MyFrame::SetDir ) - EVT_BUTTON( ID_MKDIR, MyFrame::MakeDir ) + EVT_BUTTON( ID_STDIR, MyFrame::SetDir ) + EVT_BUTTON( ID_MKDIR, MyFrame::MakeDir ) + EVT_BUTTON( ID_DOMOVE, MyFrame::MoveImages ) EVT_CLOSE( MyFrame::SaveConfig ) END_EVENT_TABLE() @@ -229,20 +242,89 @@ m_textCtrlMoveDir->SetValue( dir ); } +/* 移動先フォルダ作成 */ void MyFrame::MakeDir(wxCommandEvent& WXUNUSED(event)) { + wxString dirname = m_textCtrlMoveDir->GetValue(); + wxString ccn = m_comboBoxCcn->GetValue(); + if ( dirname.Len() < 15 || ccn.IsEmpty() ) { + wxMessageBox(wxT("フォルダを指定してください.")); + return; + } + + wxStringTokenizer tkz( dirname, wxFILE_SEP_PATH ); + wxString d; + while ( tkz.HasMoreTokens() ) { + d.Append( tkz.GetNextToken() ); + d.Append( wxFILE_SEP_PATH ); + if ( !wxDirExists( d ) ) wxMkdir( d ); + } } -/* アプリケーションフォルダを開く */ -/* -void MyFrame::OnOpenAppDir(wxCommandEvent& WXUNUSED(event)) +/* 画像移動 */ +void MyFrame::MoveImages(wxCommandEvent& WXUNUSED(event)) { - wxStandardPaths appdir; - wxString execmd = wxT("explorer ") + appdir.GetDataDir(); + wxString dirname = m_textCtrlMoveDir->GetValue(); + wxString ccn = m_comboBoxCcn->GetValue(); + if ( dirname.IsEmpty() || ccn.IsEmpty() ) { + wxMessageBox(wxT("フォルダを指定してください.")); + return; + } + + dirname.Append( wxFILE_SEP_PATH ); + if ( !wxDirExists( dirname ) ) { + wxMessageBox(wxT("フォルダが存在しません.")); + return; + } + + wxString workdir = m_dirPickerWork->GetPath(); + wxDir dir( workdir ); + if ( !dir.IsOpened() ) return; + + wxString filename; + bool cout = dir.GetFirst( &filename, wxT("*.jpg"), wxDIR_FILES ); + + int cnt=0, r=0; + wxString hhs; + m_listCtrl->DeleteAllItems(); + while ( cout ) { + wxString from = workdir + wxFILE_SEP_PATH + filename; + if ( IsMarksheet( from ) ) { + hhs = GuessHhs( from ); + wxString d = dirname + hhs; + wxMkdir( d ); + m_listCtrl->InsertItem( r, wxString::Format(wxT("%d"),r+1) ); + m_listCtrl->SetItem( r, 1, hhs, -1 ); // 被保険者番号 + m_listCtrl->SetItem( r-1, 2, wxString::Format(wxT("%d"),cnt), -1 ); // ファイル数 + if ( r % 2 ) m_listCtrl->SetItemBackgroundColour( r, wxColour(wxT("WHEAT")) ); + r++; + cnt=0; + } + if ( hhs.IsEmpty() ) { + wxMessageBox(wxT("マークシートの画像ファイルを確認してください.")); + return; + } + wxString to = dirname + wxFILE_SEP_PATH + hhs + wxFILE_SEP_PATH + filename; + wxRenameFile( from, to, false ); + // write log + cout = dir.GetNext( &filename ); + cnt++; + } + m_listCtrl->SetItem( r-1, 2, wxString::Format(wxT("%d"),cnt), -1 ); // ファイル数 + if ( cnt < 5 ) m_listCtrl->SetItemTextColour( r, *wxRED ); + + wxString cmd = wxT("explorer ") + dirname; + wxExecute( cmd ); +} + +/* 作業フォルダを開く */ +void MyFrame::OnOpenWorkDir(wxCommandEvent& WXUNUSED(event)) +{ + wxString workdir = m_dirPickerWork->GetPath(); + wxString execmd = wxT("explorer ") + workdir; wxExecute( execmd ); return; } -*/ /* 設定を保存 */