Files
kiss-vscode/projects/kiss-flixel/src/kiss_flixel/SimpleWindow.kiss

86 lines
2.5 KiB
Plaintext

// All windows share the same text size
(var &mut textSize 16)
(var :kiss.List<SimpleWindow> windowStack [])
// TODO tooltip support with left-click and right-click action
// icons and explanations
(defNew [&opt :String _title
:FlxColor bgColor
:FlxColor _textColor
:Float percentWidth
:Float percentHeight]
[:String title (or _title "")
&mut :Float nextControlY 0
:FlxColor titleColor (or _textColor FlxColor.WHITE)
&mut :FlxColor textColor (or _textColor FlxColor.WHITE)
:FlxTypedGroup<FlxSprite> controls (new FlxTypedGroup)
:FlxKeyShortcutHandler<ShortcutAction> keyHandler (new FlxKeyShortcutHandler)]
(super 0 0)
(makeGraphic
(Std.int (* FlxG.width (or percentWidth 0.5)))
(Std.int (* FlxG.height (or percentHeight 0.5)))
(or bgColor FlxColor.BLACK))
(screenCenter)
(set nextControlY y)
(when title
(makeText title null))
(set keyHandler.onBadKey ->:Void [_ _] {}) // TODO do SOMETHING
(set keyHandler.onSelectItem
->:Void [:ShortcutAction a] {
(a)
(keyHandler.start)
})
// TODO show which shortcuts' prefixes are partially highlighted?
)
(method makeText [:String text &opt :FlxColor color :Action onClick]
(let [ftext (new FlxText x nextControlY 0 text textSize)]
(set ftext.color (or color textColor))
(set ftext.cameras this.cameras)
(controls.add ftext)
(+= nextControlY ftext.height)
(when onClick
// TODO enable mouse click
// TODO make a highlight color
// TODO right click?
(keyHandler.registerItem text ->:Void (onClick ftext)))
ftext))
// TODO makeButton
// TODO make inputText
(prop &mut _shown false)
(method isShown [] _shown)
(method clearControls []
(controls.clear)
(keyHandler.clear)
(set nextControlY y)
(makeText title titleColor))
(method :Void show []
(unless _shown
(FlxG.state.add this)
(FlxG.state.add controls)
(windowStack.push this)
(keyHandler.start)
(set _shown true)))
(method :Void hide []
(when _shown
(FlxG.state.remove this)
(FlxG.state.remove controls)
(windowStack.remove this)
(keyHandler.cancel)
(set _shown false)))
(method &override update [:Float elapsed]
(super.update elapsed)
(when (= (last windowStack) this)
(keyHandler.update)))