X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fresources%2FMetaInfo.java;h=70c6c43181bbff8f8885c1eca15a792eef03eac1;hb=f19b48e27a56ebab18687debd9ef52581a03f06d;hp=e7a8b7c5fe09b5f0a72e36a1161cfde4f2ecfe6f;hpb=d5026c096121da14c20d69893520594a36d088bb;p=nikiroo-utils.git diff --git a/src/be/nikiroo/utils/resources/MetaInfo.java b/src/be/nikiroo/utils/resources/MetaInfo.java index e7a8b7c..70c6c43 100644 --- a/src/be/nikiroo/utils/resources/MetaInfo.java +++ b/src/be/nikiroo/utils/resources/MetaInfo.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import be.nikiroo.fanfix.data.MetaData; import be.nikiroo.utils.resources.Meta.Format; /** @@ -28,6 +27,7 @@ public class MetaInfo> implements Iterable> { private List saveListeners = new ArrayList(); private String name; + private boolean hidden; private String description; private boolean dirty; @@ -91,6 +91,7 @@ public class MetaInfo> implements Iterable> { } this.name = name; + this.hidden = meta.hidden(); this.description = description; reload(); @@ -111,6 +112,16 @@ public class MetaInfo> implements Iterable> { public String getName() { return name; } + + /** + * This item should be hidden from the user (she will still be able to + * modify it if she opens the file manually). + * + * @return TRUE if it should stay hidden + */ + public boolean isHidden() { + return hidden; + } /** * A description for this item: what it is or does, how to explain that item @@ -142,7 +153,7 @@ public class MetaInfo> implements Iterable> { /** * The allowed list of values that a {@link Format#FIXED_LIST} item is * allowed to be, or a list of suggestions for {@link Format#COMBO_LIST} - * items. + * items. Also works for {@link Format#LOCALE}. *

* Will always allow an empty string in addition to the rest. * @@ -160,6 +171,22 @@ public class MetaInfo> implements Iterable> { return withEmpty; } + /** + * Return all the languages known by the program for this bundle. + *

+ * This only works for {@link TransBundle}, and will return an empty list if + * this is not a {@link TransBundle}. + * + * @return the known language codes + */ + public List getKnownLanguages() { + if (bundle instanceof TransBundle) { + return ((TransBundle) bundle).getKnownLanguages(); + } + + return new ArrayList(); + } + /** * This item is a comma-separated list of values instead of a single value. *

@@ -175,8 +202,8 @@ public class MetaInfo> implements Iterable> { } /** - * A manual flag to specify if the {@link MetaData} has been changed or not, - * which can be used by {@link MetaInfo#save(boolean)}. + * A manual flag to specify if the data has been changed or not, which can + * be used by {@link MetaInfo#save(boolean)}. * * @return TRUE if it is dirty (if it has changed) */ @@ -185,8 +212,8 @@ public class MetaInfo> implements Iterable> { } /** - * A manual flag to specify that the {@link MetaData} has been changed, - * which can be used by {@link MetaInfo#save(boolean)}. + * A manual flag to specify that the data has been changed, which can be + * used by {@link MetaInfo#save(boolean)}. */ public void setDirty() { this.dirty = true; @@ -462,12 +489,7 @@ public class MetaInfo> implements Iterable> { */ public void setString(String value, int item) { if (isArray() && item >= 0) { - List values = BundleHelper.parseList(this.value, -1); - for (int i = values.size(); i <= item; i++) { - values.add(null); - } - values.set(item, value); - this.value = BundleHelper.fromList(values); + this.value = BundleHelper.fromList(this.value, value, item); } else { this.value = value; } @@ -519,7 +541,7 @@ public class MetaInfo> implements Iterable> { * The value stored by this item, as a colour (represented here as an * {@link Integer}) if it represents a colour, or NULL if it doesn't. *

- * The returned colour value is an ARGB value. + * The colour value is an ARGB value. * * @param value * the value @@ -560,7 +582,8 @@ public class MetaInfo> implements Iterable> { value = null; } - for (Runnable listener : reloadedListeners) { + // Copy the list so we can create new listener in a listener + for (Runnable listener : new ArrayList(reloadedListeners)) { try { listener.run(); } catch (Exception e) { @@ -592,7 +615,8 @@ public class MetaInfo> implements Iterable> { * dirty flag) */ public void save(boolean onlyIfDirty) { - for (Runnable listener : saveListeners) { + // Copy the list so we can create new listener in a listener + for (Runnable listener : new ArrayList(saveListeners)) { try { listener.run(); } catch (Exception e) { @@ -637,6 +661,15 @@ public class MetaInfo> implements Iterable> { return children; } + /** + * The number of sub-items, if any. + * + * @return the number or 0 + */ + public int size() { + return children.size(); + } + @Override public Iterator> iterator() { return children.iterator(); @@ -661,8 +694,10 @@ public class MetaInfo> implements Iterable> { List> shadow = new ArrayList>(); for (E id : type.getEnumConstants()) { MetaInfo info = new MetaInfo(type, bundle, id); - list.add(info); - shadow.add(info); + if (!info.hidden) { + list.add(info); + shadow.add(info); + } } for (int i = 0; i < list.size(); i++) {