Mercurial > mercurial > hgweb_mover.cgi
view src/myframe.cpp @ 7:bfa0800f1176
fix text-color
author | pyon@macmini |
---|---|
date | Sat, 08 Oct 2011 19:49:13 +0900 |
parents | 99d612849255 |
children | b59dfcc84d7a |
line wrap: on
line source
// Filename : mainframe.cpp // Last Change: 08-Oct-2011. // #include "symbol.h" #include "common.h" #include "myframe.h" #include "delwhite.h" #include "marksheet.h" #include "main.h" // resources // the application icon (under Windows and OS/2 it is in resources and even // though we could still include the XPM here it would be unused) #if !defined(__WXMSW__) && !defined(__WXPM__) #include "sample.xpm" #endif ////////////////////////////////////////////////////////////////////////// // control constructor // 検索履歴をログに保存 /* void MyCmdBox::WriteLog( wxString& cmd, wxString& path ) { wxString logfn = wxGetCwd() + wxFILE_SEP_PATH + wxT("tmp") + wxFILE_SEP_PATH + wxT("log.txt"); wxTextFile logFile; logFile.Open( logfn ); wxDateTime now = wxDateTime::Now(); wxString log = now.Format( wxT("%Y-%m-%d %H:%M:%S") ) + wxT(" ") + cmd + wxT(" ") + path; logFile.AddLine( log ); logFile.Write(); logFile.Close(); return; } */ ////////////////////////////////////////////////////////////////////////// // frame constructor MyFrame::MyFrame( wxWindow* parent, wxWindowID id, const wxString& title ) : wxFrame( parent, id, title ) { this->SetBackgroundColour( wxColour(wxT("WHEAT")) ); // set the frame icon SetIcon(wxICON(sample)); // メニューバー 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->Append( wxID_EXIT, wxT("終了(&X)\tAlt-X"), wxT("Quit this program") ); m_menubar->Append( m_menuFile, wxT("ファイル(&F)") ); this->SetMenuBar( m_menubar ); // ステータスバー int widths[] = { -1, 150, 120 }; m_statusBar = this->CreateStatusBar( WXSIZEOF(widths), wxST_SIZEGRIP ); m_statusBar->SetStatusWidths( WXSIZEOF(widths), widths ); m_statusBar->SetStatusText( wxEmptyString, 0 ); // コントロール wxBoxSizer* bSizerTop; bSizerTop = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* bSizerWork; bSizerWork = new wxBoxSizer( wxHORIZONTAL ); m_staticTextWork = new wxStaticText( this, wxID_ANY, wxT("作業用フォルダ"), wxDefaultPosition, wxDefaultSize, 0 ); bSizerWork->Add( m_staticTextWork, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_dirPickerWork = new wxDirPickerCtrl( this, ID_WORKDIR, wxGetApp().dir, wxT("Select a folder"), wxDefaultPosition, wxDefaultSize, wxDIRP_DEFAULT_STYLE ); bSizerWork->Add( m_dirPickerWork, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_buttonDetWhite = new wxButton( this, ID_DTWHITE, wxT("白紙検知"), wxDefaultPosition, wxDefaultSize, 0 ); bSizerWork->Add( m_buttonDetWhite, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); bSizerTop->Add( bSizerWork, 0, wxEXPAND, 5 ); wxBoxSizer* bSizerMoveTo; bSizerMoveTo = new wxBoxSizer( wxHORIZONTAL ); m_staticTextMoveTo = new wxStaticText( this, wxID_ANY, wxT("移動先フォルダ"), wxDefaultPosition, wxDefaultSize, 0 ); bSizerMoveTo->Add( m_staticTextMoveTo, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); wxArrayString drives; drives.Add(wxT("C:")); drives.Add(wxT("Y:")); drives.Add(wxT("Z:")); m_comboBoxMoveDrive = new wxComboBox( this, ID_DRIVE, wxT("C:"), wxDefaultPosition, wxSize( 50,-1 ), drives, 0 ); bSizerMoveTo->Add( m_comboBoxMoveDrive, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_datePickerCcn = new wxDatePickerCtrl( this, ID_DATE, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxDP_DROPDOWN ); bSizerMoveTo->Add( m_datePickerCcn, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); wxArrayString ccns; ccns.Add(wxT("角館1")); ccns.Add(wxT("角館2")); ccns.Add(wxT("角館3")); ccns.Add(wxT("角館4")); ccns.Add(wxT("西仙1")); ccns.Add(wxT("西仙2")); ccns.Add(wxT("西仙3")); ccns.Add(wxT("千畑1")); ccns.Add(wxT("千畑2")); ccns.Add(wxT("千畑3")); ccns.Add(wxT("大曲1")); ccns.Add(wxT("大曲2")); ccns.Add(wxT("大曲3")); ccns.Add(wxT("大曲4")); ccns.Add(wxT("大曲5")); ccns.Add(wxT("大曲6")); ccns.Add(wxT("六郷1")); ccns.Add(wxT("六郷2")); ccns.Add(wxT("六郷3")); m_comboBoxCcn = new wxComboBox( this, ID_CCN, wxEmptyString, wxDefaultPosition, wxSize( 100,-1 ), ccns, 0 ); bSizerMoveTo->Add( m_comboBoxCcn, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_buttonSetDir = new wxButton( this, ID_STDIR, wxT("フォルダ指定"), wxDefaultPosition, wxDefaultSize, 0 ); bSizerMoveTo->Add( m_buttonSetDir, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_buttonMkDir = new wxButton( this, ID_MKDIR, wxT("フォルダ作成"), wxDefaultPosition, wxDefaultSize, 0 ); bSizerMoveTo->Add( m_buttonMkDir, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); bSizerTop->Add( bSizerMoveTo, 0, 0, 5 ); wxBoxSizer* bSizerDoMove; bSizerDoMove = new wxBoxSizer( wxHORIZONTAL ); m_staticTextDummy = new wxStaticText( this, wxID_ANY, wxT("移動先ふぉるだ"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextDummy->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_ACTIVEBORDER ) ); bSizerDoMove->Add( m_staticTextDummy, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_textCtrlMoveDir = new wxTextCtrl( this, ID_DIR, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_textCtrlMoveDir->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_INACTIVEBORDER ) ); bSizerDoMove->Add( m_textCtrlMoveDir, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_buttonDoMove = new wxButton( this, ID_DOMOVE, wxT("画像移動"), wxDefaultPosition, wxDefaultSize, 0 ); 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 ); m_buttonDetWhite->SetFocus(); } // destructor MyFrame::~MyFrame() { } // Event Table BEGIN_EVENT_TABLE( MyFrame, wxFrame ) EVT_SIZE( MyFrame::OnSize ) 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_DOMOVE, MyFrame::MoveImages ) EVT_LIST_ITEM_ACTIVATED( ID_LIST, MyFrame::OnOpenHhsDir ) EVT_CLOSE( MyFrame::SaveConfig ) END_EVENT_TABLE() // Event Handlers /* サイズ変更 */ void MyFrame::OnSize(wxSizeEvent& event) { this->Refresh( true, NULL ); TellLocation(); event.Skip(); } /* ウィンドウ移動 */ void MyFrame::OnMove(wxMoveEvent& WXUNUSED(event)) { TellLocation(); return; } /* ウィンドウ位置とサイズを表示 */ void MyFrame::TellLocation( void ) { wxRect r = this->GetRect(); int x = r.GetX(); int y = r.GetY(); int w = r.GetWidth(); int h = r.GetHeight(); SetStatusText( wxString::Format(wxT("(%d,%d) %dx%d"),x,y,w,h), 2 ); } /* 終了 */ void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(true); } /* バージョン情報 */ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageBox( wxString::Format( wxT("Version %d.%d ( build %d ) by %s\n") wxT("running under %s."), VER, REV, BLD, wxVERSION_STRING, wxGetOsDescription().c_str() ), wxT("About this program"), wxOK | wxICON_INFORMATION, this ); } /* 白紙検知 */ void MyFrame::OnDetectWhite(wxCommandEvent& WXUNUSED(event)) { FrameDelWhite* dw = new FrameDelWhite( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxCAPTION|wxFRAME_NO_TASKBAR|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); dw->SetMinSize( wxSize( 580, 680 ) ); dw->m_dir = m_dirPickerWork->GetPath(); dw->SetTitle( wxT("Delete White Sheet - ") + dw->m_dir ); dw->LoadImages(); dw->Show(true); } /* 移動先フォルダセット */ void MyFrame::SetDir(wxCommandEvent& WXUNUSED(event)) { wxString dir; dir.Append( m_comboBoxMoveDrive->GetValue() ); dir.Append( wxFILE_SEP_PATH ); wxDateTime dt = m_datePickerCcn->GetValue(); dir.Append( dt.Format(wxT("%Y%m%d")) ); dir.Append( wxFILE_SEP_PATH ); dir.Append( m_comboBoxCcn->GetValue() ); 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::MoveImages(wxCommandEvent& WXUNUSED(event)) { 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 ); // 被保険者番号 if ( r % 2 ) m_listCtrl->SetItemBackgroundColour( r, wxColour(wxT("WHEAT")) ); r++; cnt=1; } if ( hhs.IsEmpty() ) { wxMessageBox(wxT("1枚目のマークシートの画像ファイルを確認してください.")); return; } wxString to = dirname + wxFILE_SEP_PATH + hhs + wxFILE_SEP_PATH + filename; wxRenameFile( from, to, false ); m_listCtrl->SetItem( r-1, 2, wxString::Format(wxT("%d"),cnt), -1 ); // ファイル数 if ( cnt < 5 ) m_listCtrl->SetItemTextColour( r, *wxRED ); if ( cnt > 5 ) m_listCtrl->SetItemTextColour( r, *wxBLUE ); cnt++; // write log cout = dir.GetNext( &filename ); } wxString cmd = wxT("explorer ") + dirname; wxExecute( cmd ); } /* 被保険者のフォルダを開く */ void MyFrame::OnOpenHhsDir(wxListEvent& event) { wxString hhsdir = m_textCtrlMoveDir->GetValue(); hhsdir.Append( wxFILE_SEP_PATH ); wxListItem item = event.GetItem(); item.SetColumn(1); item.SetMask(wxLIST_MASK_TEXT); m_listCtrl->GetItem( item ); hhsdir.Append( item.GetText() ); wxMessageBox(hhsdir); //wxString execmd = wxT("explorer ") + hhsdir; } /* 作業フォルダを開く */ void MyFrame::OnOpenWorkDir(wxCommandEvent& WXUNUSED(event)) { wxString workdir = m_dirPickerWork->GetPath(); wxString execmd = wxT("explorer ") + workdir; wxExecute( execmd ); } /* 設定を保存 */ void MyFrame::SaveConfig(wxCloseEvent& WXUNUSED(event)) { if ( !IsIconized() && !IsMaximized() ) { wxGetApp().rect = this->GetRect(); } wxGetApp().dir = m_dirPickerWork->GetPath(); Destroy(); }