mirror of
https://github.com/Myzel394/NumberHub.git
synced 2025-06-18 16:25:27 +02:00
feat(calculator): Add smart delete functionality to calculator
Signed-off-by: Myzel394 <50424412+Myzel394@users.noreply.github.com>
This commit is contained in:
parent
04dabe60af
commit
358f5b4582
@ -95,6 +95,7 @@ internal fun CalculatorRoute(
|
||||
onAddTokenClick = viewModel::addTokens,
|
||||
onBracketsClick = viewModel::addBracket,
|
||||
onDeleteClick = viewModel::deleteTokens,
|
||||
onSmartDeleteClick = viewModel::smartDeleteTokens,
|
||||
onClearClick = viewModel::clearInput,
|
||||
onEqualClick = viewModel::equal,
|
||||
onRadianModeClick = viewModel::updateRadianMode,
|
||||
@ -114,6 +115,7 @@ internal fun Ready(
|
||||
onAddTokenClick: (String) -> Unit,
|
||||
onBracketsClick: () -> Unit,
|
||||
onDeleteClick: () -> Unit,
|
||||
onSmartDeleteClick: () -> Unit,
|
||||
onClearClick: () -> Unit,
|
||||
onEqualClick: () -> Unit,
|
||||
onRadianModeClick: (Boolean) -> Unit,
|
||||
@ -250,6 +252,7 @@ internal fun Ready(
|
||||
onAddTokenClick = onAddTokenClick,
|
||||
onBracketsClick = onBracketsClick,
|
||||
onDeleteClick = onDeleteClick,
|
||||
onSmartDeleteClick = onSmartDeleteClick,
|
||||
onClearClick = onClearClick,
|
||||
onEqualClick = {
|
||||
focusManager.clearFocus()
|
||||
@ -349,6 +352,7 @@ private fun PreviewCalculatorScreen() {
|
||||
onAddTokenClick = {},
|
||||
onBracketsClick = {},
|
||||
onDeleteClick = {},
|
||||
onSmartDeleteClick = {},
|
||||
onClearClick = {},
|
||||
onEqualClick = {},
|
||||
onRadianModeClick = {},
|
||||
|
@ -28,6 +28,7 @@ import app.myzel394.numberhub.core.ui.common.textfield.addTokens
|
||||
import app.myzel394.numberhub.core.ui.common.textfield.deleteTokens
|
||||
import app.myzel394.numberhub.core.ui.common.textfield.getTextField
|
||||
import app.myzel394.numberhub.core.ui.common.textfield.placeCursorAtTheEnd
|
||||
import app.myzel394.numberhub.core.ui.common.textfield.smartDeleteTokens
|
||||
import app.myzel394.numberhub.data.common.format
|
||||
import app.myzel394.numberhub.data.common.isExpression
|
||||
import app.myzel394.numberhub.data.common.isGreaterThan
|
||||
@ -120,6 +121,15 @@ internal class CalculatorViewModel @Inject constructor(
|
||||
updateInput(newValue)
|
||||
}
|
||||
|
||||
fun smartDeleteTokens() {
|
||||
val newValue = if (equalClicked.value) {
|
||||
TextFieldValue()
|
||||
} else {
|
||||
input.value.smartDeleteTokens()
|
||||
}
|
||||
updateInput(newValue)
|
||||
}
|
||||
|
||||
fun clearInput() = updateInput(TextFieldValue())
|
||||
|
||||
fun updateInput(value: TextFieldValue) {
|
||||
|
@ -112,6 +112,7 @@ internal fun CalculatorKeyboard(
|
||||
onAddTokenClick: (String) -> Unit,
|
||||
onBracketsClick: () -> Unit,
|
||||
onDeleteClick: () -> Unit,
|
||||
onSmartDeleteClick: () -> Unit,
|
||||
onClearClick: () -> Unit,
|
||||
onEqualClick: () -> Unit,
|
||||
radianMode: Boolean,
|
||||
@ -130,6 +131,7 @@ internal fun CalculatorKeyboard(
|
||||
onAddTokenClick = onAddTokenClick,
|
||||
onBracketsClick = onBracketsClick,
|
||||
onDeleteClick = onDeleteClick,
|
||||
onSmartDeleteClick = onSmartDeleteClick,
|
||||
onClearClick = onClearClick,
|
||||
onEqualClick = onEqualClick,
|
||||
radianMode = radianMode,
|
||||
@ -146,6 +148,7 @@ internal fun CalculatorKeyboard(
|
||||
onAddTokenClick = onAddTokenClick,
|
||||
onBracketsClick = onBracketsClick,
|
||||
onDeleteClick = onDeleteClick,
|
||||
onSmartDeleteClick = onSmartDeleteClick,
|
||||
onClearClick = onClearClick,
|
||||
onEqualClick = onEqualClick,
|
||||
radianMode = radianMode,
|
||||
@ -167,6 +170,7 @@ private fun PortraitKeyboard(
|
||||
onAddTokenClick: (String) -> Unit,
|
||||
onBracketsClick: () -> Unit,
|
||||
onDeleteClick: () -> Unit,
|
||||
onSmartDeleteClick: () -> Unit,
|
||||
onClearClick: () -> Unit,
|
||||
onEqualClick: () -> Unit,
|
||||
radianMode: Boolean,
|
||||
@ -318,7 +322,13 @@ private fun PortraitKeyboard(
|
||||
KeyboardButtonLight(mainButtonModifier, IconPack.Key0, Token.Digit._0, KeyboardButtonToken.CONTENT_HEIGHT_TALL) { onAddTokenClick(Token.Digit._0) }
|
||||
KeyboardButtonLight(mainButtonModifier, fractionalIcon, stringResource(fractionalIconDescription), KeyboardButtonToken.CONTENT_HEIGHT_TALL) { onAddTokenClick(Token.Digit.dot) }
|
||||
}
|
||||
KeyboardButtonLight(mainButtonModifier, IconPack.Backspace, stringResource(R.string.delete_label), KeyboardButtonToken.CONTENT_HEIGHT_TALL, onClearClick) { onDeleteClick() }
|
||||
KeyboardButtonLight(
|
||||
mainButtonModifier,
|
||||
IconPack.Backspace,
|
||||
stringResource(R.string.delete_label),
|
||||
KeyboardButtonToken.CONTENT_HEIGHT_TALL,
|
||||
onSmartDeleteClick,
|
||||
) { onDeleteClick() }
|
||||
KeyboardButtonFilled(mainButtonModifier, IconPack.Equal, stringResource(R.string.keyboard_equal), KeyboardButtonToken.CONTENT_HEIGHT_TALL) { onEqualClick() }
|
||||
}
|
||||
|
||||
@ -400,6 +410,7 @@ private fun LandscapeKeyboard(
|
||||
onAddTokenClick: (String) -> Unit,
|
||||
onBracketsClick: () -> Unit,
|
||||
onDeleteClick: () -> Unit,
|
||||
onSmartDeleteClick: () -> Unit,
|
||||
onClearClick: () -> Unit,
|
||||
onEqualClick: () -> Unit,
|
||||
radianMode: Boolean,
|
||||
@ -473,7 +484,13 @@ private fun LandscapeKeyboard(
|
||||
KeyboardButtonLight(buttonModifier, IconPack.Key0, Token.Digit._0, KeyboardButtonToken.CONTENT_HEIGHT_SHORT) { onAddTokenClick(Token.Digit._0) }
|
||||
KeyboardButtonLight(buttonModifier, fractionalIcon, stringResource(fractionalIconDescription), KeyboardButtonToken.CONTENT_HEIGHT_SHORT) { onAddTokenClick(Token.Digit.dot) }
|
||||
}
|
||||
KeyboardButtonLight(buttonModifier, IconPack.Backspace, stringResource(R.string.delete_label), KeyboardButtonToken.CONTENT_HEIGHT_SHORT, onClearClick) { onDeleteClick() }
|
||||
KeyboardButtonLight(
|
||||
buttonModifier,
|
||||
IconPack.Backspace,
|
||||
stringResource(R.string.delete_label),
|
||||
KeyboardButtonToken.CONTENT_HEIGHT_SHORT,
|
||||
onSmartDeleteClick,
|
||||
) { onDeleteClick() }
|
||||
KeyboardButtonFilled(buttonModifier, IconPack.Plus, stringResource(R.string.keyboard_plus), KeyboardButtonToken.CONTENT_HEIGHT_SHORT) { onAddTokenClick(Token.Operator.plus) }
|
||||
KeyboardButtonFilled(buttonModifier, IconPack.Equal, stringResource(R.string.keyboard_equal), KeyboardButtonToken.CONTENT_HEIGHT_SHORT) { onEqualClick() }
|
||||
}
|
||||
@ -545,6 +562,7 @@ private fun PreviewPortraitKeyboard() {
|
||||
onAddTokenClick = {},
|
||||
onBracketsClick = {},
|
||||
onDeleteClick = {},
|
||||
onSmartDeleteClick = {},
|
||||
onClearClick = {},
|
||||
onEqualClick = {},
|
||||
radianMode = true,
|
||||
@ -567,6 +585,7 @@ private fun PreviewLandscapeKeyboard() {
|
||||
onAddTokenClick = {},
|
||||
onBracketsClick = {},
|
||||
onDeleteClick = {},
|
||||
onSmartDeleteClick = {},
|
||||
onClearClick = {},
|
||||
onEqualClick = {},
|
||||
radianMode = true,
|
||||
|
Loading…
x
Reference in New Issue
Block a user