#include <mainframe.h>
Public Types | |
typedef ExtContextMenuHandlerT < ShellBrowserChildT < MainFrameBase > > | super |
Public Member Functions | |
SDIMainFrame (HWND hwnd) | |
Static Public Member Functions | |
static HWND | Create () |
static HWND | Create (LPCTSTR path, int mode=OWM_EXPLORE|OWM_DETAILS) |
static HWND | Create (LPCITEMIDLIST pidl, int mode=OWM_EXPLORE|OWM_DETAILS|OWM_PIDL) |
Protected Member Functions | |
LRESULT | WndProc (UINT nmsg, WPARAM wparam, LPARAM lparam) |
int | Command (int id, int code) |
void | resize_frame (int cx, int cy) |
void | resize_children () |
void | update_clnt_rect () |
void | update_shell_browser () |
void | jump_to (LPCTSTR path, int mode) |
void | jump_to (LPCITEMIDLIST path, int mode) |
virtual void | entry_selected (Entry *entry) |
void | set_url (LPCTSTR url) |
Protected Attributes | |
ShellPathInfo | _shellpath_info |
WindowHandle | _left_hwnd |
WindowHandle | _right_hwnd |
int | _split_pos |
int | _last_split |
RECT | _clnt_rect |
String | _url |
Definition at line 141 of file mainframe.h.
Reimplemented from ExtContextMenuHandlerT< ShellBrowserChildT< MainFrameBase > >.
Definition at line 147 of file mainframe.h.
SDIMainFrame::SDIMainFrame | ( | HWND | hwnd ) |
Definition at line 1365 of file mainframe.cpp.
References _last_split, _split_pos, and DEFAULT_SPLIT_POS.
: super(hwnd) { _split_pos = DEFAULT_SPLIT_POS; _last_split = DEFAULT_SPLIT_POS; /* wait for PM_OPEN_WINDOW message before creating a shell view update_shell_browser();*/ }
int SDIMainFrame::Command | ( | int | id, |
int | code | ||
) | [protected, virtual] |
Reimplemented from MainFrameBase.
Definition at line 1555 of file mainframe.cpp.
References _url, MainFrameBase::Command(), Create(), MainFrameBase::ExecuteCommandbar(), ID_VIEW_MDI, and IDW_COMMANDBAR.
{ switch(id) { case ID_VIEW_MDI: MainFrameBase::Create(ExplorerCmd(_url, true)); break; case IDW_COMMANDBAR: if (code == 1) ExecuteCommandbar(_url); break; default: return super::Command(id, code); } return 0; }
HWND SDIMainFrame::Create | ( | ) | [static] |
Definition at line 1375 of file mainframe.cpp.
References ExplorerGlobals::_hframeClass, ExplorerGlobals::_hInstance, g_Globals, IDM_SDIFRAME, IDS_TITLE, and WINDOW_CREATOR.
Referenced by Command(), and Create().
{ HMENU hMenuFrame = LoadMenu(g_Globals._hInstance, MAKEINTRESOURCE(IDM_SDIFRAME)); return Window::Create(WINDOW_CREATOR(SDIMainFrame), 0, (LPCTSTR)(int)g_Globals._hframeClass, ResString(IDS_TITLE), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0/*hwndDesktop*/, hMenuFrame); }
Definition at line 1401 of file mainframe.cpp.
References Create(), MDIMainFrame::CreateChild(), GET_WINDOW, and HWND.
{ HWND hFrame = Create(); if (!hFrame) return 0; ShowWindow(hFrame, SW_SHOW); MDIMainFrame* pMainFrame = GET_WINDOW(MDIMainFrame, hFrame); if (pMainFrame) pMainFrame->CreateChild(path, mode); return hFrame; }
HWND SDIMainFrame::Create | ( | LPCITEMIDLIST | pidl, |
int | mode = OWM_EXPLORE|OWM_DETAILS|OWM_PIDL |
||
) | [static] |
Definition at line 1385 of file mainframe.cpp.
References Create(), GET_WINDOW, HWND, and jump_to().
{ HWND hFrame = Create(); if (!hFrame) return 0; ShowWindow(hFrame, SW_SHOW); SDIMainFrame* pFrame = GET_WINDOW(SDIMainFrame, hFrame); if (pFrame) pFrame->jump_to(pidl, mode); return hFrame; }
void SDIMainFrame::entry_selected | ( | Entry * | entry ) | [protected, virtual] |
Implements BrowserCallback.
Definition at line 1692 of file mainframe.cpp.
References _left_hwnd, ShellBrowserChildT< MainFrameBase >::_shellBrowser, COUNTOF, Entry::get_path(), Entry::get_shell_folder(), String::printf(), resize_children(), set_url(), and TEXT.
{ if (_left_hwnd) _shellBrowser->select_folder(entry, false); _shellBrowser->UpdateFolderView(entry->get_shell_folder()); // set size of new created shell view windows resize_children(); TCHAR path[MAX_PATH]; if (entry->get_path(path, COUNTOF(path))) { String url; if (path[0] == ':') url.printf(TEXT("shell://%s"), path); else url.printf(TEXT("file://%s"), path); set_url(url); } }
void SDIMainFrame::jump_to | ( | LPCTSTR | path, |
int | mode | ||
) | [protected] |
Definition at line 1725 of file mainframe.cpp.
References ShellPathInfo::_open_mode, ShellPathInfo::_shell_path, _shellpath_info, and update_shell_browser().
Referenced by Create(), and WndProc().
{/*@@todo if (_shellBrowser.get() && (_shellpath_info._open_mode&~OWM_PIDL)==(mode&~OWM_PIDL)) { _shellBrowser->jump_to(path); _shellpath_info._shell_path = path; } else */{ _shellpath_info._open_mode = mode; _shellpath_info._shell_path = path; update_shell_browser(); } }
void SDIMainFrame::jump_to | ( | LPCITEMIDLIST | path, |
int | mode | ||
) | [protected] |
Definition at line 1739 of file mainframe.cpp.
References ShellPathInfo::_open_mode, ShellPathInfo::_shell_path, ShellBrowserChildT< MainFrameBase >::_shellBrowser, _shellpath_info, OWM_PIDL, and update_shell_browser().
{ if (_shellBrowser.get() && (_shellpath_info._open_mode&~OWM_PIDL)==(mode&~OWM_PIDL)) { ShellPath shell_path = path; _shellBrowser->jump_to(shell_path); _shellpath_info._shell_path = shell_path; } else { _shellpath_info._open_mode = mode; _shellpath_info._shell_path = path; update_shell_browser(); } }
void SDIMainFrame::resize_children | ( | ) | [protected] |
Definition at line 1624 of file mainframe.cpp.
References _clnt_rect, _left_hwnd, _right_hwnd, _split_pos, and SPLIT_WIDTH.
Referenced by entry_selected(), resize_frame(), and WndProc().
{ HDWP hdwp = BeginDeferWindowPos(2); int cx = _clnt_rect.left; if (_left_hwnd) { cx = _split_pos + SPLIT_WIDTH/2; hdwp = DeferWindowPos(hdwp, _left_hwnd, 0, _clnt_rect.left, _clnt_rect.top, _split_pos-SPLIT_WIDTH/2-_clnt_rect.left, _clnt_rect.bottom-_clnt_rect.top, SWP_NOZORDER|SWP_NOACTIVATE); } else { //_split_pos = -1; cx = 0; } if (_right_hwnd) hdwp = DeferWindowPos(hdwp, _right_hwnd, 0, _clnt_rect.left+cx+1, _clnt_rect.top, _clnt_rect.right-cx, _clnt_rect.bottom-_clnt_rect.top, SWP_NOZORDER|SWP_NOACTIVATE); EndDeferWindowPos(hdwp); }
void SDIMainFrame::resize_frame | ( | int | cx, |
int | cy | ||
) | [protected, virtual] |
Reimplemented from MainFrameBase.
Definition at line 1574 of file mainframe.cpp.
References _clnt_rect, MainFrameBase::_haddressedit, MainFrameBase::_hcommandedit, MainFrameBase::_hsidebar, MainFrameBase::_hstatusbar, MainFrameBase::_htoolbar, MainFrameBase::_hwndrebar, and resize_children().
Referenced by update_clnt_rect(), update_shell_browser(), and WndProc().
{ if (cy <= 0) return; // avoid resizing children when receiving RBN_AUTOSIZE while getting minimized RECT rect = {0, 0, cx, cy}; if (_hwndrebar) { int height = ClientRect(_hwndrebar).bottom; rect.top += height; rect.top += 5; } else { if (IsWindowVisible(_htoolbar)) { SendMessage(_htoolbar, WM_SIZE, 0, 0); WindowRect rt(_htoolbar); rect.top = rt.bottom; // rect.bottom -= rt.bottom; } } if (IsWindowVisible(_hstatusbar)) { int parts[] = {300, 500}; SendMessage(_hstatusbar, WM_SIZE, 0, 0); SendMessage(_hstatusbar, SB_SETPARTS, 2, (LPARAM)&parts); ClientRect rt(_hstatusbar); rect.bottom -= rt.bottom; } if (IsWindowVisible(_haddressedit) || IsWindowVisible(_hcommandedit)) { ClientRect rt(_haddressedit); rect.bottom -= rt.bottom; int mid = (rect.right-rect.left) / 2; ///@todo use split bar SetWindowPos(_haddressedit, 0, 0, rect.bottom, mid, rt.bottom, SWP_NOACTIVATE|SWP_NOZORDER); SetWindowPos(_hcommandedit, 0, mid+1, rect.bottom, rect.right-(mid+1), rt.bottom, SWP_NOACTIVATE|SWP_NOZORDER); } if (IsWindowVisible(_hsidebar)) { WindowRect rt(_hsidebar); rect.left += rt.right-rt.left; SetWindowPos(_hsidebar, 0, -1, rect.top-1, rt.right-rt.left, rect.bottom-rect.top+1, SWP_NOACTIVATE|SWP_NOZORDER); } _clnt_rect = rect; resize_children(); }
void SDIMainFrame::set_url | ( | LPCTSTR | url ) | [protected] |
Definition at line 1716 of file mainframe.cpp.
References MainFrameBase::_haddressedit, and _url.
Referenced by entry_selected().
{ if (_url != url) { _url = url; SetWindowText(_haddressedit, url); //SendMessage(_hwndFrame, PM_URL_CHANGED, 0, (LPARAM)url); } }
void SDIMainFrame::update_clnt_rect | ( | ) | [protected] |
Definition at line 1645 of file mainframe.cpp.
References WindowHandle::_hwnd, and resize_frame().
Referenced by update_shell_browser().
{ ClientRect rect(_hwnd); resize_frame(rect.right, rect.bottom); }
void SDIMainFrame::update_shell_browser | ( | ) | [protected] |
Definition at line 1652 of file mainframe.cpp.
References ExtContextMenuHandlerT< ShellBrowserChildT< MainFrameBase > >::_cm_ifs, ExplorerGlobals::_hInstance, WindowHandle::_hwnd, _left_hwnd, ShellPathInfo::_open_mode, _right_hwnd, ShellBrowserChildT< MainFrameBase >::_shellBrowser, _shellpath_info, _split_pos, DEFAULT_SPLIT_POS, g_Globals, IDC_FILETREE, OWM_EXPLORE, resize_frame(), SPLIT_WIDTH, and update_clnt_rect().
Referenced by jump_to().
{ int split_pos = DEFAULT_SPLIT_POS; if (_shellBrowser.get()) { split_pos = _split_pos; delete _shellBrowser.release(); } // create explorer treeview if (_shellpath_info._open_mode & OWM_EXPLORE) { if (!_left_hwnd) { ClientRect rect(_hwnd); _left_hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, WC_TREEVIEW, NULL, WS_CHILD|WS_TABSTOP|WS_VISIBLE|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS|TVS_NOTOOLTIPS|TVS_SHOWSELALWAYS, 0, rect.top, split_pos-SPLIT_WIDTH/2, rect.bottom-rect.top, _hwnd, (HMENU)IDC_FILETREE, g_Globals._hInstance, 0); // display tree window as long as the shell view is not yet visible resize_frame(rect.right, rect.bottom); MoveWindow(_left_hwnd, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, TRUE); } } else { if (_left_hwnd) { DestroyWindow(_left_hwnd); _left_hwnd = 0; } } _shellBrowser = auto_ptr<ShellBrowser>(new ShellBrowser(_hwnd, _hwnd, _left_hwnd, _right_hwnd, _shellpath_info, this, _cm_ifs)); if (_left_hwnd) _shellBrowser->Init(); // update _clnt_rect and set size of new created shell view windows update_clnt_rect(); }
LRESULT SDIMainFrame::WndProc | ( | UINT | nmsg, |
WPARAM | wparam, | ||
LPARAM | lparam | ||
) | [protected, virtual] |
Reimplemented from ExtContextMenuHandlerT< ShellBrowserChildT< MainFrameBase > >.
Definition at line 1417 of file mainframe.cpp.
References WindowHandle::_hwnd, _last_split, _left_hwnd, _right_hwnd, ShellPathInfo::_root_shell_path, _shellpath_info, _split_pos, ShellPath::assign(), COLOR_SPLITBAR, CONTEXT, jump_to(), LOG, OWM_PIDL, OWM_ROOTED, PM_OPEN_WINDOW, resize_children(), resize_frame(), ScreenToClient(), SPLIT_WIDTH, TEXT, and ExtContextMenuHandlerT< ShellBrowserChildT< MainFrameBase > >::WndProc().
{ switch(nmsg) { case WM_SIZE: resize_frame(LOWORD(lparam), HIWORD(lparam)); break; case WM_PAINT: { PaintCanvas canvas(_hwnd); if (_left_hwnd) { ClientRect rt(_hwnd); rt.left = _split_pos-SPLIT_WIDTH/2; rt.right = _split_pos+SPLIT_WIDTH/2+1; if (_right_hwnd) { WindowRect right_rect(_right_hwnd); ScreenToClient(_hwnd, &right_rect); rt.top = right_rect.top; rt.bottom = right_rect.bottom; } HBRUSH lastBrush = SelectBrush(canvas, GetStockBrush(COLOR_SPLITBAR)); Rectangle(canvas, rt.left, rt.top-1, rt.right, rt.bottom+1); SelectObject(canvas, lastBrush); } break;} case WM_SETCURSOR: if (_left_hwnd) if (LOWORD(lparam) == HTCLIENT) { POINT pt; GetCursorPos(&pt); ScreenToClient(_hwnd, &pt); if (pt.x>=_split_pos-SPLIT_WIDTH/2 && pt.x<_split_pos+SPLIT_WIDTH/2+1) { SetCursor(LoadCursor(0, IDC_SIZEWE)); return TRUE; } } goto def; case WM_LBUTTONDOWN: if (_left_hwnd) { int x = GET_X_LPARAM(lparam); ClientRect rt(_hwnd); if (x>=_split_pos-SPLIT_WIDTH/2 && x<_split_pos+SPLIT_WIDTH/2+1) { _last_split = _split_pos; SetCapture(_hwnd); } } break; case WM_LBUTTONUP: if (GetCapture() == _hwnd) ReleaseCapture(); break; case WM_KEYDOWN: if (wparam == VK_ESCAPE) if (GetCapture() == _hwnd) { _split_pos = _last_split; resize_children(); _last_split = -1; ReleaseCapture(); SetCursor(LoadCursor(0, IDC_ARROW)); } break; case WM_MOUSEMOVE: if (GetCapture() == _hwnd) { int x = GET_X_LPARAM(lparam); ClientRect rt(_hwnd); if (x>=0 && x<rt.right) { _split_pos = x; resize_children(); rt.left = x-SPLIT_WIDTH/2; rt.right = x+SPLIT_WIDTH/2+1; InvalidateRect(_hwnd, &rt, FALSE); UpdateWindow(_left_hwnd); UpdateWindow(_hwnd); UpdateWindow(_right_hwnd); } } break; case PM_OPEN_WINDOW: { CONTEXT("SDIMainFrame PM_OPEN_WINDOW"); TCHAR buffer[MAX_PATH]; LPCTSTR path; ShellPath shell_path = DesktopFolderPath(); if (lparam) { if (wparam & OWM_PIDL) { // take over PIDL from lparam shell_path.assign((LPCITEMIDLIST)lparam); // create as "rooted" window FileSysShellPath fsp(shell_path); path = fsp; if (path) { LOG(FmtString(TEXT("SDIMainFrame PM_OPEN_WINDOW: path=%s"), path)); lstrcpy(buffer, path); path = buffer; } } else { // take over path from lparam path = (LPCTSTR)lparam; shell_path = path; // create as "rooted" window } } else { ///@todo read paths and window placements from registry if (!GetCurrentDirectory(MAX_PATH, buffer)) *buffer = '\0'; path = buffer; shell_path = path; } if (wparam & OWM_ROOTED) _shellpath_info._root_shell_path = shell_path; else _shellpath_info._root_shell_path = DesktopFolderPath(); //SpecialFolderPath(CSIDL_DRIVES, _hwnd); jump_to(shell_path, wparam); ///@todo content of 'path' not used any more return TRUE;} // success default: def: return super::WndProc(nmsg, wparam, lparam); } return 0; }
RECT SDIMainFrame::_clnt_rect [protected] |
Definition at line 167 of file mainframe.h.
Referenced by resize_children(), and resize_frame().
int SDIMainFrame::_last_split [protected] |
Definition at line 166 of file mainframe.h.
Referenced by SDIMainFrame(), and WndProc().
WindowHandle SDIMainFrame::_left_hwnd [protected] |
Definition at line 158 of file mainframe.h.
Referenced by entry_selected(), resize_children(), update_shell_browser(), and WndProc().
WindowHandle SDIMainFrame::_right_hwnd [protected] |
Definition at line 159 of file mainframe.h.
Referenced by resize_children(), update_shell_browser(), and WndProc().
ShellPathInfo SDIMainFrame::_shellpath_info [protected] |
Definition at line 156 of file mainframe.h.
Referenced by jump_to(), update_shell_browser(), and WndProc().
int SDIMainFrame::_split_pos [protected] |
Definition at line 165 of file mainframe.h.
Referenced by resize_children(), SDIMainFrame(), update_shell_browser(), and WndProc().
String SDIMainFrame::_url [protected] |
Definition at line 169 of file mainframe.h.
ROS Explorer Source Code Documentation
generated on 02.01.2013 by ![]() |