+ // コピー。\r
+ ::wxCopyFile(this->fnArchive.GetFullPath(), fd.GetPath());\r
+ wxFileName fn(fd.GetPath());\r
+ wxDateTime dtAccess, dtModify, dtCreate;\r
+ this->fnArchive.GetTimes(& dtAccess, & dtModify, & dtCreate);\r
+ fn.SetTimes(& dtAccess, & dtModify, & dtCreate);\r
+}\r
+\r
+void MainFrame::OnArcAdd(wxCommandEvent& e)\r
+{\r
+ // 作成ダイアログを設定。\r
+ MakeDialog mkDlg(this, TPI_COMMAND_ADD);\r
+\r
+ TPI_SWITCHES swInfo;\r
+ swInfo.pCustomSwitches = nullptr;\r
+\r
+ if (e.GetClientData() == nullptr)\r
+ {\r
+ if (::wxGetKeyState(WXK_SHIFT))\r
+ {\r
+ // 処理対象のフォルダを選択。\r
+ wxDirDialog dd(this, _("Choose dir to add"), this->conf.ReadHistory(CONF_HISTORY_PATH, 0), wxDD_DIR_MUST_EXIST);\r
+ if (dd.ShowModal() == wxID_CANCEL)\r
+ {\r
+ return;\r
+ }\r
+ swInfo.fnDestinationDirectory = wxFileName(dd.GetPath());\r
+ this->conf.WriteHistory(CONF_HISTORY_PATH, swInfo.fnDestinationDirectory.GetPath());\r
+ mkDlg.files.Add(swInfo.fnDestinationDirectory.GetFullName());\r
+ }\r
+ else\r
+ {\r
+ // 処理対象のファイルを選択。\r
+ wxFileDialog fd(this, _("Choose files to add"), this->conf.ReadHistory(CONF_HISTORY_PATH, 0), wxEmptyString, wxFileSelectorDefaultWildcardStr, wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE);\r
+ if (fd.ShowModal() == wxID_CANCEL)\r
+ {\r
+ return;\r
+ }\r
+ fd.GetFilenames(mkDlg.files);\r
+ swInfo.fnDestinationDirectory = wxFileName::DirName(fd.GetDirectory());\r
+ this->conf.WriteHistory(CONF_HISTORY_PATH, fd.GetDirectory());\r
+ }\r
+ }\r
+ else\r
+ {\r
+ mkDlg.files = * (wxArrayString *) e.GetClientData();\r
+ swInfo.fnDestinationDirectory = wxFileName::DirName(wxFileName(mkDlg.files[0]).GetPath());\r
+ // 相対パスに変換。\r
+// for (auto s : mkDlg.files)\r
+ for (size_t n = 0; n < mkDlg.files.GetCount(); n++)\r
+ {\r
+ wxString & s = mkDlg.files[n];\r
+ wxFileName fn(s);\r
+ fn.MakeRelativeTo(swInfo.fnDestinationDirectory.GetPath());\r
+ s = fn.GetFullPath();\r
+ }\r
+ }\r
+\r