00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef SkViewInflate_DEFINED
00018 #define SkViewInflate_DEFINED
00019
00020 #include "SkDOM.h"
00021 #include "SkTDict.h"
00022 #include "SkEvent.h"
00023
00024 class SkView;
00025
00026 class SkViewInflate {
00027 public:
00028 SkViewInflate();
00029 virtual ~SkViewInflate();
00030
00036 SkView* inflate(const SkDOM& dom, const SkDOM::Node* node, SkView* root = NULL);
00037 SkView* inflate(const char xml[], size_t len, SkView* root = NULL);
00038
00042 SkView* findViewByID(const char id[]) const;
00043
00044 SkDEBUGCODE(void dump() const;)
00045
00046 protected:
00047
00048
00049
00050
00051
00052
00053 virtual SkView* createView(const SkDOM& dom, const SkDOM::Node* node);
00058 virtual void inflateView(SkView* view, const SkDOM& dom, const SkDOM::Node* node);
00059
00060 private:
00061 enum {
00062 kMinIDStrAlloc = 64
00063 };
00064 SkTDict<SkView*> fIDs;
00065
00066 struct IDStr {
00067 SkView* fView;
00068 char* fStr;
00069 };
00070 SkTDArray<IDStr> fListenTo, fBroadcastTo;
00071 SkChunkAlloc fStrings;
00072
00073 void addIDStr(SkTDArray<IDStr>* list, SkView*, const char* str);
00074
00075 void rInflate(const SkDOM& dom, const SkDOM::Node* node, SkView* parent);
00076 };
00077
00078 #endif
00079