Skip to content

Commit

Permalink
Showing a lesson name in the Project Tree
Browse files Browse the repository at this point in the history
  • Loading branch information
meanmail committed Feb 28, 2018
1 parent 11fe500 commit 6c00b14
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 9 deletions.
6 changes: 5 additions & 1 deletion alt/src/main/kotlin/org/stepik/alt/AltProjectManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,15 @@ import org.jdom.Element
import org.stepik.alt.courseFormat.AltTree
import org.stepik.core.BaseProjectManager
import org.stepik.core.StudyPluginConfigurator
import org.stepik.core.projectView.ProjectTreeMode.LESSON
import org.stepik.core.serialization.SerializationUtils
import org.stepik.core.serialization.StudySerializationUtils

@State(name = "AltSettings", storages = arrayOf(Storage("alt_project.xml")))
@State(name = "AltSettings", storages = [(Storage("alt_project.xml"))])
class AltProjectManager @JvmOverloads constructor(project: Project? = null) : BaseProjectManager(project) {

override val projectTreeMode = LESSON

override fun getConfiguratorEPName(): ExtensionPointName<StudyPluginConfigurator> {
return AltProjectConfigurator.EP_NAME
}
Expand Down
15 changes: 15 additions & 0 deletions stepik-core/src/main/kotlin/org/stepik/core/ProjectManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,33 @@ package org.stepik.core

import com.intellij.openapi.project.Project
import org.stepik.core.courseFormat.StudyNode
import org.stepik.core.projectView.ProjectTreeMode

interface ProjectManager {

var selected: StudyNode?

var showHint: Boolean

fun updateSelection()

val isAdaptive: Boolean // FIXME Plugin-specific

val projectTreeMode: ProjectTreeMode

fun getUuid(): String

var defaultLang: SupportedLanguages?

val version: Int

var projectRoot: StudyNode?

fun updateAdaptiveSelected() // FIXME Plugin-specific

var createdBy: Long

fun refreshProjectFiles()

fun getConfigurator(project: Project): StudyPluginConfigurator?
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package org.stepik.core.projectView

enum class ProjectTreeMode {
FULL,
LESSON
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,19 @@ import com.intellij.psi.PsiFileSystemItem
import org.stepik.core.StudyUtils.getProjectManager
import org.stepik.core.StudyUtils.getStudyNode
import org.stepik.core.StudyUtils.isStepikProject
import org.stepik.core.projectView.ProjectTreeMode.FULL
import org.stepik.core.utils.isVisibleDirectory
import org.stepik.core.utils.isVisibleFile
import org.stepik.core.utils.relativePath

abstract class StepikTreeStructureProvider : TreeStructureProvider, DumbAware {

override fun modify(
parent: AbstractTreeNode<*>,
children: Collection<AbstractTreeNode<*>>,
settings: ViewSettings): List<AbstractTreeNode<out Any>?> {
settings: ViewSettings): Collection<AbstractTreeNode<out Any>?> {
if (!needModify(parent)) {
return children.toList()
return children
}

return children.mapNotNull { node ->
Expand All @@ -47,7 +49,7 @@ abstract class StepikTreeStructureProvider : TreeStructureProvider, DumbAware {
private fun isHidden(project: Project, value: Any?): Boolean {
val projectManager = getProjectManager(project) ?: return false

if (projectManager.isAdaptive) {
if (projectManager.projectTreeMode === FULL) {
return false
}

Expand All @@ -58,9 +60,13 @@ abstract class StepikTreeStructureProvider : TreeStructureProvider, DumbAware {
val root = projectManager.projectRoot ?: return false
val node = getStudyNode(root, value.relativePath) ?: return false
val selected = projectManager.selected ?: return true
val selectedPath = selected.path
val nodePath = node.path
return !selectedPath.startsWith(nodePath) && selected.parent !== node.parent
val parent = selected.parent
val single = node.children.size == 1
return if (single) {
node.parent != parent
} else {
node != parent && node.parent != parent
}
}

protected abstract fun shouldAdd(any: Any): Boolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@ import com.intellij.ui.SimpleTextAttributes
import com.intellij.ui.SimpleTextAttributes.STYLE_PLAIN
import com.intellij.ui.SimpleTextAttributes.STYLE_STRIKEOUT
import org.stepik.core.EduNames.SANDBOX_DIR
import org.stepik.core.StudyUtils.getProjectManager
import org.stepik.core.StudyUtils.getStudyNode
import org.stepik.core.StudyUtils.isStepikProject
import org.stepik.core.courseFormat.StudyNode
import org.stepik.core.icons.AllStepikIcons.ProjectTree.sandbox
import org.stepik.core.projectView.ProjectTreeMode.LESSON
import javax.swing.Icon


Expand Down Expand Up @@ -42,7 +44,20 @@ fun updatePresentationData(data: PresentationData, psiDirectory: PsiDirectory) {
private fun setAttributes(project: Project, data: PresentationData, item: StudyNode) {
item.project = project
val status = item.status
setAttributes(data, item.name, status.getColor(), item.getIcon(), item.wasDeleted)
val projectTreeMode = getProjectManager(project)?.projectTreeMode
val itemName = when (projectTreeMode) {
LESSON -> {
val parent = item.parent

if (parent != null && parent.children.size == 1) {
parent.name
} else {
item.name
}
}
else -> item.name
}
setAttributes(data, itemName, status.getColor(), item.getIcon(), item.wasDeleted)
}

private fun setAttributes(data: PresentationData, text: String, color: JBColor, icon: Icon?, deleted: Boolean) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,18 @@ import com.intellij.openapi.project.Project
import org.jdom.Element
import org.stepik.core.BaseProjectManager
import org.stepik.core.StudyPluginConfigurator
import org.stepik.core.projectView.ProjectTreeMode
import org.stepik.core.projectView.ProjectTreeMode.FULL
import org.stepik.core.projectView.ProjectTreeMode.LESSON
import org.stepik.core.serialization.StudySerializationUtils
import serialization.SerializationUtils
import serialization.SerializationUtils.MAIN_ELEMENT

@State(name = "StepikStudySettings", storages = arrayOf(Storage("stepik_study_project.xml")))
@State(name = "StepikStudySettings", storages = [(Storage("stepik_study_project.xml"))])
class StepikProjectManager @JvmOverloads constructor(project: Project? = null) : BaseProjectManager(project) {
override val projectTreeMode: ProjectTreeMode
get() = if (isAdaptive) LESSON else FULL

override fun getConfiguratorEPName(): ExtensionPointName<StudyPluginConfigurator> {
return StepikPluginConfigurator.EP_NAME
}
Expand Down

0 comments on commit 6c00b14

Please sign in to comment.