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

CascadeDirBrowser.h

Go to the documentation of this file.
00001 //
00002 // CascadeDirBrowser.h - interface of class CascadeDirBrowser
00003 //
00004 // Copyright (c) 2003, Roku, LLC.  All rights reserved.
00005 //
00008 
00009 #ifndef _ROKU_INCLUDE_CASCADE_UTIL_CASCADEDIRBROWSER_H
00010 #define _ROKU_INCLUDE_CASCADE_UTIL_CASCADEDIRBROWSER_H
00011 
00012 #include <cascade/app/CascadeWindow.h>
00013 #include <cascade/widgets/CascadeButtonWidget.h>
00014 #include <cascade/util/CascadeFSObject.h>
00015 #include <cascade/util/CascadeDirectory.h>
00016 
00055 class CascadeDirBrowser : public CascadeWindow
00056 {
00057 public:
00058     typedef enum CallbackReason
00059     {
00060         eOK,
00061         eCancel
00062     };
00063 
00064     typedef enum SelectableObjectType
00065     {
00066         eFiles,
00067         eDirectories,
00068         eBoth
00069     };
00070 
00071 public:
00072     CascadeDirBrowser();
00078     
00079     virtual ~CascadeDirBrowser();
00083 
00084     typedef void (BrowseDirectoryCallback)( const CascadeString & inPath,
00085                                             CallbackReason inReason,
00086                                             void * pClientData );
00099 
00100     virtual bool BrowseDirectory( const CascadeString & inTitle,
00101                                   const CascadeString & inPath,
00102                                   const CascadeString & inRoot,
00103                                   const CascadeString & inName,
00104                                   CascadeFSObject::Selector *inDirSelector,
00105                                   CascadeFSObject::Selector *inFileSelector,
00106                                   SelectableObjectType inType,
00107                                   BrowseDirectoryCallback *inCallback,
00108                                   void *inClientData );
00157 
00158     // Overrides of CascadeWindow functions
00159     virtual void OnPaint(CascadeBitmap &bitmap);
00160     virtual void OnMaterialize();
00161     virtual void OnVanish();
00162     virtual bool OnKeyDown(u32 nKey);
00163     virtual void OnSetFocus();
00164     virtual bool OnNavKey(u32 nKey, CascadeWindow *&pProposedNewFocusWnd);
00165     virtual bool WillAcceptFocus() { return true; }
00166 
00167 protected:
00168     void    Back();
00169     void    Top();
00170     
00171     
00172     // Special button class to allow navigation through list of
00173     // un-selectable items.
00174     class BrowserButton : public CascadeButtonWidget
00175     {
00176     public:
00177         BrowserButton() 
00178         { 
00179             mUnselectableFocusBitmap = NULL; 
00180             mUnselectableUnfocusedBitmap = NULL;
00181             mbSelectable = true;
00182         }
00183         void SetUnselectableFocusBitmap( CascadeBitmap *inBitmap )
00184             { mUnselectableFocusBitmap = inBitmap; }
00185         void SetUnselectableUnfocusedBitmap( CascadeBitmap *inBitmap )
00186             { mUnselectableUnfocusedBitmap = inBitmap; }
00187         void SetSelectable( bool inSelectable )
00188             { mbSelectable = inSelectable; }
00189         bool IsSelectable( void ) { return mbSelectable; }
00190     protected:
00191         virtual void OnPaint(CascadeBitmap &bitmap);
00192         virtual bool OnKeyDown( u32 nKey );
00193         CascadeBitmap *mUnselectableFocusBitmap;
00194         CascadeBitmap *mUnselectableUnfocusedBitmap;
00195         bool mbSelectable;
00196     };
00197 
00198     // Setup & utility
00199     bool    Setup( void );
00200     void    SetupButton( CascadeButtonWidget &button,
00201                          CascadeBitmap &normalBitmap,
00202                          CascadeBitmap &highlightBitmap,
00203                          CascadeBitmap &disabledBitmap,
00204                          CascadeRect &rect,
00205                          const char *text );
00206     void    SetupDirButton( BrowserButton & button,
00207                             CascadeBitmap &normalBitmap,
00208                             CascadeBitmap &highlightBitmap );
00209     void    SetupContents( void );
00210     void    ScrollUp();
00211     void    ScrollDown();
00212     void    PaintContents( CascadeBitmap &inBitmap, CascadeRect &inRect );
00213     bool    SetDirectory( const CascadeString & inPath );
00214     static void    ButtonCallback( const CascadeButtonWidget * pButton, 
00215                                    const CascadeButtonWidget::State & newState, 
00216                                    void * pClientData );
00217     static void    DirButtonCallback(
00218         const CascadeButtonWidget * pButton, 
00219         const CascadeButtonWidget::State & newState, 
00220         void * pClientData );
00221     void    ClearContents();
00222 
00223     // Notification
00224     BrowseDirectoryCallback *mCallbackFunction;
00225     void *mCallbackClientData;
00226     CallbackReason mReason;
00227 
00228     // Dialog title
00229     CascadeString   mTitle;
00230 
00231     // File scanning
00232     CascadeFSObject::Selector *mFileSelector;
00233     CascadeFSObject::Selector *mDirSelector;
00234     SelectableObjectType mType;
00235 
00236     // Directory and its contents
00237     CascadeDirectory mRootDirectory;
00238     CascadeDirectory mCurDirectory;
00239     CascadeString mCurSelection;
00240     CascadeString mName;
00241     CascadeTemplateArray<CascadeFSObject *> *mContents;
00242     u32 mFileCount;
00243     u32 mDirCount;
00244     bool mFileSelected;
00245 
00246     // List management
00247     u32 mFirstVisibleIdx;
00248     u32 mVisibleButtonCount;
00249 
00250     // Graphics
00251     CascadeFont mPathFont;
00252     CascadeFont mContentsHeadingFont;
00253     CascadeFont mContentsFont;
00254     CascadeFont mListFont;
00255     CascadeBitmap mBackground;
00256     CascadeBitmap mButtonNormal;
00257     CascadeBitmap mButtonHighlight;
00258     CascadeBitmap mButtonDisabled;
00259     CascadeBitmap mTopButtonNormal;
00260     CascadeBitmap mTopButtonHighlight;
00261     CascadeBitmap mBackButtonNormal;
00262     CascadeBitmap mBackButtonHighlight;
00263     CascadeBitmap mDirectoryButtonNorm;
00264     CascadeBitmap mDirectoryButtonHi;
00265     CascadeBitmap mFileButtonUnselectNorm;
00266     CascadeBitmap mFileButtonUnselectHi;
00267     CascadeBitmap mScrollUpArrow;
00268     CascadeBitmap mScrollDownArrow;
00269     CascadeButtonWidget mTopButton;
00270     CascadeButtonWidget mBackButton;
00271     CascadeButtonWidget mSelectButton;
00272     CascadeButtonWidget mCancelButton;
00273     BrowserButton **mDirButtons;
00274     bool mbSetup;
00275 
00276     // Focus tracking
00277     CascadeButtonWidget *mFocusLeftButton;
00278     CascadeButtonWidget *mFocusRightButton;
00279     CascadeButtonWidget *mFocusButton;
00280 
00281 private:
00282     // HACK HACK HACK
00283     void PWContents( void );
00284     CascadeBitmap mPWBitmap;
00285 };
00286 
00287 #endif //_ROKU_INCLUDE_CASCADE_UTIL_CASCADEDIRBROWSER_H
00288 
00289 // CHANGE HISTORY
00290 // ==============
00291 // 07/29/2003   mjkobb  Created CascadeDirBrowser
00292 // 08/11/2003   mjkobb  Updated functionality to allow file selection
00293 // 09/12/2003   mjkobb  Add disabled button bitmap & OnKeyDown override
00294 // 10/09/2003   mjkobb  Added mbSetup bool so we can re-use a browser
00295 

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