diff --git a/example/src/main/kotlin/main.kt b/example/src/main/kotlin/main.kt index 13699fc..179be1c 100644 --- a/example/src/main/kotlin/main.kt +++ b/example/src/main/kotlin/main.kt @@ -1,16 +1,17 @@ import bibliothek.gui.dock.common.CControl import bibliothek.gui.dock.common.CGrid +import com.deflatedpickle.haruhi.api.Registry +import com.deflatedpickle.haruhi.api.constants.MenuCategory import com.deflatedpickle.haruhi.api.plugin.DependencyComparator import com.deflatedpickle.haruhi.api.plugin.Plugin import com.deflatedpickle.haruhi.api.plugin.PluginType import com.deflatedpickle.haruhi.api.util.ComponentPosition -import com.deflatedpickle.haruhi.api.util.ComponentPositionNormal import com.deflatedpickle.haruhi.component.PluginPanel +import com.deflatedpickle.haruhi.event.EventProgramFinishSetup import com.deflatedpickle.haruhi.util.ClassGraphUtil import com.deflatedpickle.haruhi.util.PluginUtil -import javax.swing.JFrame -import javax.swing.SwingUtilities -import javax.swing.UIManager +import com.deflatedpickle.haruhi.util.RegistryUtil +import javax.swing.* @Suppress("unused") @Plugin( @@ -20,7 +21,14 @@ import javax.swing.UIManager type = PluginType.COMPONENT, component = SimpleComponent::class ) -object SimplePlugin +object SimplePlugin { + init { + EventProgramFinishSetup.addListener { + (RegistryUtil.get(MenuCategory.MENU.name) + ?.get(MenuCategory.FILE.name) as JMenu).add("New") + } + } +} object SimpleComponent : PluginPanel() @Suppress("unused") @@ -32,7 +40,14 @@ object SimpleComponent : PluginPanel() component = OtherSimpleComponent::class, componentMinimizedPosition = ComponentPosition.EAST ) -object OtherSimplePlugin +object OtherSimplePlugin { + init { + EventProgramFinishSetup.addListener { + (RegistryUtil.get(MenuCategory.MENU.name) + ?.get(MenuCategory.EDIT.name) as JMenu).add("Undo") + } + } +} object OtherSimpleComponent : PluginPanel() fun main() { @@ -40,8 +55,24 @@ fun main() { PluginUtil.isInDev = true + val menuBar = JMenuBar() + val menuRegistry = object : Registry() { + init { + register(MenuCategory.FILE.name, JMenu("File")) + register(MenuCategory.EDIT.name, JMenu("Edit")) + } + + override fun register(key: String, value: JMenu) { + super.register(key, value) + menuBar.add(value) + } + } + + RegistryUtil.register(MenuCategory.MENU.name, menuRegistry) + val frame = JFrame() frame.title = "Kotlin Example" + frame.jMenuBar = menuBar val control = CControl(frame) PluginUtil.control = control @@ -69,6 +100,8 @@ fun main() { } } + EventProgramFinishSetup.trigger(true) + SwingUtilities.invokeLater { frame.setLocationRelativeTo(null) diff --git a/library/build.gradle b/library/build.gradle index e31a4ee..db500b3 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -1,5 +1,7 @@ plugins { id 'java' + id 'java-library' + id 'org.jetbrains.kotlin.jvm' id 'org.jetbrains.kotlin.plugin.serialization' @@ -16,26 +18,26 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.20.0" // Logging - compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.1' - compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.1' + compile 'org.apache.logging.log4j:log4j-api:2.11.1' + compile 'org.apache.logging.log4j:log4j-core:2.11.1' // Utility - implementation 'com.github.javadev:underscore:1.55' + api 'com.github.javadev:underscore:1.55' // Events - implementation 'com.github.Fylipp:easy-events:v1.1.0' + api 'com.github.Fylipp:easy-events:v1.1.0' // Allows for plugin loading - implementation 'io.github.classgraph:classgraph:4.8.85' + api 'io.github.classgraph:classgraph:4.8.85' // Fuzzy searching - implementation 'me.xdrop:fuzzywuzzy:1.2.0' + api 'me.xdrop:fuzzywuzzy:1.2.0' // Docking framework - implementation 'org.dockingframes:docking-frames-common:1.1.1' + api 'org.dockingframes:docking-frames-common:1.1.1' // Extended Swing widgets - implementation 'org.swinglabs:swingx:1.6.1' + api 'org.swinglabs:swingx:1.6.1' } compileKotlin { diff --git a/library/src/main/kotlin/com/deflatedpickle/haruhi/api/Registry.kt b/library/src/main/kotlin/com/deflatedpickle/haruhi/api/Registry.kt new file mode 100644 index 0000000..2bab3e2 --- /dev/null +++ b/library/src/main/kotlin/com/deflatedpickle/haruhi/api/Registry.kt @@ -0,0 +1,15 @@ +package com.deflatedpickle.haruhi.api + +import com.deflatedpickle.haruhi.api.registry.Registry + +open class Registry : Registry { + private val items = mutableMapOf() + + override fun register(key: K, value: V) { + this.items[key] = value + } + + override fun has(key: K): Boolean = this.items.containsKey(key) + override fun get(key: K): V? = this.items[key] + override fun getAll(): Map = this.items +} \ No newline at end of file diff --git a/library/src/main/kotlin/com/deflatedpickle/haruhi/api/constants/MenuCategory.kt b/library/src/main/kotlin/com/deflatedpickle/haruhi/api/constants/MenuCategory.kt new file mode 100644 index 0000000..a4b01c1 --- /dev/null +++ b/library/src/main/kotlin/com/deflatedpickle/haruhi/api/constants/MenuCategory.kt @@ -0,0 +1,31 @@ +package com.deflatedpickle.haruhi.api.constants + +@Suppress("unused") +enum class MenuCategory { + MENU, + FILE, + HOME, + EDIT, + SEARCH, + FORMAT, + SHARE, + VIEW, + NAVIGATE, + ENCODING, + LANGUAGE, + IMAGE, + LAYERS, + ADJUSTMENTS, + EFFECTS, + CODE, + ANALYZE, + REFACTOR, + SETTINGS, + TOOLS, + VCS, + MACRO, + RUN, + PLUGINS, + WINDOW, + HELP +} \ No newline at end of file diff --git a/library/src/main/kotlin/com/deflatedpickle/haruhi/api/constants/MenuItems.kt b/library/src/main/kotlin/com/deflatedpickle/haruhi/api/constants/MenuItems.kt new file mode 100644 index 0000000..e4768ab --- /dev/null +++ b/library/src/main/kotlin/com/deflatedpickle/haruhi/api/constants/MenuItems.kt @@ -0,0 +1,43 @@ +package com.deflatedpickle.haruhi.api.constants + +@Suppress("unused") +enum class MenuItems { + NEW, + OPEN, + RELOAD, + SAVE, + SAVE_AS, + SAVE_COPY, + SAVE_COPY_AS, + SAVE_ALL, + RENAME, + LOAD_SESSION, + SAVE_SESSION, + PAGE_SETUP, + PRINT, + PRINT_NOW, + EMPTY_RECENT_LIST, + EXIT, + + UNDO, + REDO, + CUT, + COPY, + PASTE, + DELETE, + FIND, + FIND_NEXT, + REPLACE, + GO_TO, + SELECT_ALL, + BEGIN_END_SELECT, + TIME_DATE, + + WORD_WRAP, + FONT, + + STATUS_BAR, + + VIEW_HELP, + ABOUT, +} \ No newline at end of file diff --git a/library/src/main/kotlin/com/deflatedpickle/haruhi/api/registry/Registry.kt b/library/src/main/kotlin/com/deflatedpickle/haruhi/api/registry/Registry.kt new file mode 100644 index 0000000..449c0c8 --- /dev/null +++ b/library/src/main/kotlin/com/deflatedpickle/haruhi/api/registry/Registry.kt @@ -0,0 +1,8 @@ +package com.deflatedpickle.haruhi.api.registry + +interface Registry { + fun register(key: K, value: V) + fun has(key: K): Boolean + fun get(key: K): V? + fun getAll(): Map +} \ No newline at end of file diff --git a/library/src/main/kotlin/com/deflatedpickle/haruhi/util/RegistryUtil.kt b/library/src/main/kotlin/com/deflatedpickle/haruhi/util/RegistryUtil.kt new file mode 100644 index 0000000..6add76e --- /dev/null +++ b/library/src/main/kotlin/com/deflatedpickle/haruhi/util/RegistryUtil.kt @@ -0,0 +1,5 @@ +package com.deflatedpickle.haruhi.util + +import com.deflatedpickle.haruhi.api.Registry + +object RegistryUtil : Registry>() \ No newline at end of file