From 2f9b9287450b07655f9882328e4ed6e31a97c787 Mon Sep 17 00:00:00 2001 From: gryf Date: Sun, 10 Jun 2018 20:25:29 +0200 Subject: [PATCH] Initial commit --- README.rst | 139 +++++++++++++++++++++++ example.yaml | 33 ++++++ images/grid.png | Bin 0 -> 21370 bytes images/horizontal.png | Bin 0 -> 15392 bytes images/single.png | Bin 0 -> 7633 bytes images/vertical.png | Bin 0 -> 39627 bytes worldclock.py | 259 ++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 431 insertions(+) create mode 100644 README.rst create mode 100644 example.yaml create mode 100644 images/grid.png create mode 100644 images/horizontal.png create mode 100644 images/single.png create mode 100644 images/vertical.png create mode 100755 worldclock.py diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..1842e49 --- /dev/null +++ b/README.rst @@ -0,0 +1,139 @@ +pyGTKWorldClock +=============== + +This is simple world clock application written in Python and Cairo. + +Requirement +----------- + +- Python3 +- PyCairo +- PyGObject + +Configuration +------------- + +See `example.yaml`_ for reference. Basically config file is a YAML file, which +contain a definition of timezone and the label, which in the end maps as python +dictionary: + +.. code:: python + + {'tz': 'string of timezone' + 'label': 'string of some label'} + +For example, single clock can be represended as: + +.. code:: yaml + + --- + - + tz: UTC + label: The real world clock + +which would have an effect: + +.. image:: /images/single.png + :alt: single clock + +Note, that it have to be a list in YAML format (line started with ``-``) +followed by a definition of key-value of timezone and a label. Analogically, +several clocks (let's take an example of US timezones) can be vertically +arranged by providing a *list* of *key-values*: + +.. code:: yaml + + --- + - + tz: US/Hawaii + label: Honolulu, Hawaii, US + - + tz: US/Alaska + label: Anchorage, Alaska, US + - + tz: US/Pacific + label: Portland, Oregon, US + - + tz: US/Mountain + label: Salt Lake City, Utah, US + - + tz: US/Central + label: Austin, Texas, US + - + tz: US/Eastern + label: New York, US + +and the result: + +.. image:: /images/vertical.png + :alt: single clock + +Same in horizontal arragement: + +.. code:: yaml + + --- + - + - + tz: US/Hawaii + label: Honolulu, Hawaii, US + - + tz: US/Alaska + label: Anchorage, Alaska, US + - + tz: US/Pacific + label: Portland, Oregon, US + - + tz: US/Mountain + label: Salt Lake City, Utah, US + - + tz: US/Central + label: Austin, Texas, US + - + tz: US/Eastern + label: New York, US + +obviously the result would be: + +.. image:: /images/horizontal.png + :alt: single clock + +And finally the same in two rows, three columns: + +.. code:: yaml + + --- + - + - + tz: US/Hawaii + label: Honolulu, Hawaii, US + - + tz: US/Alaska + label: Anchorage, Alaska, US + - + tz: US/Pacific + label: Portland, Oregon, US + - + - + tz: US/Mountain + label: Salt Lake City, Utah, US + - + tz: US/Central + label: Austin, Texas, US + - + tz: US/Eastern + label: New York, US + +which will look like that: + +.. image:: /images/grid.png + :alt: single clock + +You can experiment to get the layout of your choice. + +License +------- + + + +.. _example.yaml: example.yaml diff --git a/example.yaml b/example.yaml new file mode 100644 index 0000000..aec9f66 --- /dev/null +++ b/example.yaml @@ -0,0 +1,33 @@ +--- +- + - + tz: US/Pacific + label: Portland Oregon, US + - + tz: US/Central + label: Austin Texas, US + - + tz: US/Eastern + label: New York, US + - + tz: UTC + label: UTC + - + tz: Europe/London + label: London, UK +- + - + tz: Europe/Warsaw + label: Warsaw, Poland + - + tz: Europe/Moscow + label: Moscow, Russia + - + tz: Asia/Shanghai + label: Shanghai, China + - + tz: Asia/Tokyo + label: Tokyo, Japan + - + tz: Australia/Melbourne + label: Melbourne, Australia diff --git a/images/grid.png b/images/grid.png new file mode 100644 index 0000000000000000000000000000000000000000..354326e240c6dc7a74854d869299cfbb88fcca4a GIT binary patch literal 21370 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 T+&Ir@6?{$|$Jke*&PV?N81+0s literal 0 HcmV?d00001 diff --git a/images/horizontal.png b/images/horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..1f797b09063320de2a0de7073506a01588f26b79 GIT binary patch literal 15392 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 J%cYHi{ty4&ZY}@- literal 0 HcmV?d00001 diff --git a/images/vertical.png b/images/vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..ba3df9fafd89c8c74ea35c23c540f9728cd7c717 GIT binary patch literal 39627 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 literal 0 HcmV?d00001 diff --git a/worldclock.py b/worldclock.py new file mode 100755 index 0000000..7b5f9d6 --- /dev/null +++ b/worldclock.py @@ -0,0 +1,259 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Simple Cairo world clock. Even if it's using GTK, it's ignore most of the +possible goodies, which GTK provides, because of limitations, that DrawingArea +and container managers in GTK have. + +Putting DA in grid for example, will kind of work, but, you'll end up with +this: + - every single DA in a grid cells will have 1x1 px dimension, + - unless you initialize DA with some values for its width and height, but + you'll loose scalability of the widget, + - every thing you draw on DA will be "invisible", since coordinates, which + we can get are limited to the current widget (DrawingArea descendant) + which will get you relative coordinates, and there is no way to get + coordinates of the grid cell, so that you'll end up with several + DrawingAreas, which have absolute coordinates just like the first one, + and the others just will be hidden behind the first one in the best + case, and in worst - view window od the DrawingArea will be shifted by + the selected cell, which eventually end up with no drawings at all. +As for Box manager, you'll suffer from the last item of the grid list above, +which will end up with "invisible" or misplaced widget in the box itself. + +Due to this stupid design, DrawingArea descendant object should be placed +directly in window object. Using single clock in container manager (like grid, +table, box) will make you hurt, and you'll be swearing a lot like I did. Don't +do that. It's a waste of time. +""" +import argparse +from datetime import datetime +import math +import os +import sys + +import cairo +import gi +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk +from gi.repository import GObject +import pytz +import yaml + + +CLOCK_DA_DIAMETER = 140 +DATE_FMT = '%Y-%m-%d %H:%M %Z' +CFG_GNAME = "gtkworldclock.yaml" + + +class Clock: + """Clock class for conveniently keeping it's state""" + def __init__(self, conf, row=0, col=0, size=CLOCK_DA_DIAMETER, + show_seconds=True): + self.tz = pytz.timezone(conf['tz']) + self.label = conf['label'] + self.row = row + self.col = col + self.now = None + self.size = size + self.show_seconds = show_seconds + + self._calculate_coordinates() + + def _calculate_coordinates(self): + self.x = self.col * self.size + self.size / 2 + self.y = self.row * self.size + self.size / 2 + self.y = self.y + self.row * self.size / 4 + self.radius = self.size / 2 - 5 + + def _show_caption(self, ctx): + self._calculate_coordinates() + ctx.save() + ctx.set_font_size(self.radius / 7) + x, y, width, height, dx, dy = ctx.text_extents(self.label) + ctx.move_to(self.x - x/2 - width/2, + self.y + self.radius + 2 * self.radius / 10) + ctx.show_text(self.label) + + date = self.now.strftime(DATE_FMT) + + x, y, width, height, dx, dy = ctx.text_extents(date) + ctx.move_to(self.x - x/2 - width/2, + self.y + self.radius + 2 * self.radius / 10 + + self.size / 10) + ctx.show_text(date) + ctx.restore() + + def _draw_face(self, ctx): + self._calculate_coordinates() + ctx.move_to(self.x + self.radius * math.cos(0 * math.pi/30), + self.y + self.radius * math.sin(0 * math.pi/30)) + ctx.arc(self.x, self.y, self.radius, 0, 2 * math.pi) + ctx.set_source_rgb(1, 1, 1) + ctx.fill_preserve() + ctx.set_source_rgb(0, 0, 0) + ctx.stroke() + + def _draw_ticks(self, ctx): + self._calculate_coordinates() + for i in range(180): + ctx.save() + if i % 5 == 0: + if i % 3 == 0: + # hours: 12, 3, 6, and 9 + inset = 0.15 * self.radius + else: + # all other hours + inset = 0.1 * self.radius + ctx.set_line_width(0.5 * ctx.get_line_width()) + else: + # seconds + inset = 0.05 * self.radius + ctx.set_line_width(0.25 * ctx.get_line_width()) + + ctx.move_to(self.x + (self.radius-inset) * + math.cos(i * math.pi/30), + self.y + (self.radius-inset) * + math.sin(i * math.pi/30)) + ctx.line_to(self.x + self.radius * math.cos(i * math.pi/30), + self.y + self.radius * math.sin(i * math.pi/30)) + ctx.stroke() + ctx.restore() + + def _draw_hands(self, ctx): + self._calculate_coordinates() + self.now = datetime.now(self.tz) + hours = self.now.hour * math.pi / 6 + minutes = self.now.minute * math.pi / 30 + seconds = self.now.second * math.pi / 30 + + ctx.set_line_cap(cairo.LINE_CAP_ROUND) + + # draw the hours hand + ctx.save() + ctx.set_line_width(3) + ctx.move_to(self.x, self.y) + ctx.line_to(self.x + math.sin(hours + minutes/12) * + (self.radius * 0.5), + self.y - math.cos(hours + minutes/12) * + (self.radius * 0.5)) + ctx.stroke() + ctx.restore() + + # draw the minutes hand + ctx.save() + ctx.set_line_width(2) + ctx.move_to(self.x, self.y) + ctx.line_to(self.x + math.sin(minutes + seconds/60) * + (self.radius * 0.8), + self.y - math.cos(minutes + seconds/60) * + (self.radius * 0.8)) + ctx.stroke() + ctx.restore() + + if not self.show_seconds: + return + + # draw the seconds hand + ctx.save() + ctx.set_line_width(1) + ctx.move_to(self.x, self.y) + ctx.line_to(self.x + math.sin(seconds) * (self.radius * 0.9), + self.y - math.cos(seconds) * (self.radius * 0.9)) + ctx.stroke() + ctx.restore() + + +class Clocks(Gtk.DrawingArea): + + def __init__(self, conf=None, size=CLOCK_DA_DIAMETER, + disable_seconds=False): + super(Clocks, self).__init__() + self._conf = conf + self._clocks = [] + self.size = size + self.show_seconds = not disable_seconds + + self._parse_conf() + + def _parse_conf(self): + self.height = len(self._conf) * (self.size + self.size / 4) + width = 0 + if isinstance(self._conf[0], dict): + self.width = self.size + for row_no, conf in enumerate(self._conf): + self._clocks.append(Clock(conf, row_no, 0, self.size, + self.show_seconds)) + return + + for row_no, row in enumerate(self._conf): + width = len(row) if len(row) > width else width + for col_no, conf in enumerate(row): + self._clocks.append(Clock(conf, row_no, col_no, self.size, + self.show_seconds)) + + self.width = self.size * width + + def run(self): + self.connect('draw', self._draw) + GObject.timeout_add(100, self.on_timeout) + win = Gtk.Window() + win.set_title('World Clock') + # win.set_resizable(False) + win.connect('destroy', lambda w: Gtk.main_quit()) + win.set_default_size(int(self.width), int(self.height)) + win.resize(int(self.width), int(self.height)) + win.add(self) + win.show_all() + Gtk.main() + + def on_timeout(self): + """Tic-toc""" + win = self.get_window() + rect = self.get_allocation() + win.invalidate_rect(rect, True) + return True + + def _draw(self, da, cairo_ctx): + for clock in self._clocks: + clock._draw_face(cairo_ctx) + clock._draw_ticks(cairo_ctx) + clock._draw_hands(cairo_ctx) + clock._show_caption(cairo_ctx) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("-c", "--config", help="Provide configuration as YAML" + "file.") + parser.add_argument("-s", "--size", help="Size of the clock faces, " + "default %d" % CLOCK_DA_DIAMETER, type=int, + default=CLOCK_DA_DIAMETER) + parser.add_argument("-d", "--disable-seconds", help="Disable seconds in " + "clock face", action="store_true", default=False) + args = parser.parse_args() + args = parser.parse_args() + + conf = None + xdg_conf = os.getenv('XDG_CONFIG_HOME', os.path.expanduser('~/.config')) + + if not args.config: + conf_path = os.path.join(xdg_conf, CFG_GNAME) + if not os.path.exists(conf_path): + print("Cannot find proper configuration for the World Clock. " + "Please provide proper configuration in %s file, or use " + "`--config` switch for providing it at the " + "commandline." % conf_path) + sys.exit(1) + else: + conf_path = args.config + + with open(conf_path) as fobj: + conf = yaml.load(fobj) + + clocks = Clocks(conf, size=args.size, disable_seconds=args.disable_seconds) + clocks.run() + + +if __name__ == "__main__": + main()