diff --git a/devmenu/src/main/java/com/megboyzz/devmenu/ui/components/ContextMenu.kt b/devmenu/src/main/java/com/megboyzz/devmenu/ui/components/ContextMenu.kt
index ec41862..444eabf 100644
--- a/devmenu/src/main/java/com/megboyzz/devmenu/ui/components/ContextMenu.kt
+++ b/devmenu/src/main/java/com/megboyzz/devmenu/ui/components/ContextMenu.kt
@@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
@@ -15,10 +16,17 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.KeyboardArrowRight
import androidx.compose.material.icons.outlined.Star
+import androidx.compose.material3.Button
import androidx.compose.material3.Divider
import androidx.compose.material3.Icon
+import androidx.compose.material3.OutlinedTextField
+import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
@@ -35,18 +43,20 @@ import com.megboyzz.devmenu.ui.asPainter
fun ClickableMenuPosition(
name: String,
icon: Painter,
- onClick: () -> Unit
+ onClick: () -> Unit = {},
+ withEnd: Boolean = true
) {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier
- .clickableWithRipple(onClick = onClick)
+ .clickableWithRipple(onClick = onClick, enabled = withEnd)
+ .padding(4.dp)
.fillMaxWidth()
) {
CoreMenuPosition(name = name, icon = icon)
- Icon(Icons.Default.KeyboardArrowRight, null)
+ if (withEnd) Image(painter = R.drawable.enter.asPainter(), contentDescription = null)
}
}
@@ -80,14 +90,12 @@ fun FsElementInContextMenu(
horizontalArrangement = Arrangement.spacedBy(12.dp)
) {
- val modifier = Modifier.size(32.dp).shadow(elevation = 6.dp)
+ val modifier = Modifier
+ .size(32.dp)
+ .clip(RoundedCornerShape(10.dp))
+ .shadow(elevation = 6.dp)
- when(type){
- ElementType.isHidden -> { Image(painter = R.drawable.icon_hidden_file.asPainter(), contentDescription = null, modifier) }
- ElementType.isFile -> { Image(painter = R.drawable.icon_file.asPainter(), contentDescription = null, modifier) }
- ElementType.isDir -> { Image(painter = R.drawable.icon_folder.asPainter(), contentDescription = null, modifier) }
- ElementType.isReplaced -> { Image(painter = R.drawable.icon_replaced_file.asPainter(), contentDescription = null, modifier) }
- }
+ FsElementIcon(type, modifier)
Text(
text = name
)
@@ -99,37 +107,112 @@ fun FsElementInContextMenu(
fun FileContextMenu(
name: String,
type: ElementType,
+ onRemoveElement: () -> Unit,
+ onUpdateType: (ElementType) -> Unit
) {
+
+ var innerType by remember { mutableStateOf(type) }
+ var isMain by remember { mutableStateOf(true) }
+
CoreFileContextMenu {
- Column(
- verticalArrangement = Arrangement.spacedBy(20.dp)
- ) {
+ Column(verticalArrangement = Arrangement.spacedBy(20.dp)) {
FsElementInContextMenu(name = name, type = type)
Divider()
- ClickableMenuPosition(
- name = "Заменить",
- icon = rememberVectorPainter(image = Icons.Outlined.Star)
- ) {
+ if (isMain) {
+ ClickableMenuPosition(
+ name = "Заменить",
+ icon = R.drawable.star.asPainter(),
+ onClick = {
+ innerType = ElementType.isReplaced
+ onUpdateType(innerType)
+ }
+ )
+ ClickableMenuPosition(
+ name = "Скрыть для игры",
+ icon = R.drawable.hide.asPainter(),
+ onClick = {
+ innerType = ElementType.isHidden
+ }
+ )
+ ClickableMenuPosition(
+ name = "Свойства",
+ icon = R.drawable.info.asPainter(),
+ onClick = {}
+ )
+ ClickableMenuPosition(
+ name = "Удалить",
+ icon = R.drawable.trash.asPainter(),
+ onClick = { isMain = !isMain }
+ )
+ }else{
+ ClickableMenuPosition(
+ name = "Удалить",
+ icon = R.drawable.trash.asPainter(),
+ withEnd = false
+ )
+ RemoveFileButtonsGroup(
+ onDelete = onRemoveElement,
+ onCancel = { isMain =! isMain }
+ )
}
- ClickableMenuPosition(
- name = "Заменить",
- icon = rememberVectorPainter(image = Icons.Outlined.Star)
- ) {
+ }
+ }
+}
- }
- ClickableMenuPosition(
- name = "Заменить",
- icon = rememberVectorPainter(image = Icons.Outlined.Star)
- ) {
+@Composable
+fun RemoveFileButtonsGroup(
+ onDelete: () -> Unit,
+ onCancel: () -> Unit
+) {
+ Row(
+ horizontalArrangement = Arrangement.spacedBy(12.dp),
+ ) {
+ val m = Modifier.weight(1f)
+ RemoveButton(text = "Удалить", onClick = onDelete, modifier = m)
+ RemoveButton(text = "Отмена", onClick = onCancel, modifier = m)
+ }
+}
- }
- ClickableMenuPosition(
- name = "Заменить",
- icon = rememberVectorPainter(image = Icons.Outlined.Star)
+@Preview
+@Composable
+fun TwoButtonsRow() {
+ Surface(
+ modifier = Modifier.fillMaxWidth()
+ ) {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ ) {
+ Button(
+ onClick = { /* Действие для первой кнопки */ },
+ modifier = Modifier.weight(1f) // Каждая кнопка занимает равное количество места (50%)
) {
-
+ // Ваш текст и стиль для первой кнопки
}
+
+ Button(
+ onClick = { /* Действие для второй кнопки */ },
+ modifier = Modifier.weight(1f) // Каждая кнопка занимает равное количество места (50%)
+ ) {
+ // Ваш текст и стиль для второй кнопки
+ }
+ }
+ }
+}
+
+@Composable
+fun RemoveButton(
+ text: String,
+ modifier: Modifier = Modifier,
+ onClick: () -> Unit
+) {
+ Row() {
+ Button(
+ onClick = onClick,
+ shape = RoundedCornerShape(10.dp),
+ modifier = modifier
+ ) {
+ Text(text = text)
}
}
}
@@ -146,7 +229,7 @@ fun CoreFileContextMenu(
.background(Color.White)
.clip(RoundedCornerShape(10.dp)),
contentAlignment = Alignment.TopCenter
- ){
+ ) {
Box(
modifier = Modifier.padding(
@@ -165,7 +248,9 @@ fun ClicablePreview() {
FileContextMenu(
name = "my_file.txt",
- type = ElementType.isFile
+ type = ElementType.isFile,
+ onRemoveElement = {},
+ onUpdateType = {}
)
}
\ No newline at end of file
diff --git a/devmenu/src/main/java/com/megboyzz/devmenu/ui/components/Files.kt b/devmenu/src/main/java/com/megboyzz/devmenu/ui/components/Files.kt
index 0bba91b..a512032 100644
--- a/devmenu/src/main/java/com/megboyzz/devmenu/ui/components/Files.kt
+++ b/devmenu/src/main/java/com/megboyzz/devmenu/ui/components/Files.kt
@@ -25,13 +25,6 @@ import com.megboyzz.devmenu.R
import com.megboyzz.devmenu.ui.asPainter
import com.megboyzz.devmenu.ui.theme.DevMenuTheme
-enum class ElementType {
- isHidden,
- isReplaced,
- isFile,
- isDir
-}
-
@Composable
fun FsElement(
name: String,
@@ -48,15 +41,8 @@ fun FsElement(
onLongClick = onLongPressClick
)
) {
- when(type){
- ElementType.isHidden -> { Image(painter = R.drawable.icon_hidden_file.asPainter(), contentDescription = null) }
- ElementType.isFile -> { Image(painter = R.drawable.icon_file.asPainter(), contentDescription = null) }
- ElementType.isDir -> { Image(painter = R.drawable.icon_folder.asPainter(), contentDescription = null) }
- ElementType.isReplaced -> { Image(painter = R.drawable.icon_replaced_file.asPainter(), contentDescription = null) }
- }
- Text(
- text = name
- )
+ FsElementIcon(type = type)
+ Text(text = name)
}
}
diff --git a/devmenu/src/main/java/com/megboyzz/devmenu/ui/components/Shared.kt b/devmenu/src/main/java/com/megboyzz/devmenu/ui/components/Shared.kt
index 7b456c1..87db82e 100644
--- a/devmenu/src/main/java/com/megboyzz/devmenu/ui/components/Shared.kt
+++ b/devmenu/src/main/java/com/megboyzz/devmenu/ui/components/Shared.kt
@@ -2,24 +2,54 @@ package com.megboyzz.devmenu.ui.components
import android.annotation.SuppressLint
import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.Image
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.Dp
+import com.megboyzz.devmenu.R
+import com.megboyzz.devmenu.ui.asPainter
+
+enum class ElementType {
+ isHidden,
+ isReplaced,
+ isFile,
+ isDir
+}
@SuppressLint("ModifierFactoryUnreferencedReceiver")
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun Modifier.clickableWithRipple(
onClick: () -> Unit,
- onLongClick: () -> Unit = {}
+ onLongClick: () -> Unit = {},
+ enabled: Boolean = true
): Modifier {
return Modifier.combinedClickable(
+ enabled = enabled,
interactionSource = remember { MutableInteractionSource() },
indication = rememberRipple(),
onClick = onClick,
onLongClick = onLongClick
)
-}
\ No newline at end of file
+}
+
+@Composable
+fun FsElementIcon(
+ type: ElementType,
+ modifier: Modifier = Modifier
+) {
+
+ val painter = when(type){
+ ElementType.isHidden -> R.drawable.icon_hidden_file.asPainter()
+ ElementType.isFile -> R.drawable.icon_file.asPainter()
+ ElementType.isDir -> R.drawable.icon_folder.asPainter()
+ ElementType.isReplaced -> R.drawable.icon_replaced_file.asPainter()
+ }
+
+ Image(painter = painter, contentDescription = null, modifier)
+}
+
diff --git a/devmenu/src/main/res/drawable/enter.xml b/devmenu/src/main/res/drawable/enter.xml
new file mode 100644
index 0000000..661a8ce
--- /dev/null
+++ b/devmenu/src/main/res/drawable/enter.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/devmenu/src/main/res/drawable/hide.xml b/devmenu/src/main/res/drawable/hide.xml
new file mode 100644
index 0000000..3ab24c5
--- /dev/null
+++ b/devmenu/src/main/res/drawable/hide.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/devmenu/src/main/res/drawable/info.xml b/devmenu/src/main/res/drawable/info.xml
new file mode 100644
index 0000000..3a8fdb5
--- /dev/null
+++ b/devmenu/src/main/res/drawable/info.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/devmenu/src/main/res/drawable/star.xml b/devmenu/src/main/res/drawable/star.xml
new file mode 100644
index 0000000..4c7ae31
--- /dev/null
+++ b/devmenu/src/main/res/drawable/star.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/devmenu/src/main/res/drawable/trash.xml b/devmenu/src/main/res/drawable/trash.xml
new file mode 100644
index 0000000..9abc031
--- /dev/null
+++ b/devmenu/src/main/res/drawable/trash.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/devmenu/src/main/res/drawable/unhide.xml b/devmenu/src/main/res/drawable/unhide.xml
new file mode 100644
index 0000000..9e7bd16
--- /dev/null
+++ b/devmenu/src/main/res/drawable/unhide.xml
@@ -0,0 +1,9 @@
+
+
+