OSDN Git Service

DnDで書庫を開く際にTPIを読み込む回数を減らし高速化。
authorsirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Mon, 15 Mar 2010 12:28:51 +0000 (12:28 +0000)
committersirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Mon, 15 Mar 2010 12:28:51 +0000 (12:28 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/tpi/tpi@287 9df91469-1e22-0410-86e7-ea8537beb833

doc/history.html
src/lychee/cls_filedroptarget.cpp
src/lychee/frm_main.cpp

index f726b5d..342cb3c 100644 (file)
@@ -41,6 +41,7 @@
        <li class="add">処理中に書庫全体での進捗状況を表示する機能を追加。</li>\r
        <li class="chg">フォルダを格納する際に、TPIに送る名前を&quot;xxx\&quot;から&quot;xxx&quot;に変更。</li>\r
        <li class="chg">DnDされたものが書庫であるか判定する際に、それがファイルであるかを先に確認するよう変更。</li>\r
+       <li class="chg">DnDで書庫を開く際、TPIを読み込む回数を減らして高速化。</li>\r
        <li class="chg">コマンドライン経由で書庫を展開した後にLycheeのウインドウが表示されないように改良。</li>\r
        <li class="chg">ヘッダ暗号化書庫を開く際に、対応確認の段階でパスワードを要求するものへの対応を改良。</li>\r
        <li class="chg">書庫処理ダイアログで初期状態でOKボタンにフォーカスしておくよう変更。</li>\r
index c76dd08..9a1fabd 100644 (file)
@@ -41,14 +41,19 @@ bool myFileDropTarget::OnDropFiles(wxCoord, wxCoord, const wxArrayString & asFil
 {\r
        wxCommandEvent e;\r
 \r
-       // 書庫に対応しているかどうか確認。\r
-       this->mainFrame->OnArcClose(e);\r
-       if (asFiles.GetCount() == 1 && ::wxFileExists(asFiles[0]) && this->mainFrame->LoadTPI(asFiles[0]) != 0)\r
+       // ファイルが存在するか確認。\r
+       if (asFiles.GetCount() == 1 && ::wxFileExists(asFiles[0]))\r
        {\r
-               // 書庫を開く。\r
-               this->mainFrame->fnArchive = wxFileName(asFiles[0]);\r
-               this->mainFrame->OnArcOpen(e);\r
-               return true;\r
+               // 対応しているかどうか確認。\r
+               long l = this->mainFrame->LoadTPI(asFiles[0]);\r
+               if (l != 0)\r
+               {\r
+                       // 書庫を開く。\r
+                       e.SetExtraLong(l);\r
+                       this->mainFrame->fnArchive = wxFileName(asFiles[0]);\r
+                       this->mainFrame->OnArcOpen(e);\r
+                       return true;\r
+               }\r
        }\r
 \r
        // 対応していない場合は書庫の作成を試みる。\r
index 3a3d9d8..e5532f0 100644 (file)
@@ -341,7 +341,7 @@ void MainFrame::OnArcOpen(wxCommandEvent& e)
        piInfo.eStatus = 0x1000;\r
        piInfo.nProcessedSize = 0;\r
        piInfo.fiInfo.fnFileName = this->fnArchive;\r
-       piInfo.fiInfo.nUnpackedSize = this->LoadTPI(this->fnArchive.GetFullPath());\r
+       piInfo.fiInfo.nUnpackedSize = e.GetExtraLong() != 0 ? e.GetExtraLong() : this->LoadTPI(this->fnArchive.GetFullPath());\r
        if (piInfo.fiInfo.nUnpackedSize == 0)\r
        {\r
                procDlg.Show(false);\r
@@ -486,7 +486,7 @@ void MainFrame::OnArcOpen(wxCommandEvent& e)
        procDlg.Show(false);\r
 }\r
 \r
-void MainFrame::OnArcClose(wxCommandEvent&)\r
+void MainFrame::OnArcClose(wxCommandEvent& e)\r
 {\r
        // ツリービュー・リストビュー設定。\r
        this->tree_ctrl->DeleteAllItems();\r
@@ -518,7 +518,12 @@ void MainFrame::OnArcClose(wxCommandEvent&)
        g_hIconT.RemoveAll();\r
        g_hIconLL.RemoveAll();\r
        g_hIconLS.RemoveAll();\r
-       this->tpi.FreeLibrary();\r
+\r
+       // DnDで書庫を開くときは既に読み込まれているTPIを用いるので、解放してはいけない。\r
+       if (e.GetExtraLong() == 0)\r
+       {\r
+               this->tpi.FreeLibrary();\r
+       }\r
 }\r
 \r
 void MainFrame::OnArcAdd(wxCommandEvent& e)\r