// コントロール処理系関数\r
//******************************************************************************\r
\r
-bool TreeView_CheckNewerItem(wxTreeCtrl * tree_ctrl, wxTreeItemId idParent, const wxString & szDirPath, bool bReallyMake)\r
+bool TreeView_CheckNewerItem(wxTreeCtrl * tree_ctrl, const wxTreeItemId & idParent, const wxString & szDirPath, bool bReallyMake)\r
{\r
// 最初の子アイテムを取得。\r
wxTreeItemIdValue idv;\r
//******************************************************************************\r
\r
// ディレクトリを新規に作成。\r
-wxFileName MakeDirPath(wxFileName fnPath, wxString szBase, bool bAct)\r
+wxFileName MakeDirPath(const wxFileName & fnPath, const wxString & szBase, bool bAct)\r
{\r
// とりあえず作ってみる。\r
wxFileName fnDir = fnPath;\r
return fnDir;\r
}\r
\r
-wxArrayString MakeTargetFileList(MainFrame * frm, bool fOnlyOneFile)\r
+wxArrayString MakeTargetFileList(MainFrame * frm, bool fOnlyOneFile, bool fRecursive)\r
{\r
wxArrayString as;\r
const int nState = frm->list_ctrl->GetSelectedItemCount() == 0 ? wxLIST_STATE_DONTCARE : wxLIST_STATE_SELECTED;\r
long nId = frm->list_ctrl->GetNextItem(-1, wxLIST_NEXT_ALL, nState);\r
while (nId != -1)\r
{\r
- as.Add(frm->list_ctrl->showFileInfo[nId]->szStoredName);\r
+ as.Add(((TPI_FILEINFO *) frm->list_ctrl->apShowFile[nId])->szStoredName);\r
if (fOnlyOneFile)\r
{\r
break;\r
nId = frm->list_ctrl->GetNextItem(nId, wxLIST_NEXT_ALL, nState);\r
}\r
\r
+ // 選択アイテムのみを処理する場合は子階層は無関係。\r
+ if (nState == wxLIST_STATE_SELECTED || ! fRecursive)\r
+ {\r
+ return as;\r
+ }\r
+\r
+ // 再帰的にアイテムを追加。\r
+ wxTreeItemIdValue idv;\r
+ wxTreeItemId\r
+ idCurrent = frm->tree_ctrl->GetSelection(),\r
+ idChild = frm->tree_ctrl->GetFirstChild(idCurrent, idv);\r
+ frm->tree_ctrl->Freeze();\r
+ frm->list_ctrl->Freeze();\r
+ while (idChild.IsOk())\r
+ {\r
+ frm->tree_ctrl->SelectItem(idChild);\r
+ wxArrayString asChild = MakeTargetFileList(frm, fOnlyOneFile);\r
+ WX_APPEND_ARRAY(as, asChild);\r
+\r
+ idChild = frm->tree_ctrl->GetNextSibling(idChild);\r
+ }\r
+\r
+ // 元に戻す。\r
+ frm->tree_ctrl->SelectItem(idCurrent);\r
+ frm->tree_ctrl->Thaw();\r
+ frm->list_ctrl->Thaw();\r
return as;\r
}\r
\r
{\r
// ディレクトリがないので、ルートにファイルが2個以上あるかどうかを判定。\r
bool fFlag = false;\r
+// for (auto f : frm->fileinfo)\r
for (size_t i = 0; i < frm->fileinfo.GetCount(); i++)\r
{\r
- if (frm->fileinfo[i].fnFileName.GetPath().IsEmpty())\r
+ TPI_FILEINFO & f = frm->fileinfo[i];\r
+ if (f.fnFileName.GetPath().IsEmpty())\r
{\r
// ファイルはルートにある。\r
if (fFlag)\r
}\r
case 1:\r
// ディレクトリが1個なので、ルートにファイルがないかどうかを判定。\r
+// for (auto f : frm->fileinfo)\r
for (size_t i = 0; i < frm->fileinfo.GetCount(); i++)\r
{\r
// ディレクトリメンバが格納されている場合には、その名前がツリービューのアイテム名に一致した場合はカウントしない。\r
- if (frm->fileinfo[i].fnFileName.GetPath().IsEmpty() && frm->fileinfo[i].fnFileName.GetFullName() != frm->tree_ctrl->GetItemText(frm->tree_ctrl->GetLastChild(tiArcRoot)))\r
+ TPI_FILEINFO & f = frm->fileinfo[i];\r
+ if (f.fnFileName.GetPath().IsEmpty() && f.fnFileName.GetFullName() != frm->tree_ctrl->GetItemText(frm->tree_ctrl->GetLastChild(tiArcRoot)))\r
{\r
return true;\r
}\r
return false;\r
}\r
\r
-wxString GetFileTypeName(wxFileName fn)\r
+wxString GetFileTypeName(const wxFileName & fn)\r
{\r
wxString szExt = fn.GetExt().MakeUpper();\r
wxString sz = szExt + (szExt.IsEmpty() ? wxEmptyString : wxT(" ")) + _("file");\r
return sz;\r
}\r
\r
-wxIcon GetFileTypeIcon(wxFileName fn)\r
+wxIcon GetFileTypeIcon(const wxFileName & fn)\r
{\r
wxIcon icon;\r
wxIconLocation ilFile;\r
return icon;\r
}\r
\r
-wxString QuoteString(wxString s)\r
+wxString QuoteString(const wxString & s)\r
{\r
return wxT('"') + s + wxT('"');\r
}\r
+\r
+//******************************************************************************\r
+// 「開く」用プロセス\r
+//******************************************************************************\r
+\r
+void myProcess::OnTerminate(int, int)\r
+{\r
+ chmod(this->szFile.ToUTF8(), 0600);\r
+ ::wxRemoveFile(this->szFile);\r
+ ::wxRmdir(this->szDir);\r
+ delete this;\r
+}\r