Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/time_bar.py
blob: 06571e2da9bd36bb7da63438b91e47d1a9e9fad7 (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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# -*- coding: utf-8 -*-

"""
HitTheBalls : hit the ball(s) with the good result.
Copyright (C) 2013  Laurent Bernabe <laurent.bernabe@gmail.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""

"""
Manages time bar : a kind of reversed progress bar.
"""

import pygame
from pygame.locals import USEREVENT


class TimeBar(object):

    """
    A kind of reversed progress bar.
    """

    def __init__(self, width, height, active_color, dead_color,
                 lftp_edge=(0, 0)):
        """
        Constructor
        width : width of the bar (when it has its maximum value) => integer
        height : height of the bar => integer
        active_color : color for active part => Tuple of 3 integers in [0,255]
        dead_color : color for the dead part => Tuple of 3 integers in [0,255]
        lftp_edge : coordinate of the left-top edge => tuple of two integers
        """
        self._width = width
        self._height = height
        self._lftp_edge = lftp_edge
        self._active_color = active_color
        self._dead_color = dead_color
        self._is_empty = False

    def start(self, max_value, step):
        """
        Starts a new 'session'. Please, notice that time between two stages
        (or ticks) is 10 milliseconds (so it will take max_value * step * 10
        milleseconds for the bar to be empty), and that you must call
        decrease() method on USEREVENT+1 event of pygame.
        max_value : the start value (don't forget that it is a reversed
        progress bar) => integer
        step : how many units will be removed at each stage => integer
        """
        self._value = max_value
        self._max_value = max_value
        self._step = step
        self._is_empty = False
        pygame.time.set_timer(USEREVENT + 1, 10)

    def decrease(self):
        """
        Decreases the value of the time bar, and stops its falling if there
        is no more value unit.
        """
        self._value -= self._step
        if self._value <= 0:
            self._is_empty = True
            pygame.time.set_timer(USEREVENT + 1, 0)

    def get_width(self):
        """
        Accessor to the width (width when it has its maximum value)
        => integer
        """
        return self._width

    def get_height(self):
        """
        Accessor to the height
        => integer
        """
        return self._height

    def get_edge(self):
        """
        Accessor to the left-top edge.
        => tuple of two integers
        """
        return self._lftp_edge

    def get_active_color(self):
        """
        Accessor to the active part (not elapsed) color.
        => Tuple of 3 integers.
        """
        return self._active_color

    def get_dead_color(self):
        """
        Accessor to the dead part (elapsed) color.
        => Tuple of 3 integers
        """
        return self._dead_color

    def get_value(self):
        """
        Accessor to the value.
        Be careful ! May raise NameError, as value may not be defined yet.
        => integer
        """
        try:
            return self._value
        except AttributeError:
            raise NameError

    def get_max_value(self):
        """
        Accessor to the max value.
        Be careful ! May raise NameError, as max value may not be defined yet.
        => integer
        """
        try:
            return self._max_value
        except AttributeError:
            raise NameError

    def is_empty(self):
        """
        Says whether the bar is empty.
        => boolean
        """
        return self._is_empty