Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/GnomeMoonActivity.py
diff options
context:
space:
mode:
Diffstat (limited to 'GnomeMoonActivity.py')
-rw-r--r--GnomeMoonActivity.py228
1 files changed, 228 insertions, 0 deletions
diff --git a/GnomeMoonActivity.py b/GnomeMoonActivity.py
new file mode 100644
index 0000000..d55bb75
--- /dev/null
+++ b/GnomeMoonActivity.py
@@ -0,0 +1,228 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright 2008 Gary C. Martin
+
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+# Activity web site: http://wiki.laptop.org/go/Moon
+# Created: Febuary 2008
+# Author: gary@garycmartin.com
+# Home page: http://www.garycmartin.com/
+
+# Febrero 2012
+# Correcciones, Simplificación y Reestructuración Modular:
+# Desarrollo de CalendarButton + MoonCalendar:
+# Instalador y Portado a gnome:
+# Flavio Danesse <fdanesse@gmail.com> CeibalJAM! - Uruguay - Activity Central
+# Traducciones a Español:
+# Ana Cichero <ana.cichero@gmail.com> CeibalJAM! - Uruguay
+
+import gtk, pygtk, time, math, gobject, sys
+from gettext import gettext as _
+import MoonGlobals as MG
+from Moonwidgets import *
+
+IMAGE_SIZE = 726
+HALF_SIZE = IMAGE_SIZE / 2
+SECONDS_PER_DAY = 86400.0
+format = "%Y-%m-%d %H:%M"
+
+class MoonActivity(gtk.Window):
+ def __init__(self):
+ gtk.Window.__init__(self)
+ self.set_title(_("Luna"))
+ self.set_icon_from_file(os.path.join(MG.ICONOS,"luna-ico.png"))
+ self.set_resizable(True)
+ self.set_size_request(MG.WIDTH, MG.HEIGHT)
+ self.set_position(gtk.WIN_POS_CENTER)
+ self.modify_bg(gtk.STATE_NORMAL, MG.BACKGROUND)
+
+ self.main_view = None
+ self.mooncalendar = None
+ self.info_panel = None
+ self.info = None
+ self.luna_hoy = None
+ self.label_emisferio = None
+ self.aspectframe = None
+
+ self.set_layout()
+
+ self.show_all()
+ self.realize()
+ self.maximize()
+
+ self.connect("delete_event", self.delete_event)
+ self.luna_hoy.connect("expose_event", self.repaint)
+
+ self.actualizador = gobject.timeout_add(1000, self.handle)
+
+ def set_layout(self):
+ anio, mes, fecha, hora = MG.get_date_time_now()
+ self.luna_hoy = CalendarButton(anio, mes, fecha, hora)
+ self.mooncalendar = MoonCalendar()
+ self.aspectframe = gtk.AspectFrame()
+ self.aspectframe.modify_bg(gtk.STATE_NORMAL, MG.BACKGROUND)
+ self.aspectframe.add(self.luna_hoy)
+
+ cajabase = gtk.VBox()
+ self.main_view = gtk.HBox()
+ cajabase.pack_end(self.main_view, True, True, 5)
+
+ view_tool_bar = gtk.Toolbar()
+ view_tool_bar.modify_bg(gtk.STATE_NORMAL, MG.BACKGROUND)
+ cajabase.pack_start(view_tool_bar, False, False, 0)
+
+ boton = gtk.ToggleToolButton()
+ pixbuf= gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(MG.ICONOS,'grid-ico.svg'), 32, 32)
+ imagen = gtk.Image()
+ imagen.set_from_pixbuf(pixbuf)
+ boton.set_icon_widget(imagen)
+ imagen.show()
+ boton.show()
+ view_tool_bar.append_item("", "", "",boton, self.toggle_grid_clicked, user_data=None)
+ boton.modify_bg(gtk.STATE_NORMAL, MG.BACKGROUND)
+
+ boton = gtk.ToggleToolButton()
+ pixbuf= gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(MG.ICONOS,'hemi-ico.svg'), 32, 32)
+ imagen = gtk.Image()
+ imagen.set_from_pixbuf(pixbuf)
+ boton.set_icon_widget(imagen)
+ imagen.show()
+ boton.show()
+ view_tool_bar.append_item("", _(""), "",boton, self.toggle_hemisphere_clicked, user_data=None)
+ boton.modify_bg(gtk.STATE_NORMAL, MG.BACKGROUND)
+
+ boton = gtk.ToggleToolButton()
+ pixbuf= gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(MG.ICONOS,'calendario-ico.svg'), 32, 32)
+ imagen = gtk.Image()
+ imagen.set_from_pixbuf(pixbuf)
+ boton.set_icon_widget(imagen)
+ imagen.show()
+ boton.show()
+ view_tool_bar.append_item("", "", "",boton, self.switch_calendar_luna, user_data=None)
+ boton.modify_bg(gtk.STATE_NORMAL, MG.BACKGROUND)
+
+ self.label_emisferio = gtk.Label()
+ view_tool_bar.append_widget(self.label_emisferio, None, None)
+ self.label_emisferio.modify_bg(gtk.STATE_NORMAL, MG.BACKGROUND)
+ self.label_emisferio.modify_fg(gtk.STATE_NORMAL, MG.FOREGROUND)
+ self.label_emisferio.show()
+
+ view_tool_bar.show_all()
+
+ info_scroll = gtk.ScrolledWindow()
+ info_scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
+ self.info_panel = gtk.VBox()
+ self.info = gtk.TextView()
+ self.info.set_property("sensitive", False)
+ self.info.set_border_window_size(gtk.TEXT_WINDOW_TOP, 10)
+ self.info.set_border_window_size(gtk.TEXT_WINDOW_LEFT, 10)
+ self.info.set_border_window_size(gtk.TEXT_WINDOW_RIGHT, 10)
+ self.info.set_border_window_size(gtk.TEXT_WINDOW_BOTTOM, 10)
+ self.info_panel.pack_start(self.info, False, False, 0)
+ info_scroll.add_with_viewport(self.info_panel)
+
+ self.main_view.pack_start(info_scroll, False, False, 5)
+ self.main_view.pack_end(self.aspectframe, True, True, 5)
+ self.add(cajabase)
+
+ self.mooncalendar.set_mes(anio, mes, fecha, hora)
+ self.update_text_information_view()
+
+ def toggle_grid_clicked(self, widget= None):
+ self.luna_hoy.toggle_grid_clicked()
+ self.mooncalendar.toggle_grid_clicked(widget= None, actualizar = self.mooncalendar in self.aspectframe.get_children())
+
+ def toggle_hemisphere_clicked(self, widget= None):
+ self.luna_hoy.toggle_hemisphere_clicked()
+ self.mooncalendar.toggle_hemisphere_clicked(widget= None, actualizar = self.mooncalendar in self.aspectframe.get_children())
+
+ def switch_calendar_luna(self, widget):
+ if self.mooncalendar in self.aspectframe.get_children():
+ self.aspectframe.remove(self.mooncalendar)
+ self.aspectframe.add(self.luna_hoy)
+ self.luna_hoy.show_all()
+ elif self.luna_hoy in self.aspectframe.get_children():
+ self.aspectframe.remove(self.luna_hoy)
+ self.aspectframe.add(self.mooncalendar)
+ self.mooncalendar.show_all()
+ self.show_all()
+ self.realize()
+
+ def handle(self):
+ self.update_text_information_view()
+ if self.luna_hoy in self.aspectframe.get_children():
+ self.luna_hoy.actualizar()
+ return True
+
+ def repaint(self, widget= None, event= None):
+ x,y,w,h= self.luna_hoy.get_allocation()
+ anchoboton, altoboton = (w,h)
+ tamanioboton = min( [anchoboton,altoboton] )
+ self.luna_hoy.repaint(tamanioboton)
+
+ def delete_event(self, widget, event, data=None):
+ sys.exit(0)
+ return False
+
+ def update_text_information_view(self):
+ anio, mes, fecha, hora = MG.get_date_time_now()
+ hoy = "%s-%s-%s %s" % (anio, mes, fecha, hora)
+ ahora = time.mktime(time.strptime(hoy, MG.format))
+
+ self.luna_hoy.data_model.update_moon_calculations(ahora)
+
+ information = ""
+ information += _("Today's Moon Information\n\n")
+ information += "%s\n\n" % (MG.get_date_time())
+ information += _("Phase:\n%s\n\n") % (self.luna_hoy.data_model.moon_phase_name(self.luna_hoy.data_model.phase_of_moon))
+ information += _("Julian Date:\n%.2f (astronomical)\n\n") % (self.luna_hoy.data_model.julian_date)
+
+ tiempo = {'days':self.luna_hoy.data_model.days_old,
+ 'hours':self.luna_hoy.data_model.hours_old, 'minutes':self.luna_hoy.data_model.minutes_old}
+ information += _("Age:\n%(days).0f days, %(hours).0f hours, %(minutes).0f minutes\n\n") % tiempo
+
+ lunacion = {'phase':self.luna_hoy.data_model.phase_of_moon * 100, 'lunation':self.luna_hoy.data_model.lunation}
+ information += _("Lunation:\n%(phase).2f%% through lunation %(lunation)d\n\n") % lunacion
+ information += _("Surface Visibility:\n%.0f%% (estimated)\n\n") % (self.luna_hoy.data_model.percent_of_full_moon * 100)
+
+ selen = {'deg':self.luna_hoy.data_model.selenographic_deg, 'westOrEast':self.luna_hoy.data_model.west_or_east,
+ 'riseOrSet':self.luna_hoy.data_model.rise_or_set}
+ information += _(u"Selenographic Terminator Longitude:\n%(deg).1f\u00b0%(westOrEast)s (%(riseOrSet)s)\n\n") % selen
+
+ full = {'date':time.strftime(MG.LOCALE_DATE_FORMAT, time.localtime(self.luna_hoy.data_model.next_full_moon_date)),
+ 'days':self.luna_hoy.data_model.days_until_full_moon}
+ information += _("Next Full Moon:\n%(date)s in %(days).0f days\n\n") % full
+
+ new = {'date':time.strftime(MG.LOCALE_DATE_FORMAT, time.localtime(self.luna_hoy.data_model.next_new_moon_date)),
+ 'days':self.luna_hoy.data_model.days_until_new_moon}
+ information += _("Next New Moon:\n%(date)s in %(days).0f days\n\n") % new
+
+ lunare = {'date':time.strftime(MG.LOCALE_DATE_FORMAT, time.localtime(self.luna_hoy.data_model.next_lunar_eclipse_date)),
+ 'days':self.luna_hoy.data_model.days_until_lunar_eclipse}
+ information += _("Next Lunar eclipse:\n%(date)s in %(days).0f days\n\n") % lunare
+
+ solare = {'date':time.strftime(MG.LOCALE_DATE_FORMAT, time.localtime(self.luna_hoy.data_model.next_solar_eclipse_date)),
+ 'days':self.luna_hoy.data_model.days_until_solar_eclipse}
+ information += _("Next Solar eclipse:\n%(date)s in %(days).0f days") % solare
+ text = gtk.TextBuffer()
+ text.set_text(information)
+ self.info.set_buffer(text)
+ self.label_emisferio.set_text( "%s: %s" % (_("Vista Hemisferio"),_(self.luna_hoy.hemisphere_view)) )
+
+if __name__=="__main__":
+ MoonActivity()
+ gtk.main()