| OLD | NEW |
| (Empty) |
| 1 | |
| 2 /* | |
| 3 * Copyright 2006 The Android Open Source Project | |
| 4 * | |
| 5 * Use of this source code is governed by a BSD-style license that can be | |
| 6 * found in the LICENSE file. | |
| 7 */ | |
| 8 | |
| 9 | |
| 10 #ifndef SkWidgetViews_DEFINED | |
| 11 #define SkWidgetViews_DEFINED | |
| 12 | |
| 13 #include "SkView.h" | |
| 14 | |
| 15 | |
| 16 enum SkWidgetEnum { | |
| 17 kBorder_WidgetEnum, //!< <sk-border> | |
| 18 kButton_WidgetEnum, //!< <sk-button> | |
| 19 kImage_WidgetEnum, //!< <sk-image> | |
| 20 kList_WidgetEnum, //!< <sk-list> | |
| 21 kProgress_WidgetEnum, //!< <sk-progress> | |
| 22 kScroll_WidgetEnum, //!< <sk-scroll> | |
| 23 kText_WidgetEnum, //!< <sk-text> | |
| 24 | |
| 25 kWidgetEnumCount | |
| 26 }; | |
| 27 | |
| 28 //determines which skin to use | |
| 29 enum SkinEnum { | |
| 30 kBorder_SkinEnum, | |
| 31 kButton_SkinEnum, | |
| 32 kProgress_SkinEnum, | |
| 33 kScroll_SkinEnum, | |
| 34 kStaticText_SkinEnum, | |
| 35 | |
| 36 kSkinEnumCount | |
| 37 }; | |
| 38 | |
| 39 #include "SkAnimator.h" | |
| 40 //used for inflates | |
| 41 const char* get_skin_enum_path(SkinEnum se); | |
| 42 void init_skin_anim(const char path[], SkAnimator* anim); | |
| 43 void init_skin_anim(SkinEnum se, SkAnimator* anim); | |
| 44 void init_skin_paint(SkinEnum se, SkPaint* paint); | |
| 45 void inflate_paint(const SkDOM& dom, const SkDOM::Node* node, SkPaint* paint); | |
| 46 | |
| 47 /** Given an enum value, return an instance of the specified widget. | |
| 48 If the enum is out of range, returns null | |
| 49 */ | |
| 50 SkView* SkWidgetFactory(SkWidgetEnum); | |
| 51 /** Given the inflate/element name of a widget, return an instance of | |
| 52 the specified widget, or null if name does not match any known | |
| 53 widget type. | |
| 54 */ | |
| 55 SkView* SkWidgetFactory(const char name[]); | |
| 56 | |
| 57 ////////////////////////////////////////////////////////////////////////////////
//////////////// | |
| 58 | |
| 59 class SkWidgetView : public SkView { | |
| 60 public: | |
| 61 SkWidgetView(); | |
| 62 | |
| 63 const char* getLabel() const; | |
| 64 void getLabel(SkString* label) const; | |
| 65 | |
| 66 void setLabel(const char[]); | |
| 67 void setLabel(const char[], size_t len); | |
| 68 void setLabel(const SkString&); | |
| 69 | |
| 70 SkEvent& event() { return fEvent; } | |
| 71 const SkEvent& event() const { return fEvent; } | |
| 72 | |
| 73 /** Returns true if the widget can post its event to its listeners. | |
| 74 */ | |
| 75 bool postWidgetEvent(); | |
| 76 | |
| 77 /** Returns the sinkID of the widgetview that posted the event, or 0 | |
| 78 */ | |
| 79 static SkEventSinkID GetWidgetEventSinkID(const SkEvent&); | |
| 80 | |
| 81 protected: | |
| 82 /** called when the label changes. override in subclasses. default action in
vals the view's bounds. | |
| 83 called with the old and new labels, before the label has actually change
d. | |
| 84 */ | |
| 85 virtual void onLabelChange(const char oldLabel[], const char newLabel[]); | |
| 86 /** called before posting the event to our listeners. Override to add slots
to the event | |
| 87 before posting. Return true to proceed with posting, or false to not pos
t the event to any | |
| 88 listener. Note: the event passed in may not be the same as calling this-
>event(). | |
| 89 Be sure to call your INHERITED method as well, so that all classes in th
e hierarchy get a shot | |
| 90 at modifying the event (and possibly returning false to abort). | |
| 91 */ | |
| 92 virtual bool onPrepareWidgetEvent(SkEvent* evt); | |
| 93 | |
| 94 // overrides | |
| 95 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*); | |
| 96 | |
| 97 private: | |
| 98 SkString fLabel; | |
| 99 SkEvent fEvent; | |
| 100 | |
| 101 typedef SkView INHERITED; | |
| 102 }; | |
| 103 | |
| 104 ////////////////////////////////////////////////////////////////////////////////
//////////////// | |
| 105 | |
| 106 class SkButtonView : public SkWidgetView { | |
| 107 public: | |
| 108 // inflate: "sk-button" | |
| 109 | |
| 110 protected: | |
| 111 // overrides | |
| 112 virtual bool onEvent(const SkEvent&); | |
| 113 private: | |
| 114 typedef SkWidgetView INHERITED; | |
| 115 }; | |
| 116 | |
| 117 ////////////////////////////////////////////////////////////////////////////////
//////////////// | |
| 118 | |
| 119 class SkCheckButtonView : public SkWidgetView { | |
| 120 public: | |
| 121 SkCheckButtonView(); | |
| 122 | |
| 123 // inflate: "sk-checkbutton" | |
| 124 | |
| 125 enum CheckState { | |
| 126 kOff_CheckState, //!< inflate: check-state="off" | |
| 127 kOn_CheckState, //!< inflate: check-state="on" | |
| 128 kUnknown_CheckState //!< inflate: check-state="unknown" | |
| 129 }; | |
| 130 CheckState getCheckState() const { return (CheckState)fCheckState; } | |
| 131 void setCheckState(CheckState); | |
| 132 | |
| 133 /** use this to extract the CheckState from an event (i.e. one that as poste
d | |
| 134 by a SkCheckButtonView). Returns true if the proper slot was present in
the event, | |
| 135 and sets state to that value. If no proper slot is found, returns false
and does not | |
| 136 modify state. | |
| 137 */ | |
| 138 static bool GetWidgetEventCheckState(const SkEvent&, CheckState* state); | |
| 139 | |
| 140 protected: | |
| 141 // called when the check-state is about to change, but before it actually ha
s | |
| 142 virtual void onCheckStateChange(CheckState oldState, CheckState newState); | |
| 143 | |
| 144 // overrides | |
| 145 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*); | |
| 146 virtual bool onPrepareWidgetEvent(SkEvent* evt); | |
| 147 | |
| 148 private: | |
| 149 uint8_t fCheckState; | |
| 150 | |
| 151 typedef SkWidgetView INHERITED; | |
| 152 }; | |
| 153 | |
| 154 ////////////////////////////////////////////////////////////////////////////////
//////////////// | |
| 155 #include "SkTextBox.h" | |
| 156 | |
| 157 class SkStaticTextView : public SkView { | |
| 158 public: | |
| 159 SkStaticTextView(); | |
| 160 virtual ~SkStaticTextView(); | |
| 161 | |
| 162 enum Mode { | |
| 163 kFixedSize_Mode, | |
| 164 kAutoWidth_Mode, | |
| 165 kAutoHeight_Mode, | |
| 166 | |
| 167 kModeCount | |
| 168 }; | |
| 169 Mode getMode() const { return (Mode)fMode; } | |
| 170 void setMode(Mode); | |
| 171 | |
| 172 SkTextBox::SpacingAlign getSpacingAlign() const { return (SkTextBox::Spacing
Align)fSpacingAlign; } | |
| 173 void setSpacingAlign(SkTextBox::SpacingAlign); | |
| 174 | |
| 175 void getMargin(SkPoint* margin) const; | |
| 176 void setMargin(SkScalar dx, SkScalar dy); | |
| 177 | |
| 178 size_t getText(SkString* text = NULL) const; | |
| 179 size_t getText(char text[] = NULL) const; | |
| 180 void setText(const SkString&); | |
| 181 void setText(const char text[]); | |
| 182 void setText(const char text[], size_t len); | |
| 183 | |
| 184 void getPaint(SkPaint*) const; | |
| 185 void setPaint(const SkPaint&); | |
| 186 | |
| 187 protected: | |
| 188 // overrides | |
| 189 virtual void onDraw(SkCanvas*); | |
| 190 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*); | |
| 191 | |
| 192 private: | |
| 193 SkPoint fMargin; | |
| 194 SkString fText; | |
| 195 SkPaint fPaint; | |
| 196 uint8_t fMode; | |
| 197 uint8_t fSpacingAlign; | |
| 198 | |
| 199 void computeSize(); | |
| 200 | |
| 201 typedef SkView INHERITED; | |
| 202 }; | |
| 203 | |
| 204 ////////////////////////////////////////////////////////////////////////////////
//////////////// | |
| 205 | |
| 206 class SkAnimator; | |
| 207 class SkListSource; | |
| 208 class SkScrollBarView; | |
| 209 | |
| 210 class SkListView : public SkWidgetView { | |
| 211 public: | |
| 212 SkListView(); | |
| 213 virtual ~SkListView(); | |
| 214 | |
| 215 bool hasScrollBar() const { return fScrollBar != NULL; } | |
| 216 void setHasScrollBar(bool); | |
| 217 | |
| 218 /** Return the number of visible rows | |
| 219 */ | |
| 220 int getVisibleRowCount() const { return fVisibleRowCount; } | |
| 221 /** Return the index of the selected row, or -1 if none | |
| 222 */ | |
| 223 int getSelection() const { return fCurrIndex; } | |
| 224 /** Set the index of the selected row, or -1 for none | |
| 225 */ | |
| 226 void setSelection(int); | |
| 227 /** If possible, move the selection up and return true, | |
| 228 else do nothing and return false | |
| 229 If nothing is selected, select the last item (unless there are no items)
. | |
| 230 */ | |
| 231 bool moveSelectionUp(); | |
| 232 /** If possible, move the selection down and return true, | |
| 233 else do nothing and return false. | |
| 234 If nothing is selected, select the first item (unless there are no items
). | |
| 235 */ | |
| 236 bool moveSelectionDown(); | |
| 237 | |
| 238 SkListSource* getListSource() const { return fSource; } | |
| 239 SkListSource* setListSource(SkListSource*); | |
| 240 | |
| 241 /** Call this in your event handler. If the specified event is from a SkList
View, | |
| 242 then it returns the index of the selected item in this list, otherwise i
t | |
| 243 returns -1 | |
| 244 */ | |
| 245 static int GetWidgetEventListIndex(const SkEvent&); | |
| 246 | |
| 247 protected: | |
| 248 // overrides | |
| 249 virtual void onDraw(SkCanvas*); | |
| 250 virtual void onSizeChange(); | |
| 251 virtual bool onEvent(const SkEvent&); | |
| 252 virtual void onInflate(const SkDOM& dom, const SkDOM::Node* node); | |
| 253 virtual bool onPrepareWidgetEvent(SkEvent*); | |
| 254 | |
| 255 private: | |
| 256 enum DirtyFlags { | |
| 257 kAnimCount_DirtyFlag = 0x01, | |
| 258 kAnimContent_DirtyFlag = 0x02 | |
| 259 }; | |
| 260 void dirtyCache(unsigned dirtyFlags); | |
| 261 bool ensureCache(); | |
| 262 | |
| 263 int logicalToVisualIndex(int index) const { return index - fScrollIndex;
} | |
| 264 void invalSelection(); | |
| 265 SkScalar getContentWidth() const; | |
| 266 bool getRowRect(int index, SkRect*) const; | |
| 267 void ensureSelectionIsVisible(); | |
| 268 void ensureVisibleRowCount(); | |
| 269 | |
| 270 struct BindingRec; | |
| 271 | |
| 272 enum Heights { | |
| 273 kNormal_Height, | |
| 274 kSelected_Height | |
| 275 }; | |
| 276 SkListSource* fSource; | |
| 277 SkScrollBarView* fScrollBar; | |
| 278 SkAnimator* fAnims; | |
| 279 BindingRec* fBindings; | |
| 280 SkString fSkinName; | |
| 281 SkScalar fHeights[2]; | |
| 282 int16_t fScrollIndex, fCurrIndex; | |
| 283 uint16_t fVisibleRowCount, fBindingCount; | |
| 284 SkBool8 fAnimContentDirty; | |
| 285 SkBool8 fAnimFocusDirty; | |
| 286 | |
| 287 typedef SkWidgetView INHERITED; | |
| 288 }; | |
| 289 | |
| 290 class SkListSource : public SkRefCnt { | |
| 291 public: | |
| 292 | |
| 293 | |
| 294 virtual int countFields(); | |
| 295 virtual void getFieldName(int index, SkString* field); | |
| 296 /** Return the index of the named field, or -1 if not found */ | |
| 297 virtual int findFieldIndex(const char field[]); | |
| 298 | |
| 299 virtual int countRecords(); | |
| 300 virtual void getRecord(int rowIndex, int fieldIndex, SkString* data); | |
| 301 | |
| 302 virtual bool prepareWidgetEvent(SkEvent*, int rowIndex); | |
| 303 | |
| 304 static SkListSource* Factory(const char name[]); | |
| 305 private: | |
| 306 typedef SkRefCnt INHERITED; | |
| 307 }; | |
| 308 | |
| 309 #endif | |
| OLD | NEW |