diff --git a/app/src/main/java/replete/Main.kt b/app/src/main/java/replete/Main.kt index 10f3e48..cf670a2 100644 --- a/app/src/main/java/replete/Main.kt +++ b/app/src/main/java/replete/Main.kt @@ -12,6 +12,7 @@ import android.content.res.Configuration import android.os.* import android.text.* import android.text.style.ForegroundColorSpan +import android.util.AttributeSet import android.util.DisplayMetrics import android.view.animation.AlphaAnimation import android.view.animation.Animation @@ -76,6 +77,19 @@ enum class Messages(val value: Int) { INIT_FAILED(17), } +enum class Buttons(val value: String) { + PAREN("("), + SQUARE("["), + CURLY("{"), + COLON(":"), + DBL_QUOTE("\""), + HASH("#"), + PERCENT("%"), + QUOTE("'"), + SYNTAX_QUOTE("`"), + DEREF("@"), +} + class MainActivity : AppCompatActivity() { private var isVMLoaded = false @@ -368,6 +382,30 @@ class MainActivity : AppCompatActivity() { } } + inner class ToolBarButton(context: Context, val toolbar: LinearLayout, val text: String) : Button(context) { + init { + val button = LayoutInflater.from(context).inflate(R.layout.button, toolbar, false) as Button + button.text = text + toolbar.addView(button) + + button.setOnClickListener { + val field = inputField!! + val cursor = field.selectionStart + when (text) { + Buttons.DBL_QUOTE.value -> autoCloseAndMove(Buttons.DBL_QUOTE.value) + else -> field.text.insert(cursor, text) + } + } + } + + private fun autoCloseAndMove(ch: String) { + val field = inputField!! + val cursor = field.selectionStart + field.text.insert(cursor, ch + ch) + field.setSelection(cursor + 1) + } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -399,6 +437,14 @@ class MainActivity : AppCompatActivity() { setDeviceType() setContentView(R.layout.activity_main) + val toolbarBlock = findViewById(R.id.toolbar) + val toolbar = findViewById(R.id.toolbar_list) + val buttons = listOf("(", "[", "{", ":", "\"", "#", "%", "'", "`", "@") + + buttons.forEach { + ToolBarButton(this, toolbar, it) + } + inputField = findViewById(R.id.input) val replHistory: ListView = findViewById(R.id.repl_history) evalButton = findViewById(R.id.eval_button) diff --git a/app/src/main/res/drawable/button_bg.xml b/app/src/main/res/drawable/button_bg.xml new file mode 100644 index 0000000..9b55de6 --- /dev/null +++ b/app/src/main/res/drawable/button_bg.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 1a66a05..8e05333 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -22,20 +22,31 @@ android:layout_height="0dp" android:id="@+id/eval_button" android:layout_weight="1" style="@style/Widget.AppCompat.Button.Borderless.Colored" android:textColor="@android:color/holo_blue_dark" android:layout_marginEnd="8dp" - android:layout_marginRight="8dp" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintBottom_toBottomOf="parent" - android:layout_marginBottom="8dp" - app:layout_constraintTop_toBottomOf="@+id/repl_history"/> + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@+id/repl_history" app:layout_constraintBottom_toTopOf="@+id/toolbar" + /> + android:layout_marginEnd="8dp" android:typeface="monospace" + android:textSize="14sp" android:textColor="@android:color/black" + app:layout_constraintHorizontal_bias="1.0" + app:layout_constraintBottom_toTopOf="@+id/toolbar"/> + + + + diff --git a/app/src/main/res/layout/button.xml b/app/src/main/res/layout/button.xml new file mode 100644 index 0000000..a58811f --- /dev/null +++ b/app/src/main/res/layout/button.xml @@ -0,0 +1,11 @@ + +