mirror of
https://github.com/Myzel394/NumberHub.git
synced 2025-06-19 00:35:26 +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,
|
onAddTokenClick = viewModel::addTokens,
|
||||||
onBracketsClick = viewModel::addBracket,
|
onBracketsClick = viewModel::addBracket,
|
||||||
onDeleteClick = viewModel::deleteTokens,
|
onDeleteClick = viewModel::deleteTokens,
|
||||||
|
onSmartDeleteClick = viewModel::smartDeleteTokens,
|
||||||
onClearClick = viewModel::clearInput,
|
onClearClick = viewModel::clearInput,
|
||||||
onEqualClick = viewModel::equal,
|
onEqualClick = viewModel::equal,
|
||||||
onRadianModeClick = viewModel::updateRadianMode,
|
onRadianModeClick = viewModel::updateRadianMode,
|
||||||
@ -114,6 +115,7 @@ internal fun Ready(
|
|||||||
onAddTokenClick: (String) -> Unit,
|
onAddTokenClick: (String) -> Unit,
|
||||||
onBracketsClick: () -> Unit,
|
onBracketsClick: () -> Unit,
|
||||||
onDeleteClick: () -> Unit,
|
onDeleteClick: () -> Unit,
|
||||||
|
onSmartDeleteClick: () -> Unit,
|
||||||
onClearClick: () -> Unit,
|
onClearClick: () -> Unit,
|
||||||
onEqualClick: () -> Unit,
|
onEqualClick: () -> Unit,
|
||||||
onRadianModeClick: (Boolean) -> Unit,
|
onRadianModeClick: (Boolean) -> Unit,
|
||||||
@ -250,6 +252,7 @@ internal fun Ready(
|
|||||||
onAddTokenClick = onAddTokenClick,
|
onAddTokenClick = onAddTokenClick,
|
||||||
onBracketsClick = onBracketsClick,
|
onBracketsClick = onBracketsClick,
|
||||||
onDeleteClick = onDeleteClick,
|
onDeleteClick = onDeleteClick,
|
||||||
|
onSmartDeleteClick = onSmartDeleteClick,
|
||||||
onClearClick = onClearClick,
|
onClearClick = onClearClick,
|
||||||
onEqualClick = {
|
onEqualClick = {
|
||||||
focusManager.clearFocus()
|
focusManager.clearFocus()
|
||||||
@ -349,6 +352,7 @@ private fun PreviewCalculatorScreen() {
|
|||||||
onAddTokenClick = {},
|
onAddTokenClick = {},
|
||||||
onBracketsClick = {},
|
onBracketsClick = {},
|
||||||
onDeleteClick = {},
|
onDeleteClick = {},
|
||||||
|
onSmartDeleteClick = {},
|
||||||
onClearClick = {},
|
onClearClick = {},
|
||||||
onEqualClick = {},
|
onEqualClick = {},
|
||||||
onRadianModeClick = {},
|
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.deleteTokens
|
||||||
import app.myzel394.numberhub.core.ui.common.textfield.getTextField
|
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.placeCursorAtTheEnd
|
||||||
|
import app.myzel394.numberhub.core.ui.common.textfield.smartDeleteTokens
|
||||||
import app.myzel394.numberhub.data.common.format
|
import app.myzel394.numberhub.data.common.format
|
||||||
import app.myzel394.numberhub.data.common.isExpression
|
import app.myzel394.numberhub.data.common.isExpression
|
||||||
import app.myzel394.numberhub.data.common.isGreaterThan
|
import app.myzel394.numberhub.data.common.isGreaterThan
|
||||||
@ -120,6 +121,15 @@ internal class CalculatorViewModel @Inject constructor(
|
|||||||
updateInput(newValue)
|
updateInput(newValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun smartDeleteTokens() {
|
||||||
|
val newValue = if (equalClicked.value) {
|
||||||
|
TextFieldValue()
|
||||||
|
} else {
|
||||||
|
input.value.smartDeleteTokens()
|
||||||
|
}
|
||||||
|
updateInput(newValue)
|
||||||
|
}
|
||||||
|
|
||||||
fun clearInput() = updateInput(TextFieldValue())
|
fun clearInput() = updateInput(TextFieldValue())
|
||||||
|
|
||||||
fun updateInput(value: TextFieldValue) {
|
fun updateInput(value: TextFieldValue) {
|
||||||
|
@ -112,6 +112,7 @@ internal fun CalculatorKeyboard(
|
|||||||
onAddTokenClick: (String) -> Unit,
|
onAddTokenClick: (String) -> Unit,
|
||||||
onBracketsClick: () -> Unit,
|
onBracketsClick: () -> Unit,
|
||||||
onDeleteClick: () -> Unit,
|
onDeleteClick: () -> Unit,
|
||||||
|
onSmartDeleteClick: () -> Unit,
|
||||||
onClearClick: () -> Unit,
|
onClearClick: () -> Unit,
|
||||||
onEqualClick: () -> Unit,
|
onEqualClick: () -> Unit,
|
||||||
radianMode: Boolean,
|
radianMode: Boolean,
|
||||||
@ -130,6 +131,7 @@ internal fun CalculatorKeyboard(
|
|||||||
onAddTokenClick = onAddTokenClick,
|
onAddTokenClick = onAddTokenClick,
|
||||||
onBracketsClick = onBracketsClick,
|
onBracketsClick = onBracketsClick,
|
||||||
onDeleteClick = onDeleteClick,
|
onDeleteClick = onDeleteClick,
|
||||||
|
onSmartDeleteClick = onSmartDeleteClick,
|
||||||
onClearClick = onClearClick,
|
onClearClick = onClearClick,
|
||||||
onEqualClick = onEqualClick,
|
onEqualClick = onEqualClick,
|
||||||
radianMode = radianMode,
|
radianMode = radianMode,
|
||||||
@ -146,6 +148,7 @@ internal fun CalculatorKeyboard(
|
|||||||
onAddTokenClick = onAddTokenClick,
|
onAddTokenClick = onAddTokenClick,
|
||||||
onBracketsClick = onBracketsClick,
|
onBracketsClick = onBracketsClick,
|
||||||
onDeleteClick = onDeleteClick,
|
onDeleteClick = onDeleteClick,
|
||||||
|
onSmartDeleteClick = onSmartDeleteClick,
|
||||||
onClearClick = onClearClick,
|
onClearClick = onClearClick,
|
||||||
onEqualClick = onEqualClick,
|
onEqualClick = onEqualClick,
|
||||||
radianMode = radianMode,
|
radianMode = radianMode,
|
||||||
@ -167,6 +170,7 @@ private fun PortraitKeyboard(
|
|||||||
onAddTokenClick: (String) -> Unit,
|
onAddTokenClick: (String) -> Unit,
|
||||||
onBracketsClick: () -> Unit,
|
onBracketsClick: () -> Unit,
|
||||||
onDeleteClick: () -> Unit,
|
onDeleteClick: () -> Unit,
|
||||||
|
onSmartDeleteClick: () -> Unit,
|
||||||
onClearClick: () -> Unit,
|
onClearClick: () -> Unit,
|
||||||
onEqualClick: () -> Unit,
|
onEqualClick: () -> Unit,
|
||||||
radianMode: Boolean,
|
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, 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, 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() }
|
KeyboardButtonFilled(mainButtonModifier, IconPack.Equal, stringResource(R.string.keyboard_equal), KeyboardButtonToken.CONTENT_HEIGHT_TALL) { onEqualClick() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -400,6 +410,7 @@ private fun LandscapeKeyboard(
|
|||||||
onAddTokenClick: (String) -> Unit,
|
onAddTokenClick: (String) -> Unit,
|
||||||
onBracketsClick: () -> Unit,
|
onBracketsClick: () -> Unit,
|
||||||
onDeleteClick: () -> Unit,
|
onDeleteClick: () -> Unit,
|
||||||
|
onSmartDeleteClick: () -> Unit,
|
||||||
onClearClick: () -> Unit,
|
onClearClick: () -> Unit,
|
||||||
onEqualClick: () -> Unit,
|
onEqualClick: () -> Unit,
|
||||||
radianMode: Boolean,
|
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, 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, 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.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() }
|
KeyboardButtonFilled(buttonModifier, IconPack.Equal, stringResource(R.string.keyboard_equal), KeyboardButtonToken.CONTENT_HEIGHT_SHORT) { onEqualClick() }
|
||||||
}
|
}
|
||||||
@ -545,6 +562,7 @@ private fun PreviewPortraitKeyboard() {
|
|||||||
onAddTokenClick = {},
|
onAddTokenClick = {},
|
||||||
onBracketsClick = {},
|
onBracketsClick = {},
|
||||||
onDeleteClick = {},
|
onDeleteClick = {},
|
||||||
|
onSmartDeleteClick = {},
|
||||||
onClearClick = {},
|
onClearClick = {},
|
||||||
onEqualClick = {},
|
onEqualClick = {},
|
||||||
radianMode = true,
|
radianMode = true,
|
||||||
@ -567,6 +585,7 @@ private fun PreviewLandscapeKeyboard() {
|
|||||||
onAddTokenClick = {},
|
onAddTokenClick = {},
|
||||||
onBracketsClick = {},
|
onBracketsClick = {},
|
||||||
onDeleteClick = {},
|
onDeleteClick = {},
|
||||||
|
onSmartDeleteClick = {},
|
||||||
onClearClick = {},
|
onClearClick = {},
|
||||||
onEqualClick = {},
|
onEqualClick = {},
|
||||||
radianMode = true,
|
radianMode = true,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user