Skip to content

Commit

Permalink
Merge branch 'master' into dev-cat-templ
Browse files Browse the repository at this point in the history
  • Loading branch information
Pechenka2005 committed Jun 5, 2024
2 parents ab87773 + 6b59321 commit 514fffd
Show file tree
Hide file tree
Showing 21 changed files with 561 additions and 195 deletions.
19 changes: 1 addition & 18 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions .idea/encodings.xml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/kotlinScripting.xml

This file was deleted.

1 change: 1 addition & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

47 changes: 40 additions & 7 deletions code/cat_visual/src/main/kotlin/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import androidx.compose.ui.zIndex
import canvas.items.impl.CustomItem
import canvas.items.impl.LampItem
import canvas.items.impl.TextItem
import canvas.items.impl.ToggleItem
import canvas.items.interfaces.CanvasItemInterface
import canvas.items.model.JsonCanvasModel
import canvas.items.model.toItem
Expand Down Expand Up @@ -94,29 +95,62 @@ fun itemBar(
Column(
modifier = Modifier
.background(Color.LightGray)
.width(100.dp)
.width(140.dp)
.fillMaxHeight()
.zIndex(-2f),
horizontalAlignment = Alignment.End,
) {
Button(
modifier = Modifier.align(alignment = Alignment.CenterHorizontally),
modifier = Modifier.align(alignment = Alignment.CenterHorizontally).width(130.dp),
onClick = {
addNewItem(TextItem(content = "AddedText"))
}
) {
Text(text = "Add text")
Text(text = "Text")
}
Button(
modifier = Modifier.align(alignment = Alignment.CenterHorizontally),
modifier = Modifier.align(alignment = Alignment.CenterHorizontally).width(130.dp),
onClick = {
addNewItem(LampItem(client = client))
}
) {
Text(text = "Add lamp")
Text(text = "Lamp")
}
Button(
modifier = Modifier.align(alignment = Alignment.CenterHorizontally),
modifier = Modifier.align(alignment = Alignment.CenterHorizontally).width(130.dp),
onClick = {
addNewItem(ToggleItem(client = client))
}
) {
Text(text = "Toggle")
}
Button(
modifier = Modifier.align(alignment = Alignment.CenterHorizontally).width(130.dp),
onClick = {
addNewItem(LampItem(client = client))
}
) {
Text(text = "Box")
}
Button(
modifier = Modifier.align(alignment = Alignment.CenterHorizontally).width(130.dp),
onClick = {
addNewItem(LampItem(client = client))
}
) {
Text(text = "CheckBox")
}
Button(
modifier = Modifier.align(alignment = Alignment.CenterHorizontally).width(130.dp),
onClick = {
addNewItem(LampItem(client = client))
}
) {
Text(text = "RadioButton")
}

Button(
modifier = Modifier.align(alignment = Alignment.CenterHorizontally).width(130.dp),
onClick = {
val x = itemList.map {it.toModel()}
val json = Json.encodeToString(x)
Expand All @@ -142,7 +176,6 @@ fun main() = application {
.fillMaxWidth()
.fillMaxHeight(),
) {
// CounterLampHMI(client, "1")
itemBar(itemList) { item ->
itemList += listOf(item)
}
Expand Down
79 changes: 63 additions & 16 deletions code/cat_visual/src/main/kotlin/canvas/items/impl/LampItem.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,21 @@ package canvas.items.impl
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.DropdownMenu
import androidx.compose.material.DropdownMenuItem
import androidx.compose.material.Switch
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import canvas.items.Draggable
import canvas.items.interfaces.CanvasItemInterface
import canvas.items.interfaces.Focusable
Expand Down Expand Up @@ -50,22 +54,65 @@ class LampItem(
val localDensity = LocalDensity.current
val xPosition = remember { mutableStateOf(x) }
val yPosition = remember { mutableStateOf(y) }
val focusRequester = remember { FocusRequester() }
val color = remember { mutableStateOf(Color.Black) }
Round(
var connectMenu by remember { mutableStateOf( false) }
var expandedDropDownMenu by remember { mutableStateOf(false) }
val idStaq by remember {mutableStateOf(id.toString())}
Box(
modifier = modifier
.makeDraggable(localDensity, xPosition, yPosition)
.makeFocusable(focusRequester, color)
.background(brush = if (isLighting.value) LIGHT_RADIAL_BRUSH else DARK_RADIAL_BRUSH)
.border(width = 10.dp, brush = METALLIC_BRUSH, shape = CircleShape)
.clickable {
isLighting.value = if (isLighting.value) false else true
println("${xPosition.value} : ${yPosition.value}")
.border(width = 10.dp, brush = METALLIC_BRUSH, shape = RectangleShape)
.clickable{
expandedDropDownMenu = !expandedDropDownMenu
}
.wrapContentSize(),
height = 60.dp,
width = 60.dp,
)
.width(60.dp)
.height(60.dp)
) {
DropdownMenu(
expanded = expandedDropDownMenu,
onDismissRequest = {
expandedDropDownMenu = false
},
modifier = Modifier.width(200.dp)
) {
DropdownMenuItem(onClick = {
deleteCurrentItem(idStaq)
}) {
Text(
text = "Удалить",
modifier = Modifier
.padding(5.dp),
fontSize = 15.sp,
)
}
DropdownMenuItem(
onClick = {
connectMenu = !connectMenu
},
) {
Text(
text = "Соединить",
modifier = Modifier
.padding(5.dp),
fontSize = 15.sp,
)
}
if (connectMenu) {
DropdownMenuItem(
onClick = {
connectMenu = false
},
) {
Text(
text = "Lamp 1",
modifier = Modifier
.padding(10.dp),
fontSize = 15.sp,
)
}
}
}
}
x = xPosition.value
y = yPosition.value
}
Expand Down
111 changes: 111 additions & 0 deletions code/cat_visual/src/main/kotlin/canvas/items/impl/ToggleItem.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package canvas.items.impl

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import canvas.items.Draggable
import canvas.items.interfaces.CanvasItemInterface
import canvas.items.interfaces.Focusable
import connection.AbstractClient
import java.util.*

class ToggleItem(
override val id: UUID = UUID.randomUUID(),
override var x: Float = 0f,
override var y: Float = 0f,
override val modifier: Modifier = Modifier,
override val client: AbstractClient,
): AbstractItem(
x = x,
y = y,
modifier = modifier,
inputs = listOf(),
outputs = listOf(),
client = client,
), Draggable, Focusable {


override val type = CanvasItemInterface.Type.TOGGLE

@Composable
override fun getContent(deleteCurrentItem: (String) -> Unit) {
val localDensity = LocalDensity.current
val xPosition = remember { mutableStateOf(x) }
val yPosition = remember { mutableStateOf(y) }
val focusRequester = remember { FocusRequester() }
val color = remember { mutableStateOf(Color.Black) }
val checkedStateToggle = remember { mutableStateOf(false) }
var connectMenu by remember { mutableStateOf( false) }
var expandedDropDownMenu by remember { mutableStateOf(false) }
val idStaq by remember {mutableStateOf(id.toString())}
Box(
modifier.makeDraggable(localDensity, xPosition, yPosition)
.makeFocusable(focusRequester, color)
.clickable{
expandedDropDownMenu = !expandedDropDownMenu
}
) {
Switch(
modifier = modifier
.size(50.dp)
.wrapContentSize(),
checked = checkedStateToggle.value,
onCheckedChange = {checkedStateToggle.value = !checkedStateToggle.value},
)
DropdownMenu(
expanded = expandedDropDownMenu,
onDismissRequest = {
expandedDropDownMenu = false
},
modifier = Modifier.width(200.dp)
) {
DropdownMenuItem(onClick = {
deleteCurrentItem(idStaq)
}) {
Text(
text = "Удалить",
modifier = Modifier
.padding(5.dp),
fontSize = 15.sp,
)
}
DropdownMenuItem(
onClick = {
connectMenu = !connectMenu
},
) {
Text(
text = "Соединить",
modifier = Modifier
.padding(5.dp),
fontSize = 15.sp,
)
}
if (connectMenu) {
DropdownMenuItem(
onClick = {
connectMenu = false
},
) {
Text(
text = "Toggle 1",
modifier = Modifier
.padding(10.dp),
fontSize = 15.sp,
)
}
}
}
}
x = xPosition.value
y = yPosition.value
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ interface CanvasItemInterface {
enum class Type {
TEXT,
LAMP,
TOGGLE,
UNKNOWN,
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ import androidx.compose.ui.Modifier
import canvas.exceptions.UnknownTypeItemException
import canvas.items.impl.LampItem
import canvas.items.impl.TextItem
import canvas.items.impl.ToggleItem
import canvas.items.interfaces.CanvasItemInterface
import connection.AbstractClient
import kotlinx.serialization.Serializable
import lib.elements.setters.Toggle
import java.util.*

@Serializable
Expand Down Expand Up @@ -34,5 +36,11 @@ fun JsonCanvasModel.toItem(client: AbstractClient): CanvasItemInterface =
y = y,
client = client,
)
CanvasItemInterface.Type.TOGGLE.name -> ToggleItem(
id = UUID.fromString(id),
x = x,
y = y,
client = client
)
else -> throw UnknownTypeItemException(id, type)
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ fun Round(modifier: Modifier, width: Dp, height: Dp) {
.width(width)
.height(height)
.clip(CircleShape)
)
){
}
}
Loading

0 comments on commit 514fffd

Please sign in to comment.