Add the full school maturita reading list of 82 books.

Keep full quizzes for 1984 and Spalovač mrtvol; other titles get catalog metadata stubs across Swift, GTK, and content.json.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
pepaskopec-blip 2026-09-22 11:01:32 +02:00
commit f813595bba
10 changed files with 949 additions and 45 deletions

View file

@ -1211,17 +1211,11 @@ static void lit_note_card(GtkWidget *parent, const char *title,
/* Reading roadmap (Maturitní četba) */
/* ------------------------------------------------------------------ */
#define BOOK_NODES 2
#include "cetba_catalog.inc"
typedef struct {
const char *title;
const char *target;
} BookDef;
static const BookDef book_defs[BOOK_NODES] = {
{"George Orwell – 1984", "cetba1984"},
{"Ladislav Fuks – Spalovač mrtvol", "cetbaFuks"},
};
static int stub_book_idx = -1;
static GtkWidget *stub_title_lbl;
static GtkWidget *stub_about_box;
static GtkWidget *book_rail;
static GtkWidget *book_nodes[BOOK_NODES];
@ -1340,6 +1334,58 @@ void book_rail_theme_reset(void) {
gtk_widget_queue_draw(book_rail);
}
static void rebuild_stub_about(int idx) {
GtkWidget *child;
static char author_buf[192];
static char genre_buf[96];
static char transl_buf[192];
const char *lines[4];
int n = 0;
if (!stub_about_box || idx < 0 || idx >= BOOK_NODES)
return;
while ((child = gtk_widget_get_first_child(stub_about_box)))
gtk_box_remove(GTK_BOX(stub_about_box), child);
g_snprintf(author_buf, sizeof author_buf, "Autor: %s",
book_defs[idx].author);
g_snprintf(genre_buf, sizeof genre_buf, "Žánr: %s",
book_defs[idx].genre);
lines[n++] = author_buf;
lines[n++] = genre_buf;
if (book_defs[idx].translator) {
g_snprintf(transl_buf, sizeof transl_buf, "Překlad: %s",
book_defs[idx].translator);
lines[n++] = transl_buf;
}
lines[n++] = tr("cetba_stub_soon");
for (int i = 0; i < n; i++) {
GtkWidget *l = gtk_label_new(lines[i]);
gtk_widget_set_halign(l, GTK_ALIGN_START);
gtk_label_set_wrap(GTK_LABEL(l), TRUE);
gtk_label_set_xalign(GTK_LABEL(l), 0.0);
gtk_widget_add_css_class(l, "notes-body");
gtk_box_append(GTK_BOX(stub_about_box), l);
}
}
static void on_book_node_clicked(GtkButton *button, gpointer user_data) {
int idx = GPOINTER_TO_INT(user_data);
const char *target = book_defs[idx].target;
(void)button;
if (!book_defs[idx].full) {
stub_book_idx = idx;
if (stub_title_lbl)
gtk_label_set_text(GTK_LABEL(stub_title_lbl), book_defs[idx].title);
rebuild_stub_about(idx);
}
if (main_stack && target)
gtk_stack_set_visible_child_name(main_stack, target);
}
static GtkWidget *book_make_node(int i) {
GtkWidget *btn = gtk_button_new();
GtkWidget *icon = icon_area_new(draw_book_badge_icon, 0, 0, 0, 48);
@ -1351,9 +1397,8 @@ static GtkWidget *book_make_node(int i) {
gtk_button_set_child(GTK_BUTTON(btn), icon);
g_object_set_data_full(G_OBJECT(btn), "target",
g_strdup(book_defs[i].target), g_free);
g_signal_connect(btn, "clicked", G_CALLBACK(on_nav_clicked), NULL);
g_signal_connect(btn, "clicked", G_CALLBACK(on_book_node_clicked),
GINT_TO_POINTER(i));
return btn;
}
@ -1593,3 +1638,113 @@ GtkWidget *build_cetba_fuks_page(void) {
return page;
}
GtkWidget *build_cetba_stub_page(void) {
GtkWidget *page;
GtkWidget *top;
GtkWidget *center;
GtkWidget *scroll;
GtkWidget *box;
GtkWidget *card;
GtkWidget *head;
GtkWidget *ic;
GtkWidget *t;
GtkWidget *sub;
page = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_widget_set_margin_start(page, 32);
gtk_widget_set_margin_end(page, 32);
gtk_widget_set_margin_top(page, 24);
gtk_widget_set_margin_bottom(page, 24);
top = gtk_center_box_new();
gtk_widget_add_css_class(top, "page-top");
gtk_widget_set_margin_top(top, 8);
gtk_widget_set_margin_bottom(top, 18);
gtk_center_box_set_start_widget(GTK_CENTER_BOX(top),
make_back_button("readinglist"));
center = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
gtk_widget_set_valign(center, GTK_ALIGN_CENTER);
gtk_center_box_set_center_widget(GTK_CENTER_BOX(top), center);
stub_title_lbl = gtk_label_new("…");
gtk_widget_set_halign(stub_title_lbl, GTK_ALIGN_CENTER);
gtk_label_set_wrap(GTK_LABEL(stub_title_lbl), TRUE);
gtk_widget_add_css_class(stub_title_lbl, "roadmap-title");
gtk_box_append(GTK_BOX(center), stub_title_lbl);
sub = gtk_label_new(NULL);
i18n_bind(sub, "cetba_entry_sub", 0);
gtk_widget_set_halign(sub, GTK_ALIGN_CENTER);
gtk_widget_add_css_class(sub, "roadmap-sub");
gtk_label_set_wrap(GTK_LABEL(sub), TRUE);
gtk_box_append(GTK_BOX(center), sub);
gtk_box_append(GTK_BOX(page), top);
scroll = gtk_scrolled_window_new();
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_widget_set_vexpand(scroll, TRUE);
gtk_widget_set_margin_top(scroll, 14);
gtk_widget_set_margin_bottom(scroll, 14);
gtk_box_append(GTK_BOX(page), scroll);
box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scroll), box);
card = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
gtk_widget_add_css_class(card, "notes-card");
gtk_widget_set_margin_bottom(card, 14);
gtk_box_append(GTK_BOX(box), card);
head = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
gtk_box_append(GTK_BOX(card), head);
ic = icon_area_new(draw_book_icon, 0, 0, 0, 26);
gtk_widget_set_valign(ic, GTK_ALIGN_CENTER);
gtk_box_append(GTK_BOX(head), ic);
t = gtk_label_new("O knize");
gtk_widget_set_halign(t, GTK_ALIGN_START);
gtk_widget_set_valign(t, GTK_ALIGN_CENTER);
gtk_widget_add_css_class(t, "notes-title");
gtk_box_append(GTK_BOX(head), t);
stub_about_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
gtk_box_append(GTK_BOX(card), stub_about_box);
return page;
}
void cetba_open_stub(int idx) {
if (idx < 0 || idx >= BOOK_NODES || book_defs[idx].full)
return;
stub_book_idx = idx;
if (stub_title_lbl)
gtk_label_set_text(GTK_LABEL(stub_title_lbl), book_defs[idx].title);
rebuild_stub_about(idx);
if (main_stack)
gtk_stack_set_visible_child_name(main_stack, "cetbastub");
}
void cetba_register_search(void) {
char target[32];
for (int i = 0; i < BOOK_NODES; i++) {
if (book_defs[i].full) {
search_catalog_add(book_defs[i].title, tr("search_book"),
book_defs[i].target, FALSE, 2, book_defs[i].author);
if (g_strcmp0(book_defs[i].target, "cetba1984") == 0)
search_catalog_add(tr("lit_quiz_title"), tr("search_exercise"),
"cetba1984quiz", FALSE, 3, "orwell kviz");
else if (g_strcmp0(book_defs[i].target, "cetbaFuks") == 0)
search_catalog_add(tr("lit_fuks_quiz_title"),
tr("search_exercise"), "cetbaFuksQuiz",
FALSE, 3, "fuks kviz");
} else {
g_snprintf(target, sizeof target, "cetbastub:%d", i);
search_catalog_add(book_defs[i].title, tr("search_book"),
target, FALSE, 2, book_defs[i].author);
}
}
}

98
src/cetba_catalog.inc Normal file
View file

@ -0,0 +1,98 @@
/* Generated from data/cetba-catalog.json – do not edit by hand. */
#define BOOK_NODES 82
typedef struct {
const char *title;
const char *target;
const char *author;
const char *work;
const char *genre;
const char *translator;
int full;
} BookDef;
static const BookDef book_defs[BOOK_NODES] = {
{"George Orwell – 1984", "cetba1984", "George Orwell", "1984", "Próza", "Šimečková", 1},
{"Ray Bradbury – 451 stupňů Fahrenheita", "cetbastub", "Ray Bradbury", "451 stupňů Fahrenheita", "Próza", "Nezval", 0},
{"Václav Havel – Audience", "cetbastub", "Václav Havel", "Audience", "Drama", NULL, 0},
{"Michal Viewegh – Báječná léta pod psa", "cetbastub", "Michal Viewegh", "Báječná léta pod psa", "Próza", NULL, 0},
{"Victor Hugo – Bídníci", "cetbastub", "Victor Hugo", "Bídníci", "Próza", "Pavlousková", 0},
{"Karel Čapek – Bílá nemoc", "cetbastub", "Karel Čapek", "Bílá nemoc", "Drama", NULL, 0},
{"Karel Poláček – Bylo nás pět", "cetbastub", "Karel Poláček", "Bylo nás pět", "Próza", NULL, 0},
{"Samuel Beckett – Čekání na Godota", "cetbastub", "Samuel Beckett", "Čekání na Godota", "Drama", "Ouředník", 0},
{"Zdeněk Svěrák, Ladislav Smoljak – České nebe", "cetbastub", "Zdeněk Svěrák, Ladislav Smoljak", "České nebe", "Drama", NULL, 0},
{"Giovanni Boccaccio – Dekameron", "cetbastub", "Giovanni Boccaccio", "Dekameron", "Próza", "Krátký", 0},
{"John Wyndham – Den trifidů", "cetbastub", "John Wyndham", "Den trifidů", "Próza", "Kořán", 0},
{"Anne Franková – Deník Anne Frankové", "cetbastub", "Anne Franková", "Deník Anne Frankové", "Próza", NULL, 0},
{"Robert Louis Stevenson – Dr. Jekyll a Mr. Hyde", "cetbastub", "Robert Louis Stevenson", "Dr. Jekyll a Mr. Hyde", "Próza", "Kořán", 0},
{"Vítězslav Nezval – Edison", "cetbastub", "Vítězslav Nezval", "Edison", "Poezie", NULL, 0},
{"George Orwell – Farma zvířat", "cetbastub", "George Orwell", "Farma zvířat", "Próza", "Gössell", 0},
{"Jonathan Swift – Gulliverovy cesty", "cetbastub", "Jonathan Swift", "Gulliverovy cesty", "Próza", "Skoumal", 0},
{"William Shakespeare – Hamlet", "cetbastub", "William Shakespeare", "Hamlet", "Drama", "Nevrla", 0},
{"Edgar Allan Poe – Havran", "cetbastub", "Edgar Allan Poe", "Havran", "Poezie", NULL, 0},
{"Suzanne Collins – Hladové hry – I. Aréna smrti", "cetbastub", "Suzanne Collins", "Hladové hry – I. Aréna smrti", "Próza", "Dušek", 0},
{"Joseph Heller – Hlava XXII", "cetbastub", "Joseph Heller", "Hlava XXII", "Próza", "Jindra", 0},
{"Victor Hugo – Chrám Matky Boží", "cetbastub", "Victor Hugo", "Chrám Matky Boží", "Próza", "Tomášková", 0},
{"Patrick Ryan – Jak jsem vyhrál válku", "cetbastub", "Patrick Ryan", "Jak jsem vyhrál válku", "Próza", "Vrba", 0},
{"Charlotte Brontëová – Jana Eyrová", "cetbastub", "Charlotte Brontëová", "Jana Eyrová", "Próza", "Polák", 0},
{"Alexandr Solženicyn – Jeden den Ivana Denisoviče", "cetbastub", "Alexandr Solženicyn", "Jeden den Ivana Denisoviče", "Próza", "Machonin, Nováková", 0},
{"Umberto Eco – Jméno růže", "cetbastub", "Umberto Eco", "Jméno růže", "Próza", "Frýbort", 0},
{"Karel Václav Rais – Kalibův zločin", "cetbastub", "Karel Václav Rais", "Kalibův zločin", "Próza", NULL, 0},
{"Karel Kryl – Kníška Karla Kryla", "cetbastub", "Karel Kryl", "Kníška Karla Kryla", "Poezie", NULL, 0},
{"Ernest Hemingway – Komu zvoní hrana", "cetbastub", "Ernest Hemingway", "Komu zvoní hrana", "Próza", "Valja, Kobík", 0},
{"Sofoklés – Král Oidipus", "cetbastub", "Sofoklés", "Král Oidipus", "Drama", "Stiebitz", 0},
{"Viktor Dyk – Krysař", "cetbastub", "Viktor Dyk", "Krysař", "Próza", NULL, 0},
{"Guy de Maupassant – Kulička", "cetbastub", "Guy de Maupassant", "Kulička", "Próza", "Guth", 0},
{"Charles Baudelaire – Květy zla", "cetbastub", "Charles Baudelaire", "Květy zla", "Poezie", "Nezval", 0},
{"Karel Jaromír Erben – Kytice", "cetbastub", "Karel Jaromír Erben", "Kytice", "Poezie", NULL, 0},
{"Molière – Lakomec", "cetbastub", "Molière", "Lakomec", "Drama", "Mikeš", 0},
{"Vladimir Nabokov – Lolita", "cetbastub", "Vladimir Nabokov", "Lolita", "Próza", "Kořínek", 0},
{"Karel Hynek Mácha – Máj", "cetbastub", "Karel Hynek Mácha", "Máj", "Poezie", NULL, 0},
{"Antoine de Saint-Exupéry – Malý princ", "cetbastub", "Antoine de Saint-Exupéry", "Malý princ", "Próza", "Stavinohová", 0},
{"Alois Mrštík, Vilém Mrštík – Maryša", "cetbastub", "Alois Mrštík, Vilém Mrštík", "Maryša", "Drama", NULL, 0},
{"Arnošt Lustig – Modlitba pro Kateřinu Horovitzovou", "cetbastub", "Arnošt Lustig", "Modlitba pro Kateřinu Horovitzovou", "Próza", NULL, 0},
{"Pierre Boulle – Most přes řeku Kwai", "cetbastub", "Pierre Boulle", "Most přes řeku Kwai", "Próza", "Šup", 0},
{"Christiane F. – My děti ze stanice ZOO", "cetbastub", "Christiane F.", "My děti ze stanice ZOO", "Próza", "Soukupová", 0},
{"Jack Kerouac – Na cestě", "cetbastub", "Jack Kerouac", "Na cestě", "Próza", "Popel", 0},
{"Erich Maria Remarque – Na západní frontě klid", "cetbastub", "Erich Maria Remarque", "Na západní frontě klid", "Próza", "Gel", 0},
{"Friedrich Dürrenmatt – Návštěva staré dámy", "cetbastub", "Friedrich Dürrenmatt", "Návštěva staré dámy", "Drama", NULL, 0},
{"Erich Maria Remarque – Nebe nezná vyvolených", "cetbastub", "Erich Maria Remarque", "Nebe nezná vyvolených", "Próza", "V. a K. Holubovi", 0},
{"John Steinbeck – O myších a lidech", "cetbastub", "John Steinbeck", "O myších a lidech", "Próza", "Vendyš", 0},
{"Oscar Wilde – Obraz Doriana Graye", "cetbastub", "Oscar Wilde", "Obraz Doriana Graye", "Próza", "Novák", 0},
{"Bohumil Hrabal – Obsluhoval jsem anglického krále", "cetbastub", "Bohumil Hrabal", "Obsluhoval jsem anglického krále", "Próza", NULL, 0},
{"Charles Dickens – Oliver Twist", "cetbastub", "Charles Dickens", "Oliver Twist", "Próza", "E. a E. Tilschovi", 0},
{"Bohumil Hrabal – Ostře sledované vlaky", "cetbastub", "Bohumil Hrabal", "Ostře sledované vlaky", "Próza", NULL, 0},
{"Jaroslav Hašek – Osudy dobrého vojáka Švejka za světové války", "cetbastub", "Jaroslav Hašek", "Osudy dobrého vojáka Švejka za světové války", "Próza", NULL, 0},
{"William Golding – Pán much", "cetbastub", "William Golding", "Pán much", "Próza", "Kovályová", 0},
{"J. R. R. Tolkien – Pán prstenů – Společenstvo prstenu", "cetbastub", "J. R. R. Tolkien", "Pán prstenů – Společenstvo prstenu", "Próza", "Pošustová", 0},
{"Romain Rolland – Petr a Lucie", "cetbastub", "Romain Rolland", "Petr a Lucie", "Próza", "Zaorálek", 0},
{"Edgar Allan Poe – Povídky", "cetbastub", "Edgar Allan Poe", "Povídky", "Próza", NULL, 0},
{"Karel Čapek – Povídky z jedné a druhé kapsy", "cetbastub", "Karel Čapek", "Povídky z jedné a druhé kapsy", "Próza", NULL, 0},
{"Franz Kafka – Proměna", "cetbastub", "Franz Kafka", "Proměna", "Próza", NULL, 0},
{"Jane Austenová – Pýcha a předsudek", "cetbastub", "Jane Austenová", "Pýcha a předsudek", "Próza", "Poláčková", 0},
{"Karel Čapek – R. U. R.", "cetbastub", "Karel Čapek", "R. U. R.", "Drama", NULL, 0},
{"Nikolaj Vasiljevič Gogol – Revizor", "cetbastub", "Nikolaj Vasiljevič Gogol", "Revizor", "Drama", "Mahler, Suchařípa, Morávková", 0},
{"William Shakespeare – Romeo a Julie", "cetbastub", "William Shakespeare", "Romeo a Julie", "Drama", "Hilský", 0},
{"Jan Otčenášek – Romeo, Julie a tma", "cetbastub", "Jan Otčenášek", "Romeo, Julie a tma", "Próza", NULL, 0},
{"Vladislav Vančura – Rozmarné léto", "cetbastub", "Vladislav Vančura", "Rozmarné léto", "Próza", NULL, 0},
{"Daniel Keyes – Růže pro Algernon", "cetbastub", "Daniel Keyes", "Růže pro Algernon", "Próza", "Podaný", 0},
{"Zdeněk Jirotka – Saturnin", "cetbastub", "Zdeněk Jirotka", "Saturnin", "Próza", NULL, 0},
{"Carlo Goldoni – Sluha dvou pánů", "cetbastub", "Carlo Goldoni", "Sluha dvou pánů", "Drama", "Bezděková", 0},
{"Ota Pavel – Smrt krásných srnců", "cetbastub", "Ota Pavel", "Smrt krásných srnců", "Próza", NULL, 0},
{"William Styron – Sofiina volba", "cetbastub", "William Styron", "Sofiina volba", "Próza", "Nenadál", 0},
{"Ladislav Fuks – Spalovač mrtvol", "cetbaFuks", "Ladislav Fuks", "Spalovač mrtvol", "Próza", NULL, 1},
{"Eduard Petiška – Staré řecké báje a pověsti", "cetbastub", "Eduard Petiška", "Staré řecké báje a pověsti", "Próza", NULL, 0},
{"Ernest Hemingway – Stařec a moře", "cetbastub", "Ernest Hemingway", "Stařec a moře", "Próza", "Vrba", 0},
{"Jakub Arbes – Svatý Xaverius", "cetbastub", "Jakub Arbes", "Svatý Xaverius", "Próza", NULL, 0},
{"Émile Zola – Tereza Raquinová", "cetbastub", "Émile Zola", "Tereza Raquinová", "Próza", NULL, 0},
{"Jiří Wolker – Těžká hodina", "cetbastub", "Jiří Wolker", "Těžká hodina", "Poezie", NULL, 0},
{"Karel Havlíček Borovský – Tyrolské elegie", "cetbastub", "Karel Havlíček Borovský", "Tyrolské elegie", "Poezie", NULL, 0},
{"Karel Čapek – Válka s mloky", "cetbastub", "Karel Čapek", "Válka s mloky", "Próza", NULL, 0},
{"Pierre Clostermann – Velký cirkus", "cetbastub", "Pierre Clostermann", "Velký cirkus", "Próza", "Jedlička", 0},
{"F. Scott Fitzgerald – Velký Gatsby", "cetbastub", "F. Scott Fitzgerald", "Velký Gatsby", "Próza", "Dorůžka", 0},
{"Ladislav Smoljak, Zdeněk Svěrák – Vyšetřování ztráty třídní knihy", "cetbastub", "Ladislav Smoljak, Zdeněk Svěrák", "Vyšetřování ztráty třídní knihy", "Drama", NULL, 0},
{"Émile Zola – Zabiják", "cetbastub", "Émile Zola", "Zabiják", "Próza", "Kárl", 0},
{"Josef Škvorecký – Zbabělci", "cetbastub", "Josef Škvorecký", "Zbabělci", "Próza", NULL, 0},
{"Milan Kundera – Žert", "cetbastub", "Milan Kundera", "Žert", "Próza", NULL, 0},
};

View file

@ -552,6 +552,10 @@ const TrEntry tr_ui[] = {
{"book_1984_sub", "Antiutopický román • 1949", "Dystopian novel • 1949"},
{"cetba1984_sub", "Přehled knihy, klíčové pojmy a cvičení.",
"Book overview, key terms and exercises."},
{"cetba_entry_sub", "Údaje ze školního seznamu maturitní četby.",
"Details from the school maturita reading list."},
{"cetba_stub_soon", "Podrobný přehled a cvičení zatím nejsou k dispozici.",
"A detailed overview and exercises are not available yet."},
{"lit_quiz_title", "Kvíz: George Orwell – 1984",
"Quiz: George Orwell – 1984"},
{"lit_quiz_sub", "U každé otázky vyberte jednu správnou odpověď.",

View file

@ -519,6 +519,7 @@ void activate(GtkApplication *app, gpointer user_data) {
"cetbaFuksQuiz");
gtk_stack_add_named(main_stack, build_cetba_fuks_plot_page(),
"cetbaFuksDej");
gtk_stack_add_named(main_stack, build_cetba_stub_page(), "cetbastub");
gtk_stack_add_named(main_stack, build_hw_unit1_page(), "hwunit1");
gtk_stack_add_named(main_stack, build_hw_unit1_exercise_page(), "hwex1");
gtk_stack_add_named(main_stack, build_hw_unit2_page(), "hwunit2");

View file

@ -851,6 +851,12 @@ GtkWidget *build_cetba1984_plot_page(void);
GtkWidget *build_cetba_fuks_page(void);
GtkWidget *build_cetba_fuks_quiz_page(void);
GtkWidget *build_cetba_fuks_plot_page(void);
GtkWidget *build_cetba_stub_page(void);
void cetba_register_search(void);
void cetba_open_stub(int idx);
void search_catalog_add(const char *title, const char *subtitle,
const char *target, gboolean locked, int rank,
const char *extra);
void book_rail_theme_reset(void);
GtkWidget *build_hw_unit1_page(void);
GtkWidget *build_hw_unit1_exercise_page(void);

View file

@ -1,5 +1,6 @@
#include "maturita.h"
#include <stdlib.h>
#include <string.h>
#define SEARCH_MAX 24
@ -90,12 +91,23 @@ static void item_free(gpointer p) {
g_free(it);
}
static void catalog_add(const char *title, const char *subtitle,
const char *target, gboolean locked, int rank,
const char *extra);
void search_catalog_add(const char *title, const char *subtitle,
const char *target, gboolean locked, int rank,
const char *extra) {
catalog_add(title, subtitle, target, locked, rank, extra);
}
static void catalog_add(const char *title, const char *subtitle,
const char *target, gboolean locked, int rank,
const char *extra) {
if (!title || !target)
return;
if (main_stack && !gtk_stack_get_child_by_name(main_stack, target))
if (main_stack && !gtk_stack_get_child_by_name(main_stack, target)
&& strncmp(target, "cetbastub:", 10) != 0)
return;
g_ptr_array_add(search_items,
item_new(title, subtitle, target, locked, rank, extra));
@ -190,14 +202,7 @@ static void catalog_rebuild(void) {
"gramatika grammar");
catalog_add_key("Maturitní četba", "search_book", "readinglist", FALSE, 1,
"knihy books");
catalog_add("George Orwell – 1984", tr("search_book"), "cetba1984",
FALSE, 2, "orwell dystopie");
catalog_add(tr("lit_quiz_title"), tr("search_exercise"), "cetba1984quiz",
FALSE, 3, "orwell kviz");
catalog_add("Ladislav Fuks – Spalovač mrtvol", tr("search_book"),
"cetbaFuks", FALSE, 2, "fuks cremator");
catalog_add(tr("lit_fuks_quiz_title"), tr("search_exercise"),
"cetbaFuksQuiz", FALSE, 3, "fuks kviz");
cetba_register_search();
{
static const char *mluv_names[] = {
@ -247,6 +252,12 @@ static int cmp_item(gconstpointer a, gconstpointer b) {
static void search_go(const char *target) {
if (!target || !main_stack)
return;
if (strncmp(target, "cetbastub:", 10) == 0) {
int idx = atoi(target + 10);
search_close();
cetba_open_stub(idx);
return;
}
if (!gtk_stack_get_child_by_name(main_stack, target))
return;
search_close();