#+TITLE: GTK-3 Calendars and menus
#+DATE: 2014-03-08 12:00:00 UTC
#+DESCRIPTION: Load a glade file displaying a menu bar and calendar widget.
#+FILETAGS: GTK-3:python:widgets 
#+CATEGORY: python
#+SLUG: 08-calendars-and-menus
#+THUMBNAIL: ../../../images/gtk/tut08-menu-calendar.png
#+BEGIN_COMMENT
.. title: GTK-3 Calendars and menus
.. slug: 08-calendars-and-menus
.. date: 2014-03-08 12:00:00 UTC
.. tags: GTK-3, python, widgets
.. category: python
.. description: Load a glade file displaying a menu bar and calendar widget.
.. type: text
#+END_COMMENT

#+CAPTION: Calendar & menus 
[[../../../images/gtk/tut08-menu-calendar.png]]

Simple GTK application demonstrating the use of the date picker and application menus. The menu is hooked upto to show and hide the calendar and to set the text entry field to say hello world. Double clicking a day in the calendar widget will show the date in the text entry field.

#+BEGIN_SRC python
#!/usr/bin/env python
from gi.repository import Gtk, GLib, GObject


class application_gui:
    """Tutorial 08 menu, calendar widget."""
    count = 0

    def __init__(self):
        #load in our glade interface
        xml = Gtk.Builder()
        xml.add_from_file('tut08.glade')

        #grab our widget using get_object this is the name of the widget from glade, window1 is the default name
        self.window = xml.get_object('window1')
        self.text = xml.get_object('entry1')

        #load our widgets from the glade file
        self.widgets = {}
        self.widgets['calendar'] = xml.get_object('calendar1')
        self.widgets['menushow'] = xml.get_object('menuitem6')
        self.widgets['menuhide'] = xml.get_object('menuitem7')
        self.widgets['menuhello'] = xml.get_object('menuitem8')

        #connect to events, in this instance just quit our application
        self.window.connect('delete_event', Gtk.main_quit)
        self.window.connect('destroy', lambda quit: Gtk.main_quit())
        self.widgets['menushow'].connect('activate', self.showcalendar)
        self.widgets['menuhide'].connect('activate', self.hidecalendar)
        self.widgets['menuhello'].connect('activate', self.hello)
        self.widgets['calendar'].connect('day-selected', self.date_selected)

        #show the window else there is nothing to see :)
        self.window.show()

    def hidecalendar(self, *args):
        self.widgets['calendar'].hide()

    def showcalendar(self, *args):
        self.widgets['calendar'].show()

    def hello(self, *args):
        self.text.set_text('hello world')

    def date_selected(self, *args):
        date = self.widgets['calendar'].get_date()
        self.text.set_text(str(date[2]) + '-'+str(date[1]) + '-' + str(date[0]))

application = application_gui()
Gtk.main()
#+END_SRC
