00001
00002
00003
00004
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
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
00173
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
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
00224 BrowseDirectoryCallback *mCallbackFunction;
00225 void *mCallbackClientData;
00226 CallbackReason mReason;
00227
00228
00229 CascadeString mTitle;
00230
00231
00232 CascadeFSObject::Selector *mFileSelector;
00233 CascadeFSObject::Selector *mDirSelector;
00234 SelectableObjectType mType;
00235
00236
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
00247 u32 mFirstVisibleIdx;
00248 u32 mVisibleButtonCount;
00249
00250
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
00277 CascadeButtonWidget *mFocusLeftButton;
00278 CascadeButtonWidget *mFocusRightButton;
00279 CascadeButtonWidget *mFocusButton;
00280
00281 private:
00282
00283 void PWContents( void );
00284 CascadeBitmap mPWBitmap;
00285 };
00286
00287 #endif //_ROKU_INCLUDE_CASCADE_UTIL_CASCADEDIRBROWSER_H
00288
00289
00290
00291
00292
00293
00294
00295