Show some help/about information
This commit is contained in:
parent
ec57f2d806
commit
c09e3dcc96
78
src/sdtui.c
78
src/sdtui.c
|
@ -172,6 +172,7 @@ struct application
|
||||||
GIConv wchar_to_utf8; //!< wchar_t -> utf-8 conversion
|
GIConv wchar_to_utf8; //!< wchar_t -> utf-8 conversion
|
||||||
|
|
||||||
StardictDict * dict; //!< The current dictionary
|
StardictDict * dict; //!< The current dictionary
|
||||||
|
guint show_help : 1; //!< Whether help can be shown
|
||||||
|
|
||||||
guint32 top_position; //!< Index of the topmost dict. entry
|
guint32 top_position; //!< Index of the topmost dict. entry
|
||||||
guint top_offset; //!< Offset into the top entry
|
guint top_offset; //!< Offset into the top entry
|
||||||
|
@ -298,6 +299,7 @@ app_init (Application *self, const gchar *filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
self->terminal_type = get_terminal_type ();
|
self->terminal_type = get_terminal_type ();
|
||||||
|
self->show_help = TRUE;
|
||||||
|
|
||||||
self->top_position = 0;
|
self->top_position = 0;
|
||||||
self->top_offset = 0;
|
self->top_offset = 0;
|
||||||
|
@ -341,7 +343,7 @@ app_destroy (Application *self)
|
||||||
* @return The number of wide characters written.
|
* @return The number of wide characters written.
|
||||||
*/
|
*/
|
||||||
static gsize
|
static gsize
|
||||||
add_utf8_string (Application *self, const gchar *str, int n)
|
app_add_utf8_string (Application *self, const gchar *str, int n)
|
||||||
{
|
{
|
||||||
wchar_t *wide_str = (wchar_t *) g_convert_with_iconv
|
wchar_t *wide_str = (wchar_t *) g_convert_with_iconv
|
||||||
(str, -1, self->utf8_to_wchar, NULL, NULL, NULL);
|
(str, -1, self->utf8_to_wchar, NULL, NULL, NULL);
|
||||||
|
@ -372,7 +374,7 @@ app_redraw_top (Application *self)
|
||||||
{
|
{
|
||||||
mvwhline (stdscr, 0, 0, A_UNDERLINE, COLS);
|
mvwhline (stdscr, 0, 0, A_UNDERLINE, COLS);
|
||||||
attrset (A_UNDERLINE);
|
attrset (A_UNDERLINE);
|
||||||
gsize indent = add_utf8_string (self, self->search_label, -1);
|
gsize indent = app_add_utf8_string (self, self->search_label, -1);
|
||||||
|
|
||||||
gchar *input_utf8 = g_ucs4_to_utf8
|
gchar *input_utf8 = g_ucs4_to_utf8
|
||||||
((gunichar *) self->input->data, -1, NULL, NULL, NULL);
|
((gunichar *) self->input->data, -1, NULL, NULL, NULL);
|
||||||
|
@ -380,7 +382,7 @@ app_redraw_top (Application *self)
|
||||||
|
|
||||||
if (self->input_confirmed)
|
if (self->input_confirmed)
|
||||||
attron (A_BOLD);
|
attron (A_BOLD);
|
||||||
add_utf8_string (self, input_utf8, COLS - indent);
|
app_add_utf8_string (self, input_utf8, COLS - indent);
|
||||||
g_free (input_utf8);
|
g_free (input_utf8);
|
||||||
|
|
||||||
move (0, indent + self->input_pos);
|
move (0, indent + self->input_pos);
|
||||||
|
@ -399,10 +401,73 @@ app_get_left_column_width (Application *self)
|
||||||
return width;
|
return width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Display a message in the view area. */
|
||||||
|
static void
|
||||||
|
app_show_message (Application *self, const gchar *lines[], gsize len)
|
||||||
|
{
|
||||||
|
gint top = (LINES - 1 - len) / 2;
|
||||||
|
|
||||||
|
gint i;
|
||||||
|
for (i = 0; i < top; i++)
|
||||||
|
{
|
||||||
|
move (1 + i, 0);
|
||||||
|
clrtoeol ();
|
||||||
|
}
|
||||||
|
|
||||||
|
attrset (0);
|
||||||
|
while (len-- && i < LINES - 1)
|
||||||
|
{
|
||||||
|
move (1 + i, 0);
|
||||||
|
clrtoeol ();
|
||||||
|
|
||||||
|
gint x = (COLS - g_utf8_strlen (*lines, -1)) / 2;
|
||||||
|
if (x < 0)
|
||||||
|
x = 0;
|
||||||
|
|
||||||
|
move (1 + i, x);
|
||||||
|
app_add_utf8_string (self, *lines, COLS - x);
|
||||||
|
|
||||||
|
lines++;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
clrtobot ();
|
||||||
|
refresh ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Show some information about the program. */
|
||||||
|
static void
|
||||||
|
app_show_help (Application *self)
|
||||||
|
{
|
||||||
|
gchar *description = g_locale_to_utf8
|
||||||
|
(_("Terminal UI for StarDict dictionaries"), -1, NULL, NULL, NULL);
|
||||||
|
gchar *type_to_search = g_locale_to_utf8
|
||||||
|
(_("Type to search"), -1, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
const gchar *lines[] =
|
||||||
|
{
|
||||||
|
PROJECT_NAME " " PROJECT_VERSION,
|
||||||
|
description,
|
||||||
|
"Copyright (c) 2013, Přemysl Janouch",
|
||||||
|
"",
|
||||||
|
type_to_search
|
||||||
|
};
|
||||||
|
|
||||||
|
app_show_message (self, lines, G_N_ELEMENTS (lines));
|
||||||
|
g_free (description);
|
||||||
|
g_free (type_to_search);
|
||||||
|
}
|
||||||
|
|
||||||
/** Redraw the dictionary view. */
|
/** Redraw the dictionary view. */
|
||||||
static void
|
static void
|
||||||
app_redraw_view (Application *self)
|
app_redraw_view (Application *self)
|
||||||
{
|
{
|
||||||
|
if (self->show_help)
|
||||||
|
{
|
||||||
|
app_show_help (self);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
move (1, 0);
|
move (1, 0);
|
||||||
|
|
||||||
guint i, k = self->top_offset, shown = 0;
|
guint i, k = self->top_offset, shown = 0;
|
||||||
|
@ -417,9 +482,10 @@ app_redraw_view (Application *self)
|
||||||
attrset (attrs);
|
attrset (attrs);
|
||||||
|
|
||||||
guint left_width = app_get_left_column_width (self);
|
guint left_width = app_get_left_column_width (self);
|
||||||
add_utf8_string (self, ve->word, left_width);
|
app_add_utf8_string (self, ve->word, left_width);
|
||||||
addwstr (L" ");
|
addwstr (L" ");
|
||||||
add_utf8_string (self, ve->definitions[k], COLS - left_width - 1);
|
app_add_utf8_string (self,
|
||||||
|
ve->definitions[k], COLS - left_width - 1);
|
||||||
|
|
||||||
if ((gint) ++shown == LINES - 1)
|
if ((gint) ++shown == LINES - 1)
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -889,6 +955,8 @@ app_process_curses_event (Application *self, CursesEvent *event)
|
||||||
gunichar c = g_utf8_get_char (letter);
|
gunichar c = g_utf8_get_char (letter);
|
||||||
if (g_unichar_isprint (c))
|
if (g_unichar_isprint (c))
|
||||||
{
|
{
|
||||||
|
self->show_help = FALSE;
|
||||||
|
|
||||||
if (self->input_confirmed)
|
if (self->input_confirmed)
|
||||||
{
|
{
|
||||||
if (self->input->len != 0)
|
if (self->input->len != 0)
|
||||||
|
|
Loading…
Reference in New Issue