00001 // 00002 // CascadeWindow.h - header file for class CascadeWindow 00003 // 00004 // Copyright (c) 2003, Roku, LLC. All rights reserved. 00005 // 00008 00009 #ifndef _ROKU_INCLUDE_CASCADE_APP_CASCADEWINDOW_H 00010 #define _ROKU_INCLUDE_CASCADE_APP_CASCADEWINDOW_H 00011 00012 #include <cascade/CascadeObject.h> 00013 #include <cascade/graphics/CascadeRect.h> 00014 #include <cascade/graphics/CascadeBitmap.h> 00015 00036 class CascadeWindow : public CascadeObject 00037 { 00038 public: 00039 CascadeWindow(); 00044 virtual ~CascadeWindow(); 00055 00056 public: // dealing with top-level window visibility and z-order 00057 enum Plane { 00058 kBottomMost = 0, 00059 kTopMost = 2, 00060 kAppNormal = 1 00061 }; 00081 void Materialize(Plane plane = kAppNormal); 00093 void Vanish(); 00102 void Redraw(); 00111 void Redraw(const CascadeRect & rect); 00117 static void RedrawScreen(); 00121 public: // dealing with my geometry 00122 CascadeRect GetRectRelative() const; 00129 CascadeRect GetRectAbsolute() const; 00139 void SetRectRelative(const CascadeRect & rect); 00146 void SetRectAbsolute(const CascadeRect & rect); 00156 00157 public: // dealing with my relationship to other windows 00158 inline CascadeWindow * GetParent(); 00164 inline CascadeWindow * GetFirstChild(); 00170 inline CascadeWindow * GetFirstSibling(); 00176 void AddChild(CascadeWindow * pWndChild); 00184 void RemoveChild(CascadeWindow * pWndChild); 00192 bool IsParentOf(CascadeWindow * pWindow); 00200 bool IsChildOf(CascadeWindow * pWindow); 00208 bool IsSiblingOf(CascadeWindow * pWindow); 00216 CascadeWindow * GetTopLevelWindow(); 00221 00222 public: // enumerating my child window tree 00223 typedef bool (EnumProc)(CascadeWindow * pWindow, void * pClientData); 00233 bool EnumerateTree(EnumProc * pEnumProc, void * pClientData); 00241 00242 public: // dealing with painting 00243 virtual void OnPaint(CascadeBitmap & bitmap); 00263 void PaintTree(CascadeBitmap & bitmap); 00272 00273 public: // visibility 00274 bool IsVisible(); 00280 00281 public: // dealing with materialization 00282 virtual void OnMaterialize(); 00288 virtual void OnMaterialized(); 00294 virtual void OnVanish(); 00300 00301 public: // dealing with focus 00302 virtual void OnClearFocus(); 00311 virtual void OnSetFocus(); 00320 00321 public: // dealing with notification 00322 00323 virtual bool OnKeyDown(u32 nKey); 00334 virtual bool OnKeyUp(u32 nKey); 00345 virtual bool OnNavKey(u32 nKey, CascadeWindow * & pProposedNewFocusWnd); 00364 00365 public: // functions dealing with focus 00366 virtual bool WillAcceptFocus(); 00372 bool IsActiveFocus(); 00380 bool IsInactiveFocus(); 00387 bool IsFocus(); 00394 void SetFocus(bool bRedraw = true); 00400 void ClearFocus(bool bRedraw = true); 00405 static CascadeWindow * GetFocus(); 00412 00413 private: 00414 bool EnumerateRecursively(CascadeWindow * pWindow, CascadeWindow::EnumProc * pEnumProc, void * pClientData); 00415 static bool StaticPaintTreeEnumProc(CascadeWindow * pWindow, void * pClientData); 00416 00417 #ifndef DOXY_SKIP 00418 friend class CascadeApp; 00419 #endif 00420 00421 bool ProcessNavKey(u32 nKey); 00422 00423 private: 00424 CascadeRect m_rect; 00425 CascadeWindow * m_pWndParent; 00426 CascadeWindow * m_pWndChild; 00427 CascadeWindow * m_pWndSibling; 00428 }; 00429 00431 // class CascadeWindow inline functions 00432 inline CascadeWindow * 00433 CascadeWindow::GetParent() 00434 { 00435 return m_pWndParent; 00436 } 00437 00438 inline CascadeWindow * 00439 CascadeWindow::GetFirstChild() 00440 { 00441 return m_pWndChild; 00442 } 00443 00444 inline CascadeWindow * 00445 CascadeWindow::GetFirstSibling() 00446 { 00447 return m_pWndSibling; 00448 00449 } 00450 00451 #endif // #ifndef _ROKU_INCLUDE_CASCADE_APP_CASCADEWINDOW_H 00452 00454 // LOG 00456 // 10-Feb-03 dwoodward created 00457 // 19-Feb-03 dwoodward got rid of nRepeatCount parm to OnKeyDown 00458 // 20-Feb-03 dwoodward added WillAcceptFocus() 00459 // 25-Feb-03 dwoodward added Redraw() 00460 // 25-Feb-03 dwoodward added OnSetFocus() and OnClearFocus() 00461 // 12-Mar-03 dwoodward added IsVisible() 00462 // 14-Apr-03 dwoodward changed OnNavKey() behavior 00463 // 14-Apr-03 dwoodward added ProcessNavKey 00464 // 01-May-03 dwoodward added a version of Redraw() that takes a rect 00465 // 05-May-03 dwoodward doxygenated 00466 // 04-Jun-03 dwoodward added RedrawScreen 00467 // 28-Jul-03 dwoodward added bRedraw parameter to SetFocus and ClearFocus 00468 // 07-Jul-03 mjkobb Updated GetRectAbsolute, GetRectRelative to be 00469 // const. 00470 // 09-Sep-04 dwoodward added OnMaterialized() 00471