@@ -29,7 +29,11 @@ public class Maya.View.CalendarView : Gtk.Box {
2929 public signal void on_event_add (DateTime date );
3030 public signal void selection_changed (DateTime new_date );
3131
32- public Hdy . HeaderBar header_bar { get ; construct; }
32+ public Gtk . SearchEntry search_bar;
33+ private Calendar . Widgets . DateSwitcher month_switcher;
34+ private Calendar . Widgets . DateSwitcher year_switcher;
35+
36+ public Hdy . HeaderBar header_bar { get ; private set ; }
3337 public DateTime ? selected_date { get ; private set ; }
3438
3539 private WeekLabels weeks { get ; private set ; }
@@ -67,7 +71,49 @@ public class Maya.View.CalendarView : Gtk.Box {
6771
6872 var info_bar = new Calendar .Widgets .ConnectivityInfoBar ();
6973
70- header_bar = new Calendar .Widgets .HeaderBar ();
74+ var application_instance = ((Gtk . Application ) GLib . Application . get_default ());
75+
76+ var button_today = new Gtk .Button .from_icon_name (" calendar-go-today" , Gtk . IconSize . LARGE_TOOLBAR ) {
77+ action_name = Maya . MainWindow . ACTION_PREFIX + Maya . MainWindow . ACTION_SHOW_TODAY
78+ };
79+ button_today. tooltip_markup = Granite . markup_accel_tooltip (
80+ application_instance. get_accels_for_action (button_today. action_name),
81+ _(" Go to today's date" )
82+ );
83+
84+ month_switcher = new Calendar .Widgets .DateSwitcher (10 ) {
85+ valign = CENTER
86+ };
87+ year_switcher = new Calendar .Widgets .DateSwitcher (- 1 ) {
88+ valign = CENTER
89+ };
90+
91+ var calmodel = Calendar . EventStore . get_default ();
92+ set_switcher_date (calmodel. month_start);
93+
94+ var spinner = new Maya .View .Widgets .DynamicSpinner ();
95+
96+ var contractor = new Maya .View .Widgets .ContractorButtonWithMenu (_(" Export or Share the default Calendar" ));
97+
98+ var source_popover = new Calendar .Widgets .SourcePopover ();
99+
100+ var menu_button = new Gtk .MenuButton () {
101+ image = new Gtk .Image .from_icon_name (" open-menu" , Gtk . IconSize . LARGE_TOOLBAR ),
102+ popover = source_popover,
103+ tooltip_text = _ ("Manage Calendars ")
104+ };
105+
106+ header_bar = new Hdy .HeaderBar () {
107+ show_close_button = true
108+ };
109+ header_bar.pack_start (month_switcher );
110+ header_bar.pack_start (year_switcher );
111+ header_bar.pack_start (button_today );
112+ header_bar.pack_end (menu_button );
113+ header_bar.pack_end (contractor );
114+ header_bar.pack_end (spinner );
115+
116+ header_bar.get_style_context ().add_class (Gtk .STYLE_CLASS_FLAT );
71117
72118 stack = new Gtk .Stack ();
73119 stack. expand = true ;
@@ -115,6 +161,19 @@ public class Maya.View.CalendarView : Gtk.Box {
115161 return false ;
116162 });
117163 });
164+
165+ month_switcher.left_clicked.connect (() => Calendar.EventStore.get_default ().change_month (-1 ));
166+ month_switcher.right_clicked.connect (() => Calendar.EventStore.get_default ().change_month (1 ));
167+ year_switcher.left_clicked.connect (() => Calendar.EventStore.get_default ().change_year (-1 ));
168+ year_switcher.right_clicked.connect (() => Calendar.EventStore.get_default ().change_year (1 ));
169+ calmodel.parameters_changed.connect (() => {
170+ set_switcher_date (calmodel. month_start);
171+ });
172+ }
173+
174+ private void set_switcher_date (DateTime date) {
175+ month_switcher. text = date. format (" %OB " );
176+ year_switcher. text = date. format (" %Y " );
118177 }
119178
120179 public override bool scroll_event (Gdk . EventScroll event) {
0 commit comments