mirror of https://github.com/buggins/dlangui.git
implement drag&drop files to application window
This commit is contained in:
parent
218093443b
commit
26d9481506
|
@ -263,6 +263,20 @@ class Window {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// called when user dragged file(s) to application window
|
||||||
|
void handleDroppedFiles(string[] filenames) {
|
||||||
|
//Log.d("handleDroppedFiles(", filenames, ")");
|
||||||
|
if (_onFilesDropped)
|
||||||
|
_onFilesDropped(filenames);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void delegate(string[]) _onFilesDropped;
|
||||||
|
/// get handler for files dropped to app window
|
||||||
|
@property void delegate(string[]) onFilesDropped() { return _onFilesDropped; }
|
||||||
|
/// set handler for files dropped to app window
|
||||||
|
@property Window onFilesDropped(void delegate(string[]) handler) { _onFilesDropped = handler; return this; }
|
||||||
|
|
||||||
|
|
||||||
/// hide tooltip if shown and cancel tooltip timer if set
|
/// hide tooltip if shown and cancel tooltip timer if set
|
||||||
void hideTooltip() {
|
void hideTooltip() {
|
||||||
if (_tooltip.popup) {
|
if (_tooltip.popup) {
|
||||||
|
|
|
@ -200,7 +200,6 @@ class Win32Window : Window {
|
||||||
null, // window menu handle
|
null, // window menu handle
|
||||||
_hInstance, // program instance handle
|
_hInstance, // program instance handle
|
||||||
cast(void*)this); // creation parameters
|
cast(void*)this); // creation parameters
|
||||||
|
|
||||||
version (USE_OPENGL) {
|
version (USE_OPENGL) {
|
||||||
import derelict.opengl3.wgl;
|
import derelict.opengl3.wgl;
|
||||||
|
|
||||||
|
@ -324,6 +323,13 @@ class Win32Window : Window {
|
||||||
PostMessageW(_hwnd, CUSTOM_MESSAGE_ID, 0, event.uniqueId);
|
PostMessageW(_hwnd, CUSTOM_MESSAGE_ID, 0, event.uniqueId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// set handler for files dropped to app window
|
||||||
|
override @property Window onFilesDropped(void delegate(string[]) handler) {
|
||||||
|
super.onFilesDropped(handler);
|
||||||
|
DragAcceptFiles(_hwnd, handler ? TRUE : FALSE);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
private long _nextExpectedTimerTs;
|
private long _nextExpectedTimerTs;
|
||||||
private UINT_PTR _timerId = 1;
|
private UINT_PTR _timerId = 1;
|
||||||
|
|
||||||
|
@ -1141,6 +1147,23 @@ LRESULT WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case WM_DROPFILES:
|
||||||
|
if (window !is null) {
|
||||||
|
HDROP hdrop = cast(HDROP)wParam;
|
||||||
|
string[] files;
|
||||||
|
wchar[] buf;
|
||||||
|
auto count = DragQueryFileW(hdrop, 0xFFFFFFFF, cast(wchar*)NULL, 0);
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
auto sz = DragQueryFileW(hdrop, i, cast(wchar*)NULL, 0);
|
||||||
|
buf.length = sz + 2;
|
||||||
|
sz = DragQueryFileW(hdrop, i, buf.ptr, sz + 1);
|
||||||
|
files ~= toUTF8(buf[0..sz]);
|
||||||
|
}
|
||||||
|
if (files.length)
|
||||||
|
window.handleDroppedFiles(files);
|
||||||
|
DragFinish(hdrop);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
case WM_GETMINMAXINFO:
|
case WM_GETMINMAXINFO:
|
||||||
case WM_NCCREATE:
|
case WM_NCCREATE:
|
||||||
case WM_NCCALCSIZE:
|
case WM_NCCALCSIZE:
|
||||||
|
|
Loading…
Reference in New Issue