[gnome-games/wip/exalm/db: 4/9] core: Add GameModel



commit c2567063d6018b600732050f9214b47df0ae7d67
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Sat Feb 8 19:16:01 2020 +0500

    core: Add GameModel

 src/core/game-model.vala | 39 +++++++++++++++++++++++++++++++++++++++
 src/meson.build          |  1 +
 2 files changed, 40 insertions(+)
---
diff --git a/src/core/game-model.vala b/src/core/game-model.vala
new file mode 100644
index 00000000..0f15910a
--- /dev/null
+++ b/src/core/game-model.vala
@@ -0,0 +1,39 @@
+// This file is part of GNOME Games. License: GPL-3.0+.
+
+private class Games.GameModel : Object, ListModel {
+       public signal void game_added (Game game);
+
+       private Sequence<Game> sequence;
+       private int n_games;
+
+       construct {
+               sequence = new Sequence<Game> ();
+               n_games = 0;
+       }
+
+       public Object? get_item (uint position) {
+               var iter = sequence.get_iter_at_pos ((int) position);
+
+               return iter.get ();
+       }
+
+       public Type get_item_type () {
+               return typeof (Game);
+       }
+
+       public uint get_n_items () {
+               return n_games;
+       }
+
+       public void add_game (Game game) {
+               var iter = sequence.insert_sorted (game, compare_func);
+               n_games++;
+
+               items_changed (iter.get_position (), 0, 1);
+               game_added (game);
+       }
+
+       private int compare_func (Game a, Game b) {
+               return a.name.collate (b.name);
+       }
+}
diff --git a/src/meson.build b/src/meson.build
index c751641c..17ff621f 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -19,6 +19,7 @@ vala_sources = [
   'core/game.vala',
   'core/game-callback.vala',
   'core/game-collection.vala',
+  'core/game-model.vala',
   'core/game-uri-adapter.vala',
   'core/icon.vala',
   'core/input-capabilities.vala',


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]