Source code for timelinelib.wxgui.components.labelfilter.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.components.labelfilter.controller import LabelFilterController


[docs]class LabelFilter(wx.Panel):
[docs] def __init__(self, parent, text, config): wx.Panel.__init__(self, parent) self._config = config self._text = text self._create_controls(text) self._controller = LabelFilterController(self)
[docs] def get_labels(self): return self._text_control.GetValue().split()
[docs] def match_all(self): return self._rb_match_all.GetValue()
[docs] def hide(self, clear=True): if clear: self._text_control.SetValue('') self._txt_on_enter(None) self.Hide()
[docs] def visible(self, event): return self._controller.visible(event)
def _create_controls(self, text): self._static_box = wx.StaticBox(self, wx.ID_ANY, text) static_box_sizer = wx.StaticBoxSizer(self._static_box, wx.VERTICAL) static_box_sizer.Add(self._create_text_control(text), flag=wx.GROW) static_box_sizer.Add(self._create_rb_control()) self.SetSizer(static_box_sizer) self.use_hint(self._config.use_sidebar_filter_hint)
[docs] def use_hint(self, value): if value: self._text_control.SetHint(self._text) self._static_box.SetLabel('') else: self._text_control.SetHint('') self._static_box.SetLabel(self._text) self.GetSizer().Layout()
def _create_text_control(self, text): self._text_control = wx.TextCtrl(self, -1, style=wx.TE_PROCESS_ENTER) if self._config.use_sidebar_filter_hint: self._text_control.SetHint(text) self.Bind(wx.EVT_TEXT_ENTER, self._txt_on_enter, self._text_control) return self._text_control def _create_rb_control(self): rb_sizer = wx.BoxSizer(wx.VERTICAL) self._rb_match_one = wx.RadioButton(self, wx.ID_ANY, label=_('Match any label'), style=wx.RB_GROUP) self._rb_match_all = wx.RadioButton(self, wx.ID_ANY, label=_('Match all labels')) rb_sizer.Add(self._rb_match_one) rb_sizer.Add(self._rb_match_all) self.Bind(wx.EVT_RADIOBUTTON, self._txt_on_enter, self._rb_match_one) self.Bind(wx.EVT_RADIOBUTTON, self._txt_on_enter, self._rb_match_all) return rb_sizer def _txt_on_enter(self, evt): from timelinelib.wxgui.frames.mainframe.mainframe import LabelsChangedEvent event = LabelsChangedEvent(self.GetId(), filter_labels_controller=self._controller) self.GetEventHandler().ProcessEvent(event)