commit 2659f9dd1ff7f528091184b2bf33bc75c66f193c
Author: leszek <leszek@koltunski.pl>
Date:   Mon Mar 4 23:18:31 2024 +0100

    progress with configurable stickers

diff --git a/src/main/java/org/distorted/config/ConfigScreenPane.java b/src/main/java/org/distorted/config/ConfigScreenPane.java
index d8af4562..adc9a63a 100644
--- a/src/main/java/org/distorted/config/ConfigScreenPane.java
+++ b/src/main/java/org/distorted/config/ConfigScreenPane.java
@@ -9,11 +9,17 @@
 
 package org.distorted.config;
 
+import android.app.Activity;
 import android.util.TypedValue;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.GridLayout;
+import android.widget.ImageButton;
 import android.widget.LinearLayout;
 import android.widget.SeekBar;
 import android.widget.TextView;
 
+import org.distorted.main.MainActivity;
 import org.distorted.main.R;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -27,30 +33,113 @@ public class ConfigScreenPane
   public static final float[] CORNER_STEPS = { 0.00f, 0.50f, 1.00f, 1.50f, 2.00f };
 
   private static final float PADDING_RATIO = 0.010f;
+  private static final float MARGIN_RATIO  = 0.017f;
   private static final float TEXT_RATIO    = 0.025f;
 
+  static final int ICO_01= 0xffe191b4;
+  static final int ICO_02= 0xff604c94;
+  static final int ICO_03= 0xff472258;
+  static final int ICO_04= 0xff591218;
+  static final int ICO_05= 0xffba365b;
+  static final int ICO_06= 0xffe4e000;
+  static final int ICO_07= 0xff4a90d5;
+  static final int ICO_08= 0xff0e28a3;
+  static final int ICO_09= 0xff00ff00;
+  static final int ICO_10= 0xffd7660a;
+  static final int ICO_11= 0xff092d2b;
+  static final int ICO_12= 0xff034d3e;
+  static final int ICO_13= 0xff1a7516;
+  static final int ICO_14= 0xff58b6be;
+  static final int ICO_15= 0xffd3c49b;
+  static final int ICO_16= 0xff0a1662;
+  static final int ICO_17= 0xffa21a1c;
+  static final int ICO_18= 0xffe1b410;
+  static final int ICO_19= 0xffff0000;
+  static final int ICO_20= 0xff0157ba;
+  static final int ICO_21= 0xff000000;
+  static final int ICO_22= 0xff222222;
+  static final int ICO_23= 0xff555555;
+  static final int ICO_24= 0xffffffff;
+
+  private static final int[][] COLORS =
+    {
+      { ICO_01, ICO_02, ICO_03, ICO_04, ICO_05, ICO_21 },
+      { ICO_06, ICO_07, ICO_08, ICO_09, ICO_10, ICO_22 },
+      { ICO_11, ICO_12, ICO_13, ICO_14, ICO_15, ICO_23 },
+      { ICO_16, ICO_17, ICO_18, ICO_19, ICO_20, ICO_24 },
+    };
+
   private final SeekBar mSeekBarBorders, mSeekBarCorners;
   private int mCurrentBorders, mCurrentCorners;
+  private GridLayout mGrid;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void updatePane(ConfigActivity act, int objectOrdinal)
+  void resetUI()
     {
+    mSeekBarBorders.setProgress(DEFAULT_BORDERS);
+    mSeekBarCorners.setProgress(DEFAULT_CORNERS);
 
+    // reset color grid
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void resetUI()
+  private void createColorGrid(final ConfigActivity act, int width, int height)
     {
-    mSeekBarBorders.setProgress(DEFAULT_BORDERS);
-    mSeekBarCorners.setProgress(DEFAULT_CORNERS);
+    mGrid = new GridLayout(act);
+    ViewGroup.LayoutParams paramsG = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
+    mGrid.setLayoutParams(paramsG);
+
+    int rowCount = COLORS.length;
+    int colCount = COLORS[0].length;
+
+    int margin  = (int)(width*MARGIN_RATIO);
+    int hsize   = (int)(0.83f*width/colCount - margin);
+    int vsize   = (int)(0.78f*(height*(1-MainActivity.RATIO_BAR)*(2.0f)/(2.0f+0.75f+3.0f))/rowCount - margin );
+
+    mGrid.setColumnCount(colCount);
+    mGrid.setRowCount(rowCount);
+
+    GridLayout.Spec[] rowSpecs = new GridLayout.Spec[rowCount];
+    GridLayout.Spec[] colSpecs = new GridLayout.Spec[colCount];
+
+    for(int row=0; row<rowCount; row++) rowSpecs[row] = GridLayout.spec(row);
+    for(int col=0; col<colCount; col++) colSpecs[col] = GridLayout.spec(col);
+
+    for(int row=0; row<rowCount; row++)
+      for(int col=0; col<colCount; col++)
+        {
+        View v = createView(act,row,col);
+        GridLayout.Spec rs = rowSpecs[row];
+        GridLayout.Spec cs = colSpecs[col];
+
+        GridLayout.LayoutParams params = new GridLayout.LayoutParams(rs,cs);
+        params.bottomMargin = margin;
+        params.topMargin    = margin;
+        params.leftMargin   = margin;
+        params.rightMargin  = margin;
+        params.width = hsize;
+        params.height= vsize;
+
+        mGrid.addView(v,params);
+        }
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private View createView(Activity act, int row, int col)
+    {
+    ImageButton button = new ImageButton(act);
+    button.setBackgroundColor( COLORS[row][col] );
+    return button;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   ConfigScreenPane(final ConfigActivity act, int objectOrdinal)
     {
+    int width = act.getScreenWidthInPixels();
     int height = act.getScreenHeightInPixels();
     float textSize = height*TEXT_RATIO;
     int padding = (int)(height*PADDING_RATIO);
@@ -124,5 +213,8 @@ public class ConfigScreenPane
     paramsLayoutL.rightMargin  = padding;
 
     configLayoutL.setLayoutParams(paramsLayoutL);
+
+    createColorGrid(act, width, height);
+    configLayoutL.addView(mGrid);
     }
 }
diff --git a/src/main/res/layout/config.xml b/src/main/res/layout/config.xml
index 052c3514..3761c20c 100644
--- a/src/main/res/layout/config.xml
+++ b/src/main/res/layout/config.xml
@@ -86,6 +86,7 @@
         android:layout_marginLeft="5dp"
         android:layout_marginRight="5dp"
         android:layout_marginBottom="5dp"
+        android:gravity="center"
         android:paddingLeft="5dp"
         android:paddingRight="5dp"
         android:background="@color/grey"
