commit e48ad1af977c933d05cd02303294296b0842c3f3
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Mar 28 15:11:41 2022 +0200

    Bandaged 3x3: progress with saving.

diff --git a/src/main/java/org/distorted/bandaged/BandagedCreatorActivity.java b/src/main/java/org/distorted/bandaged/BandagedCreatorActivity.java
index 56ed23d6..3f6d5b30 100644
--- a/src/main/java/org/distorted/bandaged/BandagedCreatorActivity.java
+++ b/src/main/java/org/distorted/bandaged/BandagedCreatorActivity.java
@@ -25,6 +25,7 @@ import android.util.DisplayMetrics;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowManager;
+import android.widget.HorizontalScrollView;
 import android.widget.LinearLayout;
 
 import androidx.appcompat.app.AppCompatActivity;
@@ -98,7 +99,7 @@ public class BandagedCreatorActivity extends AppCompatActivity
       paramsL.height = barHeight;
       layout.setLayoutParams(paramsL);
 
-      LinearLayout view = findViewById(R.id.bandagedCreatorView);
+      HorizontalScrollView view = findViewById(R.id.bandagedCreatorScrollView);
       ViewGroup.LayoutParams paramsS = view.getLayoutParams();
       paramsS.height = viewHeight;
 
@@ -221,6 +222,13 @@ public class BandagedCreatorActivity extends AppCompatActivity
       return view.getRenderer();
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void addObject(String name)
+      {
+      mScreen.addObject(this,name);
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public int getHeightBar()
diff --git a/src/main/java/org/distorted/bandaged/BandagedCreatorObjectView.java b/src/main/java/org/distorted/bandaged/BandagedCreatorObjectView.java
new file mode 100644
index 00000000..b34b2f24
--- /dev/null
+++ b/src/main/java/org/distorted/bandaged/BandagedCreatorObjectView.java
@@ -0,0 +1,75 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2022 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Magic Cube.                                                              //
+//                                                                                               //
+// Magic Cube is free software: you can redistribute it and/or modify                            //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Magic Cube is distributed in the hope that it will be useful,                                 //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.bandaged;
+
+import android.view.LayoutInflater;
+import android.widget.LinearLayout;
+
+import org.distorted.helpers.TransparentButton;
+import org.distorted.helpers.TransparentImageButton;
+import org.distorted.main.R;
+import org.distorted.main.RubikActivity;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class BandagedCreatorObjectView
+{
+  private final LinearLayout mPane;
+  private final String mName;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public BandagedCreatorObjectView(BandagedCreatorActivity act, String name, boolean leftmost)
+    {
+    mName = name;
+    LayoutInflater inflater = act.getLayoutInflater();
+    mPane = (LinearLayout) inflater.inflate(R.layout.bandaged_pane, null);
+
+    int width      = act.getScreenWidthInPixels();
+    int lMargin    = (int)(width*RubikActivity.LARGE_MARGIN);
+    int buttonSize = (int)(width*RubikActivity.BUTTON_TEXT_SIZE);
+
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( (int)(width*0.35f), LinearLayout.LayoutParams.MATCH_PARENT);
+    params.bottomMargin = lMargin;
+    params.topMargin    = lMargin;
+    params.leftMargin   = leftmost ? lMargin : 0;
+    params.rightMargin  = lMargin;
+
+    mPane.setLayoutParams(params);
+
+    LinearLayout bottom = mPane.findViewById(R.id.bandagedCreatorObjectLayout);
+
+    TransparentButton plaButton = new TransparentButton(act, R.string.play, buttonSize);
+
+    final int icon = RubikActivity.getDrawable(R.drawable.ui_small_menu,R.drawable.ui_medium_menu, R.drawable.ui_big_menu, R.drawable.ui_huge_menu);
+    LinearLayout.LayoutParams paramsB = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    TransparentImageButton delButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, paramsB);
+
+    bottom.addView(plaButton);
+    bottom.addView(delButton);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public LinearLayout getPane()
+    {
+    return mPane;
+    }
+}
diff --git a/src/main/java/org/distorted/bandaged/BandagedCreatorRenderer.java b/src/main/java/org/distorted/bandaged/BandagedCreatorRenderer.java
index 72f1919e..6cd14d49 100644
--- a/src/main/java/org/distorted/bandaged/BandagedCreatorRenderer.java
+++ b/src/main/java/org/distorted/bandaged/BandagedCreatorRenderer.java
@@ -346,12 +346,17 @@ public class BandagedCreatorRenderer implements GLSurfaceView.Renderer, Distorte
      TwistyObject obj = new TwistyBandagedGeneric();
      BandagedCreatorActivity act = (BandagedCreatorActivity) mView.getContext();
 
-     createObjectJson(obj,act);
+     boolean success = createObjectJson(obj,act);
+
+     if( success )
+       {
+       act.addObject(obj.getShortName());
+       }
      }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-   private void createObjectJson(TwistyObject object, Activity act)
+   private boolean createObjectJson(TwistyObject object, Activity act)
      {
      final String name = object.getShortName()+"_object.json";
      File file = new File(act.getFilesDir(), name);
@@ -362,15 +367,7 @@ public class BandagedCreatorRenderer implements GLSurfaceView.Renderer, Distorte
        JsonWriter writer = JsonWriter.getInstance();
        String json = writer.createObjectString(object,24);
        writer.write(filename,json);
-
-       act.runOnUiThread(new Runnable()
-         {
-         public void run()
-           {
-           String message = "Saving to \n\n"+filename+"\n\nsuccessful";
-           Toast.makeText(act,message,Toast.LENGTH_LONG).show();
-           }
-         });
+       return true;
        }
      catch(JSONException ex)
        {
@@ -382,6 +379,8 @@ public class BandagedCreatorRenderer implements GLSurfaceView.Renderer, Distorte
            Toast.makeText(act,message,Toast.LENGTH_LONG).show();
            }
          });
+
+       return false;
        }
      catch(FileNotFoundException ex)
        {
@@ -393,6 +392,8 @@ public class BandagedCreatorRenderer implements GLSurfaceView.Renderer, Distorte
            Toast.makeText(act,message,Toast.LENGTH_LONG).show();
            }
          });
+
+       return false;
        }
      catch(IOException ex)
        {
@@ -404,6 +405,8 @@ public class BandagedCreatorRenderer implements GLSurfaceView.Renderer, Distorte
            Toast.makeText(act,message,Toast.LENGTH_LONG).show();
            }
          });
+
+       return false;
        }
      }
 
diff --git a/src/main/java/org/distorted/bandaged/BandagedCreatorScreen.java b/src/main/java/org/distorted/bandaged/BandagedCreatorScreen.java
index 7b92d9b9..a4f42645 100644
--- a/src/main/java/org/distorted/bandaged/BandagedCreatorScreen.java
+++ b/src/main/java/org/distorted/bandaged/BandagedCreatorScreen.java
@@ -31,14 +31,14 @@ import org.distorted.main.RubikActivity;
 public class BandagedCreatorScreen
 {
   private TransparentImageButton mBackButton, mResetButton, mDoneButton;
-  private int mBarHeight;
-  private float mButtonSize;
+  private LinearLayout mObjectView;
+  private int mNumObjects;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public BandagedCreatorScreen()
     {
-
+    mNumObjects = 0;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -101,9 +101,9 @@ public class BandagedCreatorScreen
 
   void onAttachedToWindow(final BandagedCreatorActivity act)
     {
+    mObjectView = act.findViewById(R.id.bandagedCreatorView);
+
     int width = act.getScreenWidthInPixels();
-    mBarHeight = act.getHeightBar();
-    mButtonSize = width*RubikActivity.BUTTON_TEXT_SIZE;
 
     LinearLayout.LayoutParams paramsL = new LinearLayout.LayoutParams(width/4, LinearLayout.LayoutParams.MATCH_PARENT);
     LinearLayout.LayoutParams paramsM = new LinearLayout.LayoutParams(width/2, LinearLayout.LayoutParams.MATCH_PARENT);
@@ -129,4 +129,14 @@ public class BandagedCreatorScreen
     layout.addView(layoutMid);
     layout.addView(layoutRight);
     }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  void addObject(BandagedCreatorActivity act, String name)
+    {
+    BandagedCreatorObjectView view = new BandagedCreatorObjectView(act,name,mNumObjects==0);
+    LinearLayout pane = view.getPane();
+    mObjectView.addView(pane);
+    mNumObjects++;
+    }
 }
diff --git a/src/main/res/layout/bandaged.xml b/src/main/res/layout/bandaged.xml
index fe56fd76..364057da 100644
--- a/src/main/res/layout/bandaged.xml
+++ b/src/main/res/layout/bandaged.xml
@@ -4,7 +4,6 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent" >
 
-
     <org.distorted.bandaged.BandagedCreatorView
         android:id="@+id/bandagedCreatorObjectView"
         android:layout_width="match_parent"
@@ -12,21 +11,21 @@
         android:layout_alignParentBottom="true"
         android:layout_alignParentStart="true"/>
 
-    <LinearLayout
-        android:id="@+id/bandagedCreatorView"
+    <HorizontalScrollView
+        android:id="@+id/bandagedCreatorScrollView"
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:background="@color/light_grey"
         android:layout_alignParentStart="true"
         android:layout_alignParentTop="true">
 
-        <ScrollView
-            android:id="@+id/bandagedCreatorScrollView"
+        <LinearLayout
+            android:id="@+id/bandagedCreatorView"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
             android:background="@color/black"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"/>
-
-    </LinearLayout>
+            android:orientation="horizontal"/>
+    </HorizontalScrollView>
 
     <LinearLayout
         android:id="@+id/lowerBar"
diff --git a/src/main/res/layout/bandaged_pane.xml b/src/main/res/layout/bandaged_pane.xml
new file mode 100644
index 00000000..e5018518
--- /dev/null
+++ b/src/main/res/layout/bandaged_pane.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/bandagedCreatorObjectPane"
+    android:layout_width="200dp"
+    android:layout_height="match_parent"
+    android:background="@color/light_grey"
+    android:orientation="vertical">
+
+    <ImageView
+        android:id="@+id/bandagedCreatorObjectIcon"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="3.0"
+        android:src="@drawable/ui_difficulty_unchecked"/>
+
+    <LinearLayout
+        android:id="@+id/bandagedCreatorObjectLayout"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1.0"
+        android:orientation="horizontal"/>
+
+</LinearLayout>
