Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

CascadeVesselPanel.h

Go to the documentation of this file.
00001 //
00002 // CascadeVesselPanel.h - interface of class CascadeVesselPanel
00003 // This class allows client apps to create a panel on the screen that
00004 // contains vessels.  For the time being, it will only allow vessels in a
00005 // vertical configuration.
00006 // Copyright (c) 2003, Roku, LLC.  All rights reserved.
00007 //
00009 
00010 #ifndef _ROKU_INCLUDE_CASCADE_WIDGETS_CASCADEVESSELPANEL_H
00011 #define _ROKU_INCLUDE_CASCADE_WIDGETS_CASCADEVESSELPANEL_H
00012 
00013 #include <cascade/widgets/CascadeWidget.h>
00014 #include <cascade/util/CascadeString.h>
00015 #include <cascade/util/CascadeArray.h>
00016 #include <cascade/app/CascadeMountMessage.h>
00017 #include <cascade/util/CascadeDirBrowser.h>
00018 #include <cascade/util/CascadeSettings.h>
00019 #include <cascade/util/CascadeVessel.h>
00020 #include <cascade/interprocess/CascadeWormhole.h>
00021 #include <cascade/app/CascadeApp.h>
00022 
00023 #define _CASCADE_VESSEL_SETTINGS_SECTION      "cascade-widgets-vessel"
00024 #define _CASCADE_VESSEL_VARNAME_DIR_CHOOSE    "dirchoose"
00025 #define _CASCADE_VESSEL_DEFAULT_DIR_CHOOSE    0
00026 
00027 #define MAX_VISIBLE_VESSELS 4
00028 #define MAX_VESSELS 16
00029 
00030 #define _VESSEL_PANEL_VESSELCHANGE_MESSAGE "com.roku.cascade.vesselpanel.activevesselchange"
00031 
00032 class CascadeVesselPanel: public CascadeWidget
00033 {
00034     public:
00035     CascadeVesselPanel();
00036     virtual ~CascadeVesselPanel();
00037 
00038 
00039 
00040     void SetAcquireGraphicsOnPaint(bool bAcquireOnPaint){m_bAcquireOnPaint = bAcquireOnPaint;}
00041 
00042     typedef void (ActiveVesselChangeCallback)(const Vessel * newActiveVessel, void * pClientData);
00043         typedef void (VesselInsertedCallback)(const Vessel * newActiveVessel, void * pClientData);
00044         typedef void (VesselRemovedCallback)(const CascadeString & vesselMountPath, void * pClientData);
00045     void RegisterActiveVesselChangeCallback(ActiveVesselChangeCallback * pCallback, void * pClientData);
00046         void RegisterVesselWorkingPathChangeCallback(ActiveVesselChangeCallback * pCallback, void * pClientData);
00047     void RegisterVesselInsertedCallback(VesselInsertedCallback * pCallback, void * pClientData);
00048         void RegisterVesselRemovedCallback(VesselRemovedCallback * pCallback, void * pClientData);
00049         
00050         void OnMountMessage(const CascadeMountMessage & mountMessage);
00051  
00052     Vessel* GetActiveVessel();
00053     u8  GetActiveVesselIndex(){return m_nActiveVessel;}
00054     Vessel* GetVesselAt(u8 index);
00055     bool SetActiveVessel(Vessel* pVessel, bool bNotify = true);
00056         bool SetActiveVessel(CascadeString path, bool bNotify = true);
00057         bool SetActiveVessel(u32 idx, bool bFullRepaint, bool bNotify = true);
00058     u8      GetNumVessels(){return m_Vessels.Count();}
00059     
00060         
00061         void LookForMountedVessels(bool bScanVessels = false);
00062         void RemoveAllVessels();
00063         
00064         
00065     Vessel* AddVessel(CascadeMountMessage::MediaType type, CascadeString name, CascadeString path);
00066     Vessel* AddVessel(Vessel* pVessel);
00067         // NOTE NOTE NOTE: AddVessel consumes the vessel passed into it --
00068         // it either adds it to the internal array, or if the vessel is
00069         // a duplicate (same mount point) as an existing vessel, the object
00070         // passed in is deleted.  DO NOT DELETE this vessel after adding it,
00071         // and be sure to check equivalency of the returned pointer with
00072         // the submitted pointer before using the submitted pointer (or just
00073         // reassign the pointer: myVessel = AddVessel( myVessel ); )
00074     bool RemoveVessel(CascadeString path);
00075     void ScanVessel(Vessel* pV);
00076 
00077     
00078     public: // virtual functions overridden from base classes
00079     virtual bool OnKeyDown(u32 nKey);
00080         // The Default OnKeyDown switches to the next item in the list.
00081 
00082     virtual void OnPaint(CascadeBitmap & bitmap);
00083         // If no bitmaps are set, the default implemetation will render the text alone.
00084                 
00085 
00086     virtual bool OnNavKey(u32 nKey, CascadeWindow * & pProposedNewFocusWnd);
00087         // left and right switch through the choices, up and down leave the widget.
00088 
00089     virtual bool WillAcceptFocus(){return m_Vessels.Count() > 0;}
00090 
00091     private:
00092     enum {kVesselButtonYSpacing = 8, kVesselButtonTextSpacing = 8};
00093 
00094         CascadeString m_graphics_oem_selector;
00095 
00096     void AcquireGraphics();
00097     void ReleaseGraphics();
00098         
00099     
00100     bool    Scroll(); // Scrolls to make sure that the active vessel is on screen
00101     
00102     void    NotifyActiveVesselChanged();
00103 
00104     void    NotifyVesselWorkingDirChanged();
00105     
00106     static void BrowseDirectoryCallback( const CascadeString & inPath,
00107                                          CascadeDirBrowser::CallbackReason inReason,
00108                                          void * pClientData );
00109     CascadeTemplateArray<Vessel*> m_Vessels;
00110         CascadeSettings m_settings;
00111         
00112         bool m_bFullRepaint; // if this is true, repaint everything, otherwise just repaint
00113                                                 // the ones that changed.
00114     //Vessel*                 m_vessels[MAX_VESSELS];
00115 
00116     u8                      m_nFirstVisibleVessel;  // Visible vessels are
00117                                                     // [m_vessels[m_nFirstVisibleVessel],  m_vessels[m_nFirstVisibleVessel + MAX_VISIBLE_VESSELS - 1]]
00118     u8                      m_nActiveVessel;         // the vessel that we are currently looking at
00119         u8                                              m_nPrevActive;                  // the vessel that was active before the current active vessel.
00120         
00121         CascadeWormhole m_vesselchangeWormhole;
00122         u32                             m_nVesselChangeMessageID;
00123         
00124         #define NUM_MEDIA_TYPES CascadeMountMessage::kNumMediaTypes
00125     CascadeBitmap* m_NormalBitmaps[CascadeMountMessage::kNumMediaTypes ];
00126     CascadeBitmap* m_HighlightBitmaps[CascadeMountMessage::kNumMediaTypes];
00127         CascadeBitmap* m_innerMoat;
00128         CascadeBitmap* m_outerMoat;
00129     CascadeBitmap* m_upArrow;
00130     CascadeBitmap* m_downArrow;
00131 
00132     CascadeFont m_font;
00133 
00134     bool m_bAcquireOnPaint;
00135 
00136     ActiveVesselChangeCallback * m_pVesselChangedCallback;
00137     ActiveVesselChangeCallback * m_pWorkingDirCallback;
00138     void * m_pVesselChangedClientData;
00139     void * m_pWorkingDirClientData;
00140         VesselInsertedCallback * m_pMountCallback;
00141         VesselRemovedCallback * m_pRemoveCallback;
00142     void * m_pMountClientData;
00143         void * m_pRemoveClientData;
00144 
00145     private:
00146     
00147         bool m_bRemoving;
00148 
00149 private:
00150     class Slot
00151     {
00152     public:
00153         CascadePoint m_renderPoint;
00154         CascadePoint m_moatPoint;
00155         CascadeBitmap * m_pMoat;
00156     };
00157     Slot m_slots[MAX_VISIBLE_VESSELS];
00158 };
00159 
00160 #endif // #ifndef _ROKU_INCLUDE_CASCADE_WIDGETS_CASCADEVESSELPANEL_H
00161 
00163 //  LOG
00165 //  26-Aug-03   dwoodward   added ConvertEscapedOctalCharacters()
00166 //  19-Sep-03   dsletten    added #defines for dir choose settings, m_settings
00167 //  05-Nov-03   mjkobb      Moved Vessel class into its own file.
00168 //  20-Oct-04   dwoodward   moved _VESSEL_PANEL_VESSELCHANGE_WORMHOLE_URL into CascadeVesselPanel.cpp
00169 //  12-Nov-04   dwoodward   added m_slots for faster painting
00170 //  08-Apr-05   dwoodward   made the vessel removed callback take a CascadeString &, not a string

Generated on Sun Jul 24 14:27:17 2005 for Cascade Library by  doxygen 1.4.1