#ifndef __TVGUIDE_RECMENUITEM_H #define __TVGUIDE_RECMENUITEM_H #define AUTO_ADVANCE_TIMEOUT 1500 #include #include #include "styledpixmap.h" #include "timerconflict.h" enum eRecMenuState { rmsConsumed, rmsNotConsumed, rmsRefresh, rmsContinue, rmsClose, rmsInstantRecord, rmsInstantRecordFolder, rmsIgnoreTimerConflict, rmsDeleteTimerConflictMenu, rmsEditTimerConflictMenu, rmsSearchRerunsTimerConflictMenu, rmsSaveTimerConflictMenu, rmsTimerConflictShowInfo, rmsDeleteTimer, rmsDeleteTimerConfirmation, rmsEditTimer, rmsSaveTimer, rmsSearch, rmsSearchWithOptions, rmsSearchPerform, rmsSearchShowInfo, rmsSearchRecord, rmsSearchRecordConfirm, rmsSearchNothingFoundConfirm, rmsSeriesTimer, rmsSeriesTimerFolder, rmsSeriesTimerCreate, rmsSearchTimer, rmsSearchTimerOptions, rmsSearchTimerOptionsReload, rmsSearchTimerUseTemplate, rmsSearchTimerOptionsManually, rmsSearchTimerTestManually, rmsSearchTimerTestTemplate, rmsSearchTimerNothingFoundConfirm, rmsSearchTimerCreateManually, rmsSearchTimerCreateTemplate, rmsSwitchTimer, rmsSwitchTimerCreate, rmsSwitchTimerDelete, rmsRecordingSearch, rmsRecordingSearchResult, rmsTimerConflict, rmsTimerConflicts, rmsTimerConflictIgnoreReruns, rmsTimerConflictRecordRerun, rmsTimeline, rmsTimelineInfo, rmsDisabled, }; enum eDependend { eGreater, eLower, }; // --- cRecMenuItem ------------------------------------------------------------- class cRecMenuItem : public cListObject, public cStyledPixmap { protected: int x, y; int width, height; bool selectable; bool active; bool defaultBackground; bool drawn; eRecMenuState action; tColor colorText; tColor colorTextBack; const cFont *font; const cFont *fontSmall; public: cRecMenuItem(void); virtual ~cRecMenuItem(void); void SetGeometry(int x, int y, int width); virtual void SetPixmaps(void); virtual int GetHeight(void) { return height; }; virtual int GetWidth(void) { return 0; }; virtual void CalculateHeight(int textWidth) {}; virtual void setActive(void) { this->active = true; } virtual void setInactive(void) { this->active = false; } bool isSelectable(void) { return selectable; } bool isActive(void) { return active; } virtual void setBackground(void); virtual void Draw(void) {}; virtual void Hide(void) { pixmap->SetLayer(-1);}; virtual void Show(void) { pixmap->SetLayer(4);}; virtual int GetIntValue(void) { return -1; }; virtual time_t GetTimeValue(void) { return 0; }; virtual bool GetBoolValue(void) { return false; }; virtual cString GetStringValue(void) { return cString(""); }; virtual const cEvent *GetEventValue(void) { return NULL; }; virtual eRecMenuState ProcessKey(eKeys Key) { return rmsNotConsumed; }; }; // --- cRecMenuItemButton ------------------------------------------------------- class cRecMenuItemButton : public cRecMenuItem { private: cString text; bool halfWidth; bool alignLeft; public: cRecMenuItemButton(const char *text, eRecMenuState action, bool active, bool halfWidth = false, bool alignLeft = false); virtual ~cRecMenuItemButton(void); int GetWidth(void); void SetPixmaps(void); void Draw(void); cString GetStringValue(void) { return text; }; eRecMenuState ProcessKey(eKeys Key); }; // --- cRecMenuItemButtonYesNo ------------------------------------------------------- class cRecMenuItemButtonYesNo : public cRecMenuItem { private: cString textYes; cString textNo; eRecMenuState actionNo; bool yesActive; cStyledPixmap *pixmapNo; tColor colorTextNo; tColor colorTextNoBack; public: cRecMenuItemButtonYesNo(cString textYes, cString textNo, eRecMenuState actionYes, eRecMenuState actionNo, bool active); virtual ~cRecMenuItemButtonYesNo(void); void SetPixmaps(void); void setBackground(void); void Hide(void); void Show(void); eRecMenuState ProcessKey(eKeys Key); void Draw(void); }; // --- cRecMenuItemInfo ------------------------------------------------------- class cRecMenuItemInfo : public cRecMenuItem { private: cString text; cTextWrapper wrapper; int border; public: cRecMenuItemInfo(const char *text); virtual ~cRecMenuItemInfo(void); void setBackground(void); void CalculateHeight(int textWidth); void Draw(void); }; // --- cRecMenuItemInt ------------------------------------------------------- class cRecMenuItemInt : public cRecMenuItem { private: cString text; int currentVal; int minVal; int maxVal; cPixmap *pixmapVal; bool fresh; void DrawValue(void); public: cRecMenuItemInt(cString text, int initialVal, int minVal, int maxVal, bool active); virtual ~cRecMenuItemInt(void); void SetPixmaps(void); void Hide(void); void Show(void); void setBackground(void); eRecMenuState ProcessKey(eKeys Key); void Draw(void); int GetIntValue(void) { return currentVal; }; }; // --- cRecMenuItemBool ------------------------------------------------------- class cRecMenuItemBool : public cRecMenuItem { private: cString text; bool yes; cPixmap *pixmapVal; bool refresh; void DrawValue(void); public: cRecMenuItemBool(cString text, bool initialVal, bool refresh, bool active); virtual ~cRecMenuItemBool(void); void SetPixmaps(void); void Hide(void); void Show(void); eRecMenuState ProcessKey(eKeys Key); void Draw(void); bool GetBoolValue(void) { return yes; }; }; // --- cRecMenuItemSelect ------------------------------------------------------- class cRecMenuItemSelect : public cRecMenuItem { private: cString text; int currentVal; const char * const *strings; int numValues; cPixmap *pixmapVal; void DrawValue(void); public: cRecMenuItemSelect(cString text, const char * const *Strings, int initialVal, int numValues, bool active); virtual ~cRecMenuItemSelect(void); void SetPixmaps(void); void Hide(void); void Show(void); eRecMenuState ProcessKey(eKeys Key); void Draw(void); int GetIntValue(void) { return currentVal; }; cString GetStringValue(void) { return strings[currentVal]; }; }; // --- cRecMenuItemText ------------------------------------------------------- class cRecMenuItemText : public cRecMenuItem { private: cString title; char *value; int length; const char *allowed; int pos, offset; bool insert, newchar, uppercase; int lengthUtf8; uint *valueUtf8; uint *allowedUtf8; uint *charMapUtf8; uint *currentCharUtf8; eKeys lastKey; cTimeMs autoAdvanceTimeout; cPixmap *pixmapVal; cStyledPixmap *pixmapKeyboard; cPixmap *pixmapKeyboardHighlight; cPixmap *pixmapKeyboardIcons; int keyboardWidth; int gridWidth; int gridHeight; int keyboardHeight; bool keyboardDrawn; uint *IsAllowed(uint c); void AdvancePos(void); uint Inc(uint c, bool Up); void Type(uint c); void Insert(void); void Delete(void); void EnterEditMode(void); void LeaveEditMode(bool SaveValue = false); bool InEditMode(void) { return valueUtf8 != NULL; }; void SetText(void); void ActivateKeyboard(void); void DeactivateKeyboard(void); void HighlightSMSKey(int num); void ClearSMSKey(void); char *GetSMSKeys(int num); void DrawValue(char *newValue); public: cRecMenuItemText(cString title, char *initialVal, int length, bool active); virtual ~cRecMenuItemText(void); void SetPixmaps(void); void Hide(void); void Show(void); void setBackground(void); eRecMenuState ProcessKey(eKeys Key); void Draw(void); cString GetStringValue(void) { return value; }; }; // --- cRecMenuItemTime ------------------------------------------------------- class cRecMenuItemTime : public cRecMenuItem { private: cString text; int value; int mm; int hh; int pos; bool fresh; cPixmap *pixmapVal; void DrawValue(void); public: cRecMenuItemTime(cString text, int initialVal, bool active); virtual ~cRecMenuItemTime(void); void SetPixmaps(void); void Hide(void); void Show(void); eRecMenuState ProcessKey(eKeys Key); void Draw(void); int GetIntValue(void) { return value; }; }; // --- cRecMenuItemDay ------------------------------------------------------- class cRecMenuItemDay : public cRecMenuItem { private: cString text; time_t currentVal; cPixmap *pixmapVal; void DrawValue(void); public: cRecMenuItemDay(cString text, time_t initialVal, bool active); virtual ~cRecMenuItemDay(void); void SetPixmaps(void); void Hide(void); void Show(void); eRecMenuState ProcessKey(eKeys Key); void Draw(void); time_t GetTimeValue(void) { return currentVal; }; }; // --- cRecMenuItemTimer ------------------------------------------------------- class cRecMenuItemTimer : public cRecMenuItem { private: const cTimer *timer; eRecMenuState action2; eRecMenuState action3; eRecMenuState action4; int iconActive; cPixmap *pixmapIcons; cPixmap *pixmapStatus; time_t conflictStart; time_t conflictStop; time_t overlapStart; time_t overlapStop; int DrawIcons(void); void DrawTimerConflict(void); public: cRecMenuItemTimer(const cTimer *timer, eRecMenuState action1, eRecMenuState action2, eRecMenuState action3, eRecMenuState action4, time_t conflictStart, time_t conflictStop, time_t overlapStart, time_t overlapStop, bool active); virtual ~cRecMenuItemTimer(void); void SetPixmaps(void); void Hide(void); void Show(void); eRecMenuState ProcessKey(eKeys Key); void Draw(void); }; // --- cRecMenuItemTimerConflictHeader ------------------------------------------------------- class cRecMenuItemTimerConflictHeader: public cRecMenuItem { private: cPixmap *pixmapStatus; time_t conflictStart; time_t conflictStop; time_t overlapStart; time_t overlapStop; public: cRecMenuItemTimerConflictHeader(time_t conflictStart, time_t conflictStop, time_t overlapStart, time_t overlapStop); virtual ~cRecMenuItemTimerConflictHeader(void); void SetPixmaps(void); void Hide(void); void Show(void); void setBackground(void); void Draw(void); }; // --- cRecMenuItemEvent ------------------------------------------------------- class cRecMenuItemEvent : public cRecMenuItem { private: const cEvent *event; eRecMenuState action2; int iconActive; cPixmap *pixmapText; cPixmap *pixmapIcons; int DrawIcons(void); public: cRecMenuItemEvent(const cEvent *event, eRecMenuState action1, eRecMenuState action2, bool active); virtual ~cRecMenuItemEvent(void); void SetPixmaps(void); void Hide(void); void Show(void); const cEvent *GetEventValue(void) { return event; }; eRecMenuState ProcessKey(eKeys Key); void Draw(void); }; // --- cRecMenuItemChannelChooser ------------------------------------------------------- class cRecMenuItemChannelChooser : public cRecMenuItem { private: cString text; cChannel *channel; int channelNumber; bool initialChannelSet; bool fresh; cPixmap *pixmapChannel; void DrawValue(void); public: cRecMenuItemChannelChooser (cString text, cChannel *initialChannel, bool active); virtual ~cRecMenuItemChannelChooser(void); void SetPixmaps(void); void Hide(void); void Show(void); eRecMenuState ProcessKey(eKeys Key); void Draw(void); int GetIntValue(void); }; // --- cRecMenuItemDayChooser ------------------------------------------------------- class cRecMenuItemDayChooser : public cRecMenuItem { private: cString text; int weekdays; std::string days; int daysX; int daysY; int daysSize; int selectedDay; cPixmap *pixmapWeekdays; cPixmap *pixmapWeekdaysSelect; void SetSizes(void); void DrawDays(void); void DrawHighlight(int day); void ToggleDay(void); bool WeekDaySet(unsigned day); public: cRecMenuItemDayChooser (cString text, int weekdays, bool active); virtual ~cRecMenuItemDayChooser(void); void SetPixmaps(void); void Hide(void); void Show(void); void setBackground(void); eRecMenuState ProcessKey(eKeys Key); void Draw(void); int GetIntValue(void) { return weekdays;} ; }; // --- cRecMenuItemRecording ------------------------------------------------------- class cRecMenuItemRecording : public cRecMenuItem { private: cRecording *recording; cPixmap *pixmapText; public: cRecMenuItemRecording(cRecording *recording, bool active); virtual ~cRecMenuItemRecording(void); void SetPixmaps(void); void Hide(void); void Show(void); void Draw(void); }; // --- cRecMenuItemTimelineHeader ------------------------------------------------------- class cRecMenuItemTimelineHeader : public cRecMenuItem { private: time_t day; cTimer *timer; std::vector conflicts; cPixmap *pixmapTimeline; cPixmap *pixmapTimerInfo; cPixmap *pixmapTimerConflicts; int width5Mins; int x0; bool timelineDrawn; void DrawTimeline(void); void DrawTimerConflicts(void); void DrawCurrentTimer(void); public: cRecMenuItemTimelineHeader(time_t day, std::vector conflictsToday); virtual ~cRecMenuItemTimelineHeader(void); void SetDay(time_t day) { this->day = day; }; void SetPixmaps(void); void SetCurrentTimer(cTimer *timer) { this->timer = timer; }; void UnsetCurrentTimer(void) { timer = NULL; }; void RefreshTimerDisplay(void); void Hide(void); void Show(void); void Draw(void); }; // --- cRecMenuItemTimelineTimer ------------------------------------------------------- class cRecMenuItemTimelineTimer : public cRecMenuItem { private: cTimer *timer; std::vector conflicts; cPixmap *pixmapBack; cPixmap *pixmapTimerConflicts; cRecMenuItemTimelineHeader *header; int x0; int width5Mins; time_t start; time_t stop; void DrawBackground(void); void DrawTimerBar(void); void DrawTimeScale(void); void DrawTimerConflicts(void); void DrawNoTimerInfo(void); public: cRecMenuItemTimelineTimer(cTimer *timer, time_t start, time_t stop, std::vector conflictsToday, cRecMenuItemTimelineHeader *header, bool active); virtual ~cRecMenuItemTimelineTimer(void); void setActive(void); void setInactive(void); void SetPixmaps(void); void Hide(void); void Show(void); void Draw(void); const cEvent *GetEventValue(void); eRecMenuState ProcessKey(eKeys Key); }; #endif //__TVGUIDE_RECMENUITEM_H