1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import os.path
20
21 import wx
22
23 from timelinelib.config.paths import ICONS_DIR
24
25
27
29 wx.ToolBar.__init__(self, parent, style=wx.TB_HORIZONTAL|wx.TB_BOTTOM)
30 self.last_search = None
31 self.result = []
32 self.result_index = 0
33 self.view = None
34 self.close_fn = close_fn
35 self._create_gui()
36 self._update_buttons()
37
41
43 icon_size = (16, 16)
44
45 if 'wxMSW' in wx.PlatformInfo:
46 close_bmp = wx.Bitmap(os.path.join(ICONS_DIR, "close.png"))
47 else:
48 close_bmp = wx.ArtProvider.GetBitmap(wx.ART_CROSS_MARK, wx.ART_TOOLBAR,
49 icon_size)
50 self.AddLabelTool(wx.ID_CLOSE, "", close_bmp, shortHelp="")
51 self.Bind(wx.EVT_TOOL, self._btn_close_on_click, id=wx.ID_CLOSE)
52
53 self.search = wx.SearchCtrl(self, size=(150, -1),
54 style=wx.TE_PROCESS_ENTER)
55 self.Bind(wx.EVT_SEARCHCTRL_SEARCH_BTN,
56 self._search_on_search_btn, self.search)
57 self.Bind(wx.EVT_TEXT_ENTER, self._search_on_text_enter, self.search)
58 self.AddControl(self.search)
59
60 prev_bmp = wx.ArtProvider.GetBitmap(wx.ART_GO_BACK, wx.ART_TOOLBAR,
61 icon_size)
62 self.AddLabelTool(wx.ID_BACKWARD, "", prev_bmp, shortHelp="")
63 self.Bind(wx.EVT_TOOL, self._btn_prev_on_click, id=wx.ID_BACKWARD)
64
65 next_bmp = wx.ArtProvider.GetBitmap(wx.ART_GO_FORWARD, wx.ART_TOOLBAR,
66 icon_size)
67 self.AddLabelTool(wx.ID_FORWARD, "", next_bmp, shortHelp="")
68 self.Bind(wx.EVT_TOOL, self._btn_next_on_click, id=wx.ID_FORWARD)
69
70 self.lbl_no_match = wx.StaticText(self, label=_("No match"))
71 self.lbl_no_match.Show(False)
72 self.AddControl(self.lbl_no_match)
73
74 self.lbl_single_match = wx.StaticText(self, label=_("Only one match"))
75 self.lbl_single_match.Show(False)
76 self.AddControl(self.lbl_single_match)
77
78 self.Realize()
79
82
85
88
91
94
96 new_search = self.search.GetValue()
97 if self.last_search is not None and self.last_search == new_search:
98 self._next()
99 else:
100 self.last_search = new_search
101 if self.view is not None:
102 events = self.view.get_timeline().search(self.last_search)
103 filtered_events = self.view.get_view_properties().filter_events(events)
104 self.result = filtered_events
105 else:
106 self.result = []
107 self.result_index = 0
108 self._navigate_to_match()
109 self.lbl_no_match.Show(len(self.result) == 0)
110 self.lbl_single_match.Show(len(self.result) == 1)
111 self._update_buttons()
112
119
121 if self.result > 0 and self.result_index < (len(self.result) - 1):
122 self.result_index += 1
123 self._navigate_to_match()
124 self._update_buttons()
125
127 if self.result > 0 and self.result_index > 0:
128 self.result_index -= 1
129 self._navigate_to_match()
130 self._update_buttons()
131
137