1
1
package me.konso.qrcodeTools
2
2
3
- fun main (){
3
+ import androidx.compose.foundation.layout.Arrangement
4
+ import androidx.compose.foundation.layout.Row
5
+ import androidx.compose.foundation.layout.fillMaxSize
6
+ import androidx.compose.foundation.layout.padding
7
+ import androidx.compose.material.Button
8
+ import androidx.compose.material.Text
9
+ import androidx.compose.runtime.Composable
10
+ import androidx.compose.runtime.CompositionLocalProvider
11
+ import androidx.compose.runtime.mutableStateMapOf
12
+ import androidx.compose.runtime.remember
13
+ import androidx.compose.ui.Alignment
14
+ import androidx.compose.ui.Modifier
15
+ import androidx.compose.ui.unit.DpSize
16
+ import androidx.compose.ui.unit.dp
17
+ import androidx.compose.ui.window.ApplicationScope
18
+ import androidx.compose.ui.window.Window
19
+ import androidx.compose.ui.window.WindowPlacement
20
+ import androidx.compose.ui.window.WindowPosition
21
+ import androidx.compose.ui.window.WindowState
22
+ import androidx.compose.ui.window.application
23
+ import me.konso.qrcodeTools.WindowType.CAMERA
24
+ import me.konso.qrcodeTools.WindowType.DESKTOP
25
+ import me.konso.qrcodeTools.WindowType.GENERATOR
26
+ import me.konso.qrcodeTools.WindowType.values
27
+ import me.konso.qrcodeTools.window.CaptureWindow
28
+ import me.konso.qrcodeTools.window.GeneratorWindow
29
+ import me.konso.qrcodeTools.window.ReaderWindow
4
30
31
+ enum class WindowType (
32
+ val title : String ,
33
+ val text : String ,
34
+ ) {
35
+ GENERATOR (" QR Code Generator" , " Open Generator" ),
36
+ CAMERA (" QR Code Reader [Camera]" , " Open Camera" ),
37
+ DESKTOP (" QR Code Reader [Desktop]" , " Open Desktop Reader" )
38
+ }
39
+ fun main () = application{
40
+ CompositionLocalProvider (LocalAppResources provides rememberAppResources()){
41
+ AppWindow (this )
42
+ }
43
+ }
44
+
45
+ @Composable
46
+ fun AppWindow (app : ApplicationScope ) {
47
+ val windows= values().toList()
48
+ val isOpen= remember { mutableStateMapOf<String , Boolean >() }
49
+ var isCapturing = LocalAppResources .current.isCapturing
50
+
51
+ // Initialize state
52
+ for (w in windows) {
53
+ isOpen+ = w.name to false
54
+ }
55
+
56
+ Window (
57
+ title= " QRCode Tools" ,
58
+ onCloseRequest= { app.exitApplication() },
59
+ resizable = false ,
60
+ state= WindowState (
61
+ size = DpSize (600 .dp, 200 .dp),
62
+ placement = WindowPlacement .Floating ,
63
+ position= WindowPosition (Alignment .Center )
64
+ )
65
+ ) {
66
+ Row (
67
+ modifier= Modifier .fillMaxSize()
68
+ .padding(horizontal = 12 .dp),
69
+ horizontalArrangement = Arrangement .SpaceEvenly ,
70
+ verticalAlignment = Alignment .CenterVertically ,
71
+ ) {
72
+ for (w in windows) {
73
+ if (w== CAMERA ) continue
74
+
75
+ Button (
76
+ onClick= {
77
+ isOpen[w.name]= true
78
+
79
+ if (w== DESKTOP ){
80
+ isCapturing = true
81
+ }
82
+ },
83
+ enabled= ! isOpen[w.name]!!
84
+ ) {
85
+ Text (w.text)
86
+ }
87
+
88
+ if (isOpen[w.name]!! ) {
89
+ Window (
90
+ onCloseRequest= {
91
+ isOpen[w.name]= false
92
+
93
+ if (w == DESKTOP ){
94
+ isCapturing = false
95
+ }
96
+ },
97
+ title= w.title,
98
+ resizable= false
99
+ ) {
100
+ when (w){
101
+ GENERATOR -> GeneratorWindow ()
102
+ DESKTOP -> CaptureWindow (isCapturing)
103
+ else -> {}
104
+ }
105
+ }
106
+ }
107
+ }
108
+
109
+ Button (
110
+ onClick= { isOpen[CAMERA .name]= true },
111
+ enabled= ! isOpen[CAMERA .name]!!
112
+ ) {
113
+ Text (CAMERA .text)
114
+ }
115
+
116
+ if (isOpen[CAMERA .name]!! ) {
117
+ Window (
118
+ onCloseRequest= {
119
+ isOpen[CAMERA .name]= false
120
+ },
121
+ title= CAMERA .title,
122
+ resizable= false ,
123
+ ) {
124
+ ReaderWindow ()
125
+ }
126
+ }
127
+ }
128
+ }
5
129
}
0 commit comments