00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef SkWidgetViews_DEFINED
00018 #define SkWidgetViews_DEFINED
00019
00020 #include "SkView.h"
00021
00022
00023 enum SkWidgetEnum {
00024 kBorder_WidgetEnum,
00025 kButton_WidgetEnum,
00026 kImage_WidgetEnum,
00027 kList_WidgetEnum,
00028 kProgress_WidgetEnum,
00029 kScroll_WidgetEnum,
00030 kText_WidgetEnum,
00031
00032 kWidgetEnumCount
00033 };
00034
00035
00036 enum SkinEnum {
00037 kBorder_SkinEnum,
00038 kButton_SkinEnum,
00039 kProgress_SkinEnum,
00040 kScroll_SkinEnum,
00041 kStaticText_SkinEnum,
00042
00043 kSkinEnumCount
00044 };
00045
00046 #include "SkAnimator.h"
00047
00048 const char* get_skin_enum_path(SkinEnum se);
00049 void init_skin_anim(const char path[], SkAnimator* anim);
00050 void init_skin_anim(SkinEnum se, SkAnimator* anim);
00051 void init_skin_paint(SkinEnum se, SkPaint* paint);
00052 void inflate_paint(const SkDOM& dom, const SkDOM::Node* node, SkPaint* paint);
00053
00057 SkView* SkWidgetFactory(SkWidgetEnum);
00062 SkView* SkWidgetFactory(const char name[]);
00063
00065
00066 class SkWidgetView : public SkView {
00067 public:
00068 SkWidgetView();
00069
00070 const char* getLabel() const;
00071 void getLabel(SkString* label) const;
00072
00073 void setLabel(const char[]);
00074 void setLabel(const char[], size_t len);
00075 void setLabel(const SkString&);
00076
00077 SkEvent& event() { return fEvent; }
00078 const SkEvent& event() const { return fEvent; }
00079
00082 bool postWidgetEvent();
00083
00086 static SkEventSinkID GetWidgetEventSinkID(const SkEvent&);
00087
00088 protected:
00092 virtual void onLabelChange(const char oldLabel[], const char newLabel[]);
00099 virtual bool onPrepareWidgetEvent(SkEvent* evt);
00100
00101
00102 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*);
00103
00104 private:
00105 SkString fLabel;
00106 SkEvent fEvent;
00107
00108 typedef SkView INHERITED;
00109 };
00110
00112
00113 class SkButtonView : public SkWidgetView {
00114 public:
00115
00116
00117 protected:
00118
00119 virtual bool onEvent(const SkEvent&);
00120 };
00121
00123
00124 class SkCheckButtonView : public SkWidgetView {
00125 public:
00126 SkCheckButtonView();
00127
00128
00129
00130 enum CheckState {
00131 kOff_CheckState,
00132 kOn_CheckState,
00133 kUnknown_CheckState
00134 };
00135 CheckState getCheckState() const { return (CheckState)fCheckState; }
00136 void setCheckState(CheckState);
00137
00143 static bool GetWidgetEventCheckState(const SkEvent&, CheckState* state);
00144
00145 protected:
00146
00147 virtual void onCheckStateChange(CheckState oldState, CheckState newState);
00148
00149
00150 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*);
00151 virtual bool onPrepareWidgetEvent(SkEvent* evt);
00152
00153 private:
00154 uint8_t fCheckState;
00155
00156 typedef SkWidgetView INHERITED;
00157 };
00158
00160 #include "SkTextBox.h"
00161
00162 class SkStaticTextView : public SkView {
00163 public:
00164 SkStaticTextView();
00165 virtual ~SkStaticTextView();
00166
00167 enum Mode {
00168 kFixedSize_Mode,
00169 kAutoWidth_Mode,
00170 kAutoHeight_Mode,
00171
00172 kModeCount
00173 };
00174 Mode getMode() const { return (Mode)fMode; }
00175 void setMode(Mode);
00176
00177 SkTextBox::SpacingAlign getSpacingAlign() const { return (SkTextBox::SpacingAlign)fSpacingAlign; }
00178 void setSpacingAlign(SkTextBox::SpacingAlign);
00179
00180 void getMargin(SkPoint* margin) const;
00181 void setMargin(SkScalar dx, SkScalar dy);
00182
00183 size_t getText(SkString* text = NULL) const;
00184 size_t getText(char text[] = NULL) const;
00185 void setText(const SkString&);
00186 void setText(const char text[]);
00187 void setText(const char text[], size_t len);
00188
00189 void getPaint(SkPaint*) const;
00190 void setPaint(const SkPaint&);
00191
00192 protected:
00193
00194 virtual void onDraw(SkCanvas*);
00195 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*);
00196
00197 private:
00198 SkPoint fMargin;
00199 SkString fText;
00200 SkPaint fPaint;
00201 uint8_t fMode;
00202 uint8_t fSpacingAlign;
00203
00204 void computeSize();
00205
00206 typedef SkView INHERITED;
00207 };
00208
00210
00211 class SkAnimator;
00212 class SkListSource;
00213 class SkScrollBarView;
00214
00215 class SkListView : public SkWidgetView {
00216 public:
00217 SkListView();
00218 virtual ~SkListView();
00219
00220 bool hasScrollBar() const { return fScrollBar != NULL; }
00221 void setHasScrollBar(bool);
00222
00225 int getVisibleRowCount() const { return fVisibleRowCount; }
00228 int getSelection() const { return fCurrIndex; }
00231 void setSelection(int);
00236 bool moveSelectionUp();
00241 bool moveSelectionDown();
00242
00243 SkListSource* getListSource() const { return fSource; }
00244 SkListSource* setListSource(SkListSource*);
00245
00250 static int GetWidgetEventListIndex(const SkEvent&);
00251
00252 protected:
00253
00254 virtual void onDraw(SkCanvas*);
00255 virtual void onSizeChange();
00256 virtual bool onEvent(const SkEvent&);
00257 virtual void onInflate(const SkDOM& dom, const SkDOM::Node* node);
00258 virtual bool onPrepareWidgetEvent(SkEvent*);
00259
00260 private:
00261 enum DirtyFlags {
00262 kAnimCount_DirtyFlag = 0x01,
00263 kAnimContent_DirtyFlag = 0x02
00264 };
00265 void dirtyCache(unsigned dirtyFlags);
00266 bool ensureCache();
00267
00268 int logicalToVisualIndex(int index) const { return index - fScrollIndex; }
00269 void invalSelection();
00270 SkScalar getContentWidth() const;
00271 bool getRowRect(int index, SkRect*) const;
00272 void ensureSelectionIsVisible();
00273 void ensureVisibleRowCount();
00274
00275 struct BindingRec;
00276
00277 enum Heights {
00278 kNormal_Height,
00279 kSelected_Height
00280 };
00281 SkListSource* fSource;
00282 SkScrollBarView* fScrollBar;
00283 SkAnimator* fAnims;
00284 BindingRec* fBindings;
00285 SkString fSkinName;
00286 SkScalar fHeights[2];
00287 int16_t fScrollIndex, fCurrIndex;
00288 uint16_t fVisibleRowCount, fBindingCount;
00289 SkBool8 fAnimContentDirty;
00290 SkBool8 fAnimFocusDirty;
00291
00292 typedef SkWidgetView INHERITED;
00293 };
00294
00295 class SkListSource : public SkRefCnt {
00296 public:
00297 virtual int countFields();
00298 virtual void getFieldName(int index, SkString* field);
00300 virtual int findFieldIndex(const char field[]);
00301
00302 virtual int countRecords();
00303 virtual void getRecord(int rowIndex, int fieldIndex, SkString* data);
00304
00305 virtual bool prepareWidgetEvent(SkEvent*, int rowIndex);
00306
00307 static SkListSource* Factory(const char name[]);
00308 };
00309
00310 #endif