Source code for timelinelib.wxgui.dialogs.eventduration.view

# 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
from timelinelib.wxgui.dialogs.eventduration.controller import EventsDurationController
from timelinelib.wxgui.dialogs.eventduration.controller import PRECISION_CHOICES
from timelinelib.wxgui.framework import Dialog


[docs]class EventDurationDialog(Dialog): """ <BoxSizerVertical> <FlexGridSizer rows="12" columns="2" growableColumns="1" proportion="1" border="ALL"> <StaticText align="ALIGN_CENTER_VERTICAL" label="$(category_text)" /> <CategoryChoice name="category_choice" allow_add="False" timeline="$(db)" align="ALIGN_CENTER_VERTICAL" event_EVT_CHOICE="recalculate" /> <StaticText align="ALIGN_CENTER_VERTICAL" label="$(period_start_text)" /> <BoxSizerHorizontal> <CheckBox name="cbx_use_start_period" event_EVT_CHECKBOX="on_use_start_period" /> <Spacer /> <TimePicker name="start_time" show_time="False" time_type="$(time_type)" config="$(config)" on_change="$(on_change_time)" /> <StretchSpacer size="100"/> </BoxSizerHorizontal> <StaticText align="ALIGN_CENTER_VERTICAL" label="$(period_end_text)" /> <BoxSizerHorizontal> <CheckBox name="cbx_use_end_period" event_EVT_CHECKBOX="on_use_end_period" /> <Spacer /> <TimePicker name="end_time" time_type="$(time_type)" config="$(config)" show_time="False" on_change="$(on_change_time)" /> </BoxSizerHorizontal> <StaticText align="ALIGN_CENTER_VERTICAL" label="$(duration_type_text)" /> <Choice name="duration_type_choices" choices="$(duration_type_choices)" align="ALIGN_CENTER_VERTICAL" event_EVT_CHOICE="recalculate" /> <StaticText align="ALIGN_CENTER_VERTICAL" label="$(precision_text)" /> <Choice name="precision_choices" choices="$(precision_choices)" align="ALIGN_CENTER_VERTICAL" event_EVT_CHOICE="recalculate" /> <StaticText align="ALIGN_CENTER_VERTICAL" label="$(copy_to_clippboard_text)" /> <CheckBox name="cbx_copy" /> <StretchSpacer /> <StretchSpacer /> <StretchSpacer /> <StretchSpacer /> <StaticText align="ALIGN_CENTER_VERTICAL" label="$(duration_text)" /> <BoxSizerHorizontal> <StaticText name="duration_result" width="150" /> <Spacer /> <Spacer /> <Spacer /> <BitmapButton name="btn_copy" event_EVT_BUTTON="on_copy" /> <Spacer /> </BoxSizerHorizontal> <StretchSpacer /> <StretchSpacer /> </FlexGridSizer> <DialogButtonsCloseSizer border="LEFT|BOTTOM|RIGHT" /> </BoxSizerVertical> """ ALL_CATEGORIES = _('All Categories')
[docs] def __init__(self, parent, title, db, config, preferred_category): Dialog.__init__(self, EventsDurationController, parent, { "db": db, "category_text": _("Category:"), "duration_text": _("Duration:"), "duration_type_text": _("Duration Type:"), "precision_text": _("Number of Decimals:"), "copy_to_clippboard_text": _("Autocopy result to Clipboard:"), "period_start_text": _("Start at:"), "period_end_text": _("Stop at:"), "duration_type_choices": [], "precision_choices": PRECISION_CHOICES, "time_type": db.get_time_type(), "config": config, "on_change_time": self._recalculate, "result_size": (-1, 50), }, title=title, size=(100, -1)) self._init_controls() self.controller.on_init(db, config, preferred_category)
[docs] def PopulateCategories(self, exclude): self.category_choice.Populate(exclude=exclude) self.category_choice.Delete(0) # Remove blank line self.category_choice.Insert(self.ALL_CATEGORIES, 0, None) self.Fit()
[docs] def SelectCategory(self, inx): return self.category_choice.Select(inx)
[docs] def SetPreferredCategory(self, preferred_category_name): for inx in range(self.category_choice.GetCount()): category_name = self.category_choice.GetString(inx).strip() if category_name == preferred_category_name: self.category_choice.SetSelection(inx) break
[docs] def GetCategory(self): return self.category_choice.GetSelectedCategory()
[docs] def EnableStartTime(self, value): self.start_time.Enable(value)
[docs] def SetStartTime(self, value): self.start_time.set_value(value)
[docs] def GetStartTime(self): if self.start_time.IsEnabled(): return self.start_time.get_value()
[docs] def EnableEndTime(self, value): self.end_time.Enable(value)
[docs] def SetEndTime(self, value): self.end_time.set_value(value)
[docs] def GetEndTime(self): if self.end_time.IsEnabled(): return self.end_time.get_value()
[docs] def SelectPrecision(self, inx): return self.precision_choices.Select(inx)
[docs] def GetPrecision(self): return int(self.precision_choices.GetSelection())
[docs] def SetDurationTypeChoices(self, choices): self.duration_type_choices.SetItems(choices) self.duration_type_choices.Select(0)
[docs] def GetDurationType(self): inx = self.duration_type_choices.GetSelection() return self.duration_type_choices.GetString(inx)
[docs] def SetCopyToClipboard(self, value): self.cbx_copy.SetValue(value)
[docs] def GetCopyToClipboard(self): return self.cbx_copy.GetValue()
[docs] def SetDurationResult(self, duration): return self.duration_result.SetLabel(duration)
[docs] def GetDurationResult(self): return self.duration_result.GetLabel()
def _init_controls(self): self.btn_copy.SetBitmapLabel(wx.ArtProvider.GetBitmap(wx.ART_COPY, wx.ART_MENU)) self.btn_copy.SetToolTip("Copy to clipboard") font = wx.Font(16, wx.DECORATIVE, wx.ITALIC, wx.NORMAL) self.duration_result.SetFont(font) def _recalculate(self, evt=None): self.controller.recalculate(evt)
[docs]def open_measure_duration_dialog(main_frame, preferred_category=EventDurationDialog.ALL_CATEGORIES): dialog = EventDurationDialog(main_frame, _('Measure Duration of Events'), main_frame.timeline, main_frame.config, preferred_category) dialog.ShowModal() dialog.Destroy()