summaryrefslogtreecommitdiff
path: root/tools/display_message.h
blob: 407f07c8eb0db756b8d7cb06f22355c3b50664f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
 * display_message.h: Display simple message
 *
 * See the main source file 'xineliboutput.c' for copyright information and
 * how to reach the author.
 *
 * $Id: display_message.h,v 1.2 2007-01-06 04:28:08 phintuka Exp $
 *
 */

#ifndef __DISPLAY_MESSAGE_H
#define __DISPLAY_MESSAGE_H

#include <vdr/osdbase.h>
#include <vdr/skins.h>

class cDisplayMessage : public cOsdObject
{
  cSkinDisplayMessage *displayMessage;
  char *Message;
  int   Timer;
  int   Timeout;

 public:

  cDisplayMessage(const char *message, int timeout = 3)
  {
    displayMessage = NULL;
    Message = strdup(message);
    Timer = 0;
    Timeout = timeout;
  }

  virtual ~cDisplayMessage()
  {
    delete displayMessage;
    free(Message);
  }

  void Update(const char *message)
  {
    Timer = 0;
    free(Message);
    Message = strdup(message);
    Show();
  }

  virtual eOSState ProcessKey(eKeys Key)
  {
    if(Key == kNone && Timer++ > Timeout)
      return osEnd;

    if(Key != kNone) {
      // put back and close
      cRemote::Put(Key, true);
      return osEnd;
    }

    return osContinue;
  }

  virtual void Show(void)
  {
    if(!displayMessage)
      displayMessage = Skins.Current()->DisplayMessage();

    displayMessage->SetMessage(mtInfo, Message);
    displayMessage->Flush();
  }

};

#endif