1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import os
20 import shutil
21 import wx
22 from timelinelib.wxgui.framework import Controller
23 from timelinelib.wxgui.dialogs.slideshow.templates import CSS
24 from timelinelib.wxgui.dialogs.slideshow.templates import IMAGE_AND_DESCRIPTION
25 from timelinelib.wxgui.dialogs.slideshow.templates import ONLY_DESCRIPTION
26 from timelinelib.wxgui.dialogs.slideshow.templates import PAGE_TEMPLATE
27 from timelinelib.config.paths import ICONS_DIR
28
29
30 DIR_IS_MANDATORY = _("The html pages directory is mandatory")
31 CANT_FIND_DIR = _("Can't find the html pages directory!") + "\n" + _("Do you want to create it?")
32 OVERWRITE_DIR = _("The html pages director isn't empty!") + "\n" + _("Do you want overwrite it?")
33
34
36
38 self._db = db
39 self._canvas = canvas
40 self._text_transformer = self._install_text_transformer_plugin()
41
44
46 if self._input_is_valid():
47 self._create_and_start_slideshow()
48 self.view.EndModalOk()
49
62
65
68
71
79
86
89
93
95 shutil.copy(os.path.join(ICONS_DIR, "32.png"), os.path.join(self.view.GetTargetDir(), "32.png"))
96 self._image_source = [""]
97 inx = 0
98 for event in events:
99 inx += 1
100 icon = event.get_icon()
101 if icon:
102 icon.SaveFile(os.path.join(self.view.GetTargetDir(), "icon_img_%d.bmp" % inx), wx.BITMAP_TYPE_BMP)
103 self._image_source.append("icon_img_%d.bmp" % inx)
104 else:
105 self._image_source.append("")
106
111
112 - def _create_pages(self, events):
113 nbr_of_pages = len(events)
114 page_nbr = 0
115 w1 = events[-1].get_start_time() - events[0].get_start_time()
116 pos_style = self._get_positions_style(events)
117 pos_history = self._get_position_history(len(events))
118 for event in events:
119 w2 = event.get_start_time() - events[0].get_start_time()
120 p = self._calc_history_pos(w1, w2, events, event)
121 page_nbr += 1
122 next_page_nbr = self._get_next_page_nbr(page_nbr, nbr_of_pages)
123 prev_page_nbr = self._get_prev_page_nbr(page_nbr, nbr_of_pages)
124 self._create_page(pos_style, p, event, page_nbr, next_page_nbr, prev_page_nbr, pos_history)
125
126 - def _calc_history_pos(self, w1, w2, events, event):
127 w2 = event.get_start_time() - events[0].get_start_time()
128 try:
129 return 2 + int(90 * (w2 / w1))
130 except ZeroDivisionError:
131 return 2
132
133 - def _get_next_page_nbr(self, page_nbr, nbr_of_pages):
134 if page_nbr == nbr_of_pages:
135 return 1
136 else:
137 return page_nbr + 1
138
139 - def _get_prev_page_nbr(self, page_nbr, nbr_of_pages):
140 if page_nbr == 1:
141 return nbr_of_pages
142 else:
143 return page_nbr - 1
144
145 - def _create_page(self, pos_style, p, event, page_nbr, next_page_nbr, prev_page_nbr, pos_history):
146 f = open(os.path.join(self.view.GetTargetDir(), "page_%d.html" % page_nbr), "w")
147 if self._image_source[page_nbr] == "":
148 x = ONLY_DESCRIPTION % self._text_transformer.transform(event.get_description())
149 else:
150 x = IMAGE_AND_DESCRIPTION % (self._image_source[page_nbr],
151 self._text_transformer.transform(event.get_description()))
152 pg = PAGE_TEMPLATE % (pos_style,
153 p,
154 self._db.get_time_type().format_period(event.get_time_period()),
155 event.get_text(),
156 x,
157 prev_page_nbr,
158 next_page_nbr,
159 pos_history)
160 f.write(pg.encode('utf8', 'ignore'))
161 f.close()
162
169
171 template = """div.position_in_history_%d {
172 border-radius: 50%%;
173 width: 10px;
174 height: 10px;
175 background-color: #66CDAA;
176 position: fixed;
177 top: 10px;
178 left: %d%%
179 }
180 """
181 collector = []
182 w1 = events[-1].get_start_time() - events[0].get_start_time()
183 nbr = 0
184 for event in events:
185 nbr += 1
186 w2 = event.get_start_time() - events[0].get_start_time()
187 p = self._calc_history_pos(w1, w2, events, event)
188 collector.append(template % (nbr, p))
189 return "\n".join(collector)
190
191 - def _get_position_history(self, count):
192 template = '<div class="position_in_history_%d"/>'
193 collector = []
194 for i in range(count):
195 collector.append(template % (i + 1))
196 return "\n".join(collector)
197