2021-10-29 22:08:49 +02:00
|
|
|
#include <gtk/gtk.h>
|
2021-10-31 20:42:58 +01:00
|
|
|
#include <gdk/gdk.h>
|
|
|
|
#include <adwaita.h>
|
2021-10-29 22:08:49 +02:00
|
|
|
|
|
|
|
#include <openmg/manga.h>
|
2021-10-30 18:59:54 +02:00
|
|
|
#include <openmg/util/soup.h>
|
2021-11-01 14:38:15 +01:00
|
|
|
#include <openmg/util/gobject_utility_extensions.h>
|
2021-10-30 18:59:54 +02:00
|
|
|
|
2021-11-01 14:38:15 +01:00
|
|
|
#include <openmg/view/detail_manga.h>
|
2021-10-29 22:08:49 +02:00
|
|
|
#include <openmg/view/list_view_manga.h>
|
2021-11-01 14:38:15 +01:00
|
|
|
#include <openmg/view/picture.h>
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
GtkListView *list_view;
|
|
|
|
AdwLeaflet *views_leaflet;
|
|
|
|
} ActivationValues;
|
2021-10-29 22:08:49 +02:00
|
|
|
|
|
|
|
static void
|
|
|
|
setup_list_view_mangas (GtkSignalListItemFactory *factory,
|
|
|
|
GtkListItem *list_item,
|
|
|
|
gpointer user_data);
|
|
|
|
|
2021-10-31 20:42:58 +01:00
|
|
|
static void
|
|
|
|
manga_selected (GtkListView *list_view,
|
|
|
|
guint position,
|
|
|
|
gpointer user_data) {
|
2021-11-01 14:38:15 +01:00
|
|
|
AdwLeaflet *views_leaflet = ADW_LEAFLET (user_data);
|
|
|
|
GtkSingleSelection *selection = GTK_SINGLE_SELECTION
|
|
|
|
(gtk_list_view_get_model (list_view));
|
|
|
|
GListModel *mangas = gtk_single_selection_get_model (selection);
|
|
|
|
MgManga *manga = MG_MANGA (g_list_model_get_item (mangas, position));
|
|
|
|
|
2021-10-31 21:06:15 +01:00
|
|
|
GtkWidget *widget = adw_leaflet_get_adjacent_child (views_leaflet,
|
|
|
|
ADW_NAVIGATION_DIRECTION_FORWARD);
|
|
|
|
|
|
|
|
while (widget) {
|
|
|
|
adw_leaflet_remove (views_leaflet, widget);
|
|
|
|
widget = adw_leaflet_get_adjacent_child (views_leaflet,
|
2021-11-01 14:38:15 +01:00
|
|
|
ADW_NAVIGATION_DIRECTION_FORWARD);
|
2021-10-31 21:06:15 +01:00
|
|
|
}
|
|
|
|
|
2021-11-07 02:36:01 +01:00
|
|
|
GtkBox *detail_view = create_detail_view (manga);
|
2021-11-01 14:38:15 +01:00
|
|
|
adw_leaflet_append (views_leaflet, GTK_WIDGET (detail_view));
|
2021-10-31 20:42:58 +01:00
|
|
|
adw_leaflet_navigate (views_leaflet, ADW_NAVIGATION_DIRECTION_FORWARD);
|
|
|
|
}
|
|
|
|
|
2021-10-29 22:08:49 +02:00
|
|
|
static void
|
|
|
|
setup_list_view_mangas (GtkSignalListItemFactory *factory,
|
|
|
|
GtkListItem *list_item,
|
|
|
|
gpointer user_data) {
|
|
|
|
MgManga *manga = gtk_list_item_get_item (list_item);
|
|
|
|
GtkBox *box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0));
|
2021-10-31 20:42:58 +01:00
|
|
|
|
2021-10-29 22:08:49 +02:00
|
|
|
GtkWidget *label = gtk_label_new (mg_manga_get_title (manga));
|
2021-11-01 14:38:15 +01:00
|
|
|
GtkWidget *picture = GTK_WIDGET (
|
|
|
|
create_picture_from_url (mg_manga_get_image_url(manga), 200));
|
2021-10-29 22:08:49 +02:00
|
|
|
|
|
|
|
gtk_box_append (box, picture);
|
|
|
|
gtk_box_append (box, label);
|
|
|
|
gtk_list_item_set_child (list_item, GTK_WIDGET (box));
|
|
|
|
}
|
|
|
|
|
|
|
|
GtkListView *
|
2021-10-31 20:42:58 +01:00
|
|
|
create_list_view_mangas (GListStore *mangas, AdwLeaflet *views_leaflet) {
|
2021-10-29 22:08:49 +02:00
|
|
|
GtkSingleSelection *selection = gtk_single_selection_new (G_LIST_MODEL (mangas));
|
|
|
|
GtkListItemFactory *factory = gtk_signal_list_item_factory_new ();
|
2021-10-31 20:42:58 +01:00
|
|
|
GtkListView *list_view_manga = NULL;
|
|
|
|
|
2021-10-29 22:08:49 +02:00
|
|
|
g_signal_connect (G_OBJECT (factory), "bind",
|
2021-10-31 20:42:58 +01:00
|
|
|
G_CALLBACK (setup_list_view_mangas),
|
|
|
|
views_leaflet);
|
|
|
|
|
|
|
|
list_view_manga = GTK_LIST_VIEW (gtk_list_view_new (GTK_SELECTION_MODEL (selection),
|
|
|
|
factory));
|
2021-11-01 13:43:17 +01:00
|
|
|
g_object_set_property_int (G_OBJECT (list_view_manga),
|
|
|
|
"single-click-activate", 1);
|
2021-10-31 20:42:58 +01:00
|
|
|
|
|
|
|
g_signal_connect (G_OBJECT (list_view_manga), "activate",
|
2021-11-01 14:38:15 +01:00
|
|
|
G_CALLBACK (manga_selected), views_leaflet);
|
2021-10-31 20:42:58 +01:00
|
|
|
return list_view_manga;
|
2021-10-29 22:08:49 +02:00
|
|
|
}
|