summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/text_viewer/text_viewer.c2
-rw-r--r--apps/plugins/text_viewer/tv_action.c2
-rw-r--r--apps/plugins/text_viewer/tv_bookmark.c54
-rw-r--r--apps/plugins/text_viewer/tv_display.c74
-rw-r--r--apps/plugins/text_viewer/tv_pager.c4
-rw-r--r--apps/plugins/text_viewer/tv_reader.c1
6 files changed, 71 insertions, 66 deletions
diff --git a/apps/plugins/text_viewer/text_viewer.c b/apps/plugins/text_viewer/text_viewer.c
index 5d06d4b477..3c04499b18 100644
--- a/apps/plugins/text_viewer/text_viewer.c
+++ b/apps/plugins/text_viewer/text_viewer.c
@@ -60,7 +60,7 @@ enum plugin_status plugin_start(const void* file)
60 atexit(tv_exit); 60 atexit(tv_exit);
61 while (!done) { 61 while (!done) {
62#ifdef HAVE_LCD_BITMAP 62#ifdef HAVE_LCD_BITMAP
63 if (rb->global_settings->statusbar != STATUSBAR_OFF && preferences->statusbar) 63 if (preferences->statusbar)
64 rb->send_event(GUI_EVENT_ACTIONUPDATE, NULL); 64 rb->send_event(GUI_EVENT_ACTIONUPDATE, NULL);
65#endif 65#endif
66 66
diff --git a/apps/plugins/text_viewer/tv_action.c b/apps/plugins/text_viewer/tv_action.c
index 1e5473b438..54cec38f72 100644
--- a/apps/plugins/text_viewer/tv_action.c
+++ b/apps/plugins/text_viewer/tv_action.c
@@ -174,8 +174,6 @@ unsigned tv_menu(void)
174 if (res == TV_MENU_RESULT_EXIT_MENU) 174 if (res == TV_MENU_RESULT_EXIT_MENU)
175 { 175 {
176 tv_convert_fpos(cur_file_pos, &cur_pos); 176 tv_convert_fpos(cur_file_pos, &cur_pos);
177 if (preferences->vertical_scroll_mode == VS_PAGE)
178 cur_pos.line = 0;
179 177
180 tv_move_screen(cur_pos.page, cur_pos.line, SEEK_SET); 178 tv_move_screen(cur_pos.page, cur_pos.line, SEEK_SET);
181 } 179 }
diff --git a/apps/plugins/text_viewer/tv_bookmark.c b/apps/plugins/text_viewer/tv_bookmark.c
index c6574dbb6f..815e7a1f91 100644
--- a/apps/plugins/text_viewer/tv_bookmark.c
+++ b/apps/plugins/text_viewer/tv_bookmark.c
@@ -166,6 +166,30 @@ void tv_create_system_bookmark(void)
166 } 166 }
167} 167}
168 168
169static const char* get_bookmark_name(int selected, void * data,
170 char * buffer, size_t buffer_len)
171{
172 (void)data;
173 struct tv_bookmark_info *bookmark = &bookmarks[selected];
174 rb->snprintf(buffer, buffer_len,
175#ifdef HAVE_LCD_BITMAP
176 "%cPage: %d Line: %d",
177#else
178 "%cP:%d L:%d",
179#endif
180 (bookmark->flag & TV_BOOKMARK_SYSTEM)? '*' : ' ',
181 bookmark->pos.page + 1, bookmark->pos.line + 1);
182 return buffer;
183}
184
185static int list_action_callback(int action, struct gui_synclist *lists)
186{
187 (void) lists;
188 if (action == ACTION_STD_OK)
189 return ACTION_STD_CANCEL;
190 return action;
191}
192
169void tv_select_bookmark(void) 193void tv_select_bookmark(void)
170{ 194{
171 int i; 195 int i;
@@ -185,32 +209,18 @@ void tv_select_bookmark(void)
185 select_pos = bookmarks[0].pos; 209 select_pos = bookmarks[0].pos;
186 else 210 else
187 { 211 {
188 int selected = -1; 212 struct simplelist_info info;
189 struct opt_items items[bookmark_count];
190 unsigned char names[bookmark_count][24];
191 213
192 rb->qsort(bookmarks, bookmark_count, sizeof(struct tv_bookmark_info), bm_comp); 214 rb->qsort(bookmarks, bookmark_count, sizeof(struct tv_bookmark_info), bm_comp);
193 215
194 for (i = 0; i < bookmark_count; i++) 216 rb->simplelist_info_init(&info, "Select bookmark",
195 { 217 bookmark_count, bookmarks);
196 rb->snprintf(names[i], sizeof(names[0]), 218 info.get_name = get_bookmark_name;
197#if CONFIG_KEYPAD != PLAYER_PAD 219 info.action_callback = list_action_callback;
198 "%cPage: %d Line: %d", 220 rb->simplelist_show_list(&info);
199#else
200 "%cP:%d L:%d",
201#endif
202 (bookmarks[i].flag & TV_BOOKMARK_SYSTEM)? '*' : ' ',
203 bookmarks[i].pos.page + 1,
204 bookmarks[i].pos.line + 1);
205 items[i].string = names[i];
206 items[i].voice_id = -1;
207 }
208
209 rb->set_option("Select bookmark", &selected, INT, items,
210 bookmark_count, NULL);
211 221
212 if (selected >= 0 && selected < bookmark_count) 222 if (info.selection >= 0 && info.selection < bookmark_count)
213 select_pos = bookmarks[selected].pos; 223 select_pos = bookmarks[info.selection].pos;
214 else 224 else
215 { 225 {
216 /* when does not select any bookmarks, move to the current page */ 226 /* when does not select any bookmarks, move to the current page */
diff --git a/apps/plugins/text_viewer/tv_display.c b/apps/plugins/text_viewer/tv_display.c
index 4de62855f9..d38f1b514c 100644
--- a/apps/plugins/text_viewer/tv_display.c
+++ b/apps/plugins/text_viewer/tv_display.c
@@ -81,14 +81,11 @@ struct tv_rect {
81}; 81};
82 82
83static struct viewport vp_info; 83static struct viewport vp_info;
84static struct viewport vp_text;
84static bool is_initialized_vp = false; 85static bool is_initialized_vp = false;
85 86
86static struct screen* display; 87static struct screen* display;
87 88
88#ifdef HAVE_LCD_BITMAP
89static int drawmode = DRMODE_SOLID;
90#endif
91
92/* layout */ 89/* layout */
93#ifdef HAVE_LCD_BITMAP 90#ifdef HAVE_LCD_BITMAP
94static struct tv_rect header; 91static struct tv_rect header;
@@ -98,7 +95,6 @@ static struct tv_rect vertical_scrollbar;
98#else 95#else
99static struct tv_rect bookmark; 96static struct tv_rect bookmark;
100#endif 97#endif
101static struct tv_rect drawarea;
102 98
103static bool show_horizontal_scrollbar; 99static bool show_horizontal_scrollbar;
104static bool show_vertical_scrollbar; 100static bool show_vertical_scrollbar;
@@ -176,18 +172,23 @@ void tv_init_scrollbar(off_t total, bool show_scrollbar)
176void tv_show_bookmarks(const int *rows, int count) 172void tv_show_bookmarks(const int *rows, int count)
177{ 173{
178#ifdef HAVE_LCD_BITMAP 174#ifdef HAVE_LCD_BITMAP
179 rb->lcd_set_drawmode(DRMODE_COMPLEMENT); 175 display->set_viewport(&vp_text);
176 display->set_drawmode(DRMODE_COMPLEMENT);
180#endif 177#endif
181 178
182 while (count--) 179 while (count--)
183 { 180 {
184#ifdef HAVE_LCD_BITMAP 181#ifdef HAVE_LCD_BITMAP
185 display->fillrect(drawarea.x, drawarea.y + rows[count] * row_height, 182 display->fillrect(0, rows[count] * row_height,
186 drawarea.w, row_height); 183 vp_text.width, row_height);
187#else 184#else
188 display->putchar(bookmark.x, drawarea.y + rows[count], TV_BOOKMARK_ICON); 185 display->putchar(bookmark.x, bookmark.y + rows[count], TV_BOOKMARK_ICON);
189#endif 186#endif
190 } 187 }
188#ifdef HAVE_LCD_BITMAP
189 display->set_drawmode(DRMODE_SOLID);
190 display->set_viewport(&vp_info);
191#endif
191} 192}
192 193
193void tv_update_extra(int window, int col, const struct tv_screen_pos *pos, int size) 194void tv_update_extra(int window, int col, const struct tv_screen_pos *pos, int size)
@@ -215,22 +216,23 @@ void tv_draw_text(int row, const unsigned char *text, int offset)
215 if (preferences->alignment == AL_RIGHT) 216 if (preferences->alignment == AL_RIGHT)
216 { 217 {
217 display->getstringsize(text, &text_width, NULL); 218 display->getstringsize(text, &text_width, NULL);
218 xpos += ((offset > 0)? drawarea.w * 2 : drawarea.w) - text_width; 219 xpos += ((offset > 0)? vp_text.width * 2 : vp_text.width) - text_width;
219 } 220 }
220 221
222 display->set_viewport(&vp_text);
221#ifdef HAVE_LCD_BITMAP 223#ifdef HAVE_LCD_BITMAP
222 display->putsxy(drawarea.x + xpos, drawarea.y + row * row_height, text); 224 display->putsxy(xpos, row * row_height, text);
223#else 225#else
224 display->puts(drawarea.x + xpos, drawarea.y + row, text); 226 display->puts(xpos, row, text);
225#endif 227#endif
228 display->set_viewport(&vp_info);
226} 229}
227 230
228void tv_start_display(void) 231void tv_start_display(void)
229{ 232{
230 display->set_viewport(&vp_info); 233 display->set_viewport(&vp_info);
231#ifdef HAVE_LCD_BITMAP 234#ifdef HAVE_LCD_BITMAP
232 drawmode = rb->lcd_get_drawmode(); 235 display->set_drawmode(DRMODE_SOLID);
233 rb->lcd_set_drawmode(DRMODE_SOLID);
234#endif 236#endif
235 237
236#if LCD_DEPTH > 1 238#if LCD_DEPTH > 1
@@ -242,11 +244,6 @@ void tv_start_display(void)
242void tv_end_display(void) 244void tv_end_display(void)
243{ 245{
244 display->update_viewport(); 246 display->update_viewport();
245
246#ifdef HAVE_LCD_BITMAP
247 rb->lcd_set_drawmode(drawmode);
248#endif
249
250 display->set_viewport(NULL); 247 display->set_viewport(NULL);
251} 248}
252 249
@@ -261,29 +258,30 @@ void tv_set_layout(bool show_scrollbar)
261 row_height = preferences->font->height; 258 row_height = preferences->font->height;
262 259
263 header.x = 0; 260 header.x = 0;
264 header.y = 1; 261 header.y = 0;
265 header.w = vp_info.width; 262 header.w = vp_info.width;
266 header.h = (preferences->header_mode)? row_height + 1 : 0; 263 header.h = (preferences->header_mode)? row_height + 1 : 0;
267 264
268 footer.x = 0; 265 footer.x = 0;
269 footer.w = vp_info.width; 266 footer.w = vp_info.width;
270 footer.h = (preferences->footer_mode)? row_height + 1 : 0; 267 footer.h = (preferences->footer_mode)? row_height + 1 : 0;
271 footer.y = vp_info.height - 1 - footer.h; 268 footer.y = vp_info.height - footer.h;
272
273 drawarea.x = scrollbar_width;
274 drawarea.y = header.y + header.h;
275 drawarea.w = vp_info.width - scrollbar_width;
276 drawarea.h = footer.y - drawarea.y - scrollbar_height;
277 269
278 horizontal_scrollbar.x = drawarea.x; 270 horizontal_scrollbar.x = scrollbar_width;
279 horizontal_scrollbar.y = footer.y - scrollbar_height; 271 horizontal_scrollbar.y = footer.y - scrollbar_height;
280 horizontal_scrollbar.w = drawarea.w; 272 horizontal_scrollbar.w = vp_info.width - scrollbar_width;
281 horizontal_scrollbar.h = scrollbar_height; 273 horizontal_scrollbar.h = scrollbar_height;
282 274
283 vertical_scrollbar.x = 0; 275 vertical_scrollbar.x = 0;
284 vertical_scrollbar.y = drawarea.y; 276 vertical_scrollbar.y = header.y + header.h;
285 vertical_scrollbar.w = scrollbar_width; 277 vertical_scrollbar.w = scrollbar_width;
286 vertical_scrollbar.h = drawarea.h; 278 vertical_scrollbar.h = footer.y - vertical_scrollbar.y - scrollbar_height;
279
280 vp_text = vp_info;
281 vp_text.x += horizontal_scrollbar.x;
282 vp_text.y += vertical_scrollbar.y;
283 vp_text.width = horizontal_scrollbar.w;
284 vp_text.height = vertical_scrollbar.h;
287#else 285#else
288 (void) show_scrollbar; 286 (void) show_scrollbar;
289 287
@@ -294,19 +292,18 @@ void tv_set_layout(bool show_scrollbar)
294 bookmark.w = 1; 292 bookmark.w = 1;
295 bookmark.h = vp_info.height; 293 bookmark.h = vp_info.height;
296 294
297 drawarea.x = 1; 295 vp_text = vp_info;
298 drawarea.y = 0; 296 vp_text.x += 1;
299 drawarea.w = vp_info.width - 1; 297 vp_text.width -= 1;
300 drawarea.h = vp_info.height;
301#endif 298#endif
302 299
303 display_columns = drawarea.w / col_width; 300 display_columns = vp_text.width / col_width;
304 display_rows = drawarea.h / row_height; 301 display_rows = vp_text.height / row_height;
305} 302}
306 303
307void tv_get_drawarea_info(int *width, int *cols, int *rows) 304void tv_get_drawarea_info(int *width, int *cols, int *rows)
308{ 305{
309 *width = drawarea.w; 306 *width = vp_text.width;
310 *cols = display_columns; 307 *cols = display_columns;
311 *rows = display_rows; 308 *rows = display_rows;
312} 309}
@@ -314,8 +311,7 @@ void tv_get_drawarea_info(int *width, int *cols, int *rows)
314static void tv_change_viewport(void) 311static void tv_change_viewport(void)
315{ 312{
316#ifdef HAVE_LCD_BITMAP 313#ifdef HAVE_LCD_BITMAP
317 bool show_statusbar = (rb->global_settings->statusbar != STATUSBAR_OFF && 314 bool show_statusbar = preferences->statusbar;
318 preferences->statusbar);
319 315
320 if (is_initialized_vp) 316 if (is_initialized_vp)
321 rb->viewportmanager_theme_undo(SCREEN_MAIN, false); 317 rb->viewportmanager_theme_undo(SCREEN_MAIN, false);
diff --git a/apps/plugins/text_viewer/tv_pager.c b/apps/plugins/text_viewer/tv_pager.c
index a91d9d91ab..e9886e09dd 100644
--- a/apps/plugins/text_viewer/tv_pager.c
+++ b/apps/plugins/text_viewer/tv_pager.c
@@ -220,7 +220,7 @@ void tv_convert_fpos(off_t fpos, struct tv_screen_pos *pos)
220 while (tv_create_line_positions() && cur_pos.file_pos < fpos) 220 while (tv_create_line_positions() && cur_pos.file_pos < fpos)
221 rb->splashf(0, "converting %ld%%...", 100 * cur_pos.file_pos / fpos); 221 rb->splashf(0, "converting %ld%%...", 100 * cur_pos.file_pos / fpos);
222 222
223 if (cur_pos.page < max_page) 223 if (i < max_page)
224 cur_pos.page--; 224 cur_pos.page--;
225 tv_seek_page(cur_pos.page, SEEK_SET); 225 tv_seek_page(cur_pos.page, SEEK_SET);
226 for (i = 0; i < lines_per_page; i++) 226 for (i = 0; i < lines_per_page; i++)
@@ -296,6 +296,8 @@ void tv_move_screen(int page_offset, int line_offset, int whence)
296 if (cur_pos.page < max_page && new_pos.line == lines_per_page) 296 if (cur_pos.page < max_page && new_pos.line == lines_per_page)
297 { 297 {
298 tv_seek(line_pos[lines_per_page], SEEK_CUR); 298 tv_seek(line_pos[lines_per_page], SEEK_CUR);
299 cur_pos.file_pos += line_pos[lines_per_page];
300
299 for (i = 0; i < parse_lines; i++) 301 for (i = 0; i < parse_lines; i++)
300 line_pos[i] = line_pos[i + lines_per_page] - line_pos[lines_per_page]; 302 line_pos[i] = line_pos[i + lines_per_page] - line_pos[lines_per_page];
301 303
diff --git a/apps/plugins/text_viewer/tv_reader.c b/apps/plugins/text_viewer/tv_reader.c
index cdfb01d462..d9c6a9c246 100644
--- a/apps/plugins/text_viewer/tv_reader.c
+++ b/apps/plugins/text_viewer/tv_reader.c
@@ -111,7 +111,6 @@ void tv_seek(off_t offset, int whence)
111 return; 111 return;
112 } 112 }
113 file_pos += buf_pos; 113 file_pos += buf_pos;
114 whence = SEEK_SET;
115 break; 114 break;
116 115
117 default: 116 default: