| Revision 1 (by moose, 2006/03/06 10:00:33) |
Initial Import
|
#ifndef __MADMEDIALIBRARY_H__
#define __MADMEDIALIBRARY_H__
#include <sstream>
#include <string>
#define UNIMPL { \
strstream str; \
str << "Unimplemented method called: '"; \
str << __PRETTY_FUNCTION__ << "'" << endl; \
throw str.str().c_str(); \
} (void)0
class MadMediaLibraryCategory;
class MadMediaLibraryTag;
class MadMediaLibraryItem;
class MadApp;
class MadMediaLibrary {
public:
MadMediaLibrary(MadApp *_app) : app(_app) { };
virtual ~MadMediaLibrary() { };
// Categories
virtual bool beginCategory() = 0;
virtual bool step(MadMediaLibraryCategory &) = 0;
virtual bool category(MadMediaLibraryCategory &, const char *name) = 0;
virtual bool category(MadMediaLibraryCategory &, int i) = 0;
virtual bool newCategory(MadMediaLibraryCategory &, const char *name, const char *d = 0) = 0;
virtual void endCategory() = 0;
// Tags
virtual bool beginTag() = 0;
virtual bool step(MadMediaLibraryTag &) = 0;
virtual bool tag(MadMediaLibraryTag &, const char *name) = 0;
virtual bool tag(MadMediaLibraryTag &, int i) = 0;
virtual bool newTag(MadMediaLibraryTag &t, const char *name, const char *data = 0) = 0;
virtual void endTag() = 0;
// Items
virtual bool beginItem() = 0;
virtual bool step(MadMediaLibraryItem &) = 0;
virtual bool item(MadMediaLibraryItem &, int i) = 0;
virtual bool item(MadMediaLibraryItem &, const char *f) = 0;
virtual bool newItem(MadMediaLibraryItem &, const char *f) = 0;
virtual void endItem() = 0;
private:
protected:
MadApp *app;
};
/* add endFile/endCategory, etc methods...
MadMediaLibraryItem
+ categorys
+ tags
+ sub items (for grouping)
*/
// FIXME
class MadMediaLibraryItem {
friend class MadMediaLibrary;
public:
MadMediaLibraryItem(MadMediaLibrary *library, int i) : lib(library), id(i) { };
virtual ~MadMediaLibraryItem() { };
// Sub Items
virtual bool beginChild() = 0;
virtual bool step(MadMediaLibraryItem &c) = 0;
virtual void endChild() = 0;
virtual bool newChild(MadMediaLibraryItem &c) = 0;
virtual bool addChild(MadMediaLibraryItem &c) = 0;
// Tags
virtual bool beginTag() = 0;
virtual bool step(MadMediaLibraryTag &) = 0;
virtual void endTag() = 0;
virtual bool tag(MadMediaLibraryTag &, const char *name) = 0;
virtual bool tag(MadMediaLibraryTag &, int i) = 0;
virtual bool addTag(MadMediaLibraryTag &t, const char *data) = 0;
// Categories
virtual bool beginCategory() = 0;
virtual bool step(MadMediaLibraryCategory &) = 0;
virtual void endCategory() = 0;
virtual bool addCategory(MadMediaLibraryCategory &) = 0;
int itemId() { return id; }
private:
protected:
MadMediaLibrary *lib;
int id;
};
class MadMediaLibraryCategory {
friend class MadMediaLibraryItem;
friend class MadMediaLibrary;
public:
MadMediaLibraryCategory(MadMediaLibrary *library, int i) : lib(library), /*category(0),*/ id(i) { };
virtual ~MadMediaLibraryCategory() { };
// Sub Categories
virtual bool beginChild() = 0;
virtual bool step(MadMediaLibraryCategory &c) = 0;
virtual void endChild() = 0;
virtual bool child(MadMediaLibraryCategory &c, int i) = 0;
virtual bool child(MadMediaLibraryCategory &c, const char *n) = 0;
virtual bool newChild(MadMediaLibraryCategory &c, const char *n, const char *d = 0) = 0;
// Tags
virtual bool beginTag() = 0;
virtual bool step(MadMediaLibraryTag &) = 0;
virtual void endTag() = 0;
virtual bool tag(MadMediaLibraryTag &, const char *name) = 0;
virtual bool tag(MadMediaLibraryTag &, int i) = 0;
virtual bool addTag(MadMediaLibraryTag &t, const char *data) = 0;
// Items
virtual bool beginItem() = 0;
virtual bool step(MadMediaLibraryItem &) = 0;
virtual void endItem() = 0;
int catId() { return id; }
private:
protected:
MadMediaLibrary *lib;
// need to do a regular accessor for this I think.
//MadMediaLibraryCategory category;
int id;
};
class MadMediaLibraryTag {
public:
MadMediaLibraryTag(MadMediaLibrary *l, int i, int iid=0) : lib(l), id(i), item_id(iid) { };
virtual ~MadMediaLibraryTag() { };
virtual const char *name() { return 0; };
virtual bool name(const char *n) { return false; };
virtual const char *data() { return 0; };
virtual bool data(const char *) { return false; };
int tagId() { return id; }
int itemId() { return item_id; }
private:
protected:
MadMediaLibrary *lib;
int id, item_id;
};
#endif /* __MADMEDIALIBRARY_H__ */