annotate dynamin/gui/windows_folder_dialog.d @ 106:acdbb30fee7e

Port to D2. Most of the effort was dealing with immutable and const.
author Jordan Miner <jminer7@gmail.com>
date Mon, 17 Dec 2012 23:41:50 -0600
parents 73060bc3f004
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
1
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
2 /*
103
73060bc3f004 Change license to Boost 1.0 and MPL 2.0.
Jordan Miner <jminer7@gmail.com>
parents: 46
diff changeset
3 * Copyright Jordan Miner
18
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
4 *
103
73060bc3f004 Change license to Boost 1.0 and MPL 2.0.
Jordan Miner <jminer7@gmail.com>
parents: 46
diff changeset
5 * This Source Code Form is subject to the terms of the Mozilla Public
73060bc3f004 Change license to Boost 1.0 and MPL 2.0.
Jordan Miner <jminer7@gmail.com>
parents: 46
diff changeset
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
73060bc3f004 Change license to Boost 1.0 and MPL 2.0.
Jordan Miner <jminer7@gmail.com>
parents: 46
diff changeset
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
18
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
8 *
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
9 */
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
10
45
4eebc294a3ac Rename DirectoryDialog to FolderDialog.
Jordan Miner <jminer7@gmail.com>
parents: 21
diff changeset
11 module dynamin.gui.windows_folder_dialog;
18
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
12
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
13 public import Utf = tango.text.convert.Utf;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
14
45
4eebc294a3ac Rename DirectoryDialog to FolderDialog.
Jordan Miner <jminer7@gmail.com>
parents: 21
diff changeset
15 template FolderDialogBackend() {
46
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 45
diff changeset
16 extern(Windows) static int setSelectedFolder(HWND hwnd,
21
d0ce1db78819 Directories can now be preselected on Windows
Jordan Miner <jminer7@gmail.com>
parents: 20
diff changeset
17 UINT uMsg, LPARAM lParam, LPARAM lpData) {
d0ce1db78819 Directories can now be preselected on Windows
Jordan Miner <jminer7@gmail.com>
parents: 20
diff changeset
18 if(uMsg == BFFM_INITIALIZED)
d0ce1db78819 Directories can now be preselected on Windows
Jordan Miner <jminer7@gmail.com>
parents: 20
diff changeset
19 SendMessage(hwnd, BFFM_SETSELECTION, true, lpData);
d0ce1db78819 Directories can now be preselected on Windows
Jordan Miner <jminer7@gmail.com>
parents: 20
diff changeset
20 return 0;
d0ce1db78819 Directories can now be preselected on Windows
Jordan Miner <jminer7@gmail.com>
parents: 20
diff changeset
21 }
d0ce1db78819 Directories can now be preselected on Windows
Jordan Miner <jminer7@gmail.com>
parents: 20
diff changeset
22
18
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
23 DialogResult backend_showDialog() {
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
24 BROWSEINFO bi;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
25 //bi.hwndOwner = ;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
26 bi.lpszTitle = "Choose a folder:";
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
27 bi.ulFlags |= BIF_RETURNONLYFSDIRS;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
28 bi.ulFlags |= BIF_USENEWUI;
46
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 45
diff changeset
29 if(_folder) {
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 45
diff changeset
30 bi.lpfn = &setSelectedFolder;
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 45
diff changeset
31 bi.lParam = cast(LPARAM)toWcharPtr(_folder);
21
d0ce1db78819 Directories can now be preselected on Windows
Jordan Miner <jminer7@gmail.com>
parents: 20
diff changeset
32 }
18
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
33
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
34 ITEMIDLIST* pidl = SHBrowseForFolder(&bi);
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
35 if(!pidl)
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
36 return DialogResult.Cancel;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
37 wchar[MAX_PATH+1] dirBuffer; // MAX_PATH is 260
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
38 if(!SHGetPathFromIDList(pidl, dirBuffer.ptr)) {
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
39 Stdout("GetPathFromIDList() failed").newline;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
40 return DialogResult.Cancel;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
41 }
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
42 CoTaskMemFree(pidl);
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
43 int index = MAX_PATH;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
44 foreach(i, c; dirBuffer)
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
45 if(c == 0) { // find first null
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
46 index = i;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
47 if(dirBuffer[i-1] != '\\') {
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
48 dirBuffer[i] = '\\';
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
49 index++;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
50 }
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
51 break;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
52 }
106
acdbb30fee7e Port to D2.
Jordan Miner <jminer7@gmail.com>
parents: 103
diff changeset
53 _folder = cast(immutable)Utf.toString(dirBuffer[0..index]);
18
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
54 return DialogResult.OK;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
55 }
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
56 }
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
57