// Menu List // // Douglas Thrift // // $Id$ #ifndef _MenuList_hpp_ #define _MenuList_hpp_ #include #include #include "Display.hpp" struct MenuList { protected: static MenuList *previous; private: MenuList *parent; Display &display; struct State { size_t item, cursor, top, bottom; State() : item(0), cursor(0), top(0), bottom(4) {} bool operator !=(const State &state) const { return top != state.top; } } state, old; public: struct MenuItem { protected: MenuList *list; public: MenuItem(MenuList *list); virtual MenuList *Select() = 0; virtual operator std::string() const = 0; }; struct BoolItem { virtual operator bool() const = 0; }; struct SubItem {}; protected: std::vector list; public: MenuList(MenuList *parent, Display &display, size_t size = 0); virtual ~MenuList(); MenuList *Enter(); MenuList *Left(); MenuList *Right(); void Render(); MenuList &operator ++(); MenuList &operator --(); }; struct TopList : public MenuList { class AppendItem : public MenuItem, public BoolItem { bool &append; public: AppendItem(MenuList *list, bool &append); virtual MenuList *Select(); virtual operator std::string() const; virtual operator bool() const; }; class ShuffleItem : public MenuItem, public BoolItem { Audacious::Audacious &audacious; public: ShuffleItem(MenuList *list, Audacious::Audacious &audacious); virtual MenuList *Select(); virtual operator std::string() const; virtual operator bool() const; }; TopList(Audacious::Audacious &audacious, Display &display, bool &append); }; struct ArtistList : public MenuList { /*class AllItem : public MenuItem { }; class ArtistItem : public MenuItem { };*/ ArtistList(Audacious::Audacious &audacious, Display &display); }; struct AlbumList : public MenuList { /*class AllItem : public MenuItem { }; class AlbumItem : public MenuItem { };*/ AlbumList(Audacious::Audacious &audacious, Display &display); }; struct SongList : public MenuList { /*class AllItem : public MenuItem { }; class SongItem : public MenuItem { };*/ SongList(Audacious::Audacious &audacious, Display &display); }; #endif//_MenuList_hpp_