SwingSetupWizard.ktprojectforge-application/src/main/kotlin/org/projectforge/setup/wizard/swing/SwingSetupWizard.kt, die Kotlin-Code für die Setup-Assistenten-Ebene enthält.Annotationen: return, JvmStatic
Klassen: SwingSetupWizard
Supertyp(en): AbstractSetupWizard
Funktionen (6): windowClosing, run, setActiveWindow, finish, run, main
Eigenschaften (18): context, chooseDirectoryScreen, finalizeScreen, frame, cardLayout, cards, lock, condition, applicationClass, quitStrategyClass, getApplicationMethod, setQuitStrategyMethod, disableSuddenTerminationMethod, application, quitStrategy, scrPane, window, cl
Importe: 16 Pakete
Paket: org.projectforge.setup.wizard.swing
package org.projectforge.setup.wizard.swing
import org.projectforge.common.CanonicalFileUtils
import org.projectforge.common.EmphasizedLogSupport
import org.projectforge.setup.SetupData
import org.projectforge.setup.wizard.AbstractSetupWizard
import java.awt.CardLayout
import java.awt.GridBagConstraints
import java.awt.GridBagLayout
import java.awt.event.WindowAdapter
import java.awt.event.WindowEvent
import java.io.File
import java.io.IOException
import java.util.concurrent.locks.ReentrantLock
import javax.swing.JFrame
import javax.swing.JPanel
import javax.swing.JScrollPane
import kotlin.concurrent.withLock
class SwingSetupWizard(presetAppHomeDir: File? = null) : AbstractSetupWizard() {
override val context: SwingGUIContext
private val chooseDirectoryScreen: SwingChooseDirectoryScreen
private val finalizeScreen: SwingFinalizeScreen
private val frame = JFrame("ProjectForge Setup")
private val cardLayout: CardLayout
private val cards: JPanel
private val lock = ReentrantLock()
private val condition = lock.newCondition()
init {
frame.setSize(1024, 600)
frame.layout = GridBagLayout()
frame.defaultCloseOperation = JFrame.DO_NOTHING_ON_CLOSE
try {
// Benötigt Reflection, da Apple-Klassen möglicherweise nicht verfügbar sind:
val applicationClass = Class.forName("com.apple.eawt.Application")
val quitStrategyClass = Class.forName("com.apple.eawt.QuitStrategy")
val getApplicationMethod = applicationClass.getDeclaredMethod("getApplication")
val setQuitStrategyMethod = applicationClass.getDeclaredMethod("setQuitStrategy", quitStrategyClass)
val disableSuddenTerminationMethod = applicationClass.getDeclaredMethod("disableSuddenTermination")
val application = getApplicationMethod.invoke(null)
val quitStrategy = quitStrategyClass.enumConstants.find { it.toString() == "CLOSE_ALL_WINDOWS" }//.QuitStrategy.CLOSE_ALL_WINDOWS
setQuitStrategyMethod.invoke(application, quitStrategy) //Application.getApplication().setQuitStrategy(QuitStrategy.CLOSE_ALL_WINDOWS)
disableSuddenTerminationMethod.invoke(application) // Application.getApplication().disableSuddenTermination()
} catch (ex: Exception) {
log.debug("Kein MacOS-System oder MacOS-JVM unterstützt com.apple.eawt.Application nicht (OK).")
}
frame.addWindowListener(object : WindowAdapter() {
override fun windowClosing(e: WindowEvent?) {
exit()
}
})
context = SwingGUIContext(this, frame)
context.setupData.applicationHomeDir = presetAppHomeDir
chooseDirectoryScreen = SwingChooseDirectoryScreen(context)
finalizeScreen = SwingFinalizeScreen(context)
cardLayout = CardLayout()
cards = JPanel(cardLayout)
cards.add(chooseDirectoryScreen.mainPanel, ScreenID.CHOOSE_DIR.name)
cards.add(finalizeScreen.mainPanel, ScreenID.FINALIZE.name)
val scrPane = JScrollPane(cards)
frame.contentPane.add(scrPane, SwingUtils.constraints(0, 0, fill = GridBagConstraints.BOTH, weightx = 1.0, weighty = 1.0))
frame.isVisible = true
}
/**
* @return Die Benutzereinstellungen oder null, wenn der Benutzer den Assistenten durch Beenden abgebrochen hat.
*/
override fun run(): SetupData? {
super.initialize()
lock.withLock {
condition.await()
}
return super.run()
}
override fun setActiveWindow(nextScreen: ScreenID) {
val window = when (nextScreen) {
ScreenID.CHOOSE_DIR -> chooseDirectoryScreen
else -> finalizeScreen
}
window.redraw()
val cl = cards.layout as CardLayout
cl.show(cards, nextScreen.name)
}
override fun finish() {
frame.dispose()
lock.withLock {
condition.signal()
}
}
companion object {
private val log = org.slf4j.LoggerFactory.getLogger(SwingSetupWizard::class.java)
@JvmStatic
fun run(appHomeDir: File? = null): SetupData? {
log.info("Starte GUI-Assistenten...")
return try {
SwingSetupWizard(appHomeDir).run()
} catch (ex: IOException) {
EmphasizedLogSupport(log)
.log("Grafischer Setup-Assistent kann nicht gestartet werden, ein Desktop scheint nicht verfügbar zu sein.")
.logEnd()
return null
}
}
@JvmStatic
fun main(args: Array<String>) {
try {
val result = SwingSetupWizard().run()
// ... (gekürzt, insgesamt 127 Zeilen)
868d6abb7 2025 -> 2026 63081666f Quellcode-Dateiköpfe: 2024 -> 2025. b6092df09 Copyright 2023 -> 2024 ab45d51fa Copyright 2001-2022 -> 2001-2023. 5f7ef41b8 Copyright 2021 -> 2022