// Copyright (c) Sean Walton 1999-2006 All rights reserved // // Standard disclaimer: you use it --> you're responsible // Standard license: you can use it in any way, but keep // my copyright attached. #ifndef BBOUTLINE_H #define BBOUTLINE_H #include #include "StringSet.h" #include "BBShared.h" #define MAXITEMS 100 class BBOutline: public Field { public: typedef enum { eLeaf, eCollapsed, eExpanded, MAXBULLETS } EBullet; public: BBOutline(void); virtual ~BBOutline(void) {} public: //---Forced overrides virtual FIELDTYPE GetFieldType(FIELDTYPE * pDerived=NULL) { return (FIELDTYPE)105; } virtual void ResetDimensionDependentData() { RowHeight = LcdGetFontHeight(0); } virtual int QueryLineHeight(int const MaximumRelevant) { return RowHeight; } public: virtual int GetHeight() const { return NumRows*RowHeight; } virtual int GetHeight(int width) const { return NumRows*RowHeight; } virtual int GetHeightMax() const { return NumRows*RowHeight; } virtual int GetHeightMin() const { return NumRows*RowHeight; } virtual int GetWidth() const { return DISPLAYWIDTH; } virtual int GetWidth(int height) const { return DISPLAYWIDTH; } virtual int GetWidthMax() const { return DISPLAYWIDTH; } virtual int GetWidthMin() const { return DISPLAYWIDTH; } virtual void Paint(Graphics& g); virtual int OnScroll(int axis, int directionMagnitude); virtual bool OnKey(int event, char character, int flags); virtual XYRect GetFocusRect(void) const; public: u16 Add(const char* Item, u16 Parent=0); u16 GetRow(int Row, bool CheckVisible=false); int GetNumRows(bool CheckVisible=false); const char* GetString(u16 Index) { return Strings.GetString(Items[Index].StrIndex); } int GetCursor(void) { return Cursor; } void SetBullets(const unsigned char *Bullets); private: typedef struct { u16 Visible:1; u16 Peer:15; u16 Child; u16 StrIndex; } TItem; TItem Items[MAXITEMS]; char Bullets[MAXBULLETS]; int Cursor, RowHeight; int NumRows; StringSet Strings; }; #endif