ReactOS 0.4.15-dev-7842-g558ab78
FileChildWindow Struct Reference

MDI child window displaying file lists. More...

#include <filechild.h>

Inheritance diagram for FileChildWindow:
Collaboration diagram for FileChildWindow:

Public Types

typedef ExtContextMenuHandlerT< ChildWindowsuper
 
- Public Types inherited from ExtContextMenuHandlerT< ChildWindow >
typedef ChildWindow super
 
- Public Types inherited from ChildWindow
typedef PreTranslateWindow super
 
- Public Types inherited from PreTranslateWindow
typedef Window super
 
- Public Types inherited from Window
typedef map< HWND, Window * > WindowMap
 
typedef Window *(* CREATORFUNC) (HWND)
 
typedef Window *(* CREATORFUNC_INFO) (HWND, const void *)
 

Public Member Functions

 FileChildWindow (HWND hwnd, const FileChildWndInfo &info)
 
const Rootget_root () const
 
void set_focus_pane (Pane *pane)
 
void switch_focus_pane ()
 
- Public Member Functions inherited from ExtContextMenuHandlerT< ChildWindow >
 ExtContextMenuHandlerT (HWND hwnd)
 
 ExtContextMenuHandlerT (HWND hwnd, const PARA &info)
 
LRESULT WndProc (UINT nmsg, WPARAM wparam, LPARAM lparam)
 
- Public Member Functions inherited from ChildWindow
 ChildWindow (HWND hwnd, const ChildWndInfo &info)
 
bool go_to (LPCTSTR url)
 
- Public Member Functions inherited from PreTranslateWindow
 PreTranslateWindow (HWND)
 
 ~PreTranslateWindow ()
 
- Public Member Functions inherited from Window
 Window (HWND hwnd)
 
virtual ~Window ()
 
LRESULT SendParent (UINT nmsg, WPARAM wparam=0, LPARAM lparam=0)
 
LRESULT PostParent (UINT nmsg, WPARAM wparam=0, LPARAM lparam=0)
 
 Window (INT cx, INT cy, BOOL fAutoHide=FALSE)
 
virtual ~Window ()
 
virtual LRESULT CALLBACK WindowProcDx (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
void DoAction ()
 

Static Public Member Functions

static FileChildWindowcreate (const FileChildWndInfo &info)
 
- Static Public Member Functions inherited from ChildWindow
static ChildWindowcreate (const ChildWndInfo &info, const RECT &rect, CREATORFUNC_INFO creator, LPCTSTR classname, LPCTSTR title=NULL, DWORD style=0)
 
- Static Public Member Functions inherited from Window
static HWND Create (CREATORFUNC creator, DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int w, int h, HWND hwndParent=0, HMENU hMenu=0)
 
static HWND Create (CREATORFUNC_INFO creator, const void *info, DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int w, int h, HWND hwndParent=0, HMENU hMenu=0)
 
static Windowcreate_mdi_child (const ChildWndInfo &info, const MDICREATESTRUCT &mcs, CREATORFUNC_INFO creator)
 
static LRESULT CALLBACK WindowWndProc (HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam)
 
static INT_PTR CALLBACK DialogProc (HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam)
 
static Windowget_window (HWND hwnd)
 get window controller from window handle
 
template<typename CLASS >
static CLASS * get_window (HWND hwnd)
 
static void register_pretranslate (HWND hwnd)
 
static void unregister_pretranslate (HWND hwnd)
 
static BOOL pretranslate_msg (LPMSG pmsg)
 
static void register_dialog (HWND hwnd)
 
static void unregister_dialog (HWND hwnd)
 
static BOOL dispatch_dialog_msg (LPMSG pmsg)
 
static int MessageLoop ()
 
static void CancelModes ()
 
static BOOL DoRegisterClass (HINSTANCE hInstance)
 
static HWND DoCreateMainWnd (HINSTANCE hInstance, LPCTSTR pszText, INT cx, INT cy, DWORD style=WS_POPUP|WS_THICKFRAME|WS_CLIPCHILDREN, DWORD exstyle=WS_EX_WINDOWEDGE|WS_EX_TOOLWINDOW|WS_EX_TOPMOST, BOOL fAutoHide=FALSE)
 
static INT DoMainLoop ()
 
static WindowGetAppbarData (HWND hwnd)
 
static LRESULT CALLBACK WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static DWORD WINAPI ActionThreadFunc (LPVOID args)
 

Protected Member Functions

LRESULT WndProc (UINT nmsg, WPARAM wparam, LPARAM lparam)
 
int Command (int id, int code)
 
int Notify (int id, NMHDR *pnmh)
 
virtual void resize_children (int cx, int cy)
 
virtual String jump_to_int (LPCTSTR url)
 
void scan_entry (Entry *entry)
 
bool expand_entry (Entry *dir)
 
void set_curdir (Entry *entry)
 
void activate_entry (Pane *pane)
 
void refresh ()
 
- Protected Member Functions inherited from ChildWindow
LRESULT WndProc (UINT nmsg, WPARAM wparam, LPARAM lparam)
 
virtual void resize_children (int cx, int cy)
 
virtual String jump_to_int (LPCTSTR url)=0
 
void set_url (LPCTSTR url)
 
- Protected Member Functions inherited from Window
virtual LRESULT Init (LPCREATESTRUCT pcs)
 
virtual LRESULT WndProc (UINT nmsg, WPARAM wparam, LPARAM lparam)
 
virtual int Command (int id, int code)
 
virtual int Notify (int id, NMHDR *pnmh)
 
void OnCommand (HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
 
void OnPaint (HWND hwnd)
 
void OnRButtonDown (HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
 
void OnKey (HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
 
void OnAppBarCallback (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
BOOL AppBar_Register (HWND hwnd)
 
BOOL AppBar_UnRegister (HWND hwnd)
 
BOOL AppBar_SetAutoHide (HWND hwnd, BOOL fHide)
 
BOOL AppBar_AutoHide (HWND hwnd)
 
BOOL AppBar_NoAutoHide (HWND hwnd)
 
BOOL AppBar_SetSide (HWND hwnd, UINT uSide)
 
void AppBar_SetAlwaysOnTop (HWND hwnd, BOOL fOnTop)
 
void AppBar_Hide (HWND hwnd)
 
void AppBar_UnHide (HWND hwnd)
 
void AppBar_SetAutoHideTimer (HWND hwnd)
 
void AppBar_SetAutoUnhideTimer (HWND hwnd)
 
void AppBar_Size (HWND hwnd)
 
void AppBar_QueryPos (HWND hwnd, LPRECT lprc)
 
void AppBar_QuerySetPos (UINT uEdge, LPRECT lprc, PAPPBARDATA pabd, BOOL fMove)
 
void AppBar_PosChanged (PAPPBARDATA pabd)
 
BOOL OnCreate (HWND hwnd, LPCREATESTRUCT lpCreateStruct)
 
void OnActivate (HWND hwnd, UINT state, HWND hwndActDeact, BOOL fMinimized)
 
void OnWindowPosChanged (HWND hwnd, const LPWINDOWPOS lpwpos)
 
void OnSize (HWND hwnd, UINT state, int cx, int cy)
 
void OnMove (HWND hwnd, int x, int y)
 
void OnNCDestroy (HWND hwnd)
 
void OnTimer (HWND hwnd, UINT id)
 
UINT OnNCHitTest (HWND hwnd, int x, int y)
 
void OnLButtonDown (HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
 
void OnMouseMove (HWND hwnd, int x, int y, UINT keyFlags)
 
void OnLButtonUp (HWND hwnd, int x, int y, UINT keyFlags)
 
void GetWorkArea (LPRECT prc) const
 

Static Protected Member Functions

static void collapse_entry (Pane *pane, Entry *dir)
 
- Static Protected Member Functions inherited from Window
static Windowcreate_controller (HWND hwnd)
 create controller for a new window
 
static StaticWindowDataGetStaticWindowData ()
 
static LRESULT CALLBACK MDICBTHookProc (int code, WPARAM wparam, LPARAM lparam)
 
static LRESULT CALLBACK PropSheetCBTHookProc (int code, WPARAM wparam, LPARAM lparam)
 

Protected Attributes

Root _root
 
Pane_left
 
Pane_right
 
TCHAR _path [MAX_PATH]
 
bool _header_wdths_ok
 
- Protected Attributes inherited from ExtContextMenuHandlerT< ChildWindow >
CtxMenuInterfaces _cm_ifs
 
- Protected Attributes inherited from ChildWindow
MenuInfo_menu_info
 
WindowHandle _left_hwnd
 
WindowHandle _right_hwnd
 
int _focus_pane
 
int _split_pos
 
int _last_split
 
HWND _hwndFrame
 
String _statusText
 
String _url
 
stack< String_url_history
 
- Protected Attributes inherited from Window
HWND m_hwnd
 
BOOL m_fAutoHide
 
BOOL m_fOnTop
 
BOOL m_fHiding
 
UINT m_uSide
 
LONG m_cxWidth
 
LONG m_cyHeight
 
LONG m_cxSave
 
LONG m_cySave
 
BOOL m_fAppBarRegd
 
BOOL m_fMoving
 
BOOL m_bDragged
 
POINT m_ptDragOn
 
RECT m_rcAppBar
 
RECT m_rcDrag
 

Additional Inherited Members

- Public Attributes inherited from Window
IAccessible IAccessible_iface
 
IOleWindow IOleWindow_iface
 
IEnumVARIANT IEnumVARIANT_iface
 
LONG ref
 
- Static Protected Attributes inherited from Window
static WindowMap s_wnd_map
 
static const voids_new_info = NULL
 
static CREATORFUNC s_window_creator = NULL
 
static HHOOK s_hcbtHook = 0
 
static WindowSet s_pretranslate_windows
 
static WindowSet s_dialogs
 

Detailed Description

MDI child window displaying file lists.

Definition at line 88 of file filechild.h.

Member Typedef Documentation

◆ super

Constructor & Destructor Documentation

◆ FileChildWindow()

FileChildWindow::FileChildWindow ( HWND  hwnd,
const FileChildWndInfo info 
)
Todo:
use OWM_ROOTED flag
Todo:
Is not-explore-mode for FileChildWindow completely implemented?

Definition at line 124 of file filechild.cpp.

125 : super(hwnd, info)
126{
127 CONTEXT("FileChildWindow::FileChildWindow()");
128
129 TCHAR drv[_MAX_DRIVE+1];
130 Entry* entry = NULL;
131
132 _left = NULL;
133 _right = NULL;
134
135 switch(info._etype) {
136#ifdef __WINE__
137 case ET_UNIX:
138 _root._drive_type = GetDriveType(info._path);
139 _root._sort_order = SORT_NAME;
140
141 _tsplitpath(info._path, drv, NULL, NULL, NULL);
142 lstrcat(drv, TEXT("/"));
143 lstrcpy(_root._volname, TEXT("root fs"));
144 _root._fs_flags = 0;
145 lstrcpy(_root._fs, TEXT("unixfs"));
146 lstrcpy(_root._path, TEXT("/"));
147 _root._entry = new UnixDirectory(_root._path);
148 entry = _root.read_tree(info._path+_tcslen(_root._path));
149 break;
150#endif
151
152 case ET_NTOBJS:
153 _root._drive_type = DRIVE_UNKNOWN;
154 _root._sort_order = SORT_NAME;
155
156 _tsplitpath_s(info._path, drv, COUNTOF(drv), NULL, 0, NULL, 0, NULL, 0);
157 lstrcat(drv, TEXT("\\"));
158 lstrcpy(_root._volname, TEXT("NT Object Namespace"));
159 lstrcpy(_root._fs, TEXT("NTOBJ"));
160 lstrcpy(_root._path, drv);
161 _root._entry = new NtObjDirectory(_root._path);
162 entry = _root.read_tree(info._path+_tcslen(_root._path));
163 break;
164
165 case ET_REGISTRY:
166 _root._drive_type = DRIVE_UNKNOWN;
167 _root._sort_order = SORT_NONE;
168
169 _tsplitpath_s(info._path, drv, COUNTOF(drv), NULL, 0, NULL, 0, NULL, 0);
170 lstrcat(drv, TEXT("\\"));
171 lstrcpy(_root._volname, TEXT("Registry"));
172 lstrcpy(_root._fs, TEXT("Registry"));
173 lstrcpy(_root._path, drv);
174 _root._entry = new RegistryRoot();
175 entry = _root.read_tree(info._path+_tcslen(_root._path));
176 break;
177#ifdef _DEBUG
178 case ET_FAT: {
179 _root._drive_type = DRIVE_UNKNOWN;
180 _root._sort_order = SORT_NONE;
181
182 _tsplitpath_s(info._path, drv, COUNTOF(drv), NULL, 0, NULL, 0, NULL, 0);
183 lstrcat(drv, TEXT("\\"));
184 lstrcpy(_root._volname, TEXT("FAT XXX")); //@@
185 lstrcpy(_root._fs, TEXT("FAT"));
186 lstrcpy(_root._path, drv);
187 FATDrive* drive = new FATDrive(TEXT("c:/reactos-emu/c.img")); //TEXT("\\\\.\\F:")); //@@
188
189 if (drive->_hDrive != INVALID_HANDLE_VALUE) {
190 _root._entry = drive;
191 entry = _root.read_tree(info._path+_tcslen(_root._path));
192 }
193 break;}
194#endif
195#ifndef _NO_WIN_FS
196 default: // ET_WINDOWS
197 _root._drive_type = GetDriveType(info._path);
198 _root._sort_order = SORT_NAME;
199
200 _tsplitpath_s(info._path, drv, COUNTOF(drv), NULL, 0, NULL, 0, NULL, 0);
201 lstrcat(drv, TEXT("\\"));
202 GetVolumeInformation(drv, _root._volname, _MAX_FNAME, 0, 0, &_root._fs_flags, _root._fs, COUNTOF(_root._fs));
203 lstrcpy(_root._path, drv);
204 _root._entry = new WinDirectory(_root._path);
205 entry = _root.read_tree(info._path+_tcslen(_root._path));
206 break;
207#else
208 default:
209#endif
210
211 case ET_SHELL: { //@@ separate FileChildWindow into ShellChildWindow, WinChildWindow, UnixChildWindow ?
212 _root._drive_type = DRIVE_UNKNOWN;
213 _root._sort_order = SORT_NAME;
214
215 lstrcpy(drv, TEXT("\\"));
216 lstrcpy(_root._volname, TEXT("Desktop"));
217 _root._fs_flags = 0;
218 lstrcpy(_root._fs, TEXT("Shell"));
219
221 const ShellChildWndInfo& shell_info = static_cast<const ShellChildWndInfo&>(info);
222 entry = _root.read_tree(&*shell_info._shell_path);
223 break;}
224 }
225
226 if (_root._entry) {
227 if (info._etype != ET_SHELL)
228 wsprintf(_root._entry->_data.cFileName, TEXT("%s - %s"), drv, _root._fs);
229 /*@@else
230 lstrcpy(_root._entry->_data.cFileName, TEXT("GetDesktopFolder"));*/
231
232 _root._entry->_data.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
233
234
236
237 if (info._open_mode & OWM_EXPLORE)
238 _left_hwnd = *(_left=new Pane(_hwnd, IDW_TREE_LEFT, IDW_HEADER_LEFT, _root._entry, true, COL_CONTENT));
239
242 }
243
244 _header_wdths_ok = false;
245
246 if (!_left_hwnd && !_right_hwnd)
247 return;
248
249 if (entry)
251 else if (_root._entry)
252 set_curdir(_root._entry);
253
254 if (_left_hwnd) {
257 //SetFocus(_left_hwnd);
258 }
259
260 // store path into history
261 if (info._path && *info._path)
262 _url_history.push(info._path);
263}
void push(const value_type &__x)
Definition: _stack.h:86
#define NULL
Definition: types.h:112
unsigned int idx
Definition: utils.c:41
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
@ ET_FAT
Definition: entries.h:40
@ ET_REGISTRY
Definition: entries.h:39
@ ET_SHELL
Definition: entries.h:37
@ ET_NTOBJS
Definition: entries.h:38
@ SORT_NONE
Definition: entries.h:45
#define _tsplitpath
Definition: tchar.h:686
#define _tsplitpath_s
Definition: tchar.h:687
uint32_t entry
Definition: isohybrid.c:63
#define TEXT(s)
Definition: k32.h:26
@ OWM_EXPLORE
Definition: mainframe.h:32
#define _MAX_FNAME
Definition: utility.h:74
#define _MAX_DRIVE
Definition: utility.h:73
#define COUNTOF(x)
Definition: utility.h:93
struct _CONTEXT CONTEXT
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
@ COL_DATE
Definition: pane.h:38
@ COL_CONTENT
Definition: pane.h:44
@ COL_LINKS
Definition: pane.h:43
@ COL_ATTRIBUTES
Definition: pane.h:40
@ COL_INDEX
Definition: pane.h:42
@ COL_TIME
Definition: pane.h:39
@ COL_TYPE
Definition: pane.h:36
@ COL_SIZE
Definition: pane.h:37
#define IDW_TREE_LEFT
Definition: pane.h:29
#define IDW_HEADER_LEFT
Definition: pane.h:31
#define IDW_HEADER_RIGHT
Definition: pane.h:32
#define IDW_TREE_RIGHT
Definition: pane.h:30
ShellFolder & GetDesktopFolder()
stack< String > _url_history
Definition: window.h:335
WindowHandle _left_hwnd
Definition: window.h:324
WindowHandle _right_hwnd
Definition: window.h:325
Shell folder path of the desktop.
Definition: shellclasses.h:992
base of all file and directory entries
Definition: entries.h:83
FAT drive root entry.
Definition: fatfs.h:226
void set_curdir(Entry *entry)
Definition: filechild.cpp:266
ExtContextMenuHandlerT< ChildWindow > super
Definition: filechild.h:90
bool _header_wdths_ok
Definition: filechild.h:119
NtObj file system directory-entry.
Definition: ntobjfs.h:101
child window pane for displaying file lists
Definition: pane.h:67
Entry * _cur
Definition: pane.h:80
Registry key entry.
Definition: regfs.h:64
information structure for creation of MDIShellBrowserChild
Definition: filechild.h:45
ShellPath _shell_path
Definition: filechild.h:50
shell folder entry
Definition: shellfs.h:54
Windows file system directory-entry.
Definition: winfs.h:46
#define DRIVE_UNKNOWN
Definition: winbase.h:256
#define GetVolumeInformation
Definition: winbase.h:3788
#define GetDriveType
Definition: winbase.h:3747
#define lstrcpy
Definition: winbase.h:3809
#define lstrcat
Definition: winbase.h:3806
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define ListBox_GetCurSel(hwndCtl)
Definition: windowsx.h:481
#define ListBox_FindItemData(hwndCtl, indexStart, data)
Definition: windowsx.h:476
#define ListBox_SetCurSel(hwndCtl, index)
Definition: windowsx.h:500
#define wsprintf
Definition: winuser.h:5865
char TCHAR
Definition: xmlstorage.h:189
#define _tcslen
Definition: xmlstorage.h:198
#define SORT_NAME
Definition: xpath.c:439

Member Function Documentation

◆ activate_entry()

void FileChildWindow::activate_entry ( Pane pane)
protected
Todo:
enable using RETURN key accelerator

Definition at line 577 of file filechild.cpp.

578{
579 Entry* entry = pane->_cur;
580
581 if (!entry)
582 return;
583
584 WaitCursor wait;
585
586 if ((entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) || // a directory?
587 entry->_down) // a file with NTFS sub-streams?
588 {
589 int scanned_old = entry->_scanned;
590
591 if (!scanned_old)
593
594 if (entry->_data.cFileName[0]==TEXT('.') && entry->_data.cFileName[1]==TEXT('\0'))
595 return;
596
597 if (entry->_data.cFileName[0]==TEXT('.') && entry->_data.cFileName[1]==TEXT('.') && entry->_data.cFileName[2]==TEXT('\0')) {
598 entry = _left->_cur->_up;
600 goto focus_entry;
601 } else if (entry->_expanded)
602 collapse_entry(pane, _left->_cur);
603 else {
605
606 if (!pane->_treePane) focus_entry: {
609
611 }
612 }
613
614 if (!scanned_old) {
615 pane->calc_widths(false);
616
617 pane->set_header();
618 }
619 } else {
620 entry->launch_entry(_hwnd);
621 }
622}
VOID WaitCursor(BOOL bBegin)
Definition: dialog.c:114
Entry * _up
Definition: entries.h:94
bool expand_entry(Entry *dir)
Definition: filechild.cpp:310
void scan_entry(Entry *entry)
Definition: filechild.cpp:625
static void collapse_entry(Pane *pane, Entry *dir)
Definition: filechild.cpp:354
bool calc_widths(bool anyway)
Definition: pane.cpp:178
bool _treePane
Definition: pane.h:85
void set_header()
Definition: pane.cpp:693

Referenced by Command(), and WndProc().

◆ collapse_entry()

void FileChildWindow::collapse_entry ( Pane pane,
Entry dir 
)
staticprotected

Definition at line 354 of file filechild.cpp.

355{
356 int idx = ListBox_FindItemData(*pane, 0, dir);
357
358 SendMessage(*pane, WM_SETREDRAW, FALSE, 0); //ShowWindow(*pane, SW_HIDE);
359
360 // hide sub entries
361 for(;;) {
363 Entry* sub = (Entry*) res;
364
365 if (res==LB_ERR || !sub || sub->_level<=dir->_level)
366 break;
367
368 ListBox_DeleteString(*pane, idx+1);
369 }
370
371 dir->_expanded = false;
372
373 SendMessage(*pane, WM_SETREDRAW, TRUE, 0); //ShowWindow(*pane, SW_SHOW);
374}
unsigned int dir
Definition: maze.c:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
GLuint res
Definition: glext.h:9613
int _level
Definition: entries.h:98
LONG_PTR LRESULT
Definition: windef.h:209
#define ListBox_DeleteString(hwndCtl, index)
Definition: windowsx.h:473
#define ListBox_GetItemData(hwndCtl, index)
Definition: windowsx.h:483
#define LB_ERR
Definition: winuser.h:2432
#define SendMessage
Definition: winuser.h:5843
#define WM_SETREDRAW
Definition: winuser.h:1616

Referenced by activate_entry().

◆ Command()

int FileChildWindow::Command ( int  id,
int  code 
)
protectedvirtual

Reimplemented from Window.

Definition at line 553 of file filechild.cpp.

554{
555 Pane* pane = GetFocus()==_left_hwnd? _left: _right;
556
557 switch(code) {
558 case LBN_SELCHANGE: {
559 int idx = ListBox_GetCurSel(*pane);
561
562 if (pane == _left)
564 else
565 pane->_cur = entry;
566 break;}
567
568 case LBN_DBLCLK:
569 activate_entry(pane);
570 break;
571 }
572
573 return 0;
574}
void activate_entry(Pane *pane)
Definition: filechild.cpp:577
Definition: inflate.c:139
HWND WINAPI GetFocus(void)
Definition: window.c:1893
#define LBN_DBLCLK
Definition: winuser.h:2071
#define LBN_SELCHANGE
Definition: winuser.h:2075

◆ create()

FileChildWindow * FileChildWindow::create ( const FileChildWndInfo info)
static

Definition at line 377 of file filechild.cpp.

378{
379 CONTEXT("FileChildWindow::create()");
380
382
383 mcs.szClass = CLASSNAME_WINEFILETREE;
384 mcs.szTitle = (LPTSTR)info._path;
385 mcs.hOwner = g_Globals._hInstance;
386 mcs.x = info._pos.rcNormalPosition.left;
387 mcs.y = info._pos.rcNormalPosition.top;
388 mcs.cx = info._pos.rcNormalPosition.right - info._pos.rcNormalPosition.left;
389 mcs.cy = info._pos.rcNormalPosition.bottom - info._pos.rcNormalPosition.top;
390 mcs.style = 0;
391 mcs.lParam = 0;
392
393 FileChildWindow* child = static_cast<FileChildWindow*>(
395
396 if (!child->_left_hwnd && !child->_right_hwnd) {
397 SendMessage(info._hmdiclient, WM_MDIDESTROY, (WPARAM)child->_hwnd, 0);
398 MessageBox(info._hmdiclient, TEXT("Error opening child window"), TEXT("ROS Explorer"), MB_OK);
399 }
400
401 return child;
402}
static struct myctx * mcs
Definition: adnstest.c:53
#define CLASSNAME_WINEFILETREE
Definition: explorer.h:76
ExplorerGlobals g_Globals
Definition: explorer.cpp:52
#define WINDOW_CREATOR_INFO(WND_CLASS, INFO_CLASS)
Definition: window.h:215
static HWND child
Definition: cursoricon.c:298
HINSTANCE _hInstance
Definition: globals.h:270
MDI child window displaying file lists.
Definition: filechild.h:89
information structure for creation of FileChildWindow
Definition: filechild.h:31
static Window * create_mdi_child(const ChildWndInfo &info, const MDICREATESTRUCT &mcs, CREATORFUNC_INFO creator)
Definition: window.cpp:118
UINT_PTR WPARAM
Definition: windef.h:207
#define WM_MDIDESTROY
Definition: winuser.h:1813
#define MB_OK
Definition: winuser.h:790
#define MessageBox
Definition: winuser.h:5822
CHAR * LPTSTR
Definition: xmlstorage.h:192

Referenced by MDIMainFrame::Command(), and WndProc().

◆ expand_entry()

bool FileChildWindow::expand_entry ( Entry dir)
protected

Definition at line 310 of file filechild.cpp.

311{
312 int idx;
313 Entry* p;
314
315 if (!dir || dir->_expanded || !dir->_down)
316 return false;
317
318 p = dir->_down;
319
320 if (p->_data.cFileName[0]=='.' && p->_data.cFileName[1]=='\0' && p->_next) {
321 p = p->_next;
322
323 if (p->_data.cFileName[0]=='.' && p->_data.cFileName[1]=='.' &&
324 p->_data.cFileName[2]=='\0' && p->_next)
325 p = p->_next;
326 }
327
328 // no subdirectories ?
329 if (!(p->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && // not a directory?
330 !p->_down) // not a file with NTFS sub-streams?
331 return FALSE;
332
334
335 dir->_expanded = true;
336
337 // insert entries in left pane
338 HiddenWindow hide(_left_hwnd);
339
341
342 if (!_header_wdths_ok) {
343 if (_left->calc_widths(false)) {
344 _left->set_header();
345
346 _header_wdths_ok = true;
347 }
348 }
349
350 return true;
351}
GLfloat GLfloat p
Definition: glext.h:8902
int insert_entries(Entry *dir, int idx=-1)
Definition: pane.cpp:658

Referenced by activate_entry(), and refresh().

◆ get_root()

const Root & FileChildWindow::get_root ( ) const
inline

Definition at line 122 of file filechild.h.

122{return _root;}

◆ jump_to_int()

String FileChildWindow::jump_to_int ( LPCTSTR  url)
protectedvirtual
Todo:
use fname

Implements ChildWindow.

Definition at line 669 of file filechild.cpp.

670{
671 String dir, fname;
672
673 if (SplitFileSysURL(url, dir, fname)) {
674 Entry* entry = NULL;
675
676 // call read_tree() to iterate through the hierarchy and open all folders to reach dir
677 if (_root._entry)
678 switch(_root._entry->_etype) {
679 case ET_SHELL: { //@@ separate into FileChildWindow in ShellChildWindow, WinChildWindow, UnixChildWindow ?
680 ShellPath shell_path(dir);
681 entry = _root.read_tree(&*shell_path);
682 break;}
683
684#ifdef __WINE__
685 case ET_UNIX: {
686 LPCTSTR path = dir;
687
688 if (!_tcsicmp(path, _root._path, _tcslen(_root._path)))
689 path += _tcslen(_root._path);
690
691 entry = _root.read_tree(path);
692 break;}
693#endif
694
695 default: { // ET_NTOBJS, ET_REGISTRY, ET_FAT, ET_WINDOWS
696 LPCTSTR path = dir;
697
698 if (!_tcsnicmp(path, _root._path, _tcslen(_root._path)))
699 path += _tcslen(_root._path);
700
701 entry = _root.read_tree(path);
702 break;}
703 }
704
705 if (entry) {
706 // refresh left pane entries
707 HiddenWindow hide(_left_hwnd);
708
710
711 _left->insert_entries(_root._entry);
712
713 if (!_header_wdths_ok) {
714 if (_left->calc_widths(false)) {
715 _left->set_header();
716
717 _header_wdths_ok = true;
718 }
719 }
720
722
723 if (_left_hwnd) {
725
726 if (idx != -1) { // The item should always be found.
729 }
730 }
731
733
734 return dir; //FmtString(TEXT("file://%s"), (LPCTSTR)dir);
735 }
736 }
737
738 return String();
739}
bool SplitFileSysURL(LPCTSTR url, String &dir_out, String &fname_out)
Definition: utility.cpp:504
static const WCHAR url[]
Definition: encode.c:1432
wrapper class for item ID lists
Definition: shellclasses.h:652
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433
#define ListBox_ResetContent(hwndCtl)
Definition: windowsx.h:494
HWND WINAPI SetFocus(_In_opt_ HWND)
#define _tcsnicmp
Definition: xmlstorage.h:207
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
#define _tcsicmp
Definition: xmlstorage.h:205

◆ Notify()

int FileChildWindow::Notify ( int  id,
NMHDR pnmh 
)
protectedvirtual

Reimplemented from Window.

Definition at line 663 of file filechild.cpp.

664{
665 return (pnmh->idFrom==IDW_HEADER_LEFT? _left: _right)->Notify(id, pnmh);
666}
UINT_PTR idFrom
Definition: winuser.h:3158

◆ refresh()

void FileChildWindow::refresh ( )
protected

Definition at line 541 of file filechild.cpp.

542{
543 WaitCursor wait;
544 bool expanded = _left->_cur->_expanded;
545
547
548 if (expanded)
550}
bool _expanded
Definition: entries.h:96

Referenced by WndProc().

◆ resize_children()

void FileChildWindow::resize_children ( int  cx,
int  cy 
)
protectedvirtual

Reimplemented from ChildWindow.

Definition at line 405 of file filechild.cpp.

406{
407 HDWP hdwp = BeginDeferWindowPos(4);
408 RECT rt;
409
410 rt.left = 0;
411 rt.top = 0;
412 rt.right = cx;
413 rt.bottom = cy;
414
416
417 if (_left && _right) {
418 WINDOWPOS wp;
419 HD_LAYOUT hdl;
420
421 hdl.prc = &rt;
422 hdl.pwpos = &wp;
423
425
427 wp.x-1, wp.y, _split_pos-SPLIT_WIDTH/2+1, wp.cy, wp.flags);
428
430 rt.left+cx+1, wp.y, wp.cx-cx+2, wp.cy, wp.flags);
431 }
432
433 if (_left_hwnd)
435
436 if (_right_hwnd)
437 hdwp = DeferWindowPos(hdwp, _right_hwnd, 0, rt.left+cx+1, rt.top, rt.right-cx, rt.bottom-rt.top, SWP_NOZORDER|SWP_NOACTIVATE);
438
439 EndDeferWindowPos(hdwp);
440}
#define SPLIT_WIDTH
Definition: eventvwr.c:45
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585
#define HD_LAYOUT
Definition: commctrl.h:760
#define Header_Layout(hwndHD, playout)
Definition: commctrl.h:768
int _split_pos
Definition: window.h:328
WindowHandle _hwndHeader
Definition: pane.h:77
UINT flags
Definition: winuser.h:3594
HWND hwndInsertAfter
Definition: winuser.h:3589
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define SWP_NOACTIVATE
Definition: winuser.h:1242
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
HDWP WINAPI DeferWindowPos(_In_ HDWP, _In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOZORDER
Definition: winuser.h:1247
HDWP WINAPI BeginDeferWindowPos(_In_ int)

Referenced by WndProc().

◆ scan_entry()

void FileChildWindow::scan_entry ( Entry entry)
protected
Todo:
use modifyable sort order instead of fixed file system default

Definition at line 625 of file filechild.cpp.

626{
627 CONTEXT("FileChildWindow::scan_entry()");
628
630
631 // delete sub entries in left pane
632 for(;;) {
634 Entry* sub = (Entry*) res;
635
636 if (res==LB_ERR || !sub || sub->_level<=entry->_level)
637 break;
638
640 }
641
642 // empty right pane
644
645 // release memory
646 entry->free_subentries();
647 entry->_expanded = false;
648
649 // read contents from disk
650 entry->read_directory_base(_root._sort_order);
651
652 // insert found entries in right pane
653 HiddenWindow hide(_right_hwnd);
654 _right->insert_entries(entry->_down);
655
656 _right->calc_widths(false);
658
659 _header_wdths_ok = false;
660}

Referenced by activate_entry(), refresh(), and set_curdir().

◆ set_curdir()

void FileChildWindow::set_curdir ( Entry entry)
protected
Todo:
make configurable (This call takes really very long compared to all other processing!)

Definition at line 266 of file filechild.cpp.

267{
268 CONTEXT("FileChildWindow::set_curdir()");
269
270 _path[0] = TEXT('\0');
271
272 _left->_cur = entry;
273 _right->_root = entry&&entry->_down? entry->_down: entry;
274 _right->_cur = entry;
275
276 if (entry) {
277 WaitCursor wait;
278
279 if (!entry->_scanned)
281 else {
282 HiddenWindow hide(_right_hwnd);
283
285 _right->insert_entries(entry->_down);
286
287 _right->calc_widths(false);
288
290 }
291
292 entry->get_path(_path, COUNTOF(_path));
293 }
294
295 if (_hwnd) // only change window title if the window already exists
296 SetWindowText(_hwnd, _path);
297
298 if (_path[0])
299 {
301 set_url(_path); //set_url(FmtString(TEXT("file://%s"), _path));
302 else
303 _path[0] = TEXT('\0');
304 }
305}
void set_url(LPCTSTR url)
Definition: window.cpp:567
TCHAR _path[MAX_PATH]
Definition: filechild.h:118
Entry * _root
Definition: pane.h:79
#define SetCurrentDirectory
Definition: winbase.h:3838
#define SetWindowText
Definition: winuser.h:5857

Referenced by activate_entry(), Command(), FileChildWindow(), and jump_to_int().

◆ set_focus_pane()

void FileChildWindow::set_focus_pane ( Pane pane)
inline

Definition at line 124 of file filechild.h.

125 {_focus_pane = pane==_right? 1: 0;}
int _focus_pane
Definition: window.h:326

◆ switch_focus_pane()

void FileChildWindow::switch_focus_pane ( )
inline

Definition at line 127 of file filechild.h.

◆ WndProc()

LRESULT FileChildWindow::WndProc ( UINT  nmsg,
WPARAM  wparam,
LPARAM  lparam 
)
protectedvirtual

Reimplemented from Window.

Definition at line 443 of file filechild.cpp.

444{
445 switch(nmsg) {
446 case WM_DRAWITEM: {
448 Entry* entry = (Entry*) dis->itemData;
449
450 if (dis->CtlID == IDW_TREE_LEFT) {
451 _left->draw_item(dis, entry);
452 return TRUE;
453 } else if (dis->CtlID == IDW_TREE_RIGHT) {
454 _right->draw_item(dis, entry);
455 return TRUE;
456 }
457
458 goto def;}
459
460 case WM_SIZE:
461 if (wparam != SIZE_MINIMIZED)
463 return DefMDIChildProc(_hwnd, nmsg, wparam, lparam);
464
466 return (LRESULT)this;
467
468 case WM_SETFOCUS: {
470
471 if (_left && _left->_cur) {
474 }
475
477 goto def;}
478
479 case PM_DISPATCH_COMMAND: {
480 Pane* pane = GetFocus()==_left_hwnd? _left: _right;
481
482 switch(LOWORD(wparam)) {
483 case ID_WINDOW_NEW: {CONTEXT("FileChildWindow PM_DISPATCH_COMMAND ID_WINDOW_NEW");
484 if (_root._entry->_etype == ET_SHELL)
486 else
488 break;}
489
490 case ID_REFRESH: {CONTEXT("ID_REFRESH");
491 refresh();
492 break;}
493
494 case ID_ACTIVATE: {CONTEXT("ID_ACTIVATE");
495 activate_entry(pane);
496 break;}
497
498 default:
499 if (pane->command(LOWORD(wparam)))
500 return TRUE;
501 else
502 return super::WndProc(nmsg, wparam, lparam);
503 }
504
505 return TRUE;}
506
507 case WM_CONTEXTMENU: {
508 // first select the current item in the listbox
509 HWND hpanel = (HWND) wparam;
510 POINT pt;
511 pt.x = LOWORD(lparam);
512 pt.y = HIWORD(lparam);
513 POINT pt_screen = pt;
514 ScreenToClient(hpanel, &pt);
515 SendMessage(hpanel, WM_LBUTTONDOWN, 0, MAKELONG(pt.x, pt.y));
516 SendMessage(hpanel, WM_LBUTTONUP, 0, MAKELONG(pt.x, pt.y));
517
518 // now create the popup menu using shell namespace and IContextMenu
519 Pane* pane = GetFocus()==_left_hwnd? _left: _right;
520 int idx = ListBox_GetCurSel(*pane);
521 if (idx != -1) {
523
524 HRESULT hr = entry->do_context_menu(_hwnd, pt_screen, _cm_ifs);
525
526 if (SUCCEEDED(hr))
527 refresh();
528 else
529 CHECKERROR(hr);
530 }
531 break;}
532
533 default: def:
534 return super::WndProc(nmsg, wparam, lparam);
535 }
536
537 return 0;
538}
@ lparam
Definition: SystemMenu.c:31
@ wparam
Definition: SystemMenu.c:30
#define ID_REFRESH
Definition: resource.h:16
HANDLE HWND
Definition: compat.h:19
#define MAX_PATH
Definition: compat.h:34
#define pt(x, y)
Definition: drawing.c:79
#define PM_GET_FILEWND_PTR
Definition: explorer.h:61
#define SUCCEEDED(hr)
Definition: intsafe.h:50
if(dx< 0)
Definition: linetemp.h:194
#define ID_WINDOW_NEW
Definition: resource.h:227
#define ID_ACTIVATE
Definition: resource.h:60
#define PM_DISPATCH_COMMAND
Definition: window.h:265
#define LOWORD(l)
Definition: pedump.c:82
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define DefMDIChildProc
Definition: ros2win.h:33
#define CHECKERROR(hr)
Definition: shellclasses.h:162
HRESULT hr
Definition: shlfolder.c:183
virtual bool get_path(PTSTR path, size_t path_count) const =0
LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
static FileChildWindow * create(const FileChildWndInfo &info)
Definition: filechild.cpp:377
virtual void resize_children(int cx, int cy)
Definition: filechild.cpp:405
BOOL command(UINT cmd)
Definition: pane.cpp:942
void draw_item(LPDRAWITEMSTRUCT dis, Entry *entry, int calcWidthCol=-1)
Definition: pane.cpp:298
ULONG_PTR itemData
Definition: winuser.h:3093
#define MAKELONG(a, b)
Definition: typedefs.h:249
#define HIWORD(l)
Definition: typedefs.h:247
struct tagDRAWITEMSTRUCT * LPDRAWITEMSTRUCT
#define WM_SIZE
Definition: winuser.h:1611
#define WM_SETFOCUS
Definition: winuser.h:1613
#define SIZE_MINIMIZED
Definition: winuser.h:2506
#define WM_LBUTTONDOWN
Definition: winuser.h:1776
#define WM_DRAWITEM
Definition: winuser.h:1645
#define WM_LBUTTONUP
Definition: winuser.h:1777
HWND WINAPI GetParent(_In_ HWND)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)

Member Data Documentation

◆ _header_wdths_ok

bool FileChildWindow::_header_wdths_ok
protected

Definition at line 119 of file filechild.h.

Referenced by expand_entry(), FileChildWindow(), jump_to_int(), and scan_entry().

◆ _left

◆ _path

TCHAR FileChildWindow::_path[MAX_PATH]
protected

Definition at line 118 of file filechild.h.

Referenced by set_curdir(), and WndProc().

◆ _right

Pane* FileChildWindow::_right
protected

◆ _root

Root FileChildWindow::_root
protected

Definition at line 115 of file filechild.h.

Referenced by get_root().


The documentation for this struct was generated from the following files: