5 Copyright (C) 2009, 2010 The Free Software Foundation, Inc.
8 Slava Zanko <slavazanko@gmail.com>, 2009
9 Egmont Koblinger <egmont@gmail.com>, 2010
11 This file is part of the Midnight Commander.
13 The Midnight Commander is free software; you can redistribute it
14 and/or modify it under the terms of the GNU General Public License as
15 published by the Free Software Foundation; either version 2 of the
16 License, or (at your option) any later version.
18 The Midnight Commander is distributed in the hope that it will be
19 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
20 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
34 #include "lib/tty/color.h" /* tty_use_256colors(); */
36 /*** global variables ****************************************************************************/
38 mc_skin_t mc_skin__default
;
40 /*** file scope macro definitions ****************************************************************/
42 /*** file scope type declarations ****************************************************************/
44 /*** file scope variables ************************************************************************/
46 static gboolean mc_skin_is_init
= FALSE
;
48 /* --------------------------------------------------------------------------------------------- */
49 /*** file scope functions ************************************************************************/
50 /* --------------------------------------------------------------------------------------------- */
53 mc_skin_hash_destroy_value (gpointer data
)
55 mc_skin_color_t
*mc_skin_color
= (mc_skin_color_t
*) data
;
56 g_free (mc_skin_color
->fgcolor
);
57 g_free (mc_skin_color
->bgcolor
);
58 g_free (mc_skin_color
->attrs
);
59 g_free (mc_skin_color
);
62 /* --------------------------------------------------------------------------------------------- */
65 mc_skin_get_default_name (void)
69 /* from command line */
70 if (mc_global
.args
.skin
!= NULL
)
71 return g_strdup (mc_global
.args
.skin
);
73 /* from envirovement variable */
74 tmp_str
= getenv ("MC_SKIN");
76 return g_strdup (tmp_str
);
78 /* from config. Or 'default' if no present in config */
79 return mc_config_get_string (mc_main_config
, CONFIG_APP_SECTION
, "skin", "default");
82 /* --------------------------------------------------------------------------------------------- */
88 mc_skin__default
.name
= mc_skin_get_default_name ();
89 mc_skin__default
.colors
= g_hash_table_new_full (g_str_hash
, g_str_equal
,
90 g_free
, mc_skin_hash_destroy_value
);
93 /* --------------------------------------------------------------------------------------------- */
96 mc_skin_try_to_load_default (void)
99 g_free (mc_skin__default
.name
);
100 mc_skin__default
.name
= g_strdup ("default");
101 if (!mc_skin_ini_file_load (&mc_skin__default
))
104 mc_skin_set_hardcoded_skin (&mc_skin__default
);
109 /* --------------------------------------------------------------------------------------------- */
110 /*** public functions ****************************************************************************/
111 /* --------------------------------------------------------------------------------------------- */
114 mc_skin_init (GError
** error
)
116 gboolean is_good_init
= TRUE
;
118 mc_skin__default
.have_256_colors
= FALSE
;
120 mc_skin__default
.name
= mc_skin_get_default_name ();
122 mc_skin__default
.colors
= g_hash_table_new_full (g_str_hash
, g_str_equal
,
123 g_free
, mc_skin_hash_destroy_value
);
124 if (!mc_skin_ini_file_load (&mc_skin__default
))
126 *error
= g_error_new (MC_ERROR
, 0,
127 _("Unable to load '%s' skin.\nDefault skin has been loaded"),
128 mc_skin__default
.name
);
130 mc_skin_try_to_load_default ();
131 is_good_init
= FALSE
;
133 mc_skin_colors_old_configure (&mc_skin__default
);
135 if (!mc_skin_ini_file_parse (&mc_skin__default
))
138 *error
= g_error_new (MC_ERROR
, 0,
139 _("Unable to parse '%s' skin.\nDefault skin has been loaded"),
140 mc_skin__default
.name
);
142 mc_skin_try_to_load_default ();
143 mc_skin_colors_old_configure (&mc_skin__default
);
144 (void) mc_skin_ini_file_parse (&mc_skin__default
);
145 is_good_init
= FALSE
;
147 if (is_good_init
&& !tty_use_256colors () && mc_skin__default
.have_256_colors
)
150 *error
= g_error_new (MC_ERROR
, 0,
152 ("Unable to use '%s' skin with 256 colors support\non non-256 colors terminal.\nDefault skin has been loaded"),
153 mc_skin__default
.name
);
155 mc_skin_try_to_load_default ();
156 mc_skin_colors_old_configure (&mc_skin__default
);
157 (void) mc_skin_ini_file_parse (&mc_skin__default
);
158 is_good_init
= FALSE
;
160 mc_skin_is_init
= TRUE
;
164 /* --------------------------------------------------------------------------------------------- */
167 mc_skin_deinit (void)
169 g_free (mc_skin__default
.name
);
170 mc_skin__default
.name
= NULL
;
171 g_hash_table_destroy (mc_skin__default
.colors
);
172 mc_skin__default
.colors
= NULL
;
174 g_free (mc_skin__default
.description
);
175 mc_skin__default
.description
= NULL
;
177 mc_config_deinit (mc_skin__default
.config
);
178 mc_skin__default
.config
= NULL
;
180 mc_skin_is_init
= FALSE
;
183 /* --------------------------------------------------------------------------------------------- */
186 mc_skin_get (const gchar
* group
, const gchar
* key
, const gchar
* default_value
)
188 if (mc_global
.args
.ugly_line_drawing
)
190 return g_strdup (default_value
);
192 return mc_config_get_string (mc_skin__default
.config
, group
, key
, default_value
);
195 /* --------------------------------------------------------------------------------------------- */