.
1 /*
2 Copyright (C) 2015 Johan Mattsson
3
4 This library is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as
6 published by the Free Software Foundation; either version 3 of the
7 License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful, but
10 WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13 */
14
15 namespace BirdFont {
16
17 public class AlternateSets : GLib.Object {
18
19 public Gee.ArrayList<Alternate> alternates;
20
21 public AlternateSets () {
22 alternates = new Gee.ArrayList<Alternate> ();
23 }
24
25 public Gee.ArrayList<string> get_all_tags () {
26 Gee.ArrayList<string> tags;
27 tags = new Gee.ArrayList<string> ();
28
29 foreach (Alternate a in alternates) {
30 if (tags.index_of (a.tag) == -1) {
31 tags.add (a.tag);
32 }
33 }
34
35 tags.sort ((a, b) => {
36 return strcmp ((string) a, (string) b);
37 });
38
39 return tags;
40 }
41
42 public Gee.ArrayList<Alternate> get_alt (string tag) {
43 Gee.ArrayList<Alternate> alt;
44 alt = new Gee.ArrayList<Alternate> ();
45
46 foreach (Alternate a in alternates) {
47 if (a.tag == tag && a.alternates.size > 0) {
48 alt.add (a);
49 }
50 }
51
52 return alt;
53 }
54
55 public void remove_empty_sets () {
56 int i = 0;
57 foreach (Alternate a in alternates) {
58 if (a.is_empty ()) {
59 alternates.remove_at (i);
60 remove_empty_sets ();
61 return;
62 }
63 i++;
64 }
65 }
66
67 public void add (Alternate alternate) {
68 alternates.add (alternate);
69 }
70
71 public AlternateSets copy () {
72 AlternateSets n = new AlternateSets ();
73 foreach (Alternate a in alternates) {
74 n.alternates.add (a.copy ());
75 }
76 return n;
77 }
78 }
79
80 public class AlternateItem : GLib.Object {
81 public Alternate alternate_list;
82 public string alternate;
83
84 public AlternateItem (Alternate alternate_list, string alternate) {
85 this.alternate_list = alternate_list;
86 this.alternate = alternate;
87 }
88
89 public void delete_item_from_list () {
90 alternate_list.remove_alternate (alternate);
91 }
92 }
93
94 }
95