Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter@sugarlabs.org>2013-07-02 20:15:42 (GMT)
committer Walter Bender <walter@sugarlabs.org>2013-07-02 20:15:42 (GMT)
commite9b8b584710a717f2cf5ab5d49a87f8e74c2b326 (patch)
tree9b19338846e6ff6fb9eecd6973fbc5ea2df91232
parentd3368380b9d45012797ea7cc1fa9ed67e9e3c25e (diff)
move labels to canvas; rearrange toolbars; add palette for timers
-rw-r--r--Dimensions.py155
-rw-r--r--constants.py1
-rwxr-xr-xdimensions.py (renamed from visualmatch.py)4
-rw-r--r--game.py36
-rwxr-xr-xgencards.py24
-rw-r--r--grid.py4
-rw-r--r--icons/activity-dimensions.svg111
-rw-r--r--icons/timer-120.svg121
-rw-r--r--icons/timer-15.svg139
-rw-r--r--icons/timer-30.svg122
-rw-r--r--icons/timer-300.svg134
-rw-r--r--icons/timer-60.svg114
12 files changed, 862 insertions, 103 deletions
diff --git a/Dimensions.py b/Dimensions.py
index 95ceda1..997897d 100644
--- a/Dimensions.py
+++ b/Dimensions.py
@@ -21,6 +21,7 @@ from sugar3.graphics.toolbarbox import ToolbarBox
from sugar3.activity.widgets import ActivityToolbarButton
from sugar3.activity.widgets import StopButton
from sugar3.graphics.toolbarbox import ToolbarButton
+from sugar3.graphics.menuitem import MenuItem
from sugar3.graphics.alert import NotifyAlert
from sugar3.graphics import style
from sugar3.datastore import datastore
@@ -41,13 +42,12 @@ from json import dump as jdump
from StringIO import StringIO
-from toolbar_utils import radio_factory, button_factory, label_factory, \
- spin_factory, separator_factory
+from toolbar_utils import (radio_factory, button_factory, separator_factory)
-from constants import DECKSIZE, PRODUCT, HASH, ROMAN, WORD, CHINESE, MAYAN, \
- INCAN, DOTS, STAR, DICE, LINES, DEAL
-from helpbutton import HelpButton, add_section, add_paragraph, help_windows, \
- help_buttons
+from constants import (DECKSIZE, PRODUCT, HASH, ROMAN, WORD, CHINESE, MAYAN,
+ INCAN, DOTS, STAR, DICE, LINES, DEAL)
+from helpbutton import (HelpButton, add_section, add_paragraph, help_windows,
+ help_buttons)
from game import Game
@@ -72,6 +72,11 @@ PROMPT_DICT = {'pattern': _('New pattern game'),
'word': _('New word game'),
'custom': _('Import custom cards')}
+ROBOT_TIMER_VALUES = [15, 30, 60, 120, 300]
+ROBOT_TIMER_LABELS = {15: _('15 seconds'), 30: _('30 seconds'),
+ 60: _('1 minute'), 120: _('2 minutes'),
+ 300: _('5 minutes')}
+
class Dimensions(activity.Activity):
''' Dimension matching game '''
@@ -138,8 +143,8 @@ class Dimensions(activity.Activity):
if self.vmw.joiner(): # joiner cannot change level
return
self.vmw.level = level
- self.level_label.set_text(self.calc_level_label(self.vmw.low_score,
- self.vmw.level))
+ # self.level_label.set_text(self.calc_level_label(self.vmw.low_score,
+ # self.vmw.level))
self._load_new_game()
def calc_level_label(self, low_score, play_level):
@@ -176,11 +181,6 @@ class Dimensions(activity.Activity):
self.vmw.card_type = 'number'
self._load_new_game()
- def _robot_time_spin_cb(self, button):
- ''' Set delay for robot. '''
- self.vmw.robot_time = self._robot_time_spin.get_value_as_int()
- return
-
def _edit_words_cb(self, button):
''' Edit the word list. '''
self.vmw.editing_word_list = True
@@ -256,13 +256,6 @@ class Dimensions(activity.Activity):
toolbox.toolbar.insert(self.activity_toolbar_button, 0)
self.activity_toolbar_button.show()
- self.game_toolbar_button = ToolbarButton(
- page=games_toolbar,
- icon_name='new-game')
- games_toolbar.show()
- toolbox.toolbar.insert(self.game_toolbar_button, -1)
- self.game_toolbar_button.show()
-
self.numbers_toolbar_button = ToolbarButton(
page=numbers_toolbar,
icon_name='number-tools')
@@ -277,7 +270,12 @@ class Dimensions(activity.Activity):
toolbox.toolbar.insert(self.tools_toolbar_button, -1)
self.tools_toolbar_button.show()
- self._set_labels(toolbox.toolbar)
+ self.button_pattern = button_factory(
+ 'new-pattern-game', toolbox.toolbar, self._select_game_cb,
+ cb_arg='pattern', tooltip=PROMPT_DICT['pattern'])
+
+ self._set_extras(toolbox.toolbar)
+
separator_factory(toolbox.toolbar, True, False)
help_button = HelpButton(self)
@@ -298,26 +296,22 @@ class Dimensions(activity.Activity):
self.set_toolbar_box(toolbox)
toolbox.show()
- self.game_toolbar_button.set_expanded(True)
-
+ '''
self.button_pattern = button_factory(
'new-pattern-game', games_toolbar, self._select_game_cb,
cb_arg='pattern', tooltip=PROMPT_DICT['pattern'])
- '''
self.button_number = button_factory(
'new-number-game', games_toolbar, self._select_game_cb,
cb_arg='number', tooltip=PROMPT_DICT['number'])
self.button_word = button_factory(
'new-word-game', games_toolbar, self._select_game_cb,
cb_arg='word', tooltip=PROMPT_DICT['word'])
- '''
self.button_custom = button_factory(
'no-custom-game', games_toolbar, self._select_game_cb,
cb_arg='custom', tooltip=PROMPT_DICT['custom'])
self._set_extras(games_toolbar)
- '''
self.words_tool_button = button_factory(
'word-tools', tools_toolbar, self._edit_words_cb,
tooltip=_('Edit word lists.'))
@@ -327,6 +321,10 @@ class Dimensions(activity.Activity):
'image-tools', tools_toolbar, self.image_import_cb,
tooltip=_('Import custom cards'))
+ self.button_custom = button_factory(
+ 'no-custom-game', tools_toolbar, self._select_game_cb,
+ cb_arg='custom', tooltip=PROMPT_DICT['custom'])
+
self.product_button = radio_factory(
'product',
numbers_toolbar,
@@ -419,15 +417,45 @@ class Dimensions(activity.Activity):
group=self.hash_button)
NUMBER_C_BUTTONS[LINES] = self.lines_button
+ def _robot_selection_cb(self, widget):
+ if self._robot_palette:
+ if not self._robot_palette.is_up():
+ self._robot_palette.popup(immediate=True,
+ state=self._robot_palette.SECONDARY)
+ else:
+ self._robot_palette.popdown(immediate=True)
+ return
+
+ def _setup_robot_palette(self):
+ self._robot_palette = self._robot_time_button.get_palette()
+
+ for seconds in ROBOT_TIMER_VALUES:
+ text = ROBOT_TIMER_LABELS[seconds]
+ menu_item = MenuItem(icon_name='timer-%d' % (seconds),
+ text_label=text)
+ menu_item.connect('activate', self._robot_selected_cb, seconds)
+ self._robot_palette.menu.append(menu_item)
+ menu_item.show()
+
+ def _robot_selected_cb(self, button, seconds):
+ self.vmw.robot_time = seconds
+ if hasattr(self, '_robot_time_button') and \
+ seconds in ROBOT_TIMER_VALUES:
+ self._robot_time_button.set_icon_name('timer-%d' % seconds)
+
def _set_extras(self, toolbar):
separator_factory(toolbar, False, True)
self.robot_button = button_factory(
'robot-off', toolbar, self._robot_cb,
tooltip=_('Play with the computer'))
- self._robot_time_spin = spin_factory(self._robot_time, 5, 180,
- self._robot_time_spin_cb,
- toolbar)
+ self._robot_time_button = button_factory(
+ 'timer-60',
+ toolbar,
+ self._robot_selection_cb,
+ tooltip=_('robot pause time'))
+ self._setup_robot_palette()
+
separator_factory(toolbar, False, True)
self.beginner_button = radio_factory(
@@ -455,24 +483,6 @@ class Dimensions(activity.Activity):
group=self.beginner_button)
LEVEL_BUTTONS[EXPERT] = self.expert_button
- self.level_label = label_factory(self.calc_level_label(
- self._low_score, self._play_level), toolbar)
-
- def _set_labels(self, toolbar):
- ''' Add labels to toolbar toolbar '''
- self.status_label = label_factory(_('Find a match.'), toolbar)
- self.status_label.set_width_chars(6)
- separator_factory(toolbar, False, True)
- self.deck_label = label_factory(
- '%d %s' % (LEVEL_DECKSIZE[self._play_level] - DEAL, _('cards')),
- toolbar)
- self.deck_label.set_width_chars(7)
- separator_factory(toolbar, False, True)
- self.match_label = label_factory('%d %s' % (0, _('matches')), toolbar)
- self.match_label.set_width_chars(14)
- separator_factory(toolbar, False, True)
- self.clock_label = label_factory('-', toolbar)
-
def _setup_canvas(self):
''' Create a canvas.. '''
canvas = Gtk.DrawingArea()
@@ -623,32 +633,29 @@ class Dimensions(activity.Activity):
def _setup_toolbar_help(self):
''' Set up a help palette for the main toolbars '''
- help_box = self._new_help_box('custom-toolbar',
- self.tools_toolbar_button)
- add_section(help_box, _('Tools'), icon='view-source')
- add_section(help_box, _('Edit word lists.'), icon='word-tools')
- add_section(help_box, _('Import image cards'), icon='image-tools')
-
- help_box = self._new_help_box('activity-toolbar',
- self.activity_toolbar_button)
+ help_box = self._new_help_box('main-toolbar')
add_section(help_box, _('Dimensions'), icon='activity-dimensions')
- add_paragraph(help_box, _('Export scores to clipboard'), icon='score-copy')
-
- help_box = self._new_help_box('game-toolbar',
- self.game_toolbar_button)
- add_section(help_box, _('Game'), icon='new-game')
- add_paragraph(help_box, PROMPT_DICT['pattern'], icon='new-pattern-game')
- add_paragraph(help_box, PROMPT_DICT['number'], icon='new-number-game')
- add_paragraph(help_box, PROMPT_DICT['word'], icon='new-word-game')
- add_paragraph(help_box, PROMPT_DICT['custom'], icon='new-custom-game')
+ add_paragraph(help_box, _('Tools'), icon='view-source')
+ add_paragraph(help_box, _('Game'), icon='new-pattern-game')
+ # add_paragraph(help_box, PROMPT_DICT['number'], icon='new-number-game')
+ # add_paragraph(help_box, PROMPT_DICT['word'], icon='new-word-game')
+ # add_paragraph(help_box, _('Numbers'), icon='number-tools')
add_paragraph(help_box, _('Play with the computer'), icon='robot-off')
- add_paragraph(help_box, _('robot pause time'))
+ add_paragraph(help_box, _('robot pause time'), icon='timer-60')
add_paragraph(help_box, _('beginner'), icon='beginner')
add_paragraph(help_box, _('intermediate'), icon='intermediate')
add_paragraph(help_box, _('expert'), icon='expert')
- help_box = self._new_help_box('numbers-toolbar',
- self.numbers_toolbar_button)
+ add_section(help_box, _('Dimensions'), icon='activity-dimensions')
+ add_paragraph(help_box, _('Export scores to clipboard'),
+ icon='score-copy')
+
+ add_section(help_box, _('Tools'), icon='view-source')
+ add_section(help_box, _('Import image cards'), icon='image-tools')
+ add_paragraph(help_box, PROMPT_DICT['custom'], icon='new-custom-game')
+ # add_section(help_box, _('Edit word lists.'), icon='word-tools')
+
+ '''
add_section(help_box, _('Numbers'), icon='number-tools')
add_paragraph(help_box, _('product'), icon='product')
add_paragraph(help_box, _('Roman numerals'), icon='roman')
@@ -661,15 +668,7 @@ class Dimensions(activity.Activity):
add_paragraph(help_box, _('points on a star'), icon='star')
add_paragraph(help_box, _('dice'), icon='dice')
add_paragraph(help_box, _('dots in a line'), icon='lines')
-
- help_box = self._new_help_box('main-toolbar')
- add_section(help_box, _('Dimensions'), icon='activity-dimensions')
- add_paragraph(help_box, _('Game'), icon='new-game')
- add_paragraph(help_box, _('Numbers'), icon='number-tools')
- add_paragraph(help_box, _('Tools'), icon='view-source')
- add_paragraph(help_box, _('number of cards remaining in deck'))
- add_paragraph(help_box, _('number of matches'))
- add_paragraph(help_box, _('elapsed time'))
+ '''
def _setup_presence_service(self):
''' Setup the Presence Service. '''
@@ -790,8 +789,8 @@ class Dimensions(activity.Activity):
elif text[0] == 'P':
e, text = text.split(':')
self.vmw.level = int(text)
- self.level_label.set_text(self.calc_level_label(
- self.vmw.low_score, self.vmw.level))
+ # self.level_label.set_text(self.calc_level_label(
+ # self.vmw.low_score, self.vmw.level))
LEVEL_BUTTONS[self.vmw.level].set_active(True)
elif text[0] == 'X':
e, text = text.split(':')
diff --git a/constants.py b/constants.py
index 97dcbaf..d2a9c57 100644
--- a/constants.py
+++ b/constants.py
@@ -12,6 +12,7 @@
from gettext import gettext as _
+LABELH = 32
MATCH_POSITION = 10
SHAPES = 3
COLORS = 3
diff --git a/visualmatch.py b/dimensions.py
index 3fa1211..5f3acae 100755
--- a/visualmatch.py
+++ b/dimensions.py
@@ -24,7 +24,7 @@ from constants import PRODUCT, HASH, ROMAN, WORD, CHINESE, MAYAN, DICE, DOTS, \
STAR, LINES, INCAN
-class VisualMatchMain:
+class DimensionsMain:
def __init__(self):
# create a new window
@@ -232,5 +232,5 @@ def main():
if __name__ == "__main__":
- VisualMatchMain()
+ DimensionsMain()
main()
diff --git a/game.py b/game.py
index 47b6350..bbcb884 100644
--- a/game.py
+++ b/game.py
@@ -40,7 +40,7 @@ from constants import (LOW, MEDIUM, HIGH, MATCHMASK, ROW, COL, CARD_WIDTH,
NOISE_KEYS, WORD_CARD_MAP, KEYMAP, CARD_HEIGHT, DEAL,
DIFFICULTY_LEVEL, BACKGROUNDMASK, DECKSIZE,
CUSTOM_CARD_INDICIES, SHAPES, COLORS, NUMBER, FILLS,
- CARDS_IN_A_MATCH)
+ CARDS_IN_A_MATCH, LABELH)
from grid import Grid
from deck import Deck
@@ -48,7 +48,8 @@ from card import Card
from sprites import Sprites, Sprite
from gencards import (generate_match_card, generate_frowny_shape,
generate_smiley, generate_frowny_texture,
- generate_frowny_color, generate_frowny_number)
+ generate_frowny_color, generate_frowny_number,
+ generate_label)
CURSOR = '█'
@@ -218,6 +219,15 @@ class Game():
generate_frowny_number(self._scale), sprites=self._sprites)
self._frowny[-1].spr.move(self.grid.match_to_xy(3))
+ self._label = Card()
+ self._label.create(generate_label(min(self._width, self._height),
+ LABELH),
+ sprites=self._sprites)
+ self._label.spr.move((0, 0))
+ self._label.spr.set_label_attributes(24, horiz_align="left")
+
+ self._labels = {'deck': '', 'match': '', 'clock': '', 'status': ''}
+
Gdk.Screen.get_default().connect('size-changed', self._configure_cb)
def _configure_cb(self, event):
@@ -1006,19 +1016,15 @@ class Game():
def set_label(self, label, s):
''' Update the toolbar labels '''
- if self._sugar:
- if label == 'deck':
- self.activity.deck_label.set_text(s)
- elif label == 'status':
- self.activity.status_label.set_text(s)
- elif label == 'clock':
- self.activity.clock_label.set_text(s)
- elif label == 'match':
- self.activity.match_label.set_text(s)
- else:
- if hasattr(self, 'win') and label is not 'clock':
- #TRANS: Please translate Visual Match as Dimensions
- self.win.set_title('%s: %s' % (_('Visual Match'), s))
+ if label in self._labels:
+ self._labels[label] = s
+
+ msg = "%s - %s - %s - %s" % (self._labels['deck'],
+ self._labels['match'],
+ self._labels['clock'],
+ self._labels['status'])
+
+ self._label.spr.set_label(msg)
def _restore_clicked(self, saved_selected_indices):
''' Restore the selected cards upon resume or share. '''
diff --git a/gencards.py b/gencards.py
index 45fe22c..ab501a0 100755
--- a/gencards.py
+++ b/gencards.py
@@ -228,10 +228,13 @@ class SVG:
svg_string += self._svg_style()
return svg_string
- def _background(self):
- return self._svg_rect(119.5, 69.5, 11, 9, 2.75, 2.75)
+ def _background(self, width=None, height=None):
+ if width == 125 and height == 75:
+ return self._svg_rect(119.5, 69.5, 11, 9, 2.75, 2.75)
+ else:
+ return self._svg_rect(width - 5.5, height - 5.5, 11, 9, 2.75, 2.75)
- def _header(self):
+ def _header(self, width=125, height=75):
svg_string = "<?xml version=\"1.0\" encoding=\"UTF-8\""
svg_string += " standalone=\"no\"?>\n"
svg_string += "<!-- Created with Emacs -->\n"
@@ -239,12 +242,12 @@ class SVG:
svg_string += " xmlns:svg=\"http://www.w3.org/2000/svg\"\n"
svg_string += " xmlns=\"http://www.w3.org/2000/svg\"\n"
svg_string += " version=\"1.0\"\n"
- svg_string += "%s%f%s" % (" width=\"", 125 * self._scale, "\"\n")
- svg_string += "%s%f%s" % (" height=\"", 75 * self._scale, "\">\n")
+ svg_string += "%s%f%s" % (" width=\"", width * self._scale, "\"\n")
+ svg_string += "%s%f%s" % (" height=\"", height * self._scale, "\">\n")
svg_string += "%s%f%s%f%s" % ("<g\n transform=\"matrix(",
self._scale, ", 0, 0, ", self._scale,
", 0, 0)\">\n")
- svg_string += self._background()
+ svg_string += self._background(width, height)
return svg_string
def _footer(self):
@@ -862,6 +865,15 @@ def generate_selected_card(scale):
svg_string += svg._footer()
return svg_string
+def generate_label(width, height):
+ svg = SVG()
+ svg._set_scale(1.0)
+ svg._set_stroke_width(6.0)
+ svg._set_colors(["none", "none"])
+ svg_string = svg._header(width, height)
+ svg_string += svg._footer()
+ return svg_string
+
# Command line utilities used for testing purposed only
diff --git a/grid.py b/grid.py
index 848cf7d..98ee140 100644
--- a/grid.py
+++ b/grid.py
@@ -14,7 +14,7 @@ from gi.repository import GObject
import random
-from constants import ROW, COL, MATCH_POSITION, DEAL
+from constants import ROW, COL, MATCH_POSITION, DEAL, LABELH
import logging
_logger = logging.getLogger('dimensions-activity')
@@ -43,7 +43,7 @@ class Grid:
self.left = int((width - (card_width * 2)) / 2)
self.portrait = False
self.xinc = int(card_width * 1.2)
- self.top = 10
+ self.top = int(LABELH * 1.25)
self.yinc = int(card_height * 1.33)
self.bottom = int(self.top + 5 * self.yinc)
self.dx = [0, 0, 0, 0, 0, 0]
diff --git a/icons/activity-dimensions.svg b/icons/activity-dimensions.svg
new file mode 100644
index 0000000..84fe823
--- /dev/null
+++ b/icons/activity-dimensions.svg
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="55"
+ height="55"
+ viewBox="0 0 55 55"
+ id="svg2"
+ style="fill:#eeeeee;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round">
+ <metadata
+ id="metadata22">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs20" />
+ <g
+ transform="matrix(0,-1,1,0,0.36636489,40.126411)"
+ id="g4036"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1">
+ <g
+ transform="matrix(0.41601289,0,0,0.40702804,13.297821,-6.9732022)"
+ id="g2925"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1">
+ <path
+ d="m 33.3585,62.5035 10.102,10.1 c 0.752,0.75 1.217,1.783 1.217,2.932 0,2.287 -1.855,4.143 -4.146,4.143 -1.145,0 -2.178,-0.463 -2.932,-1.211 l -10.102,-10.103 -10.1,10.1 c -0.75,0.75 -1.787,1.211 -2.934,1.211 -2.284,0 -4.143,-1.854 -4.143,-4.141 0,-1.146 0.465,-2.184 1.212,-2.934 l 10.104,-10.102 -10.102,-10.1 c -0.747,-0.748 -1.212,-1.785 -1.212,-2.93 0,-2.289 1.854,-4.146 4.146,-4.146 1.143,0 2.18,0.465 2.93,1.214 l 10.099,10.102 10.102,-10.103 c 0.754,-0.749 1.787,-1.214 2.934,-1.214 2.289,0 4.146,1.856 4.146,4.145 0,1.146 -0.467,2.18 -1.217,2.932 l -10.104,10.105 z"
+ transform="translate(10,1.5)"
+ id="path2927"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" />
+ </g>
+ <g
+ transform="matrix(0.41601289,0,0,0.40702804,13.297821,9.1408833)"
+ id="g2925-4"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1">
+ <path
+ d="m 33.3585,62.5035 10.102,10.1 c 0.752,0.75 1.217,1.783 1.217,2.932 0,2.287 -1.855,4.143 -4.146,4.143 -1.145,0 -2.178,-0.463 -2.932,-1.211 l -10.102,-10.103 -10.1,10.1 c -0.75,0.75 -1.787,1.211 -2.934,1.211 -2.284,0 -4.143,-1.854 -4.143,-4.141 0,-1.146 0.465,-2.184 1.212,-2.934 l 10.104,-10.102 -10.102,-10.1 c -0.747,-0.748 -1.212,-1.785 -1.212,-2.93 0,-2.289 1.854,-4.146 4.146,-4.146 1.143,0 2.18,0.465 2.93,1.214 l 10.099,10.102 10.102,-10.103 c 0.754,-0.749 1.787,-1.214 2.934,-1.214 2.289,0 4.146,1.856 4.146,4.145 0,1.146 -0.467,2.18 -1.217,2.932 l -10.104,10.105 z"
+ transform="translate(10,1.5)"
+ id="path2927-7"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" />
+ </g>
+ </g>
+ <g
+ transform="matrix(0.41155553,0,0,0.39886125,12.066668,1.454678)"
+ id="g3063"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
+ <path
+ d="m 28.3575,70.160499 -5.861,5.861 -5.861,-5.866001 -4.102,-4.1 c -0.747,-0.747999 -1.212,-1.784999 -1.212,-2.93 0,-2.288998 1.854,-4.145998 4.146,-4.145998 1.143,0 2.18,0.465 2.93,1.214 l 4.099,4.101999 14.102,-14.102998 c 0.754,-0.749 1.787,-1.214 2.934,-1.214 2.289,0 4.146,1.856001 4.146,4.145001 0,1.146 -0.467,2.18 -1.217,2.932 l -14.104,14.104997 z"
+ transform="translate(10,1.5)"
+ id="path3065"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" />
+ </g>
+ <g
+ transform="matrix(0,-1,1,0,-0.19969225,55.000838)"
+ id="g4007"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1">
+ <g
+ transform="translate(-0.52754307,0)"
+ id="g3997"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1">
+ <rect
+ width="13.632148"
+ height="13.750559"
+ rx="8.0620232"
+ ry="8.9985275"
+ x="5.1309609"
+ y="37.104614"
+ id="rect14"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" />
+ </g>
+ <g
+ transform="translate(4.7683716e-7,-0.01625347)"
+ id="g3979"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1">
+ <rect
+ width="13.632148"
+ height="13.750559"
+ rx="8.0620232"
+ ry="8.9985275"
+ x="4.6034174"
+ y="20.857771"
+ id="rect14-5"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" />
+ </g>
+ <g
+ id="g3961"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1">
+ <rect
+ width="13.632148"
+ height="13.750559"
+ rx="8.0620232"
+ ry="8.9985275"
+ x="4.6034179"
+ y="4.5442114"
+ id="rect14-7"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/icons/timer-120.svg b/icons/timer-120.svg
new file mode 100644
index 0000000..499d3b9
--- /dev/null
+++ b/icons/timer-120.svg
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="55"
+ height="55"
+ id="svg2">
+ <metadata
+ id="metadata23">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs21" />
+ <g
+ id="layer2"
+ style="display:inline">
+ <path
+ d="m 45.925926,24.25926 a 21.296297,21.296297 0 1 1 -42.5925939,0 21.296297,21.296297 0 1 1 42.5925939,0 z"
+ transform="matrix(0.89950544,0,0,0.89950544,5.3455146,7.678664)"
+ id="path3791"
+ style="fill:#ffffff;fill-opacity:1;stroke:none" />
+ </g>
+ <g
+ transform="translate(-30.762712,4.4279661)"
+ id="layer1"
+ style="fill:#000000;fill-opacity:1;display:inline">
+ <path
+ d="M 58.703608,24.969597 58.567349,10.531752 c 0,0 3.387006,0.405121 7.254493,2.638703 3.867487,2.233582 5.338359,5.518077 5.338359,5.518077 z"
+ id="path3897"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ id="layer3"
+ style="display:none">
+ <path
+ d="m 36.539789,13.013087 c 9.161862,4.992537 12.541772,16.466949 7.549234,25.628815 L 27.5,29.602112 z"
+ id="path4311"
+ style="fill:#808080;fill-opacity:1;stroke:none" />
+ <path
+ d="M 27.571522,30.159444 39.546676,36.73611"
+ id="path4283"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <path
+ d="m 41.444444,29.5 -3.888889,0"
+ id="path3823"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 13.555556,29.5 3.888889,0"
+ id="path3829"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 27.5,43.444444 0,-3.888889"
+ id="path3854"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 22.873381,5.940543 9.622594,0"
+ id="path4076"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 38.96491,8.681773 5.209549,3.91786"
+ id="path4080"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 16.03509,8.681773 -5.209549,3.91786"
+ id="path4107"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 46.656135,29.5 a 19.156135,19.156135 0 1 1 -38.31227,0 19.156135,19.156135 0 1 1 38.31227,0 z"
+ id="path4380"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+ <g
+ id="layer5"
+ style="display:inline">
+ <g
+ transform="matrix(0.88661828,0,0,0.88661828,43.331119,7.0338455)"
+ id="g4198"
+ style="stroke-width:1.69182169;stroke-miterlimit:4;stroke-dasharray:none;display:inline">
+ <path
+ d="m 3.6632464,51.336754 0,-12.532159"
+ id="path4190"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 9.9293259,45.070674 -12.532159,0"
+ id="path4192"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="M 8.0940337,49.501461 -0.76754091,40.639887"
+ id="path4194"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 8.0940334,40.639887 -8.86157401,8.861574"
+ id="path4196"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ <text
+ x="28.665253"
+ y="25.402542"
+ id="text4031"
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="28.665253"
+ y="25.402542"
+ id="tspan4033"
+ style="font-size:12px;fill:#ffffff;fill-opacity:1">2</tspan></text>
+</svg>
diff --git a/icons/timer-15.svg b/icons/timer-15.svg
new file mode 100644
index 0000000..0203672
--- /dev/null
+++ b/icons/timer-15.svg
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="55"
+ height="55"
+ id="svg2">
+ <metadata
+ id="metadata23">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs21" />
+ <g
+ id="layer2"
+ style="display:inline">
+ <path
+ d="m 45.925926,24.25926 a 21.296297,21.296297 0 1 1 -42.5925939,0 21.296297,21.296297 0 1 1 42.5925939,0 z"
+ transform="matrix(0.89950544,0,0,0.89950544,5.3455146,7.678664)"
+ id="path3791"
+ style="fill:#ffffff;fill-opacity:1;stroke:none" />
+ </g>
+ <g
+ id="layer1"
+ style="display:inline">
+ <path
+ d="m 27.665302,29.407631 14.817701,0.09176"
+ id="path3897"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ id="layer3"
+ style="display:none">
+ <path
+ d="m 36.539789,13.013087 c 9.161862,4.992537 12.541772,16.466949 7.549234,25.628815 L 27.5,29.602112 z"
+ id="path4311"
+ style="fill:#808080;fill-opacity:1;stroke:none" />
+ <path
+ d="M 27.571522,30.159444 39.546676,36.73611"
+ id="path4283"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ id="layer4"
+ style="display:inline">
+ <g
+ id="g4315"
+ style="display:inline">
+ <path
+ d="m 27.5,15.555556 0,3.888889"
+ id="path3811"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 41.444444,29.5 -3.888889,0"
+ id="path3823"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 13.555556,29.5 3.888889,0"
+ id="path3829"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 27.5,43.444444 0,-3.888889"
+ id="path3854"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 22.873381,5.940543 9.622594,0"
+ id="path4076"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 38.96491,8.681773 5.209549,3.91786"
+ id="path4080"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 16.03509,8.681773 -5.209549,3.91786"
+ id="path4107"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <path
+ d="m 45.925926,24.25926 a 21.296297,21.296297 0 1 1 -42.5925939,0 21.296297,21.296297 0 1 1 42.5925939,0 z"
+ transform="matrix(0.89950544,0,0,0.89950544,5.3455146,7.6786635)"
+ id="path4380"
+ style="fill:none;stroke:#000000;stroke-width:3.89102697;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+ </g>
+ <g
+ id="layer5"
+ style="display:inline">
+ <g
+ transform="matrix(0.88661828,0,0,0.88661828,43.331119,7.0338455)"
+ id="g4198"
+ style="stroke-width:1.69182169;stroke-miterlimit:4;stroke-dasharray:none;display:inline">
+ <path
+ d="m 3.6632464,51.336754 0,-12.532159"
+ id="path4190"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 9.9293259,45.070674 -12.532159,0"
+ id="path4192"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="M 8.0940337,49.501461 -0.76754091,40.639887"
+ id="path4194"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 8.0940334,40.639887 -8.86157401,8.861574"
+ id="path4196"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ <g
+ transform="matrix(0,1.036341,-0.91759527,0,55.382638,1.4335988)"
+ id="g3906">
+ <path
+ d="M 15.420073,29.629934 C 15.062375,23.128916 19.85161,18.730516 23.159983,16.583162"
+ id="path3132"
+ style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 18.103076,16.964283 5.103526,-0.770344"
+ id="path3134"
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="M 21.503719,21.743171 23.302895,16.86799"
+ id="path3136"
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+</svg>
diff --git a/icons/timer-30.svg b/icons/timer-30.svg
new file mode 100644
index 0000000..80259a8
--- /dev/null
+++ b/icons/timer-30.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="55"
+ height="55"
+ id="svg2">
+ <metadata
+ id="metadata23">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs21" />
+ <g
+ id="layer2"
+ style="display:inline">
+ <path
+ d="m 45.925926,24.25926 a 21.296297,21.296297 0 1 1 -42.5925939,0 21.296297,21.296297 0 1 1 42.5925939,0 z"
+ transform="matrix(0.89950544,0,0,0.89950544,5.3455146,7.678664)"
+ id="path3791"
+ style="fill:#ffffff;fill-opacity:1;stroke:none" />
+ </g>
+ <g
+ id="layer1"
+ style="display:inline">
+ <path
+ d="m 27.611054,29.619307 0.09844,13.329723"
+ id="path3897"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ id="layer3"
+ style="display:none">
+ <path
+ d="m 36.539789,13.013087 c 9.161862,4.992537 12.541772,16.466949 7.549234,25.628815 L 27.5,29.602112 z"
+ id="path4311"
+ style="fill:#808080;fill-opacity:1;stroke:none" />
+ <path
+ d="M 27.571522,30.159444 39.546676,36.73611"
+ id="path4283"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <path
+ d="m 27.5,15.555556 0,3.888889"
+ id="path3811"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 13.555556,29.5 3.888889,0"
+ id="path3829"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 22.873381,5.940543 9.622594,0"
+ id="path4076"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 38.96491,8.681773 5.209549,3.91786"
+ id="path4080"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 16.03509,8.681773 -5.209549,3.91786"
+ id="path4107"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 46.656135,29.5 a 19.156135,19.156135 0 1 1 -38.31227,0 19.156135,19.156135 0 1 1 38.31227,0 z"
+ id="path4380"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+ <g
+ id="layer5"
+ style="display:inline">
+ <g
+ transform="matrix(0.88661828,0,0,0.88661828,43.331119,7.0338455)"
+ id="g4198"
+ style="stroke-width:1.69182169;stroke-miterlimit:4;stroke-dasharray:none;display:inline">
+ <path
+ d="m 3.6632464,51.336754 0,-12.532159"
+ id="path4190"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 9.9293259,45.070674 -12.532159,0"
+ id="path4192"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="M 8.0940337,49.501461 -0.76754091,40.639887"
+ id="path4194"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 8.0940334,40.639887 -8.86157401,8.861574"
+ id="path4196"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ <path
+ d="m 31.530578,17.738665 c 10.235014,2.22597 10.531011,16.529409 3.045249,21.280106"
+ id="path3132"
+ style="fill:none;stroke:#000000;stroke-width:2.43790579;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <g
+ transform="matrix(-0.92861996,-0.37103232,0.37103232,-0.92861996,9.5683601,66.438606)"
+ id="g3960">
+ <path
+ d="m -16.722792,35.257414 4.198286,-3.293553"
+ id="path3134"
+ style="fill:none;stroke:#000000;stroke-width:1.95032465;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m -11.460555,37.246887 -0.664036,-4.800764"
+ id="path3136"
+ style="fill:none;stroke:#000000;stroke-width:1.95032465;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+</svg>
diff --git a/icons/timer-300.svg b/icons/timer-300.svg
new file mode 100644
index 0000000..de23f08
--- /dev/null
+++ b/icons/timer-300.svg
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="55"
+ height="55"
+ id="svg2">
+ <metadata
+ id="metadata23">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs21" />
+ <g
+ id="layer2"
+ style="display:inline">
+ <path
+ d="m 45.925926,24.25926 a 21.296297,21.296297 0 1 1 -42.5925939,0 21.296297,21.296297 0 1 1 42.5925939,0 z"
+ transform="matrix(0.89950544,0,0,0.89950544,5.3455146,7.678664)"
+ id="path3791"
+ style="fill:#ffffff;fill-opacity:1;stroke:none" />
+ </g>
+ <g
+ id="layer3"
+ style="display:none">
+ <path
+ d="m 36.539789,13.013087 c 9.161862,4.992537 12.541772,16.466949 7.549234,25.628815 L 27.5,29.602112 z"
+ id="path4311"
+ style="fill:#808080;fill-opacity:1;stroke:none" />
+ <path
+ d="M 27.571522,30.159444 39.546676,36.73611"
+ id="path4283"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ id="layer4"
+ style="display:inline">
+ <g
+ id="g4315"
+ style="display:inline">
+ <path
+ d="m 27.5,15.555556 0,3.888889"
+ id="path3811"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 41.444444,29.5 -3.888889,0"
+ id="path3823"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 13.555556,29.5 3.888889,0"
+ id="path3829"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 27.5,43.444444 0,-3.888889"
+ id="path3854"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 22.873381,5.940543 9.622594,0"
+ id="path4076"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 38.96491,8.681773 5.209549,3.91786"
+ id="path4080"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 16.03509,8.681773 -5.209549,3.91786"
+ id="path4107"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <path
+ d="m 45.925926,24.25926 a 21.296297,21.296297 0 1 1 -42.5925939,0 21.296297,21.296297 0 1 1 42.5925939,0 z"
+ transform="matrix(0.89950544,0,0,0.89950544,5.3455146,7.6786635)"
+ id="path4380"
+ style="fill:none;stroke:#000000;stroke-width:3.89102697;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+ </g>
+ <g
+ id="layer5"
+ style="display:inline">
+ <g
+ transform="matrix(0.88661828,0,0,0.88661828,43.331119,7.0338455)"
+ id="g4198"
+ style="stroke-width:1.69182169;stroke-miterlimit:4;stroke-dasharray:none;display:inline">
+ <path
+ d="m 3.6632464,51.336754 0,-12.532159"
+ id="path4190"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 9.9293259,45.070674 -12.532159,0"
+ id="path4192"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="M 8.0940337,49.501461 -0.76754091,40.639887"
+ id="path4194"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 8.0940334,40.639887 -8.86157401,8.861574"
+ id="path4196"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ <g
+ transform="matrix(1.184947,0,0,0.83445704,-39.86448,7.0853267)"
+ id="layer1-0"
+ style="fill:#000000;fill-opacity:1;display:inline">
+ <path
+ d="M 56.839201,25.435699 56.702942,10.997854 c 0,0 11.740462,-0.06098 11.91551,15.454617 C 68.7935,41.968068 56.944099,42.69277 56.944099,42.69277 z"
+ id="path3897-2"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <text
+ x="31.068323"
+ y="33.351429"
+ id="text4031"
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="31.068323"
+ y="33.351429"
+ id="tspan4033"
+ style="font-size:12px;fill:#ffffff;fill-opacity:1">5</tspan></text>
+</svg>
diff --git a/icons/timer-60.svg b/icons/timer-60.svg
new file mode 100644
index 0000000..e89eb0d
--- /dev/null
+++ b/icons/timer-60.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="55"
+ height="55"
+ id="svg2">
+ <metadata
+ id="metadata23">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs21" />
+ <g
+ id="layer2"
+ style="display:inline">
+ <path
+ d="m 45.925926,24.25926 a 21.296297,21.296297 0 1 1 -42.5925939,0 21.296297,21.296297 0 1 1 42.5925939,0 z"
+ transform="matrix(0.89950544,0,0,0.89950544,5.3455146,7.678664)"
+ id="path3791"
+ style="fill:#ffffff;fill-opacity:1;stroke:none" />
+ </g>
+ <g
+ id="layer1"
+ style="display:inline">
+ <path
+ d="m 27.5,29.5 0,-14"
+ id="path3897"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ id="layer3"
+ style="display:none">
+ <path
+ d="m 36.539789,13.013087 c 9.161862,4.992537 12.541772,16.466949 7.549234,25.628815 L 27.5,29.602112 z"
+ id="path4311"
+ style="fill:#808080;fill-opacity:1;stroke:none" />
+ <path
+ d="M 27.571522,30.159444 39.546676,36.73611"
+ id="path4283"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <path
+ d="m 22.873381,5.940543 9.622594,0"
+ id="path4076"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 38.96491,8.681773 5.209549,3.91786"
+ id="path4080"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 16.03509,8.681773 -5.209549,3.91786"
+ id="path4107"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 46.656135,29.5 a 19.156135,19.156135 0 1 1 -38.31227,0 19.156135,19.156135 0 1 1 38.31227,0 z"
+ id="path4380"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+ <g
+ id="layer5"
+ style="display:inline">
+ <g
+ transform="matrix(0.88661828,0,0,0.88661828,43.331119,7.0338455)"
+ id="g4198"
+ style="stroke-width:1.69182169;stroke-miterlimit:4;stroke-dasharray:none;display:inline">
+ <path
+ d="m 3.6632464,51.336754 0,-12.532159"
+ id="path4190"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 9.9293259,45.070674 -12.532159,0"
+ id="path4192"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="M 8.0940337,49.501461 -0.76754091,40.639887"
+ id="path4194"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 8.0940334,40.639887 -8.86157401,8.861574"
+ id="path4196"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.69182169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ <g
+ transform="matrix(1.036341,0,0,0.91759527,-0.80910097,3.4667904)"
+ id="g3906">
+ <path
+ d="m 35.767761,19.586168 c 7.419178,7.751636 0.65992,21.346159 -7.890471,21.666289 -8.550391,0.32013 -12.099519,-5.121504 -12.457217,-11.622523 -0.357698,-6.501018 4.431537,-10.899418 7.73991,-13.046772"
+ id="path3132"
+ style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 18.103076,16.964283 5.103526,-0.770344"
+ id="path3134"
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="M 21.503719,21.743171 23.302895,16.86799"
+ id="path3136"
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+</svg>