diff --git a/src/main/kotlin/com/marvinelsen/willow/WillowApplication.kt b/src/main/kotlin/com/marvinelsen/willow/WillowApplication.kt index f2064ac..aa92e48 100644 --- a/src/main/kotlin/com/marvinelsen/willow/WillowApplication.kt +++ b/src/main/kotlin/com/marvinelsen/willow/WillowApplication.kt @@ -3,10 +3,10 @@ package com.marvinelsen.willow import com.marvinelsen.willow.config.Config import com.marvinelsen.willow.domain.SqliteDictionary import com.marvinelsen.willow.ui.controllers.DetailsController -import com.marvinelsen.willow.ui.controllers.SearchResultsController import com.marvinelsen.willow.ui.controllers.MainController import com.marvinelsen.willow.ui.controllers.MenuController import com.marvinelsen.willow.ui.controllers.SearchController +import com.marvinelsen.willow.ui.controllers.SearchResultsController import com.marvinelsen.willow.ui.util.FindWordsService import com.marvinelsen.willow.ui.util.SearchService import javafx.application.Application diff --git a/src/main/kotlin/com/marvinelsen/willow/ui/DictionaryEntryFx.kt b/src/main/kotlin/com/marvinelsen/willow/ui/DictionaryEntryFx.kt index 80cdef3..9045536 100644 --- a/src/main/kotlin/com/marvinelsen/willow/ui/DictionaryEntryFx.kt +++ b/src/main/kotlin/com/marvinelsen/willow/ui/DictionaryEntryFx.kt @@ -6,7 +6,6 @@ import javafx.beans.property.StringProperty import javafx.collections.FXCollections import javafx.collections.ObservableList -// TODO: Consider removing this class completely if no property is ever used directly data class DictionaryEntryFx( val traditionalProperty: StringProperty, val simplifiedProperty: StringProperty, diff --git a/src/main/kotlin/com/marvinelsen/willow/ui/controllers/DetailsController.kt b/src/main/kotlin/com/marvinelsen/willow/ui/controllers/DetailsController.kt index 099e122..de63538 100644 --- a/src/main/kotlin/com/marvinelsen/willow/ui/controllers/DetailsController.kt +++ b/src/main/kotlin/com/marvinelsen/willow/ui/controllers/DetailsController.kt @@ -46,54 +46,14 @@ class DetailsController(private val model: Model, private val config: Config) { @FXML @Suppress("UnusedPrivateMember") private fun initialize() { - labelHeadword.textProperty().bind( - Bindings.createStringBinding( - { - when (config.script.value!!) { - Script.SIMPLIFIED -> model.selectedEntry.value?.simplifiedProperty?.value - Script.TRADITIONAL -> model.selectedEntry.value?.traditionalProperty?.value - } - }, - config.script, - model.selectedEntry - ) - ) - labelHeadword - .styleProperty() - .bind( - Bindings.concat( - "-fx-font-size: ", - config.detailHeadwordFontSize.asString(), - "px;" - ) - ) + initializeLabelHeadword() + initializeTabPaneDetails() + initializeListViewWords() + initializeWebViewDefinition() - tabPaneDetails.disableProperty().bind(Bindings.isNull(model.selectedEntry)) + model.selectedEntry.addListener { _, _, newEntry -> + if (newEntry == null) return@addListener - listViewWords.cellFactory = DictionaryEntryCellFactory(resources, config) - listViewWords.items = model.wordsContaining - tabPaneDetails.selectionModel.selectedItemProperty().addListener { _, _, selectedTab -> - if (model.selectedEntry.value == null) return@addListener - - when (selectedTab.id) { - "tabWords" -> { - model.findWords() - } - - else -> {} - } - } - - webViewDefinition.apply { - isContextMenuEnabled = false - engine.userStyleSheetLocation = - this::class.java.getResource("/css/definitions.css")!!.toExternalForm() - } - - model.selectedEntry.addListener { _, _, newValue -> - if (newValue == null) { - return@addListener - } when (tabPaneDetails.selectionModel.selectedItem.id) { "tabWords" -> { model.findWords() @@ -101,22 +61,71 @@ class DetailsController(private val model: Model, private val config: Config) { else -> {} } - webViewDefinition.engine.loadContent( - createHTML().html { - body { - h1 { - +"CC-CEDICT" - } - ol { - for (definition in newValue.definitions) { - li { - +definition.joinToString(separator = "; ") - } - } + webViewDefinition.engine.loadContent(newEntry.createCedictDefinitionHtml()) + } + } + + private fun initializeWebViewDefinition() { + webViewDefinition.apply { + engine.userStyleSheetLocation = this::class.java.getResource("/css/definitions.css")!!.toExternalForm() + } + } + + private fun initializeListViewWords() { + listViewWords.apply { + cellFactory = DictionaryEntryCellFactory(resources, config) + items = model.wordsContaining + } + } + + private fun initializeTabPaneDetails() { + tabPaneDetails.apply { + disableProperty().bind(Bindings.isNull(model.selectedEntry)) + + selectionModel.selectedItemProperty().addListener { _, _, selectedTab -> + if (model.selectedEntry.value == null) return@addListener + + when (selectedTab.id) { + "tabWords" -> { + model.findWords() + } + + else -> {} + } + } + } + } + + private fun initializeLabelHeadword() { + labelHeadword.apply { + textProperty().bind( + Bindings.createStringBinding( + { + when (config.script.value!!) { + Script.SIMPLIFIED -> model.selectedEntry.value?.simplifiedProperty?.value + Script.TRADITIONAL -> model.selectedEntry.value?.traditionalProperty?.value } + }, + config.script, + model.selectedEntry + ) + ) + styleProperty().bind(Bindings.concat("-fx-font-size: ", config.detailHeadwordFontSize.asString(), "px;")) + } + } + + private fun DictionaryEntryFx.createCedictDefinitionHtml() = createHTML().html { + body { + h1 { + +"CC-CEDICT" + } + ol { + for (definition in this@createCedictDefinitionHtml.definitions) { + li { + +definition.joinToString(separator = "; ") } } - ) + } } } } diff --git a/src/main/kotlin/com/marvinelsen/willow/ui/dialogs/PreferencesDialog.kt b/src/main/kotlin/com/marvinelsen/willow/ui/dialogs/PreferencesDialog.kt index 2130a50..de4aed0 100644 --- a/src/main/kotlin/com/marvinelsen/willow/ui/dialogs/PreferencesDialog.kt +++ b/src/main/kotlin/com/marvinelsen/willow/ui/dialogs/PreferencesDialog.kt @@ -30,9 +30,6 @@ class PreferencesDialog(owner: Window?, config: Config) : Dialog - @FXML private lateinit var comboBoxLocale: ComboBox @@ -79,7 +76,6 @@ class PreferencesDialog(owner: Window?, config: Config) : Dialog