summaryrefslogtreecommitdiff
path: root/apps/plugins/text_viewer/tv_preferences.c
diff options
context:
space:
mode:
authorYoshihisa Uchida <uchida@rockbox.org>2010-06-05 10:30:08 +0000
committerYoshihisa Uchida <uchida@rockbox.org>2010-06-05 10:30:08 +0000
commitfdba8404503af0448586615330a7b27f2ced531c (patch)
treebb15677a7a720675ac2666f11e62042f3b2639ad /apps/plugins/text_viewer/tv_preferences.c
parent991e92fd3dc15f1e365761264c26305559ddb0a4 (diff)
downloadrockbox-fdba8404503af0448586615330a7b27f2ced531c.tar.gz
rockbox-fdba8404503af0448586615330a7b27f2ced531c.zip
reworks text viewer plugin. (FS#11209)
new text viewer plugin: text_viewer.rock. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26571 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/text_viewer/tv_preferences.c')
-rw-r--r--apps/plugins/text_viewer/tv_preferences.c119
1 files changed, 119 insertions, 0 deletions
diff --git a/apps/plugins/text_viewer/tv_preferences.c b/apps/plugins/text_viewer/tv_preferences.c
new file mode 100644
index 0000000000..cd3560db93
--- /dev/null
+++ b/apps/plugins/text_viewer/tv_preferences.c
@@ -0,0 +1,119 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 Gilles Roux
11 * 2003 Garrett Derner
12 * 2010 Yoshihisa Uchida
13 *
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation; either version 2
17 * of the License, or (at your option) any later version.
18 *
19 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20 * KIND, either express or implied.
21 *
22 ****************************************************************************/
23#include "plugin.h"
24#include "tv_preferences.h"
25
26static struct tv_preferences prefs;
27static bool is_initialized = false;
28static int listner_count = 0;
29
30#define TV_MAX_LISTNERS 4
31static void (*listners[TV_MAX_LISTNERS])(const struct tv_preferences *oldp);
32
33static void tv_notify_change_preferences(const struct tv_preferences *oldp,
34 const struct tv_preferences *newp)
35{
36 int i;
37
38 /*
39 * the following items do not check.
40 * - alignment
41 * - scroll_mode
42 * - page_mode
43 * - font
44 * - autoscroll_speed
45 */
46 if ((oldp == NULL) ||
47 (oldp->word_mode != newp->word_mode) ||
48 (oldp->line_mode != newp->line_mode) ||
49 (oldp->view_mode != newp->view_mode) ||
50 (oldp->scrollbar_mode != newp->scrollbar_mode) ||
51 (oldp->encoding != newp->encoding) ||
52#ifdef HAVE_LCD_BITMAP
53 (oldp->header_mode != newp->header_mode) ||
54 (oldp->footer_mode != newp->footer_mode) ||
55 (rb->strcmp(oldp->font_name, newp->font_name)) ||
56#endif
57 (rb->strcmp(oldp->file_name, newp->file_name)))
58 {
59 for (i = listner_count - 1; i >= 0; i--)
60 listners[i](oldp);
61 }
62}
63
64const struct tv_preferences *tv_get_preferences(void)
65{
66 return &prefs;
67}
68
69void tv_set_preferences(const struct tv_preferences *new_prefs)
70{
71 struct tv_preferences *oldp = NULL;
72 struct tv_preferences old_prefs;
73
74 if (!is_initialized)
75 is_initialized = true;
76 else
77 {
78 old_prefs = prefs;
79 oldp = &old_prefs;
80 }
81 rb->memcpy(&prefs, new_prefs, sizeof(struct tv_preferences));
82 tv_notify_change_preferences(oldp, &prefs);
83}
84
85void tv_copy_preferences(struct tv_preferences *copy_prefs)
86{
87 rb->memcpy(copy_prefs, &prefs, sizeof(struct tv_preferences));
88}
89
90void tv_set_default_preferences(struct tv_preferences *p)
91{
92 p->word_mode = WRAP;
93 p->line_mode = NORMAL;
94 p->view_mode = NARROW;
95 p->alignment = LEFT;
96 p->scroll_mode = PAGE;
97 p->page_mode = NO_OVERLAP;
98 p->scrollbar_mode = SB_OFF;
99 rb->memset(p->font_name, 0, MAX_PATH);
100#ifdef HAVE_LCD_BITMAP
101 p->header_mode = HD_BOTH;
102 p->footer_mode = FT_BOTH;
103 rb->strlcpy(p->font_name, rb->global_settings->font_file, MAX_PATH);
104 p->font = rb->font_get(FONT_UI);
105#else
106 p->header_mode = HD_NONE;
107 p->footer_mode = FT_NONE;
108#endif
109 p->autoscroll_speed = 1;
110 /* Set codepage to system default */
111 p->encoding = rb->global_settings->default_codepage;
112 p->file_name[0] = '\0';
113}
114
115void tv_add_preferences_change_listner(void (*listner)(const struct tv_preferences *oldp))
116{
117 if (listner_count < TV_MAX_LISTNERS)
118 listners[listner_count++] = listner;
119}