Index: media/player/list.h |
=================================================================== |
--- media/player/list.h (revision 0) |
+++ media/player/list.h (revision 0) |
@@ -0,0 +1,127 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this |
+// source code is governed by a BSD-style license that can be found in the |
+// LICENSE file. |
+ |
+// list.h : class for Recent Files list |
+ |
+#ifndef MEDIA_PLAYER_LIST_H_ |
+#define MEDIA_PLAYER_LIST_H_ |
+ |
+class CMruList : public CWindowImpl<CMruList, CListBox> { |
+ public: |
+ |
+ CMruList() { |
+ m_size.cx = 400; |
+ m_size.cy = 150; |
+ } |
+ |
+ HWND Create(HWND hWndParent) { |
+ CWindowImpl<CMruList, CListBox>::Create(hWndParent, rcDefault, NULL, |
+ WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | |
+ WS_VSCROLL | LBS_NOINTEGRALHEIGHT, |
+ WS_EX_CLIENTEDGE); |
+ if (IsWindow()) |
+ SetFont(AtlGetStockFont(DEFAULT_GUI_FONT)); |
+ return m_hWnd; |
+ } |
+ |
+ BOOL BuildList(CRecentDocumentList& mru) { |
+ ATLASSERT(IsWindow()); |
+ |
+ ResetContent(); |
+ |
+ int nSize = mru.m_arrDocs.GetSize(); |
+ for (int i = 0; i < nSize; i++) |
+ InsertString(0, mru.m_arrDocs[i].szDocName); // Reverse order in array. |
+ |
+ if (nSize > 0) { |
+ SetCurSel(0); |
+ SetTopIndex(0); |
+ } |
+ |
+ return TRUE; |
+ } |
+ |
+ BOOL ShowList(int x, int y) { |
+ return SetWindowPos(NULL, x, y, m_size.cx, m_size.cy, |
+ SWP_NOZORDER | SWP_SHOWWINDOW); |
+ } |
+ |
+ void HideList() { |
+ RECT rect; |
+ GetWindowRect(&rect); |
+ m_size.cx = rect.right - rect.left; |
+ m_size.cy = rect.bottom - rect.top; |
+ ShowWindow(SW_HIDE); |
+ } |
+ |
+ void FireCommand() { |
+ int nSel = GetCurSel(); |
+ if (nSel != LB_ERR) { |
+ ::SetFocus(GetParent()); // Will hide this window. |
+ ::SendMessage(GetParent(), WM_COMMAND, |
+ MAKEWPARAM((WORD)(ID_FILE_MRU_FIRST + nSel), |
+ LBN_DBLCLK), (LPARAM)m_hWnd); |
+ } |
+ } |
+ |
+ BEGIN_MSG_MAP(CMruList) |
+ MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown) |
+ MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnLButtonDblClk) |
+ MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus) |
+ MESSAGE_HANDLER(WM_NCHITTEST, OnNcHitTest) |
+ END_MSG_MAP() |
+ |
+ LRESULT OnKeyDown(UINT /*uMsg*/, |
+ WPARAM wParam, |
+ LPARAM /*lParam*/, |
+ BOOL& bHandled) { |
+ if (wParam == VK_RETURN) |
+ FireCommand(); |
+ else |
+ bHandled = FALSE; |
+ return 0; |
+ } |
+ |
+ LRESULT OnLButtonDblClk(UINT /*uMsg*/, |
+ WPARAM /*wParam*/, |
+ LPARAM /*lParam*/, |
+ BOOL& /*bHandled*/) { |
+ FireCommand(); |
+ return 0; |
+ } |
+ |
+ LRESULT OnKillFocus(UINT /*uMsg*/, |
+ WPARAM /*wParam*/, |
+ LPARAM /*lParam*/, |
+ BOOL& /*bHandled*/) { |
+ HideList(); |
+ return 0; |
+ } |
+ |
+ LRESULT OnNcHitTest(UINT uMsg, |
+ WPARAM wParam, |
+ LPARAM lParam, |
+ BOOL& /*bHandled*/) { |
+ LRESULT lRet = DefWindowProc(uMsg, wParam, lParam); |
+ switch (lRet) { |
+ case HTLEFT: |
+ case HTTOP: |
+ case HTTOPLEFT: |
+ case HTTOPRIGHT: |
+ case HTBOTTOMLEFT: |
+ lRet = HTCLIENT; // Don't allow resizing here. |
+ break; |
+ default: |
+ break; |
+ } |
+ return lRet; |
+ } |
+ |
+ private: |
+ |
+ SIZE m_size; |
+}; |
+ |
+#endif // MEDIA_PLAYER_LIST_H_ |
+ |