diff options
author | George Hazan <george.hazan@gmail.com> | 2023-07-29 14:23:02 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2023-07-29 14:23:02 +0300 |
commit | edbfd659e4990494670e535d5be282659cd5bfc8 (patch) | |
tree | 47dabe0dd71e2fa07b8476273e58ead785317f36 /plugins/NewStory/src | |
parent | a63fdd451d23aa5d4b33c1bcf3540bea411f3358 (diff) |
fixes #3602 ("Copy path" в контекстном меню для файлов)
Diffstat (limited to 'plugins/NewStory/src')
-rw-r--r-- | plugins/NewStory/src/history_array.cpp | 1 | ||||
-rw-r--r-- | plugins/NewStory/src/history_array.h | 2 | ||||
-rw-r--r-- | plugins/NewStory/src/history_control.cpp | 22 | ||||
-rw-r--r-- | plugins/NewStory/src/history_control.h | 1 | ||||
-rw-r--r-- | plugins/NewStory/src/history_menus.cpp | 30 |
5 files changed, 50 insertions, 6 deletions
diff --git a/plugins/NewStory/src/history_array.cpp b/plugins/NewStory/src/history_array.cpp index 41b091b37c..5767b91330 100644 --- a/plugins/NewStory/src/history_array.cpp +++ b/plugins/NewStory/src/history_array.cpp @@ -215,6 +215,7 @@ void ItemData::load(bool bFullLoad) DB::FILE_BLOB blob(dbe); if (blob.isOffline()) { m_bOfflineFile = true; + m_bOfflineDownloaded = blob.isCompleted(); CMStringW buf; buf.Append(blob.getName() ? blob.getName() : TranslateT("Unnamed")); diff --git a/plugins/NewStory/src/history_array.h b/plugins/NewStory/src/history_array.h index 212a85adbb..df9f2f9595 100644 --- a/plugins/NewStory/src/history_array.h +++ b/plugins/NewStory/src/history_array.h @@ -9,7 +9,7 @@ struct ItemData : public MZeroedObject bool m_bRtf; bool m_bSelected; bool m_bLoaded; - bool m_bOfflineFile; + bool m_bOfflineFile, m_bOfflineDownloaded; int savedTop; DB::EventInfo dbe; diff --git a/plugins/NewStory/src/history_control.cpp b/plugins/NewStory/src/history_control.cpp index 4e723dfa1c..7f25cfbc94 100644 --- a/plugins/NewStory/src/history_control.cpp +++ b/plugins/NewStory/src/history_control.cpp @@ -596,8 +596,19 @@ LRESULT CALLBACK NewstoryListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM int eventCount = data->items.getCount(); for (int i = 0; i < eventCount; i++) { ItemData *p = data->items.get(i, false); - if (p->m_bSelected) - res.Append(ptrW(TplFormatString(p->getCopyTemplate(), p->hContact, p))); + if (!p->m_bSelected) + continue; + + if (p->m_bOfflineFile) { + DB::EventInfo dbei(p->hEvent); + DB::FILE_BLOB blob(dbei); + if (p->m_bOfflineDownloaded) + res.Append(blob.getLocalName()); + else + res.Append(_A2T(blob.getUrl())); + res.Append(L"\r\n"); + } + else res.Append(ptrW(TplFormatString(p->getCopyTemplate(), p->hContact, p))); } Utils_ClipboardCopy(res); @@ -605,6 +616,11 @@ LRESULT CALLBACK NewstoryListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM InvalidateRect(hwnd, 0, FALSE); break; + case NSM_DOWNLOAD: + if (auto *p = data->items[data->caret]) + Srmm_DownloadOfflineFile(p->hContact, p->hEvent, lParam); + break; + case UM_EDITEVENT: idx = data->items.find(lParam); if (idx != -1) { @@ -835,7 +851,7 @@ LRESULT CALLBACK NewstoryListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM pt.y -= pItem->savedTop; if (pItem->m_bOfflineFile) { - Srmm_DownloadOfflineFile(pItem->hContact, pItem->hEvent, true); + Srmm_DownloadOfflineFile(pItem->hContact, pItem->hEvent, OFD_DOWNLOAD | OFD_RUN); return 0; } diff --git a/plugins/NewStory/src/history_control.h b/plugins/NewStory/src/history_control.h index 743992e90a..9c63d44df2 100644 --- a/plugins/NewStory/src/history_control.h +++ b/plugins/NewStory/src/history_control.h @@ -67,6 +67,7 @@ enum // NSM_COPY, NSM_EXPORT, + NSM_DOWNLOAD, // NSM_GETCOUNT, diff --git a/plugins/NewStory/src/history_menus.cpp b/plugins/NewStory/src/history_menus.cpp index 263d45cdf0..ad27626716 100644 --- a/plugins/NewStory/src/history_menus.cpp +++ b/plugins/NewStory/src/history_menus.cpp @@ -2,10 +2,20 @@ static int hMenuObject; static HANDLE hEventPreBuildMenu; -static HGENMENU hmiHistory; +static HGENMENU hmiHistory, hmiCopy, hmiSaveAs, hmiDownload; HMENU NSMenu_Build(ItemData *item) { + if (item->m_bOfflineFile) { + Menu_ModifyItem(hmiCopy, (item->m_bOfflineDownloaded) ? TranslateT("Copy file name") : TranslateT("Copy url")); + Menu_ShowItem(hmiSaveAs, true); + Menu_ShowItem(hmiDownload, !item->m_bOfflineDownloaded); + } + else { + Menu_ShowItem(hmiSaveAs, false); + Menu_ShowItem(hmiDownload, false); + } + NotifyEventHooks(hEventPreBuildMenu, item->hContact, (LPARAM)&item->dbe); HMENU hMenu = CreatePopupMenu(); @@ -39,6 +49,14 @@ static INT_PTR NSMenuHelper(WPARAM wParam, LPARAM lParam) SendMessage(pData->hwnd, NSM_SELECTITEMS, 0, pData->items.getCount() - 1); break; + case 5: + SendMessage(pData->hwnd, NSM_DOWNLOAD, 0, OFD_SAVEAS | OFD_RUN); + break; + + case 6: + SendMessage(pData->hwnd, NSM_DOWNLOAD, 0, OFD_DOWNLOAD); + break; + default: if (auto *pDlg = pData->pMsgDlg) { PostMessage(pDlg->GetHwnd(), WM_MOUSEACTIVATE, 0, 0); @@ -128,7 +146,15 @@ void InitMenus() mi.position = 100000; mi.name.a = LPGEN("Copy"); - Menu_AddNewStoryMenuItem(&mi, 1); + hmiCopy = Menu_AddNewStoryMenuItem(&mi, 1); + + mi.position = 100001; + mi.name.a = LPGEN("Save as"); + hmiSaveAs = Menu_AddNewStoryMenuItem(&mi, 5); + + mi.position = 100002; + mi.name.a = LPGEN("Download"); + hmiDownload = Menu_AddNewStoryMenuItem(&mi, 6); mi.position = 200000; mi.name.a = LPGEN("Edit"); |