Text - fix scrolling
* page up button did go to negative page numbers,
* scroll bar did not go to page 1, and went beyond end of document,
* several integer divisions were not ported,
* no longer a need to convert from iso-8859-1,
* zoom metadata is to be string,
Fixes https://github.com/sugarlabs/read-activity/issues/39
James Cameron
4 years ago
80 | 80 | self.font_desc = Pango.FontDescription("mono %d" % self._font_size) |
81 | 81 | self.textview.modify_font(self.font_desc) |
82 | 82 | self._zoom = 100 |
83 | self.font_zoom_relation = self._zoom / self._font_size | |
83 | self.font_zoom_relation = self._zoom // self._font_size | |
84 | 84 | self._current_page = 0 |
85 | 85 | |
86 | 86 | self.highlight_tag = self.textview.get_buffer().create_tag() |
121 | 121 | line = self._etext_file.readline() |
122 | 122 | if not line: |
123 | 123 | break |
124 | line_increment = (len(line) / 80) + 1 | |
124 | line_increment = (len(line) // 80) + 1 | |
125 | 125 | linecount = linecount + line_increment |
126 | 126 | if linecount >= PAGE_SIZE: |
127 | 127 | position = self._etext_file.tell() |
130 | 130 | pagecount = pagecount + 1 |
131 | 131 | self._pagecount = pagecount + 1 |
132 | 132 | self.set_current_page(0) |
133 | self._scrollbar.set_range(1.0, self._pagecount - 1.0) | |
133 | self._scrollbar.set_range(0.0, self._pagecount - 1.0) | |
134 | 134 | self._scrollbar.set_increments(1.0, 1.0) |
135 | 135 | |
136 | # TODO: if ever sugar3.speech has word signals | |
136 | # TODO: now that sugar3.speech has word signals | |
137 | 137 | # call self.highlight_next_word on each word |
138 | 138 | # call self.reset_text_to_speech at end |
139 | 139 | |
148 | 148 | break |
149 | 149 | else: |
150 | 150 | line = _clean_text(line) |
151 | label_text = label_text + str(line, "iso-8859-1") | |
152 | line_increment = (len(line) / 80) + 1 | |
151 | label_text = label_text + line | |
152 | line_increment = (len(line) // 80) + 1 | |
153 | 153 | linecount = linecount + line_increment |
154 | 154 | textbuffer = self.textview.get_buffer() |
155 | 155 | label_text = label_text + '\n\n\n' |
176 | 176 | |
177 | 177 | def _scrollbar_change_value_cb(self, range, scrolltype, value): |
178 | 178 | """ |
179 | This is the fake scrollbar visible, used to show the lenght of the book | |
179 | This is the fake scrollbar visible, used to show the length of the book | |
180 | 180 | """ |
181 | 181 | old_page = self._current_page |
182 | 182 | if scrolltype == Gtk.ScrollType.STEP_FORWARD: |
189 | 189 | scrolltype == Gtk.ScrollType.PAGE_FORWARD or \ |
190 | 190 | scrolltype == Gtk.ScrollType.PAGE_BACKWARD: |
191 | 191 | if value > self._scrollbar.props.adjustment.props.upper: |
192 | value = self._pagecount | |
192 | value = self._pagecount - 1 | |
193 | 193 | self._show_page(int(value)) |
194 | 194 | self._current_page = int(value) |
195 | 195 | self.emit('page-changed', old_page, self._current_page) |
204 | 204 | if event.type == Gdk.EventType.TOUCH_BEGIN: |
205 | 205 | x = event.touch.x |
206 | 206 | view_width = widget.get_allocation().width |
207 | if x > view_width * 3 / 4: | |
207 | if x > view_width * 3 // 4: | |
208 | 208 | self.scroll(Gtk.ScrollType.PAGE_FORWARD, False) |
209 | elif x < view_width * 1 / 4: | |
209 | elif x < view_width * 1 // 4: | |
210 | 210 | self.scroll(Gtk.ScrollType.PAGE_BACKWARD, False) |
211 | 211 | |
212 | 212 | def can_highlight(self): |
324 | 324 | v_adjustment = self._sw.get_vadjustment() |
325 | 325 | max_pos = v_adjustment.get_upper() - v_adjustment.get_page_size() |
326 | 326 | max_pos = max_pos * word_count |
327 | max_pos = max_pos / len(self.word_tuples) | |
327 | max_pos = max_pos // len(self.word_tuples) | |
328 | 328 | v_adjustment.set_value(max_pos) |
329 | 329 | self.current_word = word_count |
330 | 330 | return True |
331 | 331 | |
332 | 332 | def update_metadata(self, activity): |
333 | 333 | self.metadata = activity.metadata |
334 | self.metadata['Read_zoom'] = self.get_zoom() | |
334 | self.metadata['Read_zoom'] = str(self.get_zoom()) | |
335 | 335 | |
336 | 336 | def load_metadata(self, activity): |
337 | 337 | self.metadata = activity.metadata |
400 | 400 | v_adjustment = self._sw.get_vadjustment() |
401 | 401 | v_adjustment.set_value(v_adjustment.get_upper() - |
402 | 402 | v_adjustment.get_page_size()) |
403 | self.set_current_page(self.get_current_page() - 1) | |
403 | self.set_current_page(max(0, self.get_current_page() - 1)) | |
404 | 404 | |
405 | 405 | def next_page(self): |
406 | 406 | v_adjustment = self._sw.get_vadjustment() |
407 | 407 | v_adjustment.set_value(v_adjustment.get_lower()) |
408 | self.set_current_page(self.get_current_page() + 1) | |
408 | self.set_current_page( | |
409 | min(self._pagecount - 1, self.get_current_page() + 1)) | |
409 | 410 | |
410 | 411 | def get_current_page(self): |
411 | 412 | return self._current_page |
475 | 476 | |
476 | 477 | def set_zoom(self, value): |
477 | 478 | self._zoom = value |
478 | self._font_size = int(self._zoom / self.font_zoom_relation) | |
479 | self._font_size = self._zoom // self.font_zoom_relation | |
479 | 480 | self.font_desc.set_size(self._font_size * 1024) |
480 | 481 | self.textview.modify_font(self.font_desc) |
481 | 482 | |
589 | 590 | self._current_found_item = -1 |
590 | 591 | self.obj._text_file.seek(0) |
591 | 592 | while self.obj._text_file: |
592 | line = str(self.obj._text_file.readline(), "iso-8859-1") | |
593 | line = self.obj._text_file.readline() | |
593 | 594 | line = _clean_text(line) |
594 | 595 | line_length = len(line) |
595 | 596 | if not line: |
596 | 597 | break |
597 | line_increment = (len(line) / 80) + 1 | |
598 | line_increment = (len(line) // 80) + 1 | |
598 | 599 | linecount = linecount + line_increment |
599 | 600 | positions = self._allindices(line.lower(), self.obj._text.lower()) |
600 | 601 | for position in positions: |