getting some mods from a while ago sync'd.

svn path=/trunk/; revision=4184
This commit is contained in:
Robert Dickenson 2003-02-21 16:23:11 +00:00
parent c3ff43d969
commit 562b3cf13b
30 changed files with 544 additions and 453 deletions

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include "main.h" #include "main.h"
#include "about.h" #include "about.h"

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include <windowsx.h> #include <windowsx.h>
#include <ctype.h> #include <ctype.h>
@ -65,7 +61,7 @@
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Local module support methods // Local module support methods
// //
/*
static BOOL pane_command(Pane* pane, UINT cmd) static BOOL pane_command(Pane* pane, UINT cmd)
{ {
switch(cmd) { switch(cmd) {
@ -100,7 +96,7 @@ static BOOL pane_command(Pane* pane, UINT cmd)
} }
return TRUE; return TRUE;
} }
*/
static void draw_splitbar(HWND hWnd, int x) static void draw_splitbar(HWND hWnd, int x)
{ {
RECT rt; RECT rt;
@ -119,8 +115,8 @@ static void ResizeWnd(ChildWnd* pChildWnd, int cx, int cy)
RECT rt = {0, 0, cx, cy}; RECT rt = {0, 0, cx, cy};
cx = pChildWnd->nSplitPos + SPLIT_WIDTH/2; cx = pChildWnd->nSplitPos + SPLIT_WIDTH/2;
DeferWindowPos(hdwp, pChildWnd->left.hWnd, 0, rt.left, rt.top, pChildWnd->nSplitPos-SPLIT_WIDTH/2-rt.left, rt.bottom-rt.top, SWP_NOZORDER|SWP_NOACTIVATE); DeferWindowPos(hdwp, pChildWnd->hTreeWnd, 0, rt.left, rt.top, pChildWnd->nSplitPos-SPLIT_WIDTH/2-rt.left, rt.bottom-rt.top, SWP_NOZORDER|SWP_NOACTIVATE);
DeferWindowPos(hdwp, pChildWnd->right.hWnd, 0, rt.left+cx+1, rt.top, rt.right-cx, rt.bottom-rt.top, SWP_NOZORDER|SWP_NOACTIVATE); DeferWindowPos(hdwp, pChildWnd->hListWnd, 0, rt.left+cx+1, rt.top, rt.right-cx, rt.bottom-rt.top, SWP_NOZORDER|SWP_NOACTIVATE);
EndDeferWindowPos(hdwp); EndDeferWindowPos(hdwp);
} }
@ -250,6 +246,61 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
return TRUE; return TRUE;
} }
BOOL OnNotify(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
ChildWnd* pChildWnd = (ChildWnd*)GetWindowLong(hWnd, GWL_USERDATA);
{
if ((int)wParam == TREE_WINDOW) {
switch (((LPNMHDR)lParam)->code) {
case TVN_ITEMEXPANDING:
// return !OnTreeExpanding(pChildWnd->hTreeWnd, (NMTREEVIEW*)lParam);
OnTreeExpanding(pChildWnd->hTreeWnd, (NMTREEVIEW*)lParam);
return FALSE;
case TVN_SELCHANGED:
{
Entry* entry = (Entry*)((NMTREEVIEW*)lParam)->itemNew.lParam;
if (entry != NULL) {
//RefreshList(pChildWnd->hListWnd, entry);
//void set_curdir(ChildWnd* child, Entry* entry)
// set_curdir(pChildWnd, entry);
// UpdateStatus(hWnd, pChildWnd->left.cur->down);
}
case TVN_GETDISPINFO:
OnGetDispInfo((NMTVDISPINFO*)lParam);
break;
/*
HKEY hKey;
TCHAR keyPath[1000];
int keyPathLen = 0;
keyPath[0] = _T('\0');
hKey = FindRegRoot(pChildWnd->hTreeWnd, ((NMTREEVIEW*)lParam)->itemNew.hItem, keyPath, &keyPathLen, sizeof(keyPath)/sizeof(TCHAR));
RefreshListView(pChildWnd->hListWnd, hKey, keyPath);
keyPathLen = 0;
keyPath[0] = _T('\0');
MakeFullRegPath(pChildWnd->hTreeWnd, ((NMTREEVIEW*)lParam)->itemNew.hItem, keyPath, &keyPathLen, sizeof(keyPath)/sizeof(TCHAR));
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)keyPath);
*/
}
break;
default:
break;
}
} else
if ((int)wParam == LIST_WINDOW) {
if (!SendMessage(pChildWnd->hListWnd, WM_NOTIFY, wParam, lParam)) {
return FALSE;
}
}
}
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// //
// FUNCTION: ChildWndProc(HWND, unsigned, WORD, LONG) // FUNCTION: ChildWndProc(HWND, unsigned, WORD, LONG)
@ -261,20 +312,22 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
// WM_DESTROY - post a quit message and return // WM_DESTROY - post a quit message and return
// //
// //
LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{ {
static int last_split;
ChildWnd* pChildWnd = (ChildWnd*)GetWindowLong(hWnd, GWL_USERDATA); ChildWnd* pChildWnd = (ChildWnd*)GetWindowLong(hWnd, GWL_USERDATA);
ASSERT(pChildWnd); ASSERT(pChildWnd || (message == WM_CREATE));
switch(message) { switch(message) {
case WM_CREATE: case WM_CREATE:
CreateTreeWnd(pChildWnd->hWnd, &pChildWnd->left, IDW_TREE_LEFT); pChildWnd = (ChildWnd*)((MDICREATESTRUCT*)((CREATESTRUCT*)lParam)->lpCreateParams)->lParam;
CreateListWnd(pChildWnd->hWnd, &pChildWnd->right, IDW_TREE_RIGHT, pChildWnd->szPath); ASSERT(pChildWnd);
//create_tree_window(pChildWnd->hWnd, &pChildWnd->left, IDW_TREE_LEFT, IDW_HEADER_LEFT, pChildWnd->szPath); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pChildWnd);
//create_list_window(pChildWnd->hWnd, &pChildWnd->right, IDW_TREE_RIGHT, IDW_HEADER_RIGHT);
return 0; pChildWnd->nSplitPos = 250;
pChildWnd->hTreeWnd = CreateTreeView(hWnd, pChildWnd, TREE_WINDOW);
pChildWnd->hListWnd = CreateListView(hWnd, pChildWnd/*, pChildWnd->szPath*/, LIST_WINDOW);
//return -1; // terminate window creation on error
break; break;
case WM_PAINT: case WM_PAINT:
OnPaint(hWnd, pChildWnd); OnPaint(hWnd, pChildWnd);
@ -299,8 +352,8 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
int x = LOWORD(lParam); int x = LOWORD(lParam);
GetClientRect(hWnd, &rt); GetClientRect(hWnd, &rt);
if (x>=pChildWnd->nSplitPos-SPLIT_WIDTH/2 && x<pChildWnd->nSplitPos+SPLIT_WIDTH/2+1) { if (x>=pChildWnd->nSplitPos-SPLIT_WIDTH/2 && x<pChildWnd->nSplitPos+SPLIT_WIDTH/2+1) {
last_split = pChildWnd->nSplitPos; pChildWnd->last_split = pChildWnd->nSplitPos;
draw_splitbar(hWnd, last_split); draw_splitbar(hWnd, pChildWnd->last_split);
SetCapture(hWnd); SetCapture(hWnd);
} }
break;} break;}
@ -309,8 +362,8 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
if (GetCapture() == hWnd) { if (GetCapture() == hWnd) {
RECT rt; RECT rt;
int x = LOWORD(lParam); int x = LOWORD(lParam);
draw_splitbar(hWnd, last_split); draw_splitbar(hWnd, pChildWnd->last_split);
last_split = -1; pChildWnd->last_split = -1;
GetClientRect(hWnd, &rt); GetClientRect(hWnd, &rt);
pChildWnd->nSplitPos = x; pChildWnd->nSplitPos = x;
ResizeWnd(pChildWnd, rt.right, rt.bottom); ResizeWnd(pChildWnd, rt.right, rt.bottom);
@ -319,18 +372,18 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
break; break;
case WM_CAPTURECHANGED: case WM_CAPTURECHANGED:
if (GetCapture()==hWnd && last_split>=0) if (GetCapture()==hWnd && pChildWnd->last_split>=0)
draw_splitbar(hWnd, last_split); draw_splitbar(hWnd, pChildWnd->last_split);
break; break;
case WM_KEYDOWN: case WM_KEYDOWN:
if (wParam == VK_ESCAPE) if (wParam == VK_ESCAPE)
if (GetCapture() == hWnd) { if (GetCapture() == hWnd) {
RECT rt; RECT rt;
draw_splitbar(hWnd, last_split); draw_splitbar(hWnd, pChildWnd->last_split);
GetClientRect(hWnd, &rt); GetClientRect(hWnd, &rt);
ResizeWnd(pChildWnd, rt.right, rt.bottom); ResizeWnd(pChildWnd, rt.right, rt.bottom);
last_split = -1; pChildWnd->last_split = -1;
ReleaseCapture(); ReleaseCapture();
SetCursor(LoadCursor(0, IDC_ARROW)); SetCursor(LoadCursor(0, IDC_ARROW));
} }
@ -342,10 +395,10 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
int x = LOWORD(lParam); int x = LOWORD(lParam);
HDC hdc = GetDC(hWnd); HDC hdc = GetDC(hWnd);
GetClientRect(hWnd, &rt); GetClientRect(hWnd, &rt);
rt.left = last_split-SPLIT_WIDTH/2; rt.left = pChildWnd->last_split-SPLIT_WIDTH/2;
rt.right = last_split+SPLIT_WIDTH/2+1; rt.right = pChildWnd->last_split+SPLIT_WIDTH/2+1;
InvertRect(hdc, &rt); InvertRect(hdc, &rt);
last_split = x; pChildWnd->last_split = x;
rt.left = x-SPLIT_WIDTH/2; rt.left = x-SPLIT_WIDTH/2;
rt.right = x+SPLIT_WIDTH/2+1; rt.right = x+SPLIT_WIDTH/2+1;
InvertRect(hdc, &rt); InvertRect(hdc, &rt);
@ -355,15 +408,15 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
case WM_SETFOCUS: case WM_SETFOCUS:
SetCurrentDirectory(pChildWnd->szPath); SetCurrentDirectory(pChildWnd->szPath);
SetFocus(pChildWnd->nFocusPanel? pChildWnd->right.hWnd: pChildWnd->left.hWnd); SetFocus(pChildWnd->nFocusPanel? pChildWnd->hListWnd: pChildWnd->hTreeWnd);
break; break;
case WM_DISPATCH_COMMAND: case WM_DISPATCH_COMMAND:
if (_CmdWndProc(hWnd, message, wParam, lParam)) break; if (_CmdWndProc(hWnd, message, wParam, lParam)) break;
if (1) { if (1) {
return SendMessage(pChildWnd->right.hWnd, message, wParam, lParam); return SendMessage(pChildWnd->hListWnd, message, wParam, lParam);
} else { } else {
return SendMessage(pChildWnd->left.hWnd, message, wParam, lParam); return SendMessage(pChildWnd->hTreeWnd, message, wParam, lParam);
} }
break; break;
@ -372,7 +425,7 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
return DefMDIChildProc(hWnd, message, wParam, lParam); return DefMDIChildProc(hWnd, message, wParam, lParam);
// if (LOWORD(wParam) > ID_CMD_FIRST && LOWORD(wParam) < ID_CMD_LAST) { // if (LOWORD(wParam) > ID_CMD_FIRST && LOWORD(wParam) < ID_CMD_LAST) {
// if (!SendMessage(pChildWnd->right.hWnd, message, wParam, lParam)) { // if (!SendMessage(pChildWnd->hListWnd, message, wParam, lParam)) {
// return DefMDIChildProc(hWnd, message, wParam, lParam); // return DefMDIChildProc(hWnd, message, wParam, lParam);
// } // }
// } else { // } else {
@ -380,29 +433,35 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
// } // }
break; break;
case WM_NOTIFY: case WM_NOTIFY:
if (!OnNotify(hWnd, wParam, lParam)) {
return DefMDIChildProc(hWnd, message, wParam, lParam);
}
/*
{ {
int idCtrl = (int)wParam; int idCtrl = (int)wParam;
//NMHDR* pnmh = (NMHDR*)lParam; //NMHDR* pnmh = (NMHDR*)lParam;
//return pane_notify(pnmh->idFrom==IDW_HEADER_LEFT? &pChildWnd->left: &pChildWnd->right, pnmh); //return pane_notify(pnmh->idFrom==IDW_HEADER_LEFT? &pChildWnd->left: &pChildWnd->right, pnmh);
if ((int)wParam == IDW_TREE_LEFT) { if ((int)wParam == TREE_WINDOW) {
if ((((LPNMHDR)lParam)->code) == TVN_SELCHANGED) { if ((((LPNMHDR)lParam)->code) == TVN_SELCHANGED) {
Entry* entry = (Entry*)((NMTREEVIEW*)lParam)->itemNew.lParam; Entry* entry = (Entry*)((NMTREEVIEW*)lParam)->itemNew.lParam;
if (entry != NULL) { if (entry != NULL) {
//RefreshList(pChildWnd->right.hWnd, entry); //RefreshList(pChildWnd->hListWnd, entry);
//void set_curdir(ChildWnd* child, Entry* entry) //void set_curdir(ChildWnd* child, Entry* entry)
set_curdir(pChildWnd, entry); set_curdir(pChildWnd, entry);
} }
} }
if (!SendMessage(pChildWnd->left.hWnd, message, wParam, lParam)) { if (!SendMessage(pChildWnd->hTreeWnd, message, wParam, lParam)) {
return DefMDIChildProc(hWnd, message, wParam, lParam); return DefMDIChildProc(hWnd, message, wParam, lParam);
} }
} else } else
if ((int)wParam == IDW_TREE_RIGHT) { if ((int)wParam == LIST_WINDOW) {
if (!SendMessage(pChildWnd->right.hWnd, message, wParam, lParam)) { if (!SendMessage(pChildWnd->hListWnd, message, wParam, lParam)) {
return DefMDIChildProc(hWnd, message, wParam, lParam); return DefMDIChildProc(hWnd, message, wParam, lParam);
} }
} }
} }
*/
break; break;
case WM_SIZE: case WM_SIZE:

View file

@ -27,10 +27,6 @@
extern "C" { extern "C" {
#endif #endif
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
LRESULT CALLBACK ChildWndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK ChildWndProc(HWND, UINT, WPARAM, LPARAM);

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include "main.h" #include "main.h"
#include "debug.h" #include "debug.h"

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include <shellapi.h> #include <shellapi.h>
//#include <winspool.h> //#include <winspool.h>

View file

@ -27,9 +27,6 @@
extern "C" { extern "C" {
#endif #endif
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "resource.h" #include "resource.h"

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include "main.h" #include "main.h"
#include "settings.h" #include "settings.h"

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include <windowsx.h> #include <windowsx.h>
@ -176,21 +172,20 @@ void free_entries(Entry* parent)
} }
// insert listbox entries after index idx // insert listbox entries after index idx
void insert_entries(Pane* pane, Entry* parent, int idx) void insert_entries(HWND hWnd, Entry* parent, int idx)
{ {
/*
Entry* entry = parent; Entry* entry = parent;
if (!entry) if (!entry)
return; return;
ShowWindow(pane->hWnd, SW_HIDE); ShowWindow(hWnd, SW_HIDE);
for(; entry; entry=entry->next) { for(; entry; entry=entry->next) {
#ifndef _LEFT_FILES #ifndef _LEFT_FILES
if (pane->treePane && !(entry->data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)) if (!(entry->data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
continue; continue;
#endif #endif
// don't display entries "." and ".." in the left pane // don't display entries "." and ".." in the left pane
if (pane->treePane && (entry->data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) if ((entry->data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
&& entry->data.cFileName[0]==_T('.')) && entry->data.cFileName[0]==_T('.'))
if ( if (
#ifndef _NO_EXTENSIONS #ifndef _NO_EXTENSIONS
@ -200,12 +195,11 @@ void insert_entries(Pane* pane, Entry* parent, int idx)
continue; continue;
if (idx != -1) if (idx != -1)
idx++; idx++;
ListBox_InsertItemData(pane->hWnd, idx, entry); ListBox_InsertItemData(hWnd, idx, entry);
if (pane->treePane && entry->expanded) if (entry->expanded)
insert_entries(pane, entry->down, idx); insert_entries(hWnd, entry->down, idx);
} }
ShowWindow(pane->hWnd, SW_SHOW); ShowWindow(hWnd, SW_SHOW);
*/
} }
@ -213,22 +207,22 @@ void scan_entry(ChildWnd* child, Entry* entry)
{ {
TCHAR path[MAX_PATH]; TCHAR path[MAX_PATH];
/* /*
int idx = ListBox_GetCurSel(child->left.hWnd); int idx = ListBox_GetCurSel(child->hTreeWnd);
HCURSOR crsrOld = SetCursor(LoadCursor(0, IDC_WAIT)); HCURSOR crsrOld = SetCursor(LoadCursor(0, IDC_WAIT));
// delete sub entries in left pane // delete sub entries in left pane
for(;;) { for(;;) {
LRESULT res = ListBox_GetItemData(child->left.hWnd, idx+1); LRESULT res = ListBox_GetItemData(child->hTreeWnd, idx+1);
Entry* sub = (Entry*) res; Entry* sub = (Entry*) res;
if (res==LB_ERR || !sub || sub->level<=entry->level) if (res==LB_ERR || !sub || sub->level<=entry->level)
break; break;
ListBox_DeleteString(child->left.hWnd, idx+1); ListBox_DeleteString(child->hTreeWnd, idx+1);
} }
// empty right pane // empty right pane
ListBox_ResetContent(child->right.hWnd); ListBox_ResetContent(child->hListWnd);
*/ */
// release memory // release memory
free_entries(entry); free_entries(entry);
@ -274,12 +268,12 @@ BOOL expand_entry(ChildWnd* child, Entry* dir)
if (!(p->data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)) if (!(p->data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
return FALSE; return FALSE;
/* /*
idx = ListBox_FindItemData(child->left.hWnd, 0, dir); idx = ListBox_FindItemData(child->hTreeWnd, 0, dir);
*/ */
dir->expanded = TRUE; dir->expanded = TRUE;
// insert entries in left pane // insert entries in left pane
insert_entries(&child->left, p, idx); insert_entries(child->hTreeWnd, p, idx);
/* /*
if (!child->header_wdths_ok) { if (!child->header_wdths_ok) {
if (calc_widths(&child->left, FALSE)) { if (calc_widths(&child->left, FALSE)) {
@ -335,7 +329,7 @@ void activate_entry(ChildWnd* child, Pane* pane)
if (entry->data.cFileName[0]=='.' && entry->data.cFileName[1]=='\0') if (entry->data.cFileName[0]=='.' && entry->data.cFileName[1]=='\0')
return; return;
#endif #endif
/*
if (entry->data.cFileName[0]=='.' && entry->data.cFileName[1]=='.' && entry->data.cFileName[2]=='\0') { if (entry->data.cFileName[0]=='.' && entry->data.cFileName[1]=='.' && entry->data.cFileName[2]=='\0') {
entry = child->left.cur->up; entry = child->left.cur->up;
collapse_entry(&child->left, entry); collapse_entry(&child->left, entry);
@ -346,15 +340,14 @@ void activate_entry(ChildWnd* child, Pane* pane)
expand_entry(child, child->left.cur); expand_entry(child, child->left.cur);
if (!pane->treePane) focus_entry: { if (!pane->treePane) focus_entry: {
int idx = ListBox_FindItemData(child->left.hWnd, ListBox_GetCurSel(child->left.hWnd), entry); int idx = ListBox_FindItemData(child->hTreeWnd, ListBox_GetCurSel(child->hTreeWnd), entry);
ListBox_SetCurSel(child->left.hWnd, idx); ListBox_SetCurSel(child->hTreeWnd, idx);
set_curdir(child, entry); set_curdir(child, entry);
} }
} }
*/
if (!scanned_old) { if (!scanned_old) {
calc_widths(pane, FALSE); calc_widths(pane, FALSE);
#ifndef _NO_EXTENSIONS #ifndef _NO_EXTENSIONS
set_header(pane); set_header(pane);
#endif #endif

View file

@ -27,11 +27,6 @@
extern "C" { extern "C" {
#endif #endif
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
typedef struct _Entry { typedef struct _Entry {
struct _Entry* next; struct _Entry* next;
@ -74,9 +69,6 @@ typedef struct {
typedef struct { typedef struct {
HWND hWnd; HWND hWnd;
#ifndef _NO_EXTENSIONS
HWND hwndHeader;
#endif
#ifndef _NO_EXTENSIONS #ifndef _NO_EXTENSIONS
#define COLUMNS 10 #define COLUMNS 10
@ -86,29 +78,30 @@ typedef struct {
int widths[COLUMNS]; int widths[COLUMNS];
int positions[COLUMNS+1]; int positions[COLUMNS+1];
BOOL treePane;
int visible_cols;
Entry* root; Entry* root;
Entry* cur; Entry* cur;
} Pane; } Pane;
typedef struct { typedef struct {
HWND hWnd; HWND hWnd;
HWND hTreeWnd;
HWND hListWnd;
int nFocusPanel; // 0: left 1: right
int nSplitPos;
WINDOWPLACEMENT pos;
TCHAR szPath[MAX_PATH];
// Root root;
Root* pRoot;
Pane left; Pane left;
Pane right; Pane right;
int nFocusPanel; // 0: left 1: right
WINDOWPLACEMENT pos;
int nSplitPos;
BOOL header_wdths_ok;
TCHAR szPath[MAX_PATH];
Root root;
SORT_ORDER sortOrder; SORT_ORDER sortOrder;
int last_split;
} ChildWnd; } ChildWnd;
void insert_entries(Pane* pane, Entry* parent, int idx); void insert_entries(HWND hWnd, Entry* parent, int idx);
void scan_entry(ChildWnd* child, Entry* entry); void scan_entry(ChildWnd* child, Entry* entry);
void activate_entry(ChildWnd* child, Pane* pane); void activate_entry(ChildWnd* child, Pane* pane);
void collapse_entry(Pane* pane, Entry* dir); void collapse_entry(Pane* pane, Entry* dir);

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
//#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers //#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
//#include <shellapi.h> //#include <shellapi.h>
#include <windowsx.h> #include <windowsx.h>
@ -150,19 +146,25 @@ BOOL FindChildWindow(int cmd)
static ChildWnd* alloc_child_window(LPCTSTR path) static ChildWnd* alloc_child_window(LPCTSTR path)
{ {
TCHAR drv[_MAX_DRIVE+1], dir[_MAX_DIR], name[_MAX_FNAME], ext[_MAX_EXT]; TCHAR drv[_MAX_DRIVE+1], dir[_MAX_DIR], name[_MAX_FNAME], ext[_MAX_EXT];
ChildWnd* pChildWnd = (ChildWnd*)malloc(sizeof(ChildWnd));
Root* root = &pChildWnd->root;
Entry* entry; Entry* entry;
Root* root;
// ChildWnd* pChildWnd = (ChildWnd*)malloc(sizeof(ChildWnd));
// memset(pChildWnd, 0, sizeof(ChildWnd));
ChildWnd* pChildWnd = (ChildWnd*)malloc(sizeof(ChildWnd)+sizeof(Root));
memset(pChildWnd, 0, sizeof(ChildWnd)+sizeof(Root));
pChildWnd->pRoot = (Root*)((BYTE*)pChildWnd + sizeof(ChildWnd));
pChildWnd->pRoot = (Root*)&pChildWnd[1];
root = pChildWnd->pRoot;
memset(pChildWnd, 0, sizeof(ChildWnd)); // root = &pChildWnd->root;
pChildWnd->left.treePane = TRUE; // pChildWnd->left.treePane = TRUE;
pChildWnd->left.visible_cols = 0; // pChildWnd->left.visible_cols = 0;
pChildWnd->right.treePane = FALSE; // pChildWnd->right.treePane = FALSE;
#ifndef _NO_EXTENSIONS //#ifndef _NO_EXTENSIONS
pChildWnd->right.visible_cols = COL_SIZE|COL_DATE|COL_TIME|COL_ATTRIBUTES|COL_INDEX|COL_LINKS; // pChildWnd->right.visible_cols = COL_SIZE|COL_DATE|COL_TIME|COL_ATTRIBUTES|COL_INDEX|COL_LINKS;
#else //#else
pChildWnd->right.visible_cols = COL_SIZE|COL_DATE|COL_TIME|COL_ATTRIBUTES; // pChildWnd->right.visible_cols = COL_SIZE|COL_DATE|COL_TIME|COL_ATTRIBUTES;
#endif //#endif
pChildWnd->pos.length = sizeof(WINDOWPLACEMENT); pChildWnd->pos.length = sizeof(WINDOWPLACEMENT);
pChildWnd->pos.flags = 0; pChildWnd->pos.flags = 0;
pChildWnd->pos.showCmd = SW_SHOWNORMAL; pChildWnd->pos.showCmd = SW_SHOWNORMAL;
@ -173,7 +175,7 @@ static ChildWnd* alloc_child_window(LPCTSTR path)
pChildWnd->nFocusPanel = 0; pChildWnd->nFocusPanel = 0;
pChildWnd->nSplitPos = 300; pChildWnd->nSplitPos = 300;
pChildWnd->sortOrder = SORT_NAME; pChildWnd->sortOrder = SORT_NAME;
pChildWnd->header_wdths_ok = FALSE; // pChildWnd->header_wdths_ok = FALSE;
lstrcpy(pChildWnd->szPath, path); lstrcpy(pChildWnd->szPath, path);
_tsplitpath(path, drv, dir, name, ext); _tsplitpath(path, drv, dir, name, ext);
#if !defined(_NO_EXTENSIONS) && defined(__linux__) #if !defined(_NO_EXTENSIONS) && defined(__linux__)
@ -233,7 +235,7 @@ HWND CreateChildWindow(int drv_id)
// CW_USEDEFAULT, CW_USEDEFAULT, // CW_USEDEFAULT, CW_USEDEFAULT,
// CW_USEDEFAULT, CW_USEDEFAULT, // CW_USEDEFAULT, CW_USEDEFAULT,
20, 20, 200, 200, 20, 20, 200, 200,
WS_MAXIMIZE, 0 WS_MAXIMIZE, (LPARAM)pChildWnd
// 0/*style*/, 0/*lParam*/ // 0/*style*/, 0/*lParam*/
}; };
hcbthook = SetWindowsHookEx(WH_CBT, CBTProc, 0, GetCurrentThreadId()); hcbthook = SetWindowsHookEx(WH_CBT, CBTProc, 0, GetCurrentThreadId());
@ -346,7 +348,8 @@ static BOOL activate_drive_window(LPCTSTR path)
child_wnd = GetNextWindow(child_wnd, GW_HWNDNEXT)) { child_wnd = GetNextWindow(child_wnd, GW_HWNDNEXT)) {
ChildWnd* pChildWnd = (ChildWnd*) GetWindowLong(child_wnd, GWL_USERDATA); ChildWnd* pChildWnd = (ChildWnd*) GetWindowLong(child_wnd, GWL_USERDATA);
if (pChildWnd) { if (pChildWnd) {
_tsplitpath(pChildWnd->root.path, drv2, 0, 0, 0); //_tsplitpath(pChildWnd->root.path, drv2, 0, 0, 0);
_tsplitpath(pChildWnd->pRoot->path, drv2, 0, 0, 0);
if (!lstrcmpi(drv2, drv1)) { if (!lstrcmpi(drv2, drv1)) {
SendMessage(Globals.hMDIClient, WM_MDIACTIVATE, (WPARAM)child_wnd, 0); SendMessage(Globals.hMDIClient, WM_MDIACTIVATE, (WPARAM)child_wnd, 0);
if (IsMinimized(child_wnd)) if (IsMinimized(child_wnd))
@ -563,7 +566,7 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
break; break;
case ID_HELP_ABOUT: case ID_HELP_ABOUT:
#ifdef WINSHELLAPI #ifdef WINSHELLAPI
ShellAbout(hWnd, szTitle, "", LoadIcon(Globals.hInstance, (LPCTSTR)IDI_WINFILE)); ShellAbout(hWnd, szTitle, _T(""), LoadIcon(Globals.hInstance, (LPCTSTR)IDI_WINFILE));
#else #else
ShowAboutBox(hWnd); ShowAboutBox(hWnd);
#endif #endif

View file

@ -27,10 +27,6 @@
extern "C" { extern "C" {
#endif #endif
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
LRESULT CALLBACK FrameWndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK FrameWndProc(HWND, UINT, WPARAM, LPARAM);
HWND CreateChildWindow(int drv_id); HWND CreateChildWindow(int drv_id);

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include <windowsx.h> #include <windowsx.h>
#include "main.h" #include "main.h"
@ -423,7 +419,7 @@ static LRESULT CALLBACK ListWndProc(HWND hWnd, UINT message, WPARAM wParam, LPAR
case WM_KEYDOWN: case WM_KEYDOWN:
if (wParam == VK_TAB) { if (wParam == VK_TAB) {
//TODO: SetFocus(Globals.hDriveBar) //TODO: SetFocus(Globals.hDriveBar)
SetFocus(child->nFocusPanel ? child->left.hWnd: child->right.hWnd); SetFocus(child->nFocusPanel ? child->hTreeWnd: child->hListWnd);
} }
break; break;
} }
@ -435,7 +431,7 @@ void CreateListWnd(HWND parent, Pane* pane, int id, LPTSTR lpszPathName)
RECT rcClient; // dimensions of client area RECT rcClient; // dimensions of client area
Entry* entry = pane->root; Entry* entry = pane->root;
pane->treePane = 0; // pane->treePane = 0;
GetClientRect(parent, &rcClient); GetClientRect(parent, &rcClient);
pane->hWnd = CreateWindowEx(0, WC_LISTVIEW, _T("List View"), pane->hWnd = CreateWindowEx(0, WC_LISTVIEW, _T("List View"),
@ -462,3 +458,30 @@ void CreateListWnd(HWND parent, Pane* pane, int id, LPTSTR lpszPathName)
InsertListEntries(pane->hWnd, entry, -1); InsertListEntries(pane->hWnd, entry, -1);
} }
} }
HWND CreateListView(HWND hwndParent, ChildWnd* pChildWnd, int id)
{
RECT rcClient;
HWND hwndLV;
// Get the dimensions of the parent window's client area, and create the list view control.
GetClientRect(hwndParent, &rcClient);
hwndLV = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, _T("List View"),
WS_VISIBLE | WS_CHILD | LVS_REPORT,
0, 0, rcClient.right, rcClient.bottom,
hwndParent, (HMENU)id, hInst, NULL);
ListView_SetExtendedListViewStyle(hwndLV, LVS_EX_FULLROWSELECT);
// Initialize the image list, and add items to the control.
/*
if (!InitListViewImageLists(hwndLV) ||
!InitListViewItems(hwndLV, szName)) {
DestroyWindow(hwndLV);
return FALSE;
}
*/
CreateListColumns(hwndLV);
g_orgListWndProc = SubclassWindow(hwndLV, ListWndProc);
return hwndLV;
}

View file

@ -27,14 +27,12 @@
extern "C" { extern "C" {
#endif #endif
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
void CreateListWnd(HWND parent, Pane* pane, int id, LPTSTR lpszPathName); void CreateListWnd(HWND parent, Pane* pane, int id, LPTSTR lpszPathName);
void RefreshList(HWND hWnd, Entry* entry); void RefreshList(HWND hWnd, Entry* entry);
HWND CreateListView(HWND hwndParent, ChildWnd* pChildWnd, int id);
#ifdef __cplusplus #ifdef __cplusplus
}; };

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include "main.h" #include "main.h"
#include "settings.h" #include "settings.h"

View file

@ -30,9 +30,6 @@
extern "C" { extern "C" {
#endif #endif
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "resource.h" #include "resource.h"
#include "entries.h" #include "entries.h"
@ -69,13 +66,16 @@ enum IMAGE {
#define IDW_FIRST_CHILD 0xC000 //0x200 #define IDW_FIRST_CHILD 0xC000 //0x200
#define IDW_TREE_LEFT 3 //#define IDW_TREE_LEFT 3
#define IDW_TREE_RIGHT 6 //#define IDW_TREE_RIGHT 6
#define IDW_HEADER_LEFT 2 //#define IDW_HEADER_LEFT 2
#define IDW_HEADER_RIGHT 5 //#define IDW_HEADER_RIGHT 5
#define IDW_STATUS_WINDOW 7 #define IDW_STATUS_WINDOW 7
#define TREE_WINDOW 8
#define LIST_WINDOW 9
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void _wsplitpath(const WCHAR* path, WCHAR* drv, WCHAR* dir, WCHAR* name, WCHAR* ext); void _wsplitpath(const WCHAR* path, WCHAR* drv, WCHAR* dir, WCHAR* name, WCHAR* ext);
void _splitpath(const CHAR* path, CHAR* drv, CHAR* dir, CHAR* name, CHAR* ext); void _splitpath(const CHAR* path, CHAR* drv, CHAR* dir, CHAR* name, CHAR* ext);

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include "main.h" #include "main.h"
#include "network.h" #include "network.h"
@ -160,7 +156,7 @@ static void NetErrorHandler(HWND hwnd, DWORD dwResult, LPTSTR str)
static void DisplayStruct(HDC hdc, LPNETRESOURCE lpnrLocal) static void DisplayStruct(HDC hdc, LPNETRESOURCE lpnrLocal)
{ {
LPTSTR str = NULL; LPTSTR str = NULL;
TRACE(_T("DisplayStruct(%p)"), lpnrLocal); //TRACE(_T("DisplayStruct(%p)\n"), lpnrLocal);
switch (lpnrLocal->dwScope) { switch (lpnrLocal->dwScope) {
case RESOURCE_CONNECTED: str = _T("Enumerate currently connected resources. The dwUsage member cannot be specified."); break; case RESOURCE_CONNECTED: str = _T("Enumerate currently connected resources. The dwUsage member cannot be specified."); break;
@ -168,7 +164,7 @@ static void DisplayStruct(HDC hdc, LPNETRESOURCE lpnrLocal)
case RESOURCE_REMEMBERED: str = _T("Enumerate remembered (persistent) connections. The dwUsage member cannot be specified."); break; case RESOURCE_REMEMBERED: str = _T("Enumerate remembered (persistent) connections. The dwUsage member cannot be specified."); break;
default: str = _T("Unknown Scope."); break; default: str = _T("Unknown Scope."); break;
} }
TRACE(_T(" %s\n"), str); //TRACE(_T(" %s\n"), str);
switch (lpnrLocal->dwType) { switch (lpnrLocal->dwType) {
case RESOURCETYPE_ANY: str = _T("All resources."); break; case RESOURCETYPE_ANY: str = _T("All resources."); break;
@ -176,7 +172,7 @@ static void DisplayStruct(HDC hdc, LPNETRESOURCE lpnrLocal)
case RESOURCETYPE_PRINT: str = _T("Print resources."); break; case RESOURCETYPE_PRINT: str = _T("Print resources."); break;
default: str = _T("Unknown Type."); break; default: str = _T("Unknown Type."); break;
} }
TRACE(_T(" %s\n"), str); //TRACE(_T(" %s\n"), str);
switch (lpnrLocal->dwDisplayType) { switch (lpnrLocal->dwDisplayType) {
case RESOURCEDISPLAYTYPE_DOMAIN: str = _T("The object should be displayed as a domain."); break; case RESOURCEDISPLAYTYPE_DOMAIN: str = _T("The object should be displayed as a domain."); break;
@ -185,15 +181,15 @@ static void DisplayStruct(HDC hdc, LPNETRESOURCE lpnrLocal)
case RESOURCEDISPLAYTYPE_GENERIC: str = _T("The method used to display the object does not matter."); break; case RESOURCEDISPLAYTYPE_GENERIC: str = _T("The method used to display the object does not matter."); break;
default: str = _T("Unknown DisplayType."); break; default: str = _T("Unknown DisplayType."); break;
} }
TRACE(_T(" %s\n"), str); //TRACE(_T(" %s\n"), str);
// switch (lpnrLocal->dwUsage ) { // switch (lpnrLocal->dwUsage ) {
// case RESOURCEUSAGE_CONNECTABLE: str = _T("The resource is a connectable resource; the name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection."); break; // case RESOURCEUSAGE_CONNECTABLE: str = _T("The resource is a connectable resource; the name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection."); break;
// case RESOURCEUSAGE_CONTAINER: str = _T("The resource is a container resource; the name pointed to by the lpRemoteName member can be passed to the WNetOpenEnum function to enumerate the resources in the container."); break; // case RESOURCEUSAGE_CONTAINER: str = _T("The resource is a container resource; the name pointed to by the lpRemoteName member can be passed to the WNetOpenEnum function to enumerate the resources in the container."); break;
// default: str = _T("Unknown Usage."); break; // default: str = _T("Unknown Usage."); break;
// } // }
TRACE(_T("\tLocalName: %s\tRemoteName: %s"), lpnrLocal->lpLocalName, lpnrLocal->lpRemoteName); //TRACE(_T("\tLocalName: %s\tRemoteName: %s"), lpnrLocal->lpLocalName, lpnrLocal->lpRemoteName);
TRACE(_T("\tComment: %s\tProvider: %s\n"), lpnrLocal->lpComment, lpnrLocal->lpProvider); //TRACE(_T("\tComment: %s\tProvider: %s\n"), lpnrLocal->lpComment, lpnrLocal->lpProvider);
} }
//////////////////////////////////// ////////////////////////////////////

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include <shellapi.h> #include <shellapi.h>

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include "main.h" #include "main.h"
#include "settings.h" #include "settings.h"

View file

@ -27,9 +27,6 @@
extern "C" { extern "C" {
#endif #endif
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "resource.h" #include "resource.h"

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include "main.h" #include "main.h"
#include "shell.h" #include "shell.h"

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include <windowsx.h> #include <windowsx.h>
#include <shellapi.h> #include <shellapi.h>

View file

@ -27,11 +27,6 @@
extern "C" { extern "C" {
#endif #endif
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "entries.h" #include "entries.h"

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include "main.h" #include "main.h"

View file

@ -4,33 +4,13 @@
#include <stdio.h> #include <stdio.h>
#include <stdarg.h> #include <stdarg.h>
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include "windows.h" #include <windows.h>
#include <tchar.h>
#include "trace.h" #include "trace.h"
#ifdef _DEBUG #ifdef _DEBUG
#ifdef WIN32
//#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
//#include <windows.h>
//#include <assert.h>
//WINBASEAPI VOID WINAPI DebugBreak(VOID);
//WINBASEAPI VOID WINAPI OutputDebugStringA(LPCSTR lpOutputString);
//WINBASEAPI VOID WINAPI OutputDebugStringW(LPCWSTR lpOutputString);
//void __stdcall DebugBreak(void);
//void __stdcall OutputDebugStringA(char* lpOutputString);
//void __stdcall OutputDebugStringW(wchar_t* lpOutputString);
#ifdef UNICODE
#define OutputDebugString OutputDebugStringW
#else
#define OutputDebugString OutputDebugStringA
#endif // !UNICODE
#else
#include "hardware.h"
#endif // WIN32
#undef THIS_FILE #undef THIS_FILE
static char THIS_FILE[] = __FILE__; static char THIS_FILE[] = __FILE__;
@ -46,20 +26,14 @@ void Trace(TCHAR* lpszFormat, ...)
TCHAR szBuffer[512]; TCHAR szBuffer[512];
va_start(args, lpszFormat); va_start(args, lpszFormat);
// nBuf = vsprintf(szBuffer, lpszFormat, args); nBuf = _vsntprintf(szBuffer, sizeof(szBuffer)/sizeof(TCHAR), lpszFormat, args);
// nBuf = _vsntprintf(szBuffer, _countof(szBuffer), lpszFormat, args);
#ifdef _UNICODE
nBuf = _vsnwprintf(szBuffer, sizeof(szBuffer), lpszFormat, args);
#else
nBuf = _vsnprintf(szBuffer, sizeof(szBuffer), lpszFormat, args);
#endif
OutputDebugString(szBuffer); OutputDebugString(szBuffer);
// was there an error? was the expanded string too long? // was there an error? was the expanded string too long?
//ASSERT(nBuf >= 0); //ASSERT(nBuf >= 0);
va_end(args); va_end(args);
} }
void Assert(void* assert, TCHAR* file, int line, void* msg) void Assert(void* assert, const char* file, int line, void* msg)
{ {
if (msg == NULL) { if (msg == NULL) {
printf("ASSERT -- %s occured on line %u of file %s.\n", printf("ASSERT -- %s occured on line %u of file %s.\n",
@ -70,13 +44,10 @@ void Assert(void* assert, TCHAR* file, int line, void* msg)
} }
} }
#else #else
//inline void Trace(TCHAR* lpszFormat, ...) { };
//inline void Assert(void* assert, TCHAR* file, int line, void* msg) { };
void Trace(TCHAR* lpszFormat, ...) { }; void Trace(TCHAR* lpszFormat, ...) { };
void Assert(void* assert, TCHAR* file, int line, void* msg) { }; void Assert(void* assert, const char* file, int line, void* msg) { };
#endif //_DEBUG #endif //_DEBUG
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View file

@ -1,29 +1,21 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Diagnostic Trace
// //
#ifndef __TRACE_H__ #ifndef __TRACE_H__
#define __TRACE_H__ #define __TRACE_H__
#ifdef _DEBUG #ifdef _DEBUG
//=============================================================================
// BreakPoint() macro.
//=============================================================================
#ifdef _X86_ #ifdef _X86_
#define BreakPoint() _asm { int 3h } #define BreakPoint() _asm { int 3h }
#else #else
#define BreakPoint() _DebugBreak() #define BreakPoint() _DebugBreak()
#endif #endif
//=============================================================================
// MACRO: ASSERT()
//=============================================================================
#ifndef ASSERT #ifndef ASSERT
#define ASSERT(exp) \ #define ASSERT(exp) \
{ \ { \
if ( !(exp) ) \ if (!(exp)) { \
{ \
Assert(#exp, __FILE__, __LINE__, NULL); \ Assert(#exp, __FILE__, __LINE__, NULL); \
BreakPoint(); \ BreakPoint(); \
} \ } \
@ -31,8 +23,7 @@
#define ASSERTMSG(exp, msg) \ #define ASSERTMSG(exp, msg) \
{ \ { \
if ( !(exp) ) \ if (!(exp)) { \
{ \
Assert(#exp, __FILE__, __LINE__, msg); \ Assert(#exp, __FILE__, __LINE__, msg); \
BreakPoint(); \ BreakPoint(); \
} \ } \
@ -43,30 +34,28 @@
// MACRO: TRACE() // MACRO: TRACE()
//============================================================================= //=============================================================================
void Assert(void* assert, TCHAR* file, int line, void* msg);
void Trace(TCHAR* lpszFormat, ...);
void Trace1(int code, TCHAR* lpszFormat, ...);
#define TRACE Trace #define TRACE Trace
#define TRACE0 Trace
#else // _DEBUG #else // _DEBUG
//=============================================================================
// Define away MACRO's ASSERT() and TRACE() in non debug builds
//=============================================================================
#ifndef ASSERT #ifndef ASSERT
#define ASSERT(exp) #define ASSERT(exp)
#define ASSERTMSG(exp, msg) #define ASSERTMSG(exp, msg)
#endif #endif
//#define TRACE0 TRACE
//#define TRACE1 TRACE
void Assert(void* assert, TCHAR* file, int line, void* msg);
void Trace(TCHAR* lpszFormat, ...);
#define TRACE 0 ? (void)0 : Trace #define TRACE 0 ? (void)0 : Trace
#endif // !_DEBUG #endif // !_DEBUG
void Assert(void* assert, const char* file, int line, void* msg);
void Trace(TCHAR* lpszFormat, ...);
#endif // __TRACE_H__ #endif // __TRACE_H__
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include <windowsx.h> #include <windowsx.h>
#include <shellapi.h> #include <shellapi.h>
@ -56,75 +52,47 @@ int Image_Open;
int Image_Closed; int Image_Closed;
int Image_Root; int Image_Root;
static int s_init = 0;
#define CX_BITMAP 16 #define CX_BITMAP 16
#define CY_BITMAP 16 #define CY_BITMAP 16
#define NUM_BITMAPS 3 #define NUM_BITMAPS 3
#if 0 Root* FindPathRoot(HWND hwndTV, HTREEITEM hItem, LPTSTR szPath, int* pPathLen, int max)
/*
// AddItemToTree - adds items to a tree view control.
// Returns the handle to the newly added item.
// hwndTV - handle to the tree view control.
// lpszItem - text of the item to add.
// nLevel - level at which to add the item.
HTREEITEM AddItemToTree(HWND hwndTV, LPTSTR lpszItem, int nLevel)
{ {
TVITEM tvi; Root* pRoot = NULL;
TVINSERTSTRUCT tvins; TVITEM item;
static HTREEITEM hPrev = (HTREEITEM)TVI_FIRST; item.mask = TVIF_PARAM;
static HTREEITEM hPrevRootItem = NULL; item.hItem = TreeView_GetParent(hwndTV, hItem);
static HTREEITEM hPrevLev2Item = NULL;
HTREEITEM hti;
tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN | TVIF_PARAM; if (TreeView_GetItem(hwndTV, &item)) {
// Set the text of the item. if (item.lParam == 0) {
tvi.pszText = lpszItem; // recurse
tvi.cchTextMax = lstrlen(lpszItem); pRoot = FindPathRoot(hwndTV, item.hItem, szPath, pPathLen, max);
// Assume the item is not a parent item, so give it an image. szPath[*pPathLen] = _T('\\');
tvi.iImage = Image_Root; ++(*pPathLen);
tvi.iSelectedImage = Image_Root; item.mask = TVIF_TEXT;
tvi.cChildren = 1; item.hItem = hItem;
item.pszText = &szPath[*pPathLen];
// Save the heading level in the item's application-defined data area. item.cchTextMax = max - *pPathLen;
tvi.lParam = (LPARAM)nLevel; if (TreeView_GetItem(hwndTV, &item)) {
*pPathLen += _tcslen(item.pszText);
tvins.item = tvi;
tvins.hInsertAfter = hPrev;
// Set the parent item based on the specified level.
if (nLevel == 1)
tvins.hParent = TVI_ROOT;
else if (nLevel == 2)
tvins.hParent = hPrevRootItem;
else
tvins.hParent = hPrevLev2Item;
// Add the item to the tree view control.
hPrev = (HTREEITEM)SendMessage(hwndTV, TVM_INSERTITEM, 0, (LPARAM)(LPTVINSERTSTRUCT)&tvins);
// Save the handle to the item.
if (nLevel == 1)
hPrevRootItem = hPrev;
else if (nLevel == 2)
hPrevLev2Item = hPrev;
// The new item is a child item. Give the parent item a
// closed folder bitmap to indicate it now has child items.
if (nLevel > 1) {
hti = TreeView_GetParent(hwndTV, hPrev);
tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvi.hItem = hti;
tvi.iImage = Image_Closed;
tvi.iSelectedImage = Image_Closed;
TreeView_SetItem(hwndTV, &tvi);
} }
return hPrev; } else {
// found root key with valid key value
pRoot = (Root*)item.lParam;
item.mask = TVIF_TEXT;
item.hItem = hItem;
item.pszText = szPath;
item.cchTextMax = max;
if (TreeView_GetItem(hwndTV, &item)) {
*pPathLen += _tcslen(item.pszText);
}
}
}
return pRoot;
} }
*/
#endif
static void init_output(HWND hWnd) static void init_output(HWND hWnd)
{ {
@ -143,6 +111,7 @@ static void init_output(HWND hWnd)
ReleaseDC(hWnd, hdc); ReleaseDC(hWnd, hdc);
} }
#if 0
HTREEITEM AddEntryToTree(HWND hwndTV, Entry* entry) HTREEITEM AddEntryToTree(HWND hwndTV, Entry* entry)
{ {
@ -154,19 +123,7 @@ HTREEITEM AddEntryToTree(HWND hwndTV, Entry* entry)
static HTREEITEM hPrevLev2Item = NULL; static HTREEITEM hPrevLev2Item = NULL;
//TRACE("AddEntryToTree(level:%u - %s)\n", entry->level, entry->data.cFileName); //TRACE("AddEntryToTree(level:%u - %s)\n", entry->level, entry->data.cFileName);
tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN | TVIF_PARAM; tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN | TVIF_PARAM;
/*
// Set the text of the item.
tvi.pszText = entry->data.cFileName;
tvi.cchTextMax = lstrlen(entry->data.cFileName);
// Assume the item is not a parent item, so give it an image.
tvi.iImage = Image_Root;
tvi.iSelectedImage = Image_Root;
tvi.cChildren = 1;
// Save the heading level in the item's application-defined data area.
//tvi.lParam = (LPARAM)entry->level;
*/
tvi.pszText = LPSTR_TEXTCALLBACK; tvi.pszText = LPSTR_TEXTCALLBACK;
tvi.cchTextMax = 0; tvi.cchTextMax = 0;
tvi.iImage = I_IMAGECALLBACK; tvi.iImage = I_IMAGECALLBACK;
@ -174,10 +131,8 @@ HTREEITEM AddEntryToTree(HWND hwndTV, Entry* entry)
tvi.cChildren = I_CHILDRENCALLBACK; tvi.cChildren = I_CHILDRENCALLBACK;
// Save the entry pointer in the item's application-defined data area. // Save the entry pointer in the item's application-defined data area.
tvi.lParam = (LPARAM)entry; tvi.lParam = (LPARAM)entry;
tvins.item = tvi; tvins.item = tvi;
tvins.hInsertAfter = hPrev; tvins.hInsertAfter = hPrev;
// Set the parent item based on the specified level. // Set the parent item based on the specified level.
if (entry->level == 0) { if (entry->level == 0) {
tvins.hParent = TVI_ROOT; tvins.hParent = TVI_ROOT;
@ -189,50 +144,51 @@ HTREEITEM AddEntryToTree(HWND hwndTV, Entry* entry)
tvins.hParent = entry->up->hTreeItem; tvins.hParent = entry->up->hTreeItem;
} }
} }
// Add the item to the tree view control. // Add the item to the tree view control.
hPrev = (HTREEITEM)SendMessage(hwndTV, TVM_INSERTITEM, 0, (LPARAM)(LPTVINSERTSTRUCT)&tvins); hPrev = (HTREEITEM)SendMessage(hwndTV, TVM_INSERTITEM, 0, (LPARAM)(LPTVINSERTSTRUCT)&tvins);
// Save the handle to the item. // Save the handle to the item.
if (entry->level == 0) if (entry->level == 0)
hPrevRootItem = hPrev; hPrevRootItem = hPrev;
else if (entry->level == 1) else if (entry->level == 1)
hPrevLev2Item = hPrev; hPrevLev2Item = hPrev;
/*
// The new item is a child item. Give the parent item a
// closed folder bitmap to indicate it now has child items.
if (entry->level > 1) {
HTREEITEM hti;
hti = TreeView_GetParent(hwndTV, hPrev);
tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvi.hItem = hti;
tvi.iImage = Image_Closed;
tvi.iSelectedImage = Image_Closed;
TreeView_SetItem(hwndTV, &tvi);
}
*/
hItem = hPrev; hItem = hPrev;
return hItem; return hItem;
} }
#else
static BOOL InitTreeViewItems(HWND hwndTV) static HTREEITEM AddEntryToTree(HWND hwndTV, HTREEITEM hParent, LPTSTR label, Root* entry, DWORD dwChildren)
{ {
return TRUE; HTREEITEM hItem = 0;
TVITEM tvi;
TVINSERTSTRUCT tvins;
tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN | TVIF_PARAM;
tvi.pszText = label;
tvi.cchTextMax = lstrlen(tvi.pszText);
tvi.iImage = Image_Closed;
tvi.iSelectedImage = Image_Open;
tvi.cChildren = dwChildren;
tvi.lParam = (LPARAM)entry;
tvins.item = tvi;
if (entry) tvins.hInsertAfter = (HTREEITEM)TVI_LAST;
else tvins.hInsertAfter = (HTREEITEM)TVI_SORT;
tvins.hParent = hParent;
hItem = (HTREEITEM)SendMessage(hwndTV, TVM_INSERTITEM, 0, (LPARAM)(LPTVINSERTSTRUCT)&tvins);
return hItem;
} }
#endif
// insert treectrl entries after index idx // insert treectrl entries after index idx
static void insert_tree_entries(HWND hWnd, Entry* entry, int idx) static void insert_tree_entries(HWND hWnd, Entry* entry/*Root* pRoot*/, int idx)
{ {
static HTREEITEM hItemVisible; static HTREEITEM hItemVisible;
static int hItemVisibleIdx; static int hItemVisibleIdx;
// Entry* entry = &pRoot->entry;
if (!entry) if (!entry) return;
return; if (entry->hTreeItem) return;
if (entry->hTreeItem)
return;
ShowWindow(hWnd, SW_HIDE); ShowWindow(hWnd, SW_HIDE);
for(; entry; entry=entry->next) { for(; entry; entry=entry->next) {
#ifndef _LEFT_FILES #ifndef _LEFT_FILES
@ -247,17 +203,18 @@ static void insert_tree_entries(HWND hWnd, Entry* entry, int idx)
continue; continue;
} }
} }
// if (idx != -1)
// idx++;
// ListBox_InsertItemData(hWnd, idx, entry);
//TRACE("Adding item %u [level:%u] - %s\n", ++idx, entry->level, entry->data.cFileName);
if (entry->hTreeItem) continue; if (entry->hTreeItem) continue;
// entry->hTreeItem = AddEntryToTree(hWnd, entry);
if (entry->up && entry->up->hTreeItem) {
entry->hTreeItem = AddEntryToTree(hWnd, entry); // entry->hTreeItem = AddEntryToTree(hWnd, entry->up->hTreeItem, entry->data.cFileName, entry, 0);
entry->hTreeItem = AddEntryToTree(hWnd, entry->up->hTreeItem, entry->data.cFileName, NULL, 1);
} else {
entry->hTreeItem = AddEntryToTree(hWnd, TVI_ROOT, entry->data.cFileName, NULL, 0);
// AddEntryToTree(hwndTV, pnmtv->itemNew.hItem, Name, NULL, dwCount);
}
if (entry->expanded) { if (entry->expanded) {
// insert_tree_entries(hWnd, entry->down, idx + 1);
insert_tree_entries(hWnd, entry->down, idx + 1); insert_tree_entries(hWnd, entry->down, idx + 1);
TreeView_Expand(hWnd, entry->hTreeItem, TVE_EXPAND); TreeView_Expand(hWnd, entry->hTreeItem, TVE_EXPAND);
} }
@ -272,6 +229,44 @@ static void insert_tree_entries(HWND hWnd, Entry* entry, int idx)
ShowWindow(hWnd, SW_SHOW); ShowWindow(hWnd, SW_SHOW);
} }
static BOOL InitTreeViewItems(HWND hwndTV, ChildWnd* pChildWnd)
{
TVITEM tvi;
TVINSERTSTRUCT tvins;
HTREEITEM hRoot;
TCHAR buffer[MAX_PATH];
wsprintf(buffer, _T("%s - [%s]"), pChildWnd->pRoot->path, pChildWnd->pRoot->fs);
tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN | TVIF_PARAM;
tvi.pszText = buffer;
tvi.cchTextMax = lstrlen(tvi.pszText);
tvi.iImage = Image_Root;
tvi.iSelectedImage = Image_Root;
tvi.cChildren = 5;
// tvi.lParam = (LPARAM)&pChildWnd->pRoot->entry;
tvi.lParam = (LPARAM)pChildWnd->pRoot;
// tvi.lParam = (LPARAM)pChildWnd;
tvins.item = tvi;
tvins.hInsertAfter = (HTREEITEM)TVI_FIRST;
tvins.hParent = TVI_ROOT;
// Add the item to the tree view control.
hRoot = (HTREEITEM)SendMessage(hwndTV, TVM_INSERTITEM, 0, (LPARAM)(LPTVINSERTSTRUCT)&tvins);
pChildWnd->pRoot->entry.hTreeItem = hRoot;
// TreeView_Expand(hwndTV, hRoot, TVE_EXPAND);
// insert_tree_entries(hwndTV, &pChildWnd->pRoot->entry, 0);
// insert entries into treectrl
// if (pChildWnd->pRoot) {
// insert_tree_entries(hwndTV, &pChildWnd->pRoot->entry, 0);
// }
// TreeView_Expand(hwndTV, pChildWnd->pRoot->entry.hTreeItem, TVE_EXPAND);
// calculate column widths
if (!s_init) {
s_init = 1;
init_output(hwndTV);
}
return TRUE;
}
// InitTreeViewImageLists - creates an image list, adds three bitmaps // InitTreeViewImageLists - creates an image list, adds three bitmaps
// to it, and associates the image list with a tree view control. // to it, and associates the image list with a tree view control.
@ -313,31 +308,171 @@ static BOOL InitTreeViewImageLists(HWND hwndTV)
BOOL OnTreeExpanding(HWND hwndTV, NMTREEVIEW* pnmtv) BOOL OnTreeExpanding(HWND hwndTV, NMTREEVIEW* pnmtv)
{ {
Root* pRoot = NULL;
TCHAR szPath[1000];
int keyPathLen = 0;
static int expanding; static int expanding;
Entry* entry = (Entry*)pnmtv->itemNew.lParam;
if (expanding) return FALSE; if (expanding) return FALSE;
if (pnmtv->itemNew.state & TVIS_EXPANDEDONCE ) {
return TRUE;
}
expanding = TRUE; expanding = TRUE;
if (entry) { // check if this is either the root or a subkey item...
insert_tree_entries(hwndTV, entry->down, 0); if ((Root*)pnmtv->itemNew.lParam == NULL) {
// insert_tree_entries(hwndTV, entry, 0); szPath[0] = _T('\0');
pRoot = FindPathRoot(hwndTV, pnmtv->itemNew.hItem, szPath, &keyPathLen, sizeof(szPath)/sizeof(TCHAR));
} else {
pRoot = (Root*)pnmtv->itemNew.lParam;
szPath[0] = _T('\0');
}
if (pRoot != NULL) {
// Root* pNewRoot = NULL;
// insert_tree_entries(hwndTV, &pRoot->entry, 0);
insert_tree_entries(hwndTV, pRoot->entry.down, 0);
// entry->hTreeItem = AddEntryToTree(hWnd, entry->up->hTreeItem, entry->data.cFileName, NULL, 1);
/*
HKEY hNewKey;
LONG errCode = RegOpenKeyEx(hKey, szPath, 0, KEY_READ, &hNewKey);
if (errCode == ERROR_SUCCESS) {
TCHAR Name[MAX_PATH];
DWORD cName = MAX_PATH;
FILETIME LastWriteTime;
DWORD dwIndex = 0L;
//ShowWindow(hwndTV, SW_HIDE);
while (RegEnumKeyEx(hNewKey, dwIndex, Name, &cName, NULL, NULL, NULL, &LastWriteTime) == ERROR_SUCCESS) {
DWORD dwCount = 0L;
errCode = RegOpenKeyEx(hNewKey, Name, 0, KEY_READ, &hKey);
if (errCode == ERROR_SUCCESS) {
TCHAR SubName[MAX_PATH];
DWORD cSubName = MAX_PATH;
while (RegEnumKeyEx(hKey, dwCount, SubName, &cSubName, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
++dwCount;
}
}
RegCloseKey(hKey);
AddEntryToTree(hwndTV, pnmtv->itemNew.hItem, Name, NULL, dwCount);
cName = MAX_PATH;
++dwIndex;
}
//ShowWindow(hwndTV, SW_SHOWNOACTIVATE);
RegCloseKey(hNewKey);
}
*/
} else {
} }
expanding = FALSE; expanding = FALSE;
return TRUE; return TRUE;
} }
/*
static void read_directory_win(Entry* parent, LPCTSTR path)
{
Entry* entry = (Entry*)malloc(sizeof(Entry));
int level = parent->level + 1;
Entry* last = 0;
HANDLE hFind;
HANDLE hFile;
#ifndef _MSC_VER TCHAR buffer[MAX_PATH], *p;
#define NMTVDISPINFO TV_DISPINFO for(p=buffer; *path; )
#define NMTVDISPINFO TV_DISPINFO *p++ = *path++;
#endif lstrcpy(p, _T("\\*"));
memset(entry, 0, sizeof(Entry));
hFind = FindFirstFile(buffer, &entry->data);
if (hFind != INVALID_HANDLE_VALUE) {
parent->down = entry;
do {
entry->down = 0;
entry->up = parent;
entry->expanded = FALSE;
entry->scanned = FALSE;
entry->level = level;
entry->unix_dir = FALSE;
entry->bhfi_valid = FALSE;
lstrcpy(p+1, entry->data.cFileName);
hFile = CreateFile(buffer, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
if (hFile != INVALID_HANDLE_VALUE) {
if (GetFileInformationByHandle(hFile, &entry->bhfi))
entry->bhfi_valid = TRUE;
static void OnGetDispInfo(NMTVDISPINFO* ptvdi) CloseHandle(hFile);
}
last = entry;
entry = (Entry*) malloc(sizeof(Entry));
memset(entry, 0, sizeof(Entry));
if (last)
last->next = entry;
} while(FindNextFile(hFind, &entry->data));
last->next = 0;
FindClose(hFind);
} else {
parent->down = 0;
}
free(entry);
parent->scanned = TRUE;
}
void read_directory(Entry* parent, LPCTSTR path, int sortOrder)
{
TCHAR buffer[MAX_PATH];
Entry* entry;
LPCTSTR s;
PTSTR d;
read_directory_win(parent, path);
if (Globals.prescan_node) {
s = path;
d = buffer;
while(*s)
*d++ = *s++;
*d++ = _T('\\');
for(entry=parent->down; entry; entry=entry->next)
if (entry->data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
lstrcpy(d, entry->data.cFileName);
read_directory_win(entry, buffer);
SortDirectory(entry, sortOrder);
}
}
SortDirectory(parent, sortOrder);
}
Entry* read_tree_win(Root* root, LPCTSTR path, int sortOrder)
{
TCHAR buffer[MAX_PATH];
Entry* entry = &root->entry;
LPCTSTR s = path;
PTSTR d = buffer;
entry->unix_dir = FALSE;
while(entry) {
while(*s && *s!=_T('\\') && *s!=_T('/'))
*d++ = *s++;
while(*s==_T('\\') || *s==_T('/'))
s++;
*d++ = _T('\\');
*d = _T('\0');
read_directory(entry, buffer, sortOrder);
if (entry->down)
entry->expanded = TRUE;
if (!*s)
break;
entry = find_entry_win(entry, s);
}
return entry;
}
*/
void OnGetDispInfo(NMTVDISPINFO* ptvdi)
{ {
// static TCHAR buffer[200]; // static TCHAR buffer[200];
// LVITEM* pItem = &(ptvdi->item); // LVITEM* pItem = &(ptvdi->item);
// Entry* entry = (Entry*)pItem->lParam; // Entry* entry = (Entry*)pItem->lParam;
Entry* entry = (Entry*)ptvdi->item.lParam; Root* entry = (Root*)ptvdi->item.lParam;
ASSERT(entry); ASSERT(entry);
if (ptvdi->item.mask & TVIF_CHILDREN ) { if (ptvdi->item.mask & TVIF_CHILDREN ) {
@ -350,28 +485,11 @@ static void OnGetDispInfo(NMTVDISPINFO* ptvdi)
ptvdi->item.iSelectedImage = Image_Closed; ptvdi->item.iSelectedImage = Image_Closed;
} }
if (ptvdi->item.mask & TVIF_TEXT) { if (ptvdi->item.mask & TVIF_TEXT) {
ptvdi->item.pszText = entry->data.cFileName; // ptvdi->item.pszText = entry->data.cFileName;
ptvdi->item.cchTextMax = lstrlen(entry->data.cFileName); // ptvdi->item.cchTextMax = lstrlen(entry->data.cFileName);
} }
} }
// OnEndLabelEdit - processes the LVN_ENDLABELEDIT notification message.
// Returns TRUE if the label is changed, or FALSE otherwise.
static BOOL OnEndLabelEdit(NMTVDISPINFO* ptvdi)
{
// if (ptvdi->item.iItem == -1)
// return FALSE;
// Copy the new label text to the application-defined structure.
// lstrcpyn(rgPetInfo[ptvdi->item.iItem].szKind, ptvdi->item.pszText, 10);
return TRUE;
// To make a more robust application you should send an EM_LIMITTEXT
// message to the edit control to prevent the user from entering too
// many characters in the field.
}
void UpdateStatus(HWND hWnd, Entry* pEntry) void UpdateStatus(HWND hWnd, Entry* pEntry)
{ {
int file_count = 0; int file_count = 0;
@ -388,7 +506,6 @@ void UpdateStatus(HWND hWnd, Entry* pEntry)
} }
pEntry = pEntry->next; pEntry = pEntry->next;
}; };
_tcscpy(suffix, _T(" bytes")); _tcscpy(suffix, _T(" bytes"));
{ {
NUMBERFMT numFmt; NUMBERFMT numFmt;
@ -410,9 +527,53 @@ void UpdateStatus(HWND hWnd, Entry* pEntry)
} }
} }
// CreateTreeView - creates a tree view control.
// Returns the handle to the new control if successful, or NULL otherwise.
// hwndParent - handle to the control's parent window.
HWND CreateTreeView(HWND hwndParent, ChildWnd* pChildWnd, int id)
{
RECT rcClient;
HWND hwndTV;
// Get the dimensions of the parent window's client area, and create the tree view control.
GetClientRect(hwndParent, &rcClient);
hwndTV = CreateWindowEx(0, WC_TREEVIEW, _T("Tree View"),
WS_VISIBLE | WS_CHILD | WS_BORDER | WS_EX_CLIENTEDGE | TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT,
0, 0, rcClient.right, rcClient.bottom,
hwndParent, (HMENU)id, hInst, NULL);
// Initialize the image list, and add items to the control.
if (!InitTreeViewImageLists(hwndTV) || !InitTreeViewItems(hwndTV, pChildWnd)) {
DestroyWindow(hwndTV);
return NULL;
}
SendMessage(hwndTV, WM_SETFONT, (WPARAM)Globals.hFont, FALSE);
return hwndTV;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#ifdef _SUBWND_TREEVIEW
static WNDPROC g_orgTreeWndProc; static WNDPROC g_orgTreeWndProc;
// OnEndLabelEdit - processes the LVN_ENDLABELEDIT notification message.
// Returns TRUE if the label is changed, or FALSE otherwise.
static BOOL OnEndLabelEdit(NMTVDISPINFO* ptvdi)
{
// if (ptvdi->item.iItem == -1)
// return FALSE;
// Copy the new label text to the application-defined structure.
// lstrcpyn(rgPetInfo[ptvdi->item.iItem].szKind, ptvdi->item.pszText, 10);
return TRUE;
// To make a more robust application you should send an EM_LIMITTEXT
// message to the edit control to prevent the user from entering too
// many characters in the field.
}
static LRESULT CALLBACK TreeWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) static LRESULT CALLBACK TreeWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{ {
ChildWnd* child = (ChildWnd*)GetWindowLong(GetParent(hWnd), GWL_USERDATA); ChildWnd* child = (ChildWnd*)GetWindowLong(GetParent(hWnd), GWL_USERDATA);
@ -468,45 +629,17 @@ static LRESULT CALLBACK TreeWndProc(HWND hWnd, UINT message, WPARAM wParam, LPAR
case WM_KEYDOWN: case WM_KEYDOWN:
if (wParam == VK_TAB) { if (wParam == VK_TAB) {
//TODO: SetFocus(Globals.hDriveBar) //TODO: SetFocus(Globals.hDriveBar)
SetFocus(child->nFocusPanel ? child->left.hWnd: child->right.hWnd); SetFocus(child->nFocusPanel ? child->hTreeWnd: child->hListWnd);
} }
break; break;
} }
return CallWindowProc(g_orgTreeWndProc, hWnd, message, wParam, lParam); return CallWindowProc(g_orgTreeWndProc, hWnd, message, wParam, lParam);
} }
// CreateTreeView - creates a tree view control.
// Returns the handle to the new control if successful, or NULL otherwise.
// hwndParent - handle to the control's parent window.
static HWND CreateTreeView(HWND hwndParent, int id)
{
RECT rcClient;
HWND hwndTV;
// Get the dimensions of the parent window's client area, and create the tree view control.
GetClientRect(hwndParent, &rcClient);
hwndTV = CreateWindowEx(0, WC_TREEVIEW, _T("Tree View"),
WS_VISIBLE | WS_CHILD | WS_BORDER | WS_EX_CLIENTEDGE | TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT,
0, 0, rcClient.right, rcClient.bottom,
hwndParent, (HMENU)id, hInst, NULL);
// Initialize the image list, and add items to the control.
if (!InitTreeViewImageLists(hwndTV) || !InitTreeViewItems(hwndTV)) {
DestroyWindow(hwndTV);
return NULL;
}
return hwndTV;
}
//void create_tree_window(HWND parent, Pane* pane, int id, int id_header, LPTSTR lpszFileName)
void CreateTreeWnd(HWND parent, Pane* pane, int id) void CreateTreeWnd(HWND parent, Pane* pane, int id)
{ {
static int s_init = 0;
Entry* entry = pane->root; Entry* entry = pane->root;
pane->hWnd = CreateTreeView(parent, NULL, id);
pane->treePane = 1;
pane->hWnd = CreateTreeView(parent, id);
SetWindowLong(pane->hWnd, GWL_USERDATA, (LPARAM)pane); SetWindowLong(pane->hWnd, GWL_USERDATA, (LPARAM)pane);
g_orgTreeWndProc = SubclassWindow(pane->hWnd, TreeWndProc); g_orgTreeWndProc = SubclassWindow(pane->hWnd, TreeWndProc);
SendMessage(pane->hWnd, WM_SETFONT, (WPARAM)Globals.hFont, FALSE); SendMessage(pane->hWnd, WM_SETFONT, (WPARAM)Globals.hFont, FALSE);
@ -521,8 +654,6 @@ void CreateTreeWnd(HWND parent, Pane* pane, int id)
s_init = 1; s_init = 1;
init_output(pane->hWnd); init_output(pane->hWnd);
} }
// calc_widths(pane, TRUE);
//#ifndef _NO_EXTENSIONS
// pane->hwndHeader = create_header(parent, pane, id_header);
//#endif
} }
#endif

View file

@ -27,14 +27,21 @@
extern "C" { extern "C" {
#endif #endif
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//void CreateTreeWnd(HWND parent, Pane* pane, int id);
//HTREEITEM AddItemToTree(HWND hwndTV, LPTSTR lpszItem, int nLevel);
void CreateTreeWnd(HWND parent, Pane* pane, int id); HWND CreateTreeView(HWND hwndParent, ChildWnd* pChildWnd, int id);
void UpdateStatus(HWND hWnd, Entry* pEntry);
HTREEITEM AddItemToTree(HWND hwndTV, LPTSTR lpszItem, int nLevel); BOOL OnTreeExpanding(HWND hwndTV, NMTREEVIEW* pnmtv);
#ifndef _MSC_VER
#define NMTVDISPINFO TV_DISPINFO
#define NMTVDISPINFO TV_DISPINFO
#endif
void OnGetDispInfo(NMTVDISPINFO* ptvdi);
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include <windowsx.h> #include <windowsx.h>
#include <ctype.h> #include <ctype.h>
@ -41,7 +37,7 @@
#include "listview.h" #include "listview.h"
#include "utils.h" #include "utils.h"
#include "sort.h" #include "sort.h"
#include "draw.h"
#define FRM_CALC_CLIENT 0xBF83 #define FRM_CALC_CLIENT 0xBF83
#define Frame_CalcFrameClient(hWnd, prt) ((BOOL)SNDMSG(hWnd, FRM_CALC_CLIENT, 0, (LPARAM)(PRECT)prt)) #define Frame_CalcFrameClient(hWnd, prt) ((BOOL)SNDMSG(hWnd, FRM_CALC_CLIENT, 0, (LPARAM)(PRECT)prt))
@ -314,24 +310,24 @@ void set_curdir(ChildWnd* child, Entry* entry)
{ {
TCHAR path[MAX_PATH]; TCHAR path[MAX_PATH];
child->left.cur = entry; // child->left.cur = entry;
child->right.root = entry; // child->right.root = entry;
child->right.cur = entry; // child->right.cur = entry;
if (!entry->scanned) if (!entry->scanned)
scan_entry(child, entry); scan_entry(child, entry);
else { else {
// ListBox_ResetContent(child->right.hWnd); // ListBox_ResetContent(child->hListWnd);
// insert_entries(&child->right, entry->down, -1); // insert_entries(&child->right, entry->down, -1);
// RefreshList(child->right.hWnd, entry); // RefreshList(child->hListWnd, entry);
// calc_widths(&child->right, FALSE); // calc_widths(&child->right, FALSE);
//#ifndef _NO_EXTENSIONS //#ifndef _NO_EXTENSIONS
// set_header(&child->right); // set_header(&child->right);
//#endif //#endif
} }
RefreshList(child->right.hWnd, entry->down); RefreshList(child->hListWnd, entry->down);
get_path(entry, path); get_path(entry, path);
lstrcpy(child->szPath, path); lstrcpy(child->szPath, path);

View file

@ -27,11 +27,6 @@
extern "C" { extern "C" {
#endif #endif
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
void display_error(HWND hWnd, DWORD error); void display_error(HWND hWnd, DWORD error);
void frame_get_clientspace(HWND hWnd, PRECT prect); void frame_get_clientspace(HWND hWnd, PRECT prect);

View file

@ -20,9 +20,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef _MSC_VER
#include "stdafx.h"
#else
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
@ -32,7 +29,6 @@
#include <tchar.h> #include <tchar.h>
#include <process.h> #include <process.h>
#include <stdio.h> #include <stdio.h>
#endif
#include <windowsx.h> #include <windowsx.h>
#include <process.h> #include <process.h>