Drawer related refactoring :

- removed NekoDrawerEvent
Button related refactoring :
- removed NekoIconButton
This commit is contained in:
2025-11-21 10:53:50 +01:00
parent db50bec414
commit 8b8f0b9712
12 changed files with 73 additions and 249 deletions
+12 -83
View File
@@ -1,49 +1,31 @@
import haxe.macro.Expr.Case;
import openfl.events.Event;
import control.NekoDrawerEvent;
import com.adobe.cairngorm.control.CairngormEvent;
import components.NekoDrawer;
import feathers.controls.Drawer;
import control.AppController;
import business.Services; import business.Services;
import model.AppModelLocator;
import com.adobe.cairngorm.control.CairngormEventDispatcher; import com.adobe.cairngorm.control.CairngormEventDispatcher;
import control.AppController;
import control.LoadRidersEvent; import control.LoadRidersEvent;
import feathers.events.FeathersEvent;
import feathers.layout.VerticalAlign;
import components.NekoRectangle;
import feathers.controls.Application; import feathers.controls.Application;
import feathers.controls.Label; import feathers.events.FeathersEvent;
import feathers.controls.LayoutGroup; import model.AppModelLocator;
import feathers.controls.Panel; import openfl.events.Event;
import feathers.layout.AnchorLayout;
import feathers.layout.AnchorLayoutData;
import feathers.text.TextFormat;
import model.Constants;
import openfl.Assets;
import openfl.text.Font;
import t9.util.ColorTraces.*; import t9.util.ColorTraces.*;
import view.MainDrawer;
import view.MainPanel; import view.MainPanel;
class LPTCManager2026 extends Application { class LPTCManager2026 extends Application {
private var model:AppModelLocator; private var model:AppModelLocator;
private var services:Services; private var services:Services;
private var appController:AppController; private var appController:AppController;
private var mainPanel:MainPanel; private var mainPanel:MainPanel;
private var dr:NekoDrawer; private var dr:MainDrawer;
// private var nav:StackNavigator; // private var nav:StackNavigator;
public function new() { public function new() {
super(); super();
model = AppModelLocator.getInstance(); model = AppModelLocator.getInstance();
services = new Services(); services = new Services();
appController = new AppController(); appController = new AppController();
addEventListener(FeathersEvent.CREATION_COMPLETE, onCreationComplete); addEventListener(FeathersEvent.CREATION_COMPLETE, onCreationComplete);
} }
override private function initialize():Void { override private function initialize():Void {
@@ -55,60 +37,12 @@ class LPTCManager2026 extends Application {
mainPanel = new MainPanel(); mainPanel = new MainPanel();
addChild(mainPanel); addChild(mainPanel);
dr = new NekoDrawer(); dr = new MainDrawer();
addChild(dr); addChild(dr);
model.addEventListener(NekoDrawerEvent.DRAWER_STATE_CHANGE, onDrawerStateChange); model.addEventListener(AppModelLocator.DRAWER_STATE_CHANGE, onDrawerStateChange);
/*mainPanel = new Panel();
mainPanel.autoSizeMode = STAGE;
mainPanel.backgroundSkin = new NekoRectangle(Constants.MAIN_COLOR3);
// ############################################################################################# HEADER
var header = new LayoutGroup();
header.autoSizeMode = CONTENT;
header.backgroundSkin = new NekoRectangle(Constants.HERO_COLOR, 0, 0, Std.int(stage.stageWidth * Constants.MAIN_HEADER_WIDTH_RATIO), Std.int(stage.stageHeight * Constants.MAIN_HEADER_HEIGHT_RATIO));
header.variant = LayoutGroup.VARIANT_TOOL_BAR;
header.layout = new AnchorLayout();
var title = new Label();
title.backgroundSkin = new NekoRectangle(Constants.ACCENT_COLOR2, 0, 0, 200, 80);
title.verticalAlign = VerticalAlign.MIDDLE;
title.text = "Header";
title.embedFonts = true;
var fnt:Font = Assets.getFont(Constants.MONTSERRAT_MEDIUM_500);
var tf:TextFormat = new TextFormat(fnt.fontName, Std.int(stage.stageHeight * Constants.MAIN_HEADER_HEIGHT_RATIO * .1), Constants.MAIN_COLOR3); //traceBlue(this + " --> initialize()");
title.textFormat = tf;
title.variant = Label.VARIANT_HEADING;
title.layoutData = AnchorLayoutData.center();
header.addChild(title);
mainPanel.header = header;
// ############################################################################################# FOOTER
var footer = new LayoutGroup();
footer.autoSizeMode = CONTENT;
footer.backgroundSkin = new NekoRectangle(Constants.MAIN_COLOR2, 0, 0, stage.stageWidth, Std.int(stage.stageHeight * 10 / 100));
footer.variant = LayoutGroup.VARIANT_TOOL_BAR;
footer.layout = new AnchorLayout();
var title = new Label();
title.text = "Footer";
//title.embedFonts = true;
title.variant = Label.VARIANT_HEADING;
title.layoutData = AnchorLayoutData.center();
footer.addChild(title);
mainPanel.footer = footer;
addChild(mainPanel);*/
// nav = new StackNavigator();
traceBlue(this + " --> initialize()");
} }
private function loadRiders():Void { private function loadRiders():Void {
@@ -122,12 +56,7 @@ class LPTCManager2026 extends Application {
loadRiders(); loadRiders();
} }
private function onDrawerStateChange(e:Event):Void private function onDrawerStateChange(e:Event):Void {
{ model.drawerIsOpen ? dr.openDrawer() : dr.closeDrawer();
switch (model.drawerState) {
case NekoDrawer.OPEN : dr.openDrawer();
case NekoDrawer.CLOSE : dr.closeDrawer();
default : dr.closeDrawer();
}
} }
} }
@@ -1,15 +1,15 @@
package command; package command;
import model.Constants;
import com.adobe.cairngorm.commands.ICommand; import com.adobe.cairngorm.commands.ICommand;
import com.adobe.cairngorm.control.CairngormEvent; import com.adobe.cairngorm.control.CairngormEvent;
import control.NekoDrawerEvent;
import model.AppModelLocator; import model.AppModelLocator;
import t9.util.ColorTraces.*;
class NekoDrawerCommand implements ICommand { class CloseDrawerCommand implements ICommand {
private var model = AppModelLocator.getInstance(); private var model = AppModelLocator.getInstance();
public function execute(e:CairngormEvent):Void { public function execute(e:CairngormEvent):Void {
var e:NekoDrawerEvent = cast(e, NekoDrawerEvent); model.drawerIsOpen = false;
model.drawerState = e.drawerState;
} }
} }
+15
View File
@@ -0,0 +1,15 @@
package command;
import model.Constants;
import com.adobe.cairngorm.commands.ICommand;
import com.adobe.cairngorm.control.CairngormEvent;
import model.AppModelLocator;
import t9.util.ColorTraces.*;
class OpenDrawerCommand implements ICommand {
private var model = AppModelLocator.getInstance();
public function execute(e:CairngormEvent):Void {
model.drawerIsOpen = true;
}
}
-83
View File
@@ -1,83 +0,0 @@
package components;
import feathers.controls.Button;
import feathers.controls.Label;
import feathers.events.FeathersEvent;
import format.SVG;
import model.Constants;
import openfl.Assets;
import openfl.display.Shape;
import openfl.geom.ColorTransform;
import openfl.text.Font;
import openfl.text.TextFormat;
import t9.util.ColorTraces.*;
class NekoIconButton extends Button {
private var svgSkinPath:String;
private var w:Int;
private var h:Int;
private var normalStateColor:Int;
private var selectedStateColor:Int;
private var disabledStateColor:Int;
private var backgroundColor:Int;
private var t:String;
private var iconShape:Shape;
private var lb1:Label;
public function new(pSvgSkinPath:String,
pWidth:Int = 100,
pHeight:Int = 100,
pNormalStateColor:Int = 0x000000,
pSelectedStateColor:Int = 0xFF0000,
pDisabledStateColor:Int = 0xAAAAAA,
pBackgroundColor:Int = null,
pText:String = null) {
super();
svgSkinPath = pSvgSkinPath;
w = pWidth;
h = pHeight;
normalStateColor = pNormalStateColor;
selectedStateColor = pSelectedStateColor;
disabledStateColor = pDisabledStateColor;
backgroundColor = pBackgroundColor;
t = pText;
addEventListener(FeathersEvent.CREATION_COMPLETE, onCreationComplete);
if(pBackgroundColor == null){
backgroundSkin = new NekoRectangle(0xFF0000, 0, 0, pWidth, pHeight);
backgroundSkin.alpha = 0;
} else {
backgroundSkin = new NekoRectangle(pBackgroundColor, 0, 0, pWidth, pHeight);
}
iconShape = new Shape();
new SVG(pSvgSkinPath).render(iconShape.graphics);
iconShape.width = pWidth;
iconShape.height = pHeight;
var ct = new ColorTransform();
ct.color = pNormalStateColor;
iconShape.transform.colorTransform = ct;
addChild(iconShape);
if(pText != null){
lb1.text = Constants.MENU_ITEM_0_STRING;
lb1.embedFonts = true;
var fnt:Font = Assets.getFont(Constants.MONTSERRAT_LIGHT_300);
lb1.textFormat = new TextFormat(fnt.fontName, 20, Constants.BUTTON_NORMAL_STATE_COLOR);
addChild(lb1);
}
}
override private function initialize():Void {
}
private function onCreationComplete(event:FeathersEvent):Void {
traceBlue(this + " --> onCreationComplete()");
}
}
+7 -4
View File
@@ -1,18 +1,21 @@
package control; package control;
import command.NekoDrawerCommand; import command.CloseDrawerCommand;
import components.NekoDrawer;
import command.LoadRidersCommand; import command.LoadRidersCommand;
import command.OpenDrawerCommand;
import com.adobe.cairngorm.control.FrontController; import com.adobe.cairngorm.control.FrontController;
class AppController extends FrontController { class AppController extends FrontController {
public static final LOAD_RIDERS_EVENT = "loadRidersEvent"; public static final LOAD_RIDERS_EVENT = "loadRidersEvent";
public static final NEKO_DRAWER_EVENT = "nekoDrawerEvent"; public static final OPEN_DRAWER_EVENT = "openDrawerEvent";
public static final CLOSE_DRAWER_EVENT = "closeDrawerEvent";
public function new() { public function new() {
super(); super();
addCommand(AppController.LOAD_RIDERS_EVENT, LoadRidersCommand); addCommand(AppController.LOAD_RIDERS_EVENT, LoadRidersCommand);
addCommand(AppController.NEKO_DRAWER_EVENT, NekoDrawerCommand); addCommand(AppController.OPEN_DRAWER_EVENT, OpenDrawerCommand);
addCommand(AppController.CLOSE_DRAWER_EVENT, CloseDrawerCommand);
} }
} }
-14
View File
@@ -1,14 +0,0 @@
package control;
import com.adobe.cairngorm.control.CairngormEvent;
class NekoDrawerEvent extends CairngormEvent {
public static final DRAWER_STATE_CHANGE:String = "drawerStateChange";
public var drawerState:String;
public function new(pDrawerState:String) {
super(AppController.NEKO_DRAWER_EVENT);
drawerState = pDrawerState;
}
}
+7 -8
View File
@@ -1,20 +1,19 @@
package model; package model;
import components.NekoDrawer;
import control.NekoDrawerEvent;
import vo.Rider; import vo.Rider;
import feathers.data.ArrayCollection; import feathers.data.ArrayCollection;
import openfl.errors.Error; import openfl.errors.Error;
import openfl.events.Event; import openfl.events.Event;
import com.adobe.cairngorm.model.IModelLocator; import com.adobe.cairngorm.model.IModelLocator;
import openfl.events.EventDispatcher; import openfl.events.EventDispatcher;
import t9.util.ColorTraces.*;
class AppModelLocator extends EventDispatcher implements IModelLocator { class AppModelLocator extends EventDispatcher implements IModelLocator {
// events constants // events constants
public static final VIEWING_CHANGE:String = "viewingChange"; public static final VIEWING_CHANGE:String = "viewingChange";
public static final RIDERS_LIST_DP_CHANGE:String = "ridersListDPChange"; public static final RIDERS_LIST_DP_CHANGE:String = "ridersListDPChange";
//public static final DRAWER_STATE_CHANGE:String = "drawerStateChange"; public static final DRAWER_STATE_CHANGE:String = "drawerStateChange";
// this instance stores a static reference to itself // this instance stores a static reference to itself
@@ -36,12 +35,12 @@ class AppModelLocator extends EventDispatcher implements IModelLocator {
} }
// at startup, the drawer is closed // at startup, the drawer is closed
public var drawerState(default, set):String = NekoDrawer.CLOSE; public var drawerIsOpen(default, set):Bool = false;
private function set_drawerState(pState:String):String { private function set_drawerIsOpen(pIsOpen:Bool):Bool {
drawerState = pState; drawerIsOpen = pIsOpen;
dispatchEvent(new Event(NekoDrawerEvent.DRAWER_STATE_CHANGE)); dispatchEvent(new Event(AppModelLocator.DRAWER_STATE_CHANGE));
return drawerState; return drawerIsOpen;
} }
// rider object contains uid/passwd // rider object contains uid/passwd
+6 -1
View File
@@ -21,10 +21,15 @@ class Constants {
public static final MONTSERRAT_MEDIUM_500:String = "MontserratMedium500"; public static final MONTSERRAT_MEDIUM_500:String = "MontserratMedium500";
public static final MONTSERRAT_BOLD_700:String = "MontserratBold700"; public static final MONTSERRAT_BOLD_700:String = "MontserratBold700";
// UI Proportions against satge dimmentions // UI Proportions against stage dimmensions
public static final MAIN_HEADER_WIDTH_RATIO:Float = 1; public static final MAIN_HEADER_WIDTH_RATIO:Float = 1;
public static final MAIN_HEADER_HEIGHT_RATIO:Float = 0.1; public static final MAIN_HEADER_HEIGHT_RATIO:Float = 0.1;
// Event strings
public static final OPEN_DRAWER:String = "openDrawer";
public static final CLOSE_DRAWER:String = "closeDrawer";
public static final DRAWER_IS_OPEN:Bool = false;
// Strings // Strings
public static final MENU_ITEM_0_STRING:String = "Cavalier·e·s"; public static final MENU_ITEM_0_STRING:String = "Cavalier·e·s";
public static final MENU_ITEM_1_STRING:String = "Licences FFE"; public static final MENU_ITEM_1_STRING:String = "Licences FFE";
@@ -1,5 +1,6 @@
package components; package view;
import components.NekoRectangle;
import model.Constants; import model.Constants;
import feathers.events.TriggerEvent; import feathers.events.TriggerEvent;
import feathers.controls.Button; import feathers.controls.Button;
@@ -9,7 +10,7 @@ import feathers.events.FeathersEvent;
import t9.util.ColorTraces.*; import t9.util.ColorTraces.*;
import feathers.controls.Drawer; import feathers.controls.Drawer;
class NekoDrawer extends Drawer { class MainDrawer extends Drawer {
public static final CLOSE:String = "close"; public static final CLOSE:String = "close";
public static final OPEN:String = "open"; public static final OPEN:String = "open";
-26
View File
@@ -3,7 +3,6 @@ package view;
import openfl.display.Stage; import openfl.display.Stage;
import haxe.CallStack.StackItem; import haxe.CallStack.StackItem;
import openfl.Assets; import openfl.Assets;
import components.NekoIconButton;
import feathers.layout.HorizontalLayout; import feathers.layout.HorizontalLayout;
import model.Constants; import model.Constants;
import components.NekoRectangle; import components.NekoRectangle;
@@ -13,9 +12,6 @@ import t9.util.ColorTraces.*;
class MainFooter extends LayoutGroup { class MainFooter extends LayoutGroup {
private var ridersButton:NekoIconButton;
private var ffeLicencesButton:NekoIconButton;
public function new() { public function new() {
super(); super();
@@ -40,28 +36,6 @@ class MainFooter extends LayoutGroup {
l.verticalAlign = MIDDLE; l.verticalAlign = MIDDLE;
layout = l; layout = l;
// Drawer button
ridersButton = new NekoIconButton(Assets.getText("vector/rider_icon_black.svg"),
40,
40,
Constants.BUTTON_NORMAL_STATE_COLOR,
Constants.BUTTON_SELECTED_STATE_COLOR,
Constants.BUTTON_DISABLED_STATE_COLOR,
Constants.MENU_ITEM_0_STRING);
//ridersButton.addEventListener(TriggerEvent.TRIGGER, onRidersBtnPress);
addChild(ridersButton);
// Drawer button
ffeLicencesButton = new NekoIconButton(Assets.getText("vector/certificate_icon_black.svg"),
40,
40,
Constants.BUTTON_NORMAL_STATE_COLOR,
Constants.BUTTON_SELECTED_STATE_COLOR,
Constants.BUTTON_DISABLED_STATE_COLOR,
Constants.MENU_ITEM_1_STRING);
//ffeLicencesButton.addEventListener(TriggerEvent.TRIGGER, onFfeLicencesButtonPress);
addChild(ffeLicencesButton);
} }
private function onCreationComplete(event:FeathersEvent):Void { private function onCreationComplete(event:FeathersEvent):Void {
+17 -22
View File
@@ -1,10 +1,10 @@
package view; package view;
import control.AppController;
import com.adobe.cairngorm.control.CairngormEvent;
import com.adobe.cairngorm.control.CairngormEventDispatcher; import com.adobe.cairngorm.control.CairngormEventDispatcher;
import control.NekoDrawerEvent;
import components.NekoDrawer;
import components.NekoIconButton;
import components.NekoRectangle; import components.NekoRectangle;
import feathers.controls.Button;
import feathers.controls.Label; import feathers.controls.Label;
import feathers.controls.LayoutGroup; import feathers.controls.LayoutGroup;
import feathers.events.FeathersEvent; import feathers.events.FeathersEvent;
@@ -18,8 +18,8 @@ import t9.util.ColorTraces.*;
class MainHeader extends LayoutGroup { class MainHeader extends LayoutGroup {
private var lb1:Label; private var btn1:Button;
private var drawerBtn:NekoIconButton; private var lbl1:Label;
public function new() { public function new() {
super(); super();
@@ -50,26 +50,21 @@ class MainHeader extends LayoutGroup {
l.verticalAlign = MIDDLE; l.verticalAlign = MIDDLE;
layout = l; layout = l;
// Drawer button // Menu button
drawerBtn = new NekoIconButton(Assets.getText("vector/menu_icon_black.svg"), btn1 = new Button("menu", onMenuButtonPress);
Std.int(headerHeight * .5), addChild(btn1);
Std.int(headerHeight * .5),
Constants.BUTTON_INVERTED_NORMAL_STATE_COLOR);
drawerBtn.addEventListener(TriggerEvent.TRIGGER, onDBtnPress);
addChild(drawerBtn);
// Title label // Title label
lb1 = new Label(); lbl1 = new Label();
//lb1.backgroundSkin = new NekoRectangle(Constants.ACCENT_COLOR2); //lb1.backgroundSkin = new NekoRectangle(Constants.ACCENT_COLOR2);
//lb1.verticalAlign = VerticalAlign.TOP; //lb1.verticalAlign = VerticalAlign.TOP;
lb1.text = Constants.MENU_ITEM_0_STRING; lbl1.text = Constants.MENU_ITEM_0_STRING;
lb1.embedFonts = true; lbl1.embedFonts = true;
var fnt:Font = Assets.getFont(Constants.MONTSERRAT_MEDIUM_500); var fnt:Font = Assets.getFont(Constants.MONTSERRAT_MEDIUM_500);
lb1.textFormat = new TextFormat(fnt.fontName, Std.int(headerHeight * .4), Constants.MAIN_COLOR3); lbl1.textFormat = new TextFormat(fnt.fontName, Std.int(headerHeight * .4), Constants.MAIN_COLOR3);
addChild(lb1); addChild(lbl1);
} }
private function onCreationComplete(event:FeathersEvent):Void { private function onCreationComplete(event:FeathersEvent):Void {
@@ -77,8 +72,8 @@ class MainHeader extends LayoutGroup {
} }
function onDBtnPress(e:TriggerEvent):Void { function onMenuButtonPress(e:TriggerEvent):Void {
var ce:NekoDrawerEvent = new NekoDrawerEvent(NekoDrawer.OPEN); var e:CairngormEvent = new CairngormEvent(AppController.OPEN_DRAWER_EVENT);
CairngormEventDispatcher.getInstance().dispatchEvent(ce); CairngormEventDispatcher.getInstance().dispatchEvent(e);
} }
} }
+2 -2
View File
@@ -26,8 +26,8 @@ class MainPanel extends Panel {
mh = new MainHeader(); mh = new MainHeader();
header = mh; header = mh;
mf = new MainFooter(); //mf = new MainFooter();
footer = mf; //footer = mf;
} }
private function onCreationComplete(event:FeathersEvent):Void { private function onCreationComplete(event:FeathersEvent):Void {