Source code for timelinelib.wxgui.frames.mainframe.menus.viewmenu

# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018  Rickard Lindberg, Roger Lindberg
#
# This file is part of Timeline.
#
# Timeline 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 3 of the License, or
# (at your option) any later version.
#
# Timeline 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 Timeline.  If not, see <http://www.gnu.org/licenses/>.

import wx
import timelinelib.wxgui.frames.mainframe.menus as mid
from timelinelib.wxgui.frames.mainframe.menus.menubase import MenuBase
from timelinelib.plugin.factory import EVENTBOX_DRAWER
from timelinelib.plugin import factory
from timelinelib.proxies.drawingarea import DrawingAreaProxy

SHORTCUTS = (mid.ID_SIDEBAR, mid.ID_LEGEND, mid.ID_BALLOONS, mid.ID_ZOOMIN, mid.ID_ZOOMOUT, mid.ID_VERT_ZOOMIN,
             mid.ID_VERT_ZOOMOUT, mid.ID_PRESENTATION)
REQUIRING_TIMELINE = (mid.ID_LEGEND, mid.ID_BALLOONS, mid.ID_ZOOMIN, mid.ID_ZOOMOUT, mid.ID_VERT_ZOOMIN,
                      mid.ID_VERT_ZOOMOUT, mid.ID_PRESENTATION)
REQUIRING_VISIBLE_TIMELINE_VIEW = (mid.ID_SIDEBAR,)


[docs]class ViewMenu(MenuBase): """The View menu (a wx.Menu)."""
[docs] def __init__(self, main_frame): event_handlers = { mid.ID_TOOLBAR: lambda evt: main_frame.config.set('show_toolbar', evt.IsChecked()), mid.ID_SIDEBAR: lambda evt: main_frame.config.set('show_sidebar', evt.IsChecked()), mid.ID_LEGEND: lambda evt: main_frame.config.set('show_legend', evt.IsChecked()), mid.ID_LABEL_FILTERING: lambda evt: main_frame.config.set('show_label_filtering', evt.IsChecked()), mid.ID_BALLOONS: lambda evt: main_frame.config.set('balloon_on_hover', evt.IsChecked()), mid.ID_ZOOMIN: lambda evt: DrawingAreaProxy(main_frame).zoom_in(), mid.ID_ZOOMOUT: lambda evt: DrawingAreaProxy(main_frame).zoom_out(), mid.ID_VERT_ZOOMIN: lambda evt: DrawingAreaProxy(main_frame).vertical_zoom_in(), mid.ID_VERT_ZOOMOUT: lambda evt: DrawingAreaProxy(main_frame).vertical_zoom_out(), mid.ID_PRESENTATION: lambda evt: main_frame.controller.start_slide_show(), mid.ID_HIDE_DONE: lambda evt: main_frame.config.set('hide_events_done', evt.IsChecked()), mid.ID_LEFT_ALIGNMENT: lambda evt: main_frame.config.set('draw_point_events_to_right', True), mid.ID_CENTER_ALIGNMENT: lambda evt: main_frame.config.set('draw_point_events_to_right', False), } MenuBase.__init__(self, main_frame, event_handlers, SHORTCUTS, REQUIRING_TIMELINE, REQUIRING_VISIBLE_TIMELINE_VIEW) self._create_menu() self._bind_event_handlers() self._register_shortcuts() self._register_menus_requiring_timeline() self._check_view_menu_items()
def _create_menu(self): self.Append(mid.ID_TOOLBAR, _("Toolbar"), kind=wx.ITEM_CHECK) self.Append(mid.ID_SIDEBAR, _("&Sidebar") + "\tCtrl+I", kind=wx.ITEM_CHECK) self.Append(mid.ID_LEGEND, _("&Legend"), kind=wx.ITEM_CHECK) self.Append(mid.ID_LABEL_FILTERING, _("La&bel Filtering"), kind=wx.ITEM_CHECK) self.AppendSeparator() self.Append(mid.ID_BALLOONS, _("&Balloons on hover"), kind=wx.ITEM_CHECK) self.AppendSeparator() self.Append(mid.ID_ZOOMIN, _("Zoom &In") + "\tCtrl++") self.Append(mid.ID_ZOOMOUT, _("Zoom &Out") + "\tCtrl+-") self.Append(mid.ID_VERT_ZOOMIN, _("Vertical Zoom &In") + "\tAlt++") self.Append(mid.ID_VERT_ZOOMOUT, _("Vertical Zoom &Out") + "\tAlt+-") self.AppendSeparator() point_even_alignmentsub_menu = wx.Menu() point_even_alignmentsub_menu.Append(mid.ID_LEFT_ALIGNMENT, _("Left"), kind=wx.ITEM_RADIO) point_even_alignmentsub_menu.Append(mid.ID_CENTER_ALIGNMENT, _("Center"), kind=wx.ITEM_RADIO) self.Append(wx.ID_ANY, _("Point event alignment"), point_even_alignmentsub_menu) self.AppendSeparator() self.Append(wx.ID_ANY, _("Event appearance"), self._create_event_box_drawers_submenu()) self.AppendSeparator() self.Append(mid.ID_PRESENTATION, _("Start slide show") + "...") self.AppendSeparator() self.Append(mid.ID_HIDE_DONE, _("&Hide Events done"), kind=wx.ITEM_CHECK) def _check_view_menu_items(self): self.FindItemById(mid.ID_TOOLBAR).Check(self._main_frame.config.show_toolbar) self.FindItemById(mid.ID_SIDEBAR).Check(self._main_frame.config.show_sidebar) self.FindItemById(mid.ID_LEGEND).Check(self._main_frame.config.show_legend) self.FindItemById(mid.ID_LABEL_FILTERING).Check(self._main_frame.config.show_label_filtering) self.FindItemById(mid.ID_BALLOONS).Check(self._main_frame.config.balloon_on_hover) self.FindItemById(mid.ID_HIDE_DONE).Check(self._main_frame.config.hide_events_done) self.FindItemById(mid.ID_LEFT_ALIGNMENT).Check(self._main_frame.config.draw_point_events_to_right) self.FindItemById(mid.ID_CENTER_ALIGNMENT).Check(not self._main_frame.config.draw_point_events_to_right) def _create_event_box_drawers_submenu(self): submenu = wx.Menu() for plugin in factory.get_plugins(EVENTBOX_DRAWER): self._create_submenu(plugin, submenu) return submenu def _create_submenu(self, plugin, submenu): wxid = plugin.wxid() submenu.Append(wxid, plugin.display_name(), plugin.display_name(), kind=wx.ITEM_RADIO) self._main_frame.Bind(wx.EVT_MENU, self._plugin_handler(plugin), id=wxid) self._main_frame.menu_controller.add_menu_requiring_timeline(submenu.FindItemById(wxid)) self._main_frame.shortcut_controller.add_shortcut_item(wxid, submenu.FindItemById(wxid)) if plugin.display_name() == self._main_frame.config.get_selected_event_box_drawer(): submenu.FindItemById(wxid).Check() def _plugin_handler(self, plugin): def event_handler(evt): self._main_frame.main_panel.get_timeline_canvas().SetEventBoxDrawer(plugin.run()) self._main_frame.config.set_selected_event_box_drawer(plugin.display_name()) return event_handler