mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
refresh available drive bar buttons after connecting to network drives or activating manual refresh
svn path=/trunk/; revision=15307
This commit is contained in:
parent
d008691568
commit
f6b3f734ac
1 changed files with 96 additions and 65 deletions
|
@ -200,6 +200,7 @@ int swprintf(wchar_t* buffer, const wchar_t* fmt, ...)
|
|||
static void read_directory(Entry* dir, LPCTSTR path, SORT_ORDER sortOrder, HWND hwnd);
|
||||
static void set_curdir(ChildWnd* child, Entry* entry, int idx, HWND hwnd);
|
||||
static void refresh_child(ChildWnd* child);
|
||||
static void refresh_drives();
|
||||
static void get_path(Entry* dir, PTSTR path);
|
||||
|
||||
LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam);
|
||||
|
@ -1937,6 +1938,10 @@ LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam
|
|||
free(child);
|
||||
break;}
|
||||
|
||||
case ID_REFRESH:
|
||||
refresh_drives();
|
||||
break;
|
||||
|
||||
case ID_WINDOW_CASCADE:
|
||||
SendMessage(Globals.hmdiclient, WM_MDICASCADE, 0, 0);
|
||||
break;
|
||||
|
@ -2029,7 +2034,9 @@ LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam
|
|||
|
||||
case ID_CONNECT_NETWORK_DRIVE: {
|
||||
DWORD ret = WNetConnectionDialog(hwnd, RESOURCETYPE_DISK);
|
||||
if (ret!=NO_ERROR && ret!=(DWORD)-1) {
|
||||
if (ret == NO_ERROR)
|
||||
refresh_drives();
|
||||
else if (ret != (DWORD)-1) {
|
||||
if (ret == ERROR_EXTENDED_ERROR)
|
||||
display_network_error(hwnd);
|
||||
else
|
||||
|
@ -2039,7 +2046,9 @@ LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam
|
|||
|
||||
case ID_DISCONNECT_NETWORK_DRIVE: {
|
||||
DWORD ret = WNetDisconnectDialog(hwnd, RESOURCETYPE_DISK);
|
||||
if (ret!=NO_ERROR && ret!=(DWORD)-1) {
|
||||
if (ret == NO_ERROR)
|
||||
refresh_drives();
|
||||
else if (ret != (DWORD)-1) {
|
||||
if (ret == ERROR_EXTENDED_ERROR)
|
||||
display_network_error(hwnd);
|
||||
else
|
||||
|
@ -3385,6 +3394,87 @@ static void refresh_child(ChildWnd* child)
|
|||
}
|
||||
|
||||
|
||||
static void create_drive_bar()
|
||||
{
|
||||
TBBUTTON drivebarBtn = {0, 0, TBSTATE_ENABLED, BTNS_BUTTON, {0, 0}, 0, 0};
|
||||
TCHAR b1[BUFFER_LEN];
|
||||
int btn = 1;
|
||||
PTSTR p;
|
||||
|
||||
GetLogicalDriveStrings(BUFFER_LEN, Globals.drives);
|
||||
|
||||
Globals.hdrivebar = CreateToolbarEx(Globals.hMainWnd, WS_CHILD|WS_VISIBLE|CCS_NOMOVEY|TBSTYLE_LIST,
|
||||
IDW_DRIVEBAR, 2, Globals.hInstance, IDB_DRIVEBAR, &drivebarBtn,
|
||||
1, 16, 13, 16, 13, sizeof(TBBUTTON));
|
||||
|
||||
#ifndef _NO_EXTENSIONS
|
||||
#ifdef __WINE__
|
||||
/* insert unix file system button */
|
||||
b1[0] = '/';
|
||||
b1[1] = '\0';
|
||||
b1[2] = '\0';
|
||||
SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)b1);
|
||||
|
||||
drivebarBtn.idCommand = ID_DRIVE_UNIX_FS;
|
||||
SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++, (LPARAM)&drivebarBtn);
|
||||
drivebarBtn.iString++;
|
||||
#endif
|
||||
#ifdef _SHELL_FOLDERS
|
||||
/* insert shell namespace button */
|
||||
load_string(b1, IDS_SHELL);
|
||||
b1[lstrlen(b1)+1] = '\0';
|
||||
SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)b1);
|
||||
|
||||
drivebarBtn.idCommand = ID_DRIVE_SHELL_NS;
|
||||
SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++, (LPARAM)&drivebarBtn);
|
||||
drivebarBtn.iString++;
|
||||
#endif
|
||||
|
||||
/* register windows drive root strings */
|
||||
SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)Globals.drives);
|
||||
#endif
|
||||
|
||||
drivebarBtn.idCommand = ID_DRIVE_FIRST;
|
||||
|
||||
for(p=Globals.drives; *p; ) {
|
||||
#ifdef _NO_EXTENSIONS
|
||||
/* insert drive letter */
|
||||
TCHAR b[3] = {tolower(*p)};
|
||||
SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)b);
|
||||
#endif
|
||||
switch(GetDriveType(p)) {
|
||||
case DRIVE_REMOVABLE: drivebarBtn.iBitmap = 1; break;
|
||||
case DRIVE_CDROM: drivebarBtn.iBitmap = 3; break;
|
||||
case DRIVE_REMOTE: drivebarBtn.iBitmap = 4; break;
|
||||
case DRIVE_RAMDISK: drivebarBtn.iBitmap = 5; break;
|
||||
default:/*DRIVE_FIXED*/ drivebarBtn.iBitmap = 2;
|
||||
}
|
||||
|
||||
SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++, (LPARAM)&drivebarBtn);
|
||||
drivebarBtn.idCommand++;
|
||||
drivebarBtn.iString++;
|
||||
|
||||
while(*p++);
|
||||
}
|
||||
}
|
||||
|
||||
static void refresh_drives()
|
||||
{
|
||||
RECT rect;
|
||||
|
||||
/* destroy drive bar */
|
||||
DestroyWindow(Globals.hdrivebar);
|
||||
Globals.hdrivebar = 0;
|
||||
|
||||
/* re-create drive bar */
|
||||
create_drive_bar();
|
||||
|
||||
/* update window layout */
|
||||
GetClientRect(Globals.hMainWnd, &rect);
|
||||
SendMessage(Globals.hMainWnd, WM_SIZE, 0, MAKELONG(rect.right, rect.bottom));
|
||||
}
|
||||
|
||||
|
||||
BOOL launch_file(HWND hwnd, LPCTSTR cmd, UINT nCmdShow)
|
||||
{
|
||||
HINSTANCE hinst = ShellExecute(hwnd, NULL/*operation*/, cmd, NULL/*parameters*/, NULL/*dir*/, nCmdShow);
|
||||
|
@ -3845,6 +3935,7 @@ LRESULT CALLBACK ChildWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam
|
|||
break;}
|
||||
|
||||
case ID_REFRESH:
|
||||
refresh_drives();
|
||||
refresh_child(child);
|
||||
break;
|
||||
|
||||
|
@ -4153,6 +4244,7 @@ void show_frame(HWND hwndParent, int cmdshow)
|
|||
TCHAR path[MAX_PATH], b1[BUFFER_LEN];
|
||||
ChildWnd* child;
|
||||
HMENU hMenuFrame, hMenuWindow;
|
||||
TBBUTTON drivebarBtn = {0, 0, TBSTATE_ENABLED, BTNS_SEP, {0, 0}, 0, 0};
|
||||
|
||||
CLIENTCREATESTRUCT ccs;
|
||||
|
||||
|
@ -4184,70 +4276,9 @@ void show_frame(HWND hwndParent, int cmdshow)
|
|||
Globals.hMainWnd, 0, Globals.hInstance, &ccs);
|
||||
|
||||
|
||||
{
|
||||
TBBUTTON drivebarBtn = {0, 0, TBSTATE_ENABLED, BTNS_SEP, {0, 0}, 0, 0};
|
||||
int btn = 1;
|
||||
PTSTR p;
|
||||
|
||||
Globals.hdrivebar = CreateToolbarEx(Globals.hMainWnd, WS_CHILD|WS_VISIBLE|CCS_NOMOVEY|TBSTYLE_LIST,
|
||||
IDW_DRIVEBAR, 2, Globals.hInstance, IDB_DRIVEBAR, &drivebarBtn,
|
||||
1, 16, 13, 16, 13, sizeof(TBBUTTON));
|
||||
CheckMenuItem(Globals.hMenuOptions, ID_VIEW_DRIVE_BAR, MF_BYCOMMAND|MF_CHECKED);
|
||||
|
||||
GetLogicalDriveStrings(BUFFER_LEN, Globals.drives);
|
||||
|
||||
drivebarBtn.fsStyle = BTNS_BUTTON;
|
||||
|
||||
#ifndef _NO_EXTENSIONS
|
||||
#ifdef __WINE__
|
||||
/* insert unix file system button */
|
||||
b1[0] = '/';
|
||||
b1[1] = '\0';
|
||||
b1[2] = '\0';
|
||||
SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)b1);
|
||||
|
||||
drivebarBtn.idCommand = ID_DRIVE_UNIX_FS;
|
||||
SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++, (LPARAM)&drivebarBtn);
|
||||
drivebarBtn.iString++;
|
||||
#endif
|
||||
#ifdef _SHELL_FOLDERS
|
||||
/* insert shell namespace button */
|
||||
load_string(b1, IDS_SHELL);
|
||||
b1[lstrlen(b1)+1] = '\0';
|
||||
SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)b1);
|
||||
|
||||
drivebarBtn.idCommand = ID_DRIVE_SHELL_NS;
|
||||
SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++, (LPARAM)&drivebarBtn);
|
||||
drivebarBtn.iString++;
|
||||
#endif
|
||||
|
||||
/* register windows drive root strings */
|
||||
SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)Globals.drives);
|
||||
#endif
|
||||
|
||||
drivebarBtn.idCommand = ID_DRIVE_FIRST;
|
||||
|
||||
for(p=Globals.drives; *p; ) {
|
||||
#ifdef _NO_EXTENSIONS
|
||||
/* insert drive letter */
|
||||
TCHAR b[3] = {tolower(*p)};
|
||||
SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)b);
|
||||
#endif
|
||||
switch(GetDriveType(p)) {
|
||||
case DRIVE_REMOVABLE: drivebarBtn.iBitmap = 1; break;
|
||||
case DRIVE_CDROM: drivebarBtn.iBitmap = 3; break;
|
||||
case DRIVE_REMOTE: drivebarBtn.iBitmap = 4; break;
|
||||
case DRIVE_RAMDISK: drivebarBtn.iBitmap = 5; break;
|
||||
default:/*DRIVE_FIXED*/ drivebarBtn.iBitmap = 2;
|
||||
}
|
||||
|
||||
SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++, (LPARAM)&drivebarBtn);
|
||||
drivebarBtn.idCommand++;
|
||||
drivebarBtn.iString++;
|
||||
|
||||
while(*p++);
|
||||
}
|
||||
}
|
||||
create_drive_bar();
|
||||
|
||||
{
|
||||
TBBUTTON toolbarBtns[] = {
|
||||
|
|
Loading…
Reference in a new issue