/elec/propeller-clock

To get this branch, use:
bzr branch http://bzr.ed.am/elec/propeller-clock

« back to all changes in this revision

Viewing changes to src/modes/switcher_major_mode.cc

  • Committer: edam
  • Date: 2012-05-18 12:11:01 UTC
  • Revision ID: tim@ed.am-20120518121101-0wik922hyvjkcjdi
switched back to using classes for modes

Show diffs side-by-side

added added

removed removed

 
1
/*
 
2
 * switcher_major_mode.cc
 
3
 *
 
4
 * Copyright (C) 2012 Tim Marston <tim@ed.am> and Dan Marston.
 
5
 *
 
6
 * This file is part of propeller-clock (hereafter referred to as "this
 
7
 * program"). See http://ed.am/dev/software/arduino/propeller-clock for more
 
8
 * information.
 
9
 *
 
10
 * This program is free software: you can redistribute it and/or modify
 
11
 * it under the terms of the GNU Lesser General Public License as published
 
12
 * by the Free Software Foundation, either version 3 of the License, or
 
13
 * (at your option) any later version.
 
14
 *
 
15
 * This program is distributed in the hope that it will be useful,
 
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
18
 * GNU Lesser General Public License for more details.
 
19
 *
 
20
 * You should have received a copy of the GNU Lesser General Public License
 
21
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
22
 */
 
23
#include "switcher_major_mode.h"
 
24
#include "analogue_clock_mode.h"
 
25
#include "digital_clock_mode.h"
 
26
#include "info_mode.h"
 
27
#include "test_pattern_mode.h"
 
28
#include "../text.h"
 
29
#include "../common.h"
 
30
 
 
31
 
 
32
SwitcherMajorMode::SwitcherMajorMode()
 
33
{
 
34
        static AnalogueClockMode analogue_clock;
 
35
        static DigitalClockMode digital_clock;
 
36
        static InfoMode info;
 
37
//      static TestPatternMode test_pattern;
 
38
 
 
39
        // add modes to list
 
40
        int mode = 0;
 
41
        _modes[ mode++ ] = &analogue_clock;
 
42
        _modes[ mode++ ] = &digital_clock;
 
43
        _modes[ mode++ ] = &info;
 
44
//      _modes[ mode++ ] = &test_pattern;
 
45
 
 
46
        // finish the list
 
47
        _modes[ mode ] = 0;
 
48
}
 
49
 
 
50
 
 
51
void SwitcherMajorMode::draw( int segment )
 
52
{
 
53
        _modes[ _mode ]->draw( segment );
 
54
}
 
55
 
 
56
 
 
57
void SwitcherMajorMode::draw_reset()
 
58
{
 
59
        _modes[ _mode ]->draw_reset();
 
60
}
 
61
 
 
62
 
 
63
void SwitcherMajorMode::activate()
 
64
{
 
65
        // reset text
 
66
        Text::reset();
 
67
        leds_off();
 
68
 
 
69
        _mode = 0;
 
70
        _modes[ _mode ]->activate();
 
71
}
 
72
 
 
73
 
 
74
void SwitcherMajorMode::deactivate()
 
75
{
 
76
        _modes[ _mode ]->deactivate();
 
77
}
 
78
 
 
79
 
 
80
void SwitcherMajorMode::press()
 
81
{
 
82
        _modes[ _mode ]->press();
 
83
}
 
84
 
 
85
 
 
86
void SwitcherMajorMode::long_press()
 
87
{
 
88
        _modes[ _mode ]->deactivate();
 
89
 
 
90
        // inc mode
 
91
        if( !_modes[ ++_mode ] ) _mode = 0;
 
92
 
 
93
        // reset text
 
94
        Text::reset();
 
95
        leds_off();
 
96
 
 
97
        _modes[ _mode ]->activate();
 
98
}