abouttreesummaryrefslogcommitdiff
path: root/srcs/juloo.keyboard2/KeyboardData.java
diff options
context:
space:
mode:
authorGero Streng2022-09-25 02:23:33 +0200
committerJules Aguillon2022-10-23 22:51:36 +0200
commitbaec5a76ee51e86c8256423924331908da75279f (patch)
treecdcd025f45773fc122e4d92f11b1baca6fcd1118 /srcs/juloo.keyboard2/KeyboardData.java
parentea0b873dd826b447c5518f033c9b832fb4be3dbf (diff)
downloadunexpected-keyboard-baec5a76ee51e86c8256423924331908da75279f.tar.gz
unexpected-keyboard-baec5a76ee51e86c8256423924331908da75279f.zip
Add optional NumPad
Shows a NumPad depending on preference: Never/Landscape/Always
Diffstat (limited to 'srcs/juloo.keyboard2/KeyboardData.java')
-rw-r--r--srcs/juloo.keyboard2/KeyboardData.java49
1 files changed, 44 insertions, 5 deletions
diff --git a/srcs/juloo.keyboard2/KeyboardData.java b/srcs/juloo.keyboard2/KeyboardData.java
index 5bbbac1..21acde7 100644
--- a/srcs/juloo.keyboard2/KeyboardData.java
+++ b/srcs/juloo.keyboard2/KeyboardData.java
@@ -18,13 +18,15 @@ class KeyboardData
public final float keysHeight;
/** Whether to add extra keys. */
public final boolean extra_keys;
+ /** Whether to possibly add NumPad. */
+ public final boolean num_pad;
public KeyboardData mapKeys(MapKey f)
{
ArrayList<Row> rows_ = new ArrayList<Row>();
for (Row r : rows)
rows_.add(r.mapKeys(f));
- return new KeyboardData(rows_, keysWidth, extra_keys);
+ return new KeyboardData(rows_, keysWidth, extra_keys, num_pad);
}
/** Add keys from the given iterator into the keyboard. Extra keys are added
@@ -46,7 +48,32 @@ class KeyboardData
for (int c = 1; c <= 4; c++)
addExtraKeys_to_row(rows, k, r, c);
}
- return new KeyboardData(rows, keysWidth, extra_keys);
+ return new KeyboardData(rows, keysWidth, extra_keys, num_pad);
+ }
+
+ public KeyboardData addNumPad()
+ {
+ if (!num_pad || _numPadKeyboardData == null)
+ return this;
+ ArrayList<Row> extendedRows = new ArrayList<Row>();
+ Iterator<Row> iterNumPadRows = _numPadKeyboardData.rows.iterator();
+ for (Row row : rows)
+ {
+ ArrayList<KeyboardData.Key> keys = new ArrayList<Key>(row.keys);
+ if (iterNumPadRows.hasNext())
+ {
+ Row numPadRow = iterNumPadRows.next();
+ List<Key> nps = numPadRow.keys;
+ if (nps.size() > 0) {
+ float firstNumPadShift = 0.5f + keysWidth - row.keysWidth;
+ keys.add(nps.get(0).withShift(firstNumPadShift));
+ for (int i = 1; i < nps.size(); i++)
+ keys.add(nps.get(i));
+ }
+ }
+ extendedRows.add(new Row(keys, row.height, row.shift));
+ }
+ return new KeyboardData(extendedRows, compute_max_width(extendedRows), extra_keys, num_pad);
}
public Key findKeyWithValue(KeyValue kv)
@@ -75,6 +102,7 @@ class KeyboardData
}
private static Row _bottomRow = null;
+ private static KeyboardData _numPadKeyboardData = null;
private static Map<Integer, KeyboardData> _layoutCache = new HashMap<Integer, KeyboardData>();
public static KeyboardData load(Resources res, int id)
@@ -86,6 +114,10 @@ class KeyboardData
{
if (_bottomRow == null)
_bottomRow = parse_bottom_row(res.getXml(R.xml.bottom_row));
+ if (_numPadKeyboardData == null)
+ {
+ _numPadKeyboardData = parse_keyboard(res.getXml(R.xml.numpad));
+ }
l = parse_keyboard(res.getXml(id));
_layoutCache.put(id, l);
}
@@ -103,13 +135,14 @@ class KeyboardData
throw new Exception("Empty layout file");
boolean bottom_row = parser.getAttributeBooleanValue(null, "bottom_row", true);
boolean extra_keys = parser.getAttributeBooleanValue(null, "extra_keys", true);
+ boolean num_pad = parser.getAttributeBooleanValue(null, "num_pad", true);
ArrayList<Row> rows = new ArrayList<Row>();
while (expect_tag(parser, "row"))
rows.add(Row.parse(parser));
float kw = compute_max_width(rows);
if (bottom_row)
rows.add(_bottomRow.updateWidth(kw));
- return new KeyboardData(rows, kw, extra_keys);
+ return new KeyboardData(rows, kw, extra_keys, num_pad);
}
private static float compute_max_width(List<Row> rows)
@@ -127,7 +160,7 @@ class KeyboardData
return Row.parse(parser);
}
- protected KeyboardData(List<Row> rows_, float kw, boolean xk)
+ protected KeyboardData(List<Row> rows_, float kw, boolean xk, boolean np)
{
float kh = 0.f;
for (Row r : rows_)
@@ -136,6 +169,7 @@ class KeyboardData
keysWidth = kw;
keysHeight = kh;
extra_keys = xk;
+ num_pad = np;
}
public static class Row
@@ -146,7 +180,7 @@ class KeyboardData
/** Extra empty space on the top. */
public final float shift;
/** Total width of the row. */
- private final float keysWidth;
+ public final float keysWidth;
protected Row(List<Key> keys_, float h, float s)
{
@@ -278,6 +312,11 @@ class KeyboardData
return new Key(k0, k1, k2, k3, k4, width, shift, edgekeys);
}
+ public Key withShift(float s)
+ {
+ return new Key(key0, key1, key2, key3, key4, width, s, edgekeys);
+ }
+
/**
* See Pointers.onTouchMove() for the represented direction.
*/