00001 #ifndef OSD_H
00002 #define OSD_H
00003
00004 #include "mythtvexp.h"
00005 #include "programtypes.h"
00006 #include "mythscreentype.h"
00007
00008
00009
00010
00011
00012
00013 #define OSD_DLG_VIDEOEXIT "xx_OSD_VIDEO_EXIT"
00014 #define OSD_DLG_MENU "xx_OSD_MENU"
00015 #define OSD_DLG_SLEEP "xx_OSD_SLEEP"
00016 #define OSD_DLG_IDLE "xx_OSD_IDLE"
00017 #define OSD_DLG_INFO "xx_OSD_INFO"
00018 #define OSD_DLG_EDITING "xx_OSD_EDITING"
00019 #define OSD_DLG_ASKALLOW "xx_OSD_ASKALLOW"
00020 #define OSD_DLG_EDITOR "xx_OSD_EDITOR"
00021 #define OSD_DLG_CUTPOINT "xx_OSD_CUTPOINT"
00022 #define OSD_DLG_DELETE "xx_OSD_DELETE"
00023 #define OSD_DLG_CONFIRM "mythconfirmpopup"
00024
00025 #define OSD_WIN_TELETEXT "aa_OSD_TELETEXT"
00026 #define OSD_WIN_SUBTITLE "aa_OSD_SUBTITLES"
00027
00028 #define OSD_WIN_INTERACT "bb_OSD_INTERACTIVE"
00029 #define OSD_WIN_BDOVERLAY "bb_OSD_BDOVERLAY"
00030
00031 #define kOSDFadeTime 1000
00032
00033 class MythPlayer;
00034 class TeletextScreen;
00035 class SubtitleScreen;
00036 struct AVSubtitle;
00037 class BDOverlay;
00038
00039 enum OSDFunctionalType
00040 {
00041 kOSDFunctionalType_Default = 0,
00042 kOSDFunctionalType_PictureAdjust,
00043 kOSDFunctionalType_SmartForward,
00044 kOSDFunctionalType_TimeStretchAdjust,
00045 kOSDFunctionalType_AudioSyncAdjust,
00046 kOSDFunctionalType_SubtitleZoomAdjust
00047 };
00048
00049 enum OSDTimeout
00050 {
00051 kOSDTimeout_Ignore = -1,
00052 kOSDTimeout_None = 0,
00053 kOSDTimeout_Short = 1,
00054 kOSDTimeout_Med = 2,
00055 kOSDTimeout_Long = 3,
00056 };
00057
00058 class MTV_PUBLIC OSDHideEvent : public QEvent
00059 {
00060 public:
00061 OSDHideEvent(enum OSDFunctionalType osdFunctionalType)
00062 : QEvent(kEventType), m_osdFunctionalType(osdFunctionalType) { }
00063
00064 int GetFunctionalType() { return m_osdFunctionalType; }
00065
00066 static Type kEventType;
00067
00068 private:
00069 OSDFunctionalType m_osdFunctionalType;
00070 };
00071
00072 class ChannelEditor : public MythScreenType
00073 {
00074 Q_OBJECT
00075
00076 public:
00077 ChannelEditor(QObject *retobject, const char * name);
00078
00079 virtual bool Create(void);
00080 virtual bool keyPressEvent(QKeyEvent *event);
00081
00082 void SetText(QHash<QString,QString>&map);
00083 void GetText(QHash<QString,QString>&map);
00084
00085 protected:
00086 MythUITextEdit *m_callsignEdit;
00087 MythUITextEdit *m_channumEdit;
00088 MythUITextEdit *m_channameEdit;
00089 MythUITextEdit *m_xmltvidEdit;
00090
00091 QObject *m_retObject;
00092
00093 void sendResult(int result);
00094
00095 public slots:
00096 void Confirm();
00097 void Probe();
00098 };
00099
00100 class MythOSDWindow : public MythScreenType
00101 {
00102 Q_OBJECT
00103 public:
00104 MythOSDWindow(MythScreenStack *parent, const QString &name,
00105 bool themed)
00106 : MythScreenType(parent, name, true), m_themed(themed)
00107 {
00108 }
00109
00110 virtual bool Create(void)
00111 {
00112 if (m_themed)
00113 return XMLParseBase::LoadWindowFromXML("osd.xml", objectName(),
00114 this);
00115 return false;
00116 }
00117
00118 private:
00119 bool m_themed;
00120 };
00121
00122 class OSD
00123 {
00124 public:
00125 OSD(MythPlayer *player, QObject *parent, MythPainter *painter);
00126 ~OSD();
00127
00128 bool Init(const QRect &rect, float font_aspect);
00129 void SetPainter(MythPainter *painter);
00130 QRect Bounds(void) const { return m_Rect; }
00131 int GetFontStretch(void) const { return m_fontStretch; }
00132 void OverrideUIScale(void);
00133 void RevertUIScale(void);
00134 bool Reinit(const QRect &rect, float font_aspect);
00135 void DisableFade(void) { m_Effects = false; }
00136 void SetFunctionalWindow(const QString window,
00137 enum OSDFunctionalType type);
00138 void SetTimeouts(int _short, int _medium, int _long);
00139
00140 bool IsVisible(void);
00141 void HideAll(bool keepsubs = true, MythScreenType *except = NULL);
00142
00143 MythScreenType *GetWindow(const QString &window);
00144 void SetExpiry(const QString &window, enum OSDTimeout timeout,
00145 int custom_timeout = 0);
00146 void HideWindow(const QString &window);
00147 bool HasWindow(const QString &window);
00148 void ResetWindow(const QString &window);
00149 void PositionWindow(MythScreenType *window);
00150 void RemoveWindow(const QString &window);
00151
00152 bool DrawDirect(MythPainter* painter, QSize size, bool repaint = false);
00153 QRegion Draw(MythPainter* painter, QPaintDevice *device, QSize size,
00154 QRegion &changed, int alignx = 0, int aligny = 0);
00155
00156 void SetValues(const QString &window, QHash<QString,int> &map,
00157 OSDTimeout timeout);
00158 void SetValues(const QString &window, QHash<QString,float> &map,
00159 OSDTimeout timeout);
00160 void SetText(const QString &window, QHash<QString,QString> &map,
00161 OSDTimeout timeout);
00162 void SetRegions(const QString &window, frm_dir_map_t &map,
00163 long long total);
00164 bool IsWindowVisible(const QString &window);
00165
00166 bool DialogVisible(QString window = QString());
00167 bool DialogHandleKeypress(QKeyEvent *e);
00168 void DialogQuit(void);
00169 void DialogShow(const QString &window, const QString &text = "",
00170 int updatefor = 0);
00171 void DialogSetText(const QString &text);
00172 void DialogBack(QString text = "", QVariant data = 0, bool exit = false);
00173 void DialogAddButton(QString text, QVariant data,
00174 bool menu = false, bool current = false);
00175 void DialogGetText(QHash<QString,QString> &map);
00176
00177 TeletextScreen* InitTeletext(void);
00178 void EnableTeletext(bool enable, int page);
00179 bool TeletextAction(const QString &action);
00180 void TeletextReset(void);
00181 void TeletextClear(void);
00182
00183 SubtitleScreen* InitSubtitles(void);
00184 void EnableSubtitles(int type, bool forced_only = false);
00185 void DisableForcedSubtitles(void);
00186 void ClearSubtitles(void);
00187 void DisplayDVDButton(AVSubtitle* dvdButton, QRect &pos);
00188
00189 void DisplayBDOverlay(BDOverlay *overlay);
00190
00191 private:
00192 void TearDown(void);
00193 void LoadWindows(void);
00194
00195 void CheckExpiry(void);
00196 void SendHideEvent(void);
00197
00198 private:
00199 MythPlayer *m_parent;
00200 QObject *m_ParentObject;
00201 MythPainter *m_CurrentPainter;
00202 QRect m_Rect;
00203 bool m_Effects;
00204 int m_FadeTime;
00205 MythScreenType *m_Dialog;
00206 QString m_PulsedDialogText;
00207 QDateTime m_NextPulseUpdate;
00208 bool m_Refresh;
00209 int m_Timeouts[4];
00210
00211 bool m_UIScaleOverride;
00212 float m_SavedWMult;
00213 float m_SavedHMult;
00214 QRect m_SavedUIRect;
00215 int m_fontStretch;
00216 int m_savedFontStretch;
00217
00218 enum OSDFunctionalType m_FunctionalType;
00219 QString m_FunctionalWindow;
00220
00221 QMap<QString, MythScreenType*> m_Children;
00222 QHash<MythScreenType*, QDateTime> m_ExpireTimes;
00223 };
00224
00225 #endif