Skip to content

Commit fc342cf

Browse files
committed
Pull in PR #62
2 parents f23ddf8 + 8b0e73e commit fc342cf

File tree

8 files changed

+176
-127
lines changed

8 files changed

+176
-127
lines changed

src/JPEGView/Clipboard.cpp

+31
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,17 @@ static void CopyOriginalFileNameToClipboard(LPCWSTR filename) {
2020
::SetClipboardData(CF_HDROP, hMem);
2121
}
2222

23+
static void CopyFileNameTextToClipboard(LPCWSTR filename) {
24+
int fileNameLength = (int)wcslen(filename);
25+
DWORD fileNameLengthBytes = sizeof(wchar_t) * (fileNameLength + 1);
26+
HGLOBAL hMem = ::GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE | GMEM_DDESHARE, fileNameLengthBytes + sizeof(wchar_t)); // for double NULL char
27+
WCHAR* pGlobal = (WCHAR*) ::GlobalLock(hMem);
28+
::CopyMemory(pGlobal, filename, fileNameLengthBytes);
29+
pGlobal[fileNameLength + 1] = 0; // add additional NULL character
30+
::GlobalUnlock(hMem);
31+
::SetClipboardData(CF_UNICODETEXT, hMem);
32+
}
33+
2334
void CClipboard::CopyImageToClipboard(HWND hWnd, CJPEGImage * pImage, LPCTSTR fileName) {
2435
if (pImage == NULL || pImage->DIBPixelsLastProcessed(true) == NULL) {
2536
return;
@@ -52,6 +63,15 @@ void CClipboard::CopyFullImageToClipboard(HWND hWnd, CJPEGImage * pImage, const
5263
pImage->EnableDimming(true);
5364
}
5465

66+
void CClipboard::CopyPathToClipboard(HWND hWnd, CJPEGImage* pImage, LPCTSTR fileName) {
67+
if (pImage == NULL || pImage->DIBPixelsLastProcessed(true) == NULL) {
68+
return;
69+
}
70+
pImage->EnableDimming(false);
71+
DoCopyFileNameText(hWnd, fileName);
72+
pImage->EnableDimming(true);
73+
}
74+
5575
CJPEGImage* CClipboard::PasteImageFromClipboard(HWND hWnd, const CImageProcessingParams& procParams,
5676
EProcessingFlags eFlags) {
5777
if (!::OpenClipboard(hWnd)) {
@@ -138,5 +158,16 @@ void CClipboard::DoCopy(HWND hWnd, int nWidth, int nHeight, const void* pSourceI
138158
CopyOriginalFileNameToClipboard(fileName);
139159
}
140160

161+
::CloseClipboard();
162+
}
163+
164+
void CClipboard::DoCopyFileNameText(HWND hWnd, LPCTSTR fileName) {
165+
if (!::OpenClipboard(hWnd)) {
166+
return;
167+
}
168+
::EmptyClipboard();
169+
170+
CopyFileNameTextToClipboard(fileName);
171+
141172
::CloseClipboard();
142173
}

src/JPEGView/Clipboard.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
class CJPEGImage;
66

7-
// Allows to copy an image to the clipboard and to paste an image from the clipboard
7+
// Allows to copy an image or text to the clipboard and to paste an image from the clipboard
88
class CClipboard {
99
public:
1010
// Copy the pixels of the currently visible part of the image as a 24 bpp DIB to the clipboard
@@ -19,11 +19,15 @@ class CClipboard {
1919
static void CopyFullImageToClipboard(HWND hWnd, CJPEGImage * pImage, const CImageProcessingParams& procParams,
2020
EProcessingFlags eFlags, CRect clipRect, LPCTSTR fileName);
2121

22+
// Copy file path to the clipboard.
23+
static void CopyPathToClipboard(HWND hWnd, CJPEGImage* pImage, LPCTSTR fileName);
24+
2225
// Paste image from clipboard. Returns NULL if paste failed. The caller gets ownership of the returned image.
2326
static CJPEGImage* PasteImageFromClipboard(HWND hWnd, const CImageProcessingParams& procParams, EProcessingFlags eFlags);
2427

2528
private:
2629
CClipboard(void);
2730

2831
static void DoCopy(HWND hWnd, int nWidth, int nHeight, const void* pSourceImageDIB32, LPCTSTR fileName);
32+
static void DoCopyFileNameText(HWND hWnd, LPCTSTR fileName);
2933
};

src/JPEGView/Config/KeyMap.txt

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#define IDM_PRINT 1700 // print image
1515
#define IDM_COPY 2000 // copy image to clipboard in screen size
1616
#define IDM_COPY_FULL 2500 // copy image to clipboard in original size
17+
#define IDM_COPY_PATH 2525 // copy image path to clipboard
1718
#define IDM_PASTE 2550 // paste image from clipboard
1819
#define IDM_BATCH_COPY 2600 // open batch copy dialog
1920
#define IDM_RENAME 2610 // rename current file, only works when image processing panel can be shown (i.e. panel not disabled in INI and window size big enough)
@@ -181,6 +182,7 @@ Ctrl+Down IDM_ZOOM_DEC
181182
Ctrl+Up IDM_ZOOM_INC
182183
Ctrl+A IDM_EXCHANGE_PROC_PARAMS
183184
Ctrl+C IDM_COPY
185+
Ctrl+Shift+C IDM_COPY_PATH
184186
C IDM_SORT_CREATION_DATE
185187
Ctrl+N IDM_SHOW_NAVPANEL
186188
N IDM_SORT_NAME

src/JPEGView/Config/KeyMap_ru.txt

+128-126
Large diffs are not rendered by default.

src/JPEGView/HelpDisplayCtl.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ void CHelpDisplayCtl::GenerateHelpDisplay() {
6666
m_pHelpDisplay->AddLine(_KeyDesc(IDM_MARK_FOR_TOGGLE), buffMI);
6767
m_pHelpDisplay->AddLineInfo(_KeyDesc(IDM_SHOW_NAVPANEL), m_pMainDlg->GetNavPanelCtl()->IsActive(), CNLS::GetString(_T("Show/hide navigation panel")));
6868
m_pHelpDisplay->AddLine(_KeyDesc(IDM_COPY, IDM_COPY_FULL), CNLS::GetString(_T("Copy screen to clipboard/ Copy processed full size image to clipboard")));
69+
m_pHelpDisplay->AddLine(_KeyDesc(IDM_COPY_PATH), CNLS::GetString(_T("Copy file path of the image to clipboard")));
6970
m_pHelpDisplay->AddLine(_KeyDesc(IDM_OPEN), CNLS::GetString(_T("Open new image or slideshow file")));
7071
m_pHelpDisplay->AddLine(_KeyDesc(IDM_SAVE_ALLOW_NO_PROMPT), CNLS::GetString(_T("Save processed image to JPEG file (original size)")));
7172
m_pHelpDisplay->AddLine(_KeyDesc(IDM_SAVE_SCREEN), CNLS::GetString(_T("Save processed image to JPEG file (screen size)")));

src/JPEGView/JPEGView.rc

+1
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ BEGIN
301301
MENUITEM SEPARATOR
302302
MENUITEM "Copy to clipboard", IDM_COPY
303303
MENUITEM "Copy original size image", IDM_COPY_FULL
304+
MENUITEM "Copy file path", IDM_COPY_PATH
304305
MENUITEM "Paste from clipboard", IDM_PASTE
305306
MENUITEM SEPARATOR
306307
MENUITEM "Show picture info (EXIF)", IDM_SHOW_FILEINFO

src/JPEGView/MainDlg.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -1169,6 +1169,7 @@ LRESULT CMainDlg::OnContextMenu(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam,
11691169
::EnableMenuItem(hMenuTrackPopup, IDM_PRINT, MF_BYCOMMAND | MF_GRAYED);
11701170
::EnableMenuItem(hMenuTrackPopup, IDM_COPY, MF_BYCOMMAND | MF_GRAYED);
11711171
::EnableMenuItem(hMenuTrackPopup, IDM_COPY_FULL, MF_BYCOMMAND | MF_GRAYED);
1172+
::EnableMenuItem(hMenuTrackPopup, IDM_COPY_PATH, MF_BYCOMMAND | MF_GRAYED);
11721173
::EnableMenuItem(hMenuTrackPopup, IDM_SAVE_PARAM_DB, MF_BYCOMMAND | MF_GRAYED);
11731174
::EnableMenuItem(hMenuTrackPopup, IDM_CLEAR_PARAM_DB, MF_BYCOMMAND | MF_GRAYED);
11741175
::EnableMenuItem(hMenuTrackPopup, SUBMENU_POS_ZOOM, MF_BYPOSITION | MF_GRAYED);
@@ -1182,6 +1183,7 @@ LRESULT CMainDlg::OnContextMenu(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam,
11821183
if (m_bKeepParams || m_pCurrentImage->IsClipboardImage())
11831184
::EnableMenuItem(hMenuTrackPopup, IDM_SAVE_PARAM_DB, MF_BYCOMMAND | MF_GRAYED);
11841185
if (m_pCurrentImage->IsClipboardImage()) {
1186+
::EnableMenuItem(hMenuTrackPopup, IDM_COPY_PATH, MF_BYCOMMAND | MF_GRAYED);
11851187
::EnableMenuItem(hMenuModDate, IDM_TOUCH_IMAGE, MF_BYCOMMAND | MF_GRAYED);
11861188
::EnableMenuItem(hMenuModDate, IDM_TOUCH_IMAGE_EXIF, MF_BYCOMMAND | MF_GRAYED);
11871189
}
@@ -1342,6 +1344,11 @@ void CMainDlg::ExecuteCommand(int nCommand) {
13421344
this->Invalidate(FALSE);
13431345
}
13441346
break;
1347+
case IDM_COPY_PATH:
1348+
if (m_pCurrentImage != NULL && !m_pCurrentImage->IsClipboardImage()) {
1349+
CClipboard::CopyPathToClipboard(this->m_hWnd, m_pCurrentImage, m_pFileList->Current());
1350+
}
1351+
break;
13451352
case IDM_PASTE:
13461353
if (::IsClipboardFormatAvailable(CF_DIB)) {
13471354
GotoImage(POS_Clipboard);

src/JPEGView/resource.h

+1
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@
141141
#define IDM_PRINT 1700
142142
#define IDM_COPY 2000
143143
#define IDM_COPY_FULL 2500
144+
#define IDM_COPY_PATH 2525
144145
#define IDM_PASTE 2550
145146
#define IDM_BATCH_COPY 2600
146147
#define IDM_RENAME 2610

0 commit comments

Comments
 (0)