Source code for timelinelib.plugin.plugins.exporters.exporttolist

# 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.utils import BORDER
from timelinelib.plugin.pluginbase import PluginBase
from timelinelib.plugin.plugins.exporters import EXPORTER
from timelinelib.wxgui.components.dialogbuttonssizers.dialogbuttonsclosesizer import DialogButtonsCloseSizer
import wx.lib.mixins.listctrl as listmix
from timelinelib.wxgui.frames.mainframe.menus import ID_EXPORT_LIST
from timelinelib.wxgui.utils import display_error_message


[docs]class ListExporter(PluginBase):
[docs] def service(self): return EXPORTER
[docs] def display_name(self): return _("Export to Listbox...")
[docs] @staticmethod def wxid(): return ID_EXPORT_LIST
[docs] def run(self, main_frame): self.db = main_frame.timeline dlg = ListboxDialog(self.display_name()[:-3]) dlg.populate(self._get_events(main_frame)) dlg.ShowModal() dlg.Destroy()
def _get_events(self, main_frame): visible_categories = main_frame.controller.get_visible_categories() return [ ( self.db.get_time_type().format_period(event.get_time_period()), event.get_text() ) for event in sorted( self.db.get_all_events(), key=lambda event: event.get_start_time() ) if (main_frame.config.filtered_listbox_export and event.get_category() in visible_categories) or not main_frame.config.filtered_listbox_export ]
[docs]class ListboxDialog(wx.Dialog):
[docs] def __init__(self, title, parent=None, events=None): self._parent = parent wx.Dialog.__init__(self, parent, title=title, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) self._create_gui() if events is not None: self.populate(events)
[docs] def populate(self, events): self.list.populate(events)
def _create_gui(self): self.list = TestListCtrl(self) self.btn_copy = self._create_copy_button() vbox = self._create_vbox(self.list, self.btn_copy, DialogButtonsCloseSizer(self)) self.SetSizerAndFit(vbox) def _create_copy_button(self): btn_copy = wx.Button(self, wx.ID_COPY) self.Bind(wx.EVT_BUTTON, self.on_copy, btn_copy) return btn_copy
[docs] def on_copy(self, evt): if wx.TheClipboard.Open(): self._copy_text_to_clipboard() else: display_error_message(_("Unable to copy to clipboard."), parent=self._parent)
def _copy_text_to_clipboard(self): obj = wx.TextDataObject(self.GetText()) wx.TheClipboard.SetData(obj) wx.TheClipboard.Close()
[docs] def GetText(self): return self.list.GetText()
def _create_vbox(self, ctrl, btn_copy, btn_box): hbox = wx.BoxSizer(wx.HORIZONTAL) hbox.Add(btn_copy, 0, flag=wx.ALL | wx.EXPAND, border=BORDER) hbox.Add(btn_box, 1, flag=wx.ALL, border=BORDER) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(ctrl, 1, flag=wx.ALL | wx.EXPAND, border=BORDER) vbox.Add(hbox, 0, flag=wx.ALL | wx.EXPAND, border=BORDER) return vbox
[docs]class TestListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
[docs] def __init__(self, parent, pos=wx.DefaultPosition, size=(400, 400), style=wx.LC_REPORT): wx.ListCtrl.__init__(self, parent, wx.ID_ANY, pos, size, style) listmix.ListCtrlAutoWidthMixin.__init__(self)
[docs] def populate(self, items): self.InsertColumn(0, _("Time period")) self.InsertColumn(1, _("Event")) for period, event in items: self.Append([period, event]) self.SetColumnWidth(0, wx.LIST_AUTOSIZE) self.SetColumnWidth(1, wx.LIST_AUTOSIZE)
[docs] def GetText(self): collector = [] for i in range(self.GetItemCount()): item = self.GetItem(i, 0) collector.append(item.GetText()) collector.append("\t") item = self.GetItem(i, 1) collector.append(item.GetText()) collector.append("\n") return "".join(collector)