5 Copyright (C) 2009 The Free Software Foundation, Inc.
8 Slava Zanko <slavazanko@gmail.com>, 2009.
10 This file is part of the Midnight Commander.
12 The Midnight Commander is free software; you can redistribute it
13 and/or modify it under the terms of the GNU General Public License as
14 published by the Free Software Foundation; either version 2 of the
15 License, or (at your option) any later version.
17 The Midnight Commander is distributed in the hope that it will be
18 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
19 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
35 /*** global variables ****************************************************************************/
37 mc_skin_t mc_skin__default
;
39 /*** file scope macro definitions ****************************************************************/
41 /*** file scope type declarations ****************************************************************/
43 /*** file scope variables ************************************************************************/
45 static gboolean mc_skin_is_init
= FALSE
;
47 /* --------------------------------------------------------------------------------------------- */
48 /*** file scope functions ************************************************************************/
49 /* --------------------------------------------------------------------------------------------- */
52 mc_skin_hash_destroy_key (gpointer data
)
57 /* --------------------------------------------------------------------------------------------- */
60 mc_skin_hash_destroy_value (gpointer data
)
62 mc_skin_color_t
*mc_skin_color
= (mc_skin_color_t
*) data
;
63 g_free (mc_skin_color
->fgcolor
);
64 g_free (mc_skin_color
->bgcolor
);
65 g_free (mc_skin_color
);
68 /* --------------------------------------------------------------------------------------------- */
71 mc_skin_get_default_name (void)
75 /* from command line */
76 if (mc_args__skin
!= NULL
)
77 return g_strdup (mc_args__skin
);
79 /* from envirovement variable */
80 tmp_str
= getenv ("MC_SKIN");
82 return g_strdup (tmp_str
);
84 /* from config. Or 'default' if no present in config */
85 return mc_config_get_string (mc_main_config
, CONFIG_APP_SECTION
, "skin", "default");
88 /* --------------------------------------------------------------------------------------------- */
94 mc_skin__default
.name
= mc_skin_get_default_name ();
95 mc_skin__default
.colors
= g_hash_table_new_full (g_str_hash
, g_str_equal
,
96 mc_skin_hash_destroy_key
,
97 mc_skin_hash_destroy_value
);
100 /* --------------------------------------------------------------------------------------------- */
103 mc_skin_try_to_load_default (void)
106 g_free (mc_skin__default
.name
);
107 mc_skin__default
.name
= g_strdup ("default");
108 if (!mc_skin_ini_file_load (&mc_skin__default
)) {
110 mc_skin_set_hardcoded_skin (&mc_skin__default
);
115 /* --------------------------------------------------------------------------------------------- */
116 /*** public functions ****************************************************************************/
117 /* --------------------------------------------------------------------------------------------- */
120 mc_skin_init (GError
** error
)
122 gboolean is_good_init
= TRUE
;
124 mc_skin__default
.name
= mc_skin_get_default_name ();
126 mc_skin__default
.colors
= g_hash_table_new_full (g_str_hash
, g_str_equal
,
127 mc_skin_hash_destroy_key
,
128 mc_skin_hash_destroy_value
);
130 if (!mc_skin_ini_file_load (&mc_skin__default
)) {
131 *error
= g_error_new (MC_ERROR
, 0,
132 _("Unable to load '%s' skin.\nDefault skin has been loaded"),
133 mc_skin__default
.name
);
135 mc_skin_try_to_load_default ();
136 is_good_init
= FALSE
;
138 mc_skin_colors_old_configure (&mc_skin__default
);
140 if (!mc_skin_ini_file_parse (&mc_skin__default
)) {
142 *error
= g_error_new (MC_ERROR
, 0,
143 _("Unable to parse '%s' skin.\nDefault skin has been loaded"),
144 mc_skin__default
.name
);
146 mc_skin_try_to_load_default ();
147 mc_skin_colors_old_configure (&mc_skin__default
);
148 (void) mc_skin_ini_file_parse (&mc_skin__default
);
149 is_good_init
= FALSE
;
151 mc_skin_is_init
= TRUE
;
155 /* --------------------------------------------------------------------------------------------- */
158 mc_skin_deinit (void)
161 g_free (mc_skin__default
.name
);
162 mc_skin__default
.name
= NULL
;
163 g_hash_table_destroy (mc_skin__default
.colors
);
164 mc_skin__default
.colors
= NULL
;
166 g_free (mc_skin__default
.description
);
167 mc_skin__default
.description
= NULL
;
169 if (mc_skin__default
.config
) {
170 mc_config_deinit (mc_skin__default
.config
);
171 mc_skin__default
.config
= NULL
;
174 mc_skin_is_init
= FALSE
;
177 /* --------------------------------------------------------------------------------------------- */
180 mc_skin_get(const gchar
*group
, const gchar
*key
, const gchar
*default_value
)
182 if (mc_args__ugly_line_drawing
) {
183 return g_strdup(default_value
);
185 return mc_config_get_string(mc_skin__default
.config
, group
, key
, default_value
);
188 /* --------------------------------------------------------------------------------------------- */