Skip to content

Commit

Permalink
Add base64 image creation to UI
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonScholz committed Nov 25, 2023
1 parent 2101045 commit 42d9c04
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 0 deletions.
11 changes: 11 additions & 0 deletions qr-code-app/src/main/kotlin/io/github/simonscholz/ui/FileUI.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.github.simonscholz.ui

import io.github.simonscholz.qrcode.toBase64
import io.github.simonscholz.service.CodeGeneratorService
import io.github.simonscholz.service.ConfigService
import io.github.simonscholz.service.ImageService
Expand All @@ -22,6 +23,16 @@ class FileUI(
private val imageService: ImageService,
private val alreadyAppliedOnceDelegate: () -> Boolean,
) {
fun copyBase64ImageToClipboard() {
val qrCodeImage = if (alreadyAppliedOnceDelegate()) {
imageService.renderImage()
} else {
imageService.renderInitialImage()
}
val clipboard: Clipboard = Toolkit.getDefaultToolkit().systemClipboard
val copyString = StringSelection(qrCodeImage.toBase64())
clipboard.setContents(copyString, null)
}

fun copyImageToClipboard() {
val qrCodeImage = if (alreadyAppliedOnceDelegate()) {
Expand Down
11 changes: 11 additions & 0 deletions qr-code-app/src/main/kotlin/io/github/simonscholz/ui/ImageUI.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ object ImageUI {

contextMenu.add(saveQrCodeImageMenuItem(fileUI))
contextMenu.add(copyQrCodeImageMenuItem(fileUI))
contextMenu.add(copyBase64QrCodeImageMenuItem(fileUI))
contextMenu.add(saveKotlinCodeMenuItem(fileUI))
contextMenu.add(saveJavaCodeMenuItem(fileUI))

Expand Down Expand Up @@ -84,6 +85,16 @@ object ImageUI {
return copyImageMenuItem
}

private fun copyBase64QrCodeImageMenuItem(fileUI: FileUI): JMenuItem {
val copyImageMenuItem = JMenuItem("Copy Base64 Qr Code Image to clipboard")
// Add the keybinding for Save (Ctrl + B)
copyImageMenuItem.accelerator = KeyStroke.getKeyStroke(KeyEvent.VK_B, InputEvent.CTRL_DOWN_MASK)
copyImageMenuItem.addActionListener {
fileUI.copyBase64ImageToClipboard()
}
return copyImageMenuItem
}

private fun saveKotlinCodeMenuItem(fileUI: FileUI): JMenuItem {
val saveImageMenuItem = JMenuItem("Copy Kotlin code to clipboard")
// Add the keybinding for Save (Ctrl + K)
Expand Down
18 changes: 18 additions & 0 deletions qr-code-app/src/main/kotlin/io/github/simonscholz/ui/MainMenu.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import javax.swing.JMenu
import javax.swing.JMenuBar
import javax.swing.JMenuItem
import javax.swing.JOptionPane
import javax.swing.JSeparator
import javax.swing.KeyStroke
import kotlin.system.exitProcess

Expand Down Expand Up @@ -100,6 +101,18 @@ object MainMenu {
},
)

val copyBase64MenuItem = JMenuItem("Copy Qr Code Image in Base64")
// Add the keybinding for Save (Ctrl + B)
copyBase64MenuItem.accelerator = KeyStroke.getKeyStroke(KeyEvent.VK_B, InputEvent.CTRL_DOWN_MASK)
frame.rootPane.actionMap.put(
"CopyBase64Action",
object : AbstractAction() {
override fun actionPerformed(e: ActionEvent) {
fileUI.copyBase64ImageToClipboard()
}
},
)

val importConfigMenuItem = JMenuItem("Import Config")
// Add the keybinding for Save (Ctrl + I)
importConfigMenuItem.accelerator = KeyStroke.getKeyStroke(KeyEvent.VK_I, InputEvent.CTRL_DOWN_MASK)
Expand Down Expand Up @@ -137,14 +150,19 @@ object MainMenu {

saveMenuItem.addActionListener { fileUI.saveQrCodeImageFile() }
copyMenuItem.addActionListener { fileUI.copyImageToClipboard() }
copyBase64MenuItem.addActionListener { fileUI.copyBase64ImageToClipboard() }
importConfigMenuItem.addActionListener { fileUI.loadConfig() }
exportConfigMenuItem.addActionListener { fileUI.saveConfig() }
exitMenuItem.addActionListener { exitApplication(configService) }

fileMenu.add(saveMenuItem)
fileMenu.add(JSeparator())
fileMenu.add(copyMenuItem)
fileMenu.add(copyBase64MenuItem)
fileMenu.add(JSeparator())
fileMenu.add(importConfigMenuItem)
fileMenu.add(exportConfigMenuItem)
fileMenu.add(JSeparator())
fileMenu.add(exitMenuItem)
}

Expand Down

0 comments on commit 42d9c04

Please sign in to comment.