diff android/DWindows.kt @ 2488:666af45f33b5

Android: Implment a bunch of window functions: enable/disable/data/id Add basic structure for the notebook control.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 30 Apr 2021 00:51:33 +0000
parents 83f8f4f58a98
children 6c01b0132813
line wrap: on
line diff
--- a/android/DWindows.kt	Tue Apr 27 09:19:29 2021 +0000
+++ b/android/DWindows.kt	Fri Apr 30 00:51:33 2021 +0000
@@ -7,16 +7,45 @@
 import android.text.method.PasswordTransformationMethod
 import android.util.Log
 import android.view.Gravity
+import android.view.LayoutInflater
 import android.view.View
+import android.view.ViewGroup
 import android.widget.*
 import androidx.appcompat.app.AlertDialog
 import androidx.appcompat.app.AppCompatActivity
+import androidx.collection.SimpleArrayMap
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentActivity
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentStatePagerAdapter
+import androidx.recyclerview.widget.RecyclerView
+import androidx.viewpager.widget.ViewPager
+import androidx.viewpager2.adapter.FragmentStateAdapter
+import androidx.viewpager2.widget.ViewPager2
+import com.google.android.material.tabs.TabLayout
+import com.google.android.material.tabs.TabLayoutMediator
 
+class TabViewPagerAdapter : RecyclerView.Adapter<TabViewPagerAdapter.EventViewHolder>() {
+    val eventList = listOf("0", "1", "2")
 
-class DWindows : AppCompatActivity()
-{
-    override fun onCreate(savedInstanceState: Bundle?)
-    {
+    // Layout "layout_demo_viewpager2_cell.xml" will be defined later
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
+            EventViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.dwindows_main, parent, false))
+
+    override fun getItemCount() = eventList.count()
+    override fun onBindViewHolder(holder: EventViewHolder, position: Int) {
+        (holder.view as? TextView)?.also{
+            it.text = "Page " + eventList.get(position)
+        }
+    }
+
+    class EventViewHolder(val view: View) : RecyclerView.ViewHolder(view)
+}
+
+class DWindows : AppCompatActivity() {
+    var firstWindow: Boolean = true
+
+    override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
         // Turn on rotation
@@ -32,23 +61,74 @@
         // This will start a new thread that calls the app's dwmain()
         dwindowsInit(s)
     }
+
     /*
      * These are the Android calls to actually create the UI...
      * forwarded from the C Dynamic Windows API
      */
-    fun windowNew(title: String, style: Int): LinearLayout
+    fun windowNew(title: String, style: Int): LinearLayout?
+    {
+        if(firstWindow)
+        {
+            var windowLayout: LinearLayout = LinearLayout(this)
+            var dataArrayMap = SimpleArrayMap<String, Long>()
+
+            windowLayout.tag = dataArrayMap
+            setContentView(windowLayout)
+            this.title = title
+            // For now we just return our DWindows' main activity layout...
+            // in the future, later calls should create new activities
+            firstWindow = false
+            return windowLayout
+        }
+        return null
+    }
+
+    fun windowFromId(window: View, cid: Int): View
+    {
+        return window.findViewById(cid)
+    }
+
+    fun windowSetData(window: View, name: String, data: Long)
     {
-        var windowLayout: LinearLayout = LinearLayout(this)
-        setContentView(windowLayout)
-        this.title = title
-        // For now we just return our DWindows' main activity layout...
-        // in the future, later calls should create new activities
-        return windowLayout
+        if(window.tag != null)
+        {
+            var dataArrayMap: SimpleArrayMap<String, Long> = window.tag as SimpleArrayMap<String, Long>
+
+            if(data != 0L) {
+                dataArrayMap.put(name, data)
+            }
+            else
+            {
+                dataArrayMap.remove(name)
+            }
+        }
+    }
+
+    fun windowGetData(window: View, name: String): Long
+    {
+        var retval: Long = 0L
+
+        if (window.tag != null)
+        {
+            var dataArrayMap: SimpleArrayMap<String, Long> = window.tag as SimpleArrayMap<String, Long>
+
+            retval = dataArrayMap.get(name)!!
+        }
+        return retval
+    }
+
+    fun windowSetEnabled(window: View, state: Boolean)
+    {
+        window.setEnabled(state)
     }
 
     fun boxNew(type: Int, pad: Int): LinearLayout
     {
         val box = LinearLayout(this)
+        var dataArrayMap = SimpleArrayMap<String, Long>()
+
+        box.tag = dataArrayMap
         box.layoutParams =
             LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
         if (type > 0) {
@@ -119,7 +199,7 @@
             params.gravity = Gravity.FILL_VERTICAL or grav
         }
         item.layoutParams = params
-        box.addView(item)
+        box.addView(item, index)
     }
 
     fun boxUnpack(item: View)
@@ -131,7 +211,11 @@
     fun buttonNew(text: String, cid: Int): Button
     {
         val button = Button(this)
+        var dataArrayMap = SimpleArrayMap<String, Long>()
+
+        button.tag = dataArrayMap
         button.text = text
+        button.id = cid
         button.setOnClickListener {
             eventHandlerSimple(button, 8)
         }
@@ -141,6 +225,10 @@
     fun entryfieldNew(text: String, cid: Int, password: Int): EditText
     {
         val entryfield = EditText(this)
+        var dataArrayMap = SimpleArrayMap<String, Long>()
+
+        entryfield.tag = dataArrayMap
+        entryfield.id = cid
         if(password > 0) {
             entryfield.transformationMethod = PasswordTransformationMethod.getInstance()
         }
@@ -151,6 +239,10 @@
     fun radioButtonNew(text: String, cid: Int): RadioButton
     {
         val radiobutton = RadioButton(this)
+        var dataArrayMap = SimpleArrayMap<String, Long>()
+
+        radiobutton.tag = dataArrayMap
+        radiobutton.id = cid
         radiobutton.text = text
         radiobutton.setOnClickListener {
             eventHandlerSimple(radiobutton, 8)
@@ -161,6 +253,10 @@
     fun checkboxNew(text: String, cid: Int): CheckBox
     {
         val checkbox = CheckBox(this)
+        var dataArrayMap = SimpleArrayMap<String, Long>()
+
+        checkbox.tag = dataArrayMap
+        checkbox.id = cid
         checkbox.text = text
         checkbox.setOnClickListener {
             eventHandlerSimple(checkbox, 8)
@@ -171,10 +267,36 @@
     fun textNew(text: String, cid: Int, status: Int): TextView
     {
         val textview = TextView(this)
+        var dataArrayMap = SimpleArrayMap<String, Long>()
+
+        textview.tag = dataArrayMap
+        textview.id = cid
         textview.text = text
         return textview
     }
 
+    fun notebookNew(cid: Int, top: Int)
+    {
+        val notebook = RelativeLayout(this)
+        val pager = ViewPager2(this)
+        val tabs = TabLayout(this)
+        var w: Int = RelativeLayout.LayoutParams.MATCH_PARENT
+        var h: Int = RelativeLayout.LayoutParams.WRAP_CONTENT
+        var dataArrayMap = SimpleArrayMap<String, Long>()
+
+        notebook.tag = dataArrayMap
+        notebook.id = cid
+        pager.adapter = TabViewPagerAdapter()
+        TabLayoutMediator(tabs, pager) { tab, position ->
+            tab.text = "OBJECT ${(position + 1)}"
+        }.attach()
+
+        var params: RelativeLayout.LayoutParams = RelativeLayout.LayoutParams(w, h)
+        tabs.layoutParams = params
+        notebook.addView(tabs)
+        notebook.addView(pager)
+    }
+
     fun debugMessage(text: String)
     {
         Log.d(null, text)