diff options
Diffstat (limited to 'apps/plugins/text_viewer/tv_preferences.c')
-rw-r--r-- | apps/plugins/text_viewer/tv_preferences.c | 119 |
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 | |||
26 | static struct tv_preferences prefs; | ||
27 | static bool is_initialized = false; | ||
28 | static int listner_count = 0; | ||
29 | |||
30 | #define TV_MAX_LISTNERS 4 | ||
31 | static void (*listners[TV_MAX_LISTNERS])(const struct tv_preferences *oldp); | ||
32 | |||
33 | static 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 | |||
64 | const struct tv_preferences *tv_get_preferences(void) | ||
65 | { | ||
66 | return &prefs; | ||
67 | } | ||
68 | |||
69 | void 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 | |||
85 | void tv_copy_preferences(struct tv_preferences *copy_prefs) | ||
86 | { | ||
87 | rb->memcpy(copy_prefs, &prefs, sizeof(struct tv_preferences)); | ||
88 | } | ||
89 | |||
90 | void 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 | |||
115 | void 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 | } | ||