Skip to content

Commit

Permalink
(#265) Settings: some renames and TODO marking
Browse files Browse the repository at this point in the history
  • Loading branch information
ForNeVeR committed Feb 22, 2023
1 parent 992b2e7 commit a7a668f
Show file tree
Hide file tree
Showing 13 changed files with 113 additions and 110 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import com.jetbrains.rider.xaml.core.XamlPreviewEditor
import com.jetbrains.rider.xaml.core.XamlPreviewEditorExtension
import com.jetbrains.rider.xaml.splitEditor.XamlSplitEditor
import me.fornever.avaloniarider.idea.settings.AvaloniaPreviewerMethod
import me.fornever.avaloniarider.idea.settings.AvaloniaSettings
import me.fornever.avaloniarider.idea.settings.AvaloniaProjectSettings

class AvaloniaPreviewerXamlEditorExtension : XamlPreviewEditorExtension {
override fun accepts(file: VirtualFile, platform: PreviewPlatformKind): Boolean =
Expand All @@ -18,7 +18,7 @@ class AvaloniaPreviewerXamlEditorExtension : XamlPreviewEditorExtension {
file: VirtualFile,
parent: XamlSplitEditor,
platform: PreviewPlatformKind
): XamlPreviewEditor = when (AvaloniaSettings.getInstance(project).previewerTransportType) {
): XamlPreviewEditor = when (AvaloniaProjectSettings.getInstance(project).previewerTransportType) {
AvaloniaPreviewerMethod.AvaloniaRemote -> AvaloniaRemotePreviewEditor(project, file)
AvaloniaPreviewerMethod.Html -> AvaloniaHtmlPreviewEditor(project, file)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package me.fornever.avaloniarider.idea.editor

import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import me.fornever.avaloniarider.idea.settings.AvaloniaSettings
import me.fornever.avaloniarider.idea.settings.AvaloniaProjectSettings
import javax.swing.JComponent

class AvaloniaRemotePreviewEditor(
Expand All @@ -11,7 +11,7 @@ class AvaloniaRemotePreviewEditor(
) : AvaloniaPreviewEditorBase(project, currentFile) {

private val panel = lazy {
BitmapPreviewEditorComponent(lifetime, sessionController, AvaloniaSettings.getInstance(project))
BitmapPreviewEditorComponent(lifetime, sessionController, AvaloniaProjectSettings.getInstance(project))
}

override val editorComponent = panel.value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import com.jetbrains.rd.util.lifetime.Lifetime
import me.fornever.avaloniarider.controlmessages.FrameMessage
import me.fornever.avaloniarider.controlmessages.UpdateXamlResultMessage
import me.fornever.avaloniarider.idea.concurrency.adviseOnUiThread
import me.fornever.avaloniarider.idea.settings.AvaloniaSettings
import me.fornever.avaloniarider.idea.settings.AvaloniaProjectSettings
import me.fornever.avaloniarider.plainTextToHtml
import me.fornever.avaloniarider.previewer.AvaloniaPreviewerSessionController
import me.fornever.avaloniarider.previewer.AvaloniaPreviewerSessionController.Status
Expand All @@ -20,7 +20,7 @@ import javax.swing.JPanel
class BitmapPreviewEditorComponent(
lifetime: Lifetime,
private val controller: AvaloniaPreviewerSessionController,
settings: AvaloniaSettings
settings: AvaloniaProjectSettings
) : JPanel() {
companion object {
private val logger = Logger.getInstance(BitmapPreviewEditorComponent::class.java)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import com.intellij.util.application
import com.intellij.util.ui.UIUtil
import com.jetbrains.rd.util.lifetime.Lifetime
import me.fornever.avaloniarider.controlmessages.FrameMessage
import me.fornever.avaloniarider.idea.settings.AvaloniaSettings
import me.fornever.avaloniarider.idea.settings.AvaloniaProjectSettings
import me.fornever.avaloniarider.previewer.AvaloniaMessageMouseListener
import me.fornever.avaloniarider.previewer.AvaloniaPreviewerSessionController
import me.fornever.avaloniarider.previewer.renderFrame
Expand All @@ -25,7 +25,7 @@ import javax.swing.JComponent
class PreviewImageView(
lifetime: Lifetime,
private val controller: AvaloniaPreviewerSessionController,
private val settings: AvaloniaSettings
private val settings: AvaloniaProjectSettings
) : JComponent() {

companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ import com.jetbrains.rider.projectView.workspace.isProject
import com.jetbrains.rider.projectView.workspace.isUnloadedProject
import com.jetbrains.rider.run.configurations.IProjectBasedRunConfiguration
import me.fornever.avaloniarider.AvaloniaRiderBundle.message
import me.fornever.avaloniarider.idea.settings.AvaloniaWorkspaceSettings
import me.fornever.avaloniarider.idea.settings.AvaloniaProjectSettings
import me.fornever.avaloniarider.idea.settings.AvaloniaSettings
import me.fornever.avaloniarider.model.AvaloniaRiderProjectModel
import me.fornever.avaloniarider.model.RdGetReferencingProjectsRequest
import me.fornever.avaloniarider.model.avaloniaRiderProjectModel
Expand All @@ -52,8 +52,8 @@ class RunnableAssemblySelectorAction(
private val workspaceModel: WorkspaceModel,
messageBus: MessageBus,
private val runManager: RunManager,
private val avaloniaSettings: AvaloniaSettings,
private val avaloniaProjectSettings: AvaloniaProjectSettings,
private val avaloniaWorkspaceSettings: AvaloniaWorkspaceSettings,
private val avaloniaRiderModel: AvaloniaRiderProjectModel,
isSolutionLoading: IOptPropertyView<Boolean>,
runnableProjects: IOptPropertyView<Sequence<RunnableProject>>,
Expand All @@ -70,8 +70,8 @@ class RunnableAssemblySelectorAction(
WorkspaceModel.getInstance(project),
project.messageBus,
RunManager.getInstance(project),
AvaloniaSettings.getInstance(project),
AvaloniaProjectSettings.getInstance(project),
AvaloniaWorkspaceSettings.getInstance(project),
project.solution.avaloniaRiderProjectModel,
project.solution.isLoading,
AvaloniaRiderProjectModelHost.getInstance(project).filteredRunnableProjects,
Expand Down Expand Up @@ -113,7 +113,7 @@ class RunnableAssemblySelectorAction(

val availableProjects = availableProjects.value
val nothingSelected = !selectedRunnableProjectProperty.hasValue
val shouldSynchronize = avaloniaSettings.synchronizeWithRunConfiguration
val shouldSynchronize = avaloniaProjectSettings.synchronizeWithRunConfiguration

fun getRunnableProject(projectFilePath: Path?): RunnableProject? =
availableProjects.firstOrNull {
Expand All @@ -138,7 +138,7 @@ class RunnableAssemblySelectorAction(
}

logger.info("Trying to load saved project")
val savedProjectFilePath = avaloniaProjectSettings.getSelection(xamlFile.toNioPath())
val savedProjectFilePath = avaloniaWorkspaceSettings.getSelection(xamlFile.toNioPath())
if (savedProjectFilePath != null) {
logger.info("Saved project file path: $savedProjectFilePath")
val savedProject = getRunnableProject(savedProjectFilePath)
Expand Down Expand Up @@ -167,7 +167,7 @@ class RunnableAssemblySelectorAction(
autoSelectProject()
}
selectedRunnableProjectProperty.advise(lifetime) { project ->
avaloniaProjectSettings.storeSelection(xamlFile.toNioPath(), Paths.get(project.projectFilePath))
avaloniaWorkspaceSettings.storeSelection(xamlFile.toNioPath(), Paths.get(project.projectFilePath))
}
messageBus.connect(lifetime.createNestedDisposable("RunnableAssemblySelectorAction"))
.subscribe(RunManagerListener.TOPIC, object : RunManagerListener {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,49 +1,40 @@
package me.fornever.avaloniarider.idea.settings

import com.intellij.openapi.components.*
import com.intellij.openapi.components.BaseState
import com.intellij.openapi.components.Service
import com.intellij.openapi.components.SimplePersistentStateComponent
import com.intellij.openapi.components.State
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.io.FileUtil
import com.intellij.util.application
import com.intellij.util.io.systemIndependentPath
import com.jetbrains.rider.util.idea.getService
import java.io.File
import java.nio.file.Path
import java.nio.file.Paths

class AvaloniaProjectState : BaseState() {
var projectPerEditor by map<String, String>()

enum class AvaloniaPreviewerMethod {
AvaloniaRemote,
Html
}

@State(name = "AvaloniaProject", storages = [Storage("avalonia.xml")])
@Service(Service.Level.PROJECT)
class AvaloniaProjectSettings(private val project: Project) : SimplePersistentStateComponent<AvaloniaProjectState>(
AvaloniaProjectState()
) {
companion object {
fun getInstance(project: Project): AvaloniaProjectSettings = project.getService()
}
class AvaloniaProjectSettingsState : BaseState() {
var previewerMethod by enum(AvaloniaPreviewerMethod.AvaloniaRemote)

private fun getProjectRelativeSystemIndependentPath(relativePath: Path): String {
val basePath = project.basePath ?: return relativePath.systemIndependentPath
val resultPath = FileUtil.getRelativePath(File(basePath), relativePath.toFile())
?: return relativePath.systemIndependentPath
return Paths.get(resultPath).systemIndependentPath
}
/**
* Synchronize current run configuration and selected project, when possible.
*/
var synchronizeWithRunConfiguration by property(false)

fun storeSelection(xamlFilePath: Path, projectFilePath: Path) {
application.assertIsDispatchThread()
var fpsLimit by property(0)
}

val relativeXamlPath = getProjectRelativeSystemIndependentPath(xamlFilePath)
val relativeProjectPath = getProjectRelativeSystemIndependentPath(projectFilePath)
state.projectPerEditor[relativeXamlPath] = relativeProjectPath
@State(name = "Avalonia") // TODO[#265]: Move to avalonia.xml
@Service
class AvaloniaProjectSettings : SimplePersistentStateComponent<AvaloniaProjectSettingsState>(AvaloniaProjectSettingsState()) {
companion object {
fun getInstance(project: Project): AvaloniaProjectSettings = project.getService(AvaloniaProjectSettings::class.java)
}

fun getSelection(xamlFilePath: Path): Path? {
application.assertIsDispatchThread()
val previewerTransportType: AvaloniaPreviewerMethod
get() = state.previewerMethod

val relativeXamlPath = getProjectRelativeSystemIndependentPath(xamlFilePath)
val relativeProjectPath = state.projectPerEditor[relativeXamlPath] ?: return null
val basePath = project.basePath ?: return Paths.get(relativeProjectPath)
return Paths.get(basePath, relativeProjectPath)
}
val synchronizeWithRunConfiguration: Boolean
get() = state.synchronizeWithRunConfiguration

val fpsLimit: Int
get() = state.fpsLimit
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import javax.swing.JPanel
import javax.swing.JSpinner
import javax.swing.SpinnerNumberModel

class AvaloniaSettingsComponent(state: AvaloniaSettingsState) : JPanel() {
private val initialState = AvaloniaSettingsState().apply {
class AvaloniaProjectSettingsComponent(state: AvaloniaProjectSettingsState) : JPanel() {
private val initialState = AvaloniaProjectSettingsState().apply {
copyFrom(state)
}

Expand Down Expand Up @@ -57,11 +57,11 @@ class AvaloniaSettingsComponent(state: AvaloniaSettingsState) : JPanel() {
addComponent(fpsLimitEditor) { gridy = 2; gridx = 1 }
}

var currentState: AvaloniaSettingsState
get() = AvaloniaSettingsState().apply {
previewerMethod = this@AvaloniaSettingsComponent.previewerMethod
synchronizeWithRunConfiguration = this@AvaloniaSettingsComponent.synchronizeWithRunConfiguration
fpsLimit = this@AvaloniaSettingsComponent.fpsLimit
var currentState: AvaloniaProjectSettingsState
get() = AvaloniaProjectSettingsState().apply {
previewerMethod = this@AvaloniaProjectSettingsComponent.previewerMethod
synchronizeWithRunConfiguration = this@AvaloniaProjectSettingsComponent.synchronizeWithRunConfiguration
fpsLimit = this@AvaloniaProjectSettingsComponent.fpsLimit
}
set(value) {
previewerMethod = value.previewerMethod
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import com.intellij.openapi.options.Configurable
import com.intellij.openapi.project.Project
import javax.swing.JComponent

class AvaloniaSettingsConfigurable(private val project: Project) : Configurable {
class AvaloniaProjectSettingsConfigurable(private val project: Project) : Configurable {
override fun getDisplayName() = "Avalonia"

private var control: AvaloniaSettingsComponent? = null
private var control: AvaloniaProjectSettingsComponent? = null

override fun createComponent(): JComponent {
val settings = AvaloniaSettings.getInstance(project).state
return AvaloniaSettingsComponent(settings).apply {
val settings = AvaloniaProjectSettings.getInstance(project).state
return AvaloniaProjectSettingsComponent(settings).apply {
control = this
}
}
Expand All @@ -27,10 +27,10 @@ class AvaloniaSettingsConfigurable(private val project: Project) : Configurable

override fun apply() {
val settings = control!!.currentState
AvaloniaSettings.getInstance(project).state.copyFrom(settings)
AvaloniaProjectSettings.getInstance(project).state.copyFrom(settings)
}

override fun reset() {
control!!.currentState = AvaloniaSettings.getInstance(project).state
control!!.currentState = AvaloniaProjectSettings.getInstance(project).state
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package me.fornever.avaloniarider.idea.settings

import com.intellij.openapi.components.*
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.io.FileUtil
import com.intellij.util.application
import com.intellij.util.io.systemIndependentPath
import com.jetbrains.rider.util.idea.getService
import java.io.File
import java.nio.file.Path
import java.nio.file.Paths

/**
* These are Avalonia workspace-tied settings, not generally meant to be shared across the team.
*/
class AvaloniaWorkspaceState : BaseState() {
var projectPerEditor by map<String, String>()
}

@State(name = "AvaloniaProject", storages = [Storage("avalonia.xml")]) // TODO[#265]: move to a workspace-related file
@Service(Service.Level.PROJECT)
class AvaloniaWorkspaceSettings(private val project: Project) : SimplePersistentStateComponent<AvaloniaWorkspaceState>(
AvaloniaWorkspaceState()
) {
companion object {
fun getInstance(project: Project): AvaloniaWorkspaceSettings = project.getService()
}

private fun getProjectRelativeSystemIndependentPath(relativePath: Path): String {
val basePath = project.basePath ?: return relativePath.systemIndependentPath
val resultPath = FileUtil.getRelativePath(File(basePath), relativePath.toFile())
?: return relativePath.systemIndependentPath
return Paths.get(resultPath).systemIndependentPath
}

fun storeSelection(xamlFilePath: Path, projectFilePath: Path) {
application.assertIsDispatchThread()

val relativeXamlPath = getProjectRelativeSystemIndependentPath(xamlFilePath)
val relativeProjectPath = getProjectRelativeSystemIndependentPath(projectFilePath)
state.projectPerEditor[relativeXamlPath] = relativeProjectPath
}

fun getSelection(xamlFilePath: Path): Path? {
application.assertIsDispatchThread()

val relativeXamlPath = getProjectRelativeSystemIndependentPath(xamlFilePath)
val relativeProjectPath = state.projectPerEditor[relativeXamlPath] ?: return null
val basePath = project.basePath ?: return Paths.get(relativeProjectPath)
return Paths.get(basePath, relativeProjectPath)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import me.fornever.avaloniarider.controlmessages.UpdateXamlResultMessage
import me.fornever.avaloniarider.exceptions.AvaloniaPreviewerInitializationException
import me.fornever.avaloniarider.idea.concurrency.adviseOnUiThread
import me.fornever.avaloniarider.idea.settings.AvaloniaPreviewerMethod
import me.fornever.avaloniarider.idea.settings.AvaloniaSettings
import me.fornever.avaloniarider.idea.settings.AvaloniaProjectSettings
import me.fornever.avaloniarider.rd.compose
import me.fornever.avaloniarider.rider.AvaloniaRiderProjectModelHost
import me.fornever.avaloniarider.rider.projectRelativeVirtualPath
Expand Down Expand Up @@ -239,7 +239,7 @@ class AvaloniaPreviewerSessionController(
}

private suspend fun executePreviewerAsync(lifetime: Lifetime, projectFilePath: Path) {
val settings = AvaloniaSettings.getInstance(project).state
val settings = AvaloniaProjectSettings.getInstance(project).state

statusProperty.set(Status.Connecting)

Expand Down
4 changes: 2 additions & 2 deletions src/rider/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@
</component>
</application-components>
<extensions defaultExtensionNs="com.intellij">
<projectService serviceImplementation="me.fornever.avaloniarider.idea.settings.AvaloniaProjectSettings"/>
<projectService serviceImplementation="me.fornever.avaloniarider.idea.settings.AvaloniaWorkspaceSettings"/>

<projectConfigurable groupId="language"
instance="me.fornever.avaloniarider.idea.settings.AvaloniaSettingsConfigurable" />
instance="me.fornever.avaloniarider.idea.settings.AvaloniaProjectSettingsConfigurable" />

<rider.xaml.preview.editor implementation="me.fornever.avaloniarider.idea.editor.AvaloniaPreviewerXamlEditorExtension"/>
</extensions>
Expand Down
Loading

0 comments on commit a7a668f

Please sign in to comment.