OSDN Git Service

C++11のrange-based forを用いて書き直し。
[tpi/lychee.git] / src / lychee / functions.cpp
index 59f8ba9..e7cb6cf 100644 (file)
@@ -32,7 +32,7 @@
 //    コントロール処理系関数\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
@@ -121,7 +121,7 @@ wxString TreeView_GetItemPath(wxTreeCtrl * tree_ctrl, wxTreeItemId idItem)
 //******************************************************************************\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
@@ -153,14 +153,14 @@ wxFileName MakeDirPath(wxFileName fnPath, wxString szBase, bool bAct)
        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
@@ -168,6 +168,32 @@ wxArrayString MakeTargetFileList(MainFrame * frm, bool fOnlyOneFile)
                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
@@ -186,9 +212,11 @@ bool WillMakeDirByArcName(MainFrame * frm, MakeDialog * mk)
        {\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
@@ -203,10 +231,12 @@ bool WillMakeDirByArcName(MainFrame * frm, MakeDialog * mk)
        }\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
@@ -220,7 +250,7 @@ bool WillMakeDirByArcName(MainFrame * frm, MakeDialog * mk)
        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
@@ -232,7 +262,7 @@ wxString GetFileTypeName(wxFileName fn)
        return sz;\r
 }\r
 \r
-wxIcon GetFileTypeIcon(wxFileName fn)\r
+wxIcon GetFileTypeIcon(const wxFileName & fn)\r
 {\r
        wxIcon icon;\r
        wxIconLocation ilFile;\r
@@ -255,7 +285,19 @@ wxIcon GetFileTypeIcon(wxFileName fn)
        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