diff --git a/assets/data/riders.json b/assets/data/riders.json index 29e49cf..c5735c7 100644 --- a/assets/data/riders.json +++ b/assets/data/riders.json @@ -120,7 +120,7 @@ "age": 7, "lastLessonDate": 1704441600, "level": 0, - "credit": 18, + "credit": 0, "address": "9 impasse des Roses, 31000 Toulouse", "notes": "Très gentille, se sent à l'aise avec les équidés.", "ffeLicence": false, @@ -177,7 +177,7 @@ "age": 5, "lastLessonDate": 1704182400, "level": 0, - "credit": 25, + "credit": -10, "address": "2 rue des Peupliers, 59000 Lille", "notes": "Très attachée au poney, sociable.", "ffeLicence": false, diff --git a/project.xml b/project.xml index 173e084..d18b75a 100644 --- a/project.xml +++ b/project.xml @@ -25,10 +25,10 @@ - - - - + + + + diff --git a/src/LPTCManager2026.hx b/src/LPTCManager2026.hx index f79b204..361cd64 100644 --- a/src/LPTCManager2026.hx +++ b/src/LPTCManager2026.hx @@ -1,3 +1,4 @@ +import openfl.system.Security; import business.Services; import com.adobe.cairngorm.control.CairngormEventDispatcher; import control.AppController; @@ -21,6 +22,10 @@ class LPTCManager2026 extends Application { public function new() { super(); + + Security.allowDomain("*"); + Security.loadPolicyFile("https://lepetittrot.com/crossdomain.xml"); + model = AppModelLocator.getInstance(); services = new Services(); appController = new AppController(); diff --git a/src/components/RidersListRendererAccessory.hx b/src/components/RidersListRendererAccessory.hx new file mode 100644 index 0000000..c0fb8e3 --- /dev/null +++ b/src/components/RidersListRendererAccessory.hx @@ -0,0 +1,67 @@ +package components; + +import haxe.macro.Expr.Case; +import feathers.text.TextFormat; +import openfl.Assets; +import openfl.text.Font; +import feathers.controls.Label; +import feathers.layout.HorizontalLayout; +import openfl.display.Shape; +import model.Constants; +import feathers.skins.RectangleSkin; +import feathers.controls.LayoutGroup; + +class RidersListRendererAccessory extends LayoutGroup { + private var elementSize:Int; + private var riderCredit:Int; + + public function new(pElementSize:Int = 14, pRiderCredit:Int = 0) { + super(); + + elementSize = pElementSize; + riderCredit = pRiderCredit; + } + + override private function initialize():Void { + super.initialize(); + + var l:HorizontalLayout = new HorizontalLayout(); + // l.setPadding(Std.int(headerHeight * .1)); + l.verticalAlign = MIDDLE; + l.gap = Std.int(elementSize * .3); + layout = l; + + backgroundSkin = new RectangleSkin(SolidColor(Constants.PURE_WHITE, 0)); + + // Title label + var lbl1 = new Label(); + + // lbl1.layoutData = ld1; + // lb1.backgroundSkin = new RectangleSkin(SolidColor(Constants.ACCENT_COLOR2, 1)); + // lb1.verticalAlign = VerticalAlign.TOP; + + var iconColor:Int; + var fnt:Font = Assets.getFont(Constants.MONTSERRAT_MEDIUM_500); + + if (riderCredit <= 0) { + iconColor = Constants.ALARM; + } else if (riderCredit <= 2) { + iconColor = Constants.ALERT; + } else if (riderCredit <= 6) { + iconColor = Constants.WARNING; + } else { + iconColor = Constants.INFO; + } + + lbl1.text = Constants.RIDERS_LIST_CREDIT_TEXT + Std.string(riderCredit); + lbl1.embedFonts = true; + lbl1.textFormat = new TextFormat(fnt.fontName, 14, Constants.MAIN_COLOR1); + addChild(lbl1); + + var s:Shape = new Shape(); + s.graphics.beginFill(iconColor, 1); + s.graphics.drawCircle(10, 10, 10); + s.graphics.endFill(); + addChild(s); + } +} diff --git a/src/components/RidersListRendererDecoration.hx b/src/components/RidersListRendererDecoration.hx deleted file mode 100644 index 2e302db..0000000 --- a/src/components/RidersListRendererDecoration.hx +++ /dev/null @@ -1,53 +0,0 @@ -package components; - -import feathers.text.TextFormat; -import openfl.Assets; -import openfl.text.Font; -import feathers.controls.Label; -import feathers.layout.HorizontalLayout; -import openfl.display.Shape; -import model.Constants; -import feathers.skins.RectangleSkin; -import feathers.controls.LayoutGroup; - -class RidersListRendererDecoration extends LayoutGroup { - public function new() { - super(); - } - - override private function initialize():Void { - super.initialize(); - - var l:HorizontalLayout = new HorizontalLayout(); - //l.setPadding(Std.int(headerHeight * .1)); - l.verticalAlign = MIDDLE; - l.setPadding(10); - l.gap = 10; - layout = l; - - backgroundSkin = new RectangleSkin(SolidColor(Constants.MAIN_COLOR2, 1)); - - // Title label - var lbl1 = new Label(); - - //lbl1.layoutData = ld1; - //lb1.backgroundSkin = new RectangleSkin(SolidColor(Constants.ACCENT_COLOR2, 1)); - - //lb1.verticalAlign = VerticalAlign.TOP; - - - var s:Shape = new Shape(); - s.graphics.beginFill(0x228B42, 1); - s.graphics.drawCircle(10, 10, 10); - s.graphics.endFill(); - addChild(s); - - var fnt:Font = Assets.getFont(Constants.MONTSERRAT_MEDIUM_500); - lbl1.text = "CREDIT : 09 "; - lbl1.embedFonts = true; - lbl1.textFormat = new TextFormat(fnt.fontName, 14, Constants.MAIN_COLOR1); - addChild(lbl1); - - - } -} diff --git a/src/components/RoundAvatar.hx b/src/components/RoundAvatar.hx index ce0c9d0..cbe6b21 100644 --- a/src/components/RoundAvatar.hx +++ b/src/components/RoundAvatar.hx @@ -1,5 +1,7 @@ package components; +import openfl.system.ApplicationDomain; +import openfl.system.LoaderContext; import openfl.display.LoaderInfo; import openfl.net.URLRequest; import openfl.display.Loader; @@ -30,11 +32,14 @@ class RoundAvatar extends LayoutGroup { override private function initialize():Void { super.initialize(); - var hl:HorizontalLayout = new HorizontalLayout(); + /*var hl:HorizontalLayout = new HorizontalLayout(); hl.horizontalAlign = LEFT; - layout = hl; + layout = hl;*/ - //backgroundSkin = new RectangleSkin(SolidColor(0xFF0000, 1)); + var bkgs = new RectangleSkin(SolidColor(0xFFFFFF, 0)); + bkgs.width = Std.int(avatarSize * 1.2); + bkgs.height = avatarSize; + backgroundSkin = bkgs; /*var al:AssetLoader = new AssetLoader(); al.addEventListener(Event.COMPLETE, onLoadComplete); @@ -42,33 +47,27 @@ class RoundAvatar extends LayoutGroup { al.source = "https://ui-avatars.com/api/?background=random&size=128"; addChild(al);*/ - var bkg:Shape = new Shape(); - bkg.graphics.beginFill(Std.int(Math.random() * 0xFFFFFF), 1); - bkg.graphics.drawCircle(avatarSize / 2, avatarSize / 2, avatarSize / 2); - bkg.graphics.endFill(); - backgroundSkin = bkg; - - var spacer:Shape = new Shape(); - spacer.graphics.beginFill(Std.int(0x933EA7), 1); - spacer.graphics.drawRect(bkg.x + bkg.width, bkg.y, avatarSize / 2, bkg.height); - spacer.graphics.endFill(); - addChild(spacer); + var m:Shape = new Shape(); + m.graphics.beginFill(Std.int(Math.random() * 0xFFFFFF), 1); + m.graphics.drawCircle(avatarSize / 2, avatarSize / 2, avatarSize / 2); + m.graphics.endFill(); + addChild(m); + mask = m; var l:Loader = new Loader(); + var lc:LoaderContext = new LoaderContext(true, null); // l.load(new URLRequest("https://ui-avatars.com/api/?background=random&size=64")); - l.load(new URLRequest("https://api.dicebear.com/9.x/pixel-art/png?size=32")); + //l.load(new URLRequest("https://api.dicebear.com/9.x/pixel-art/png?size=32")); + l.load(new URLRequest("https://lepetittrot.com/lptcm/assets/profile-pictures/pp256/pp_malo.jpeg"), lc); l.contentLoaderInfo.addEventListener (Event.COMPLETE, onLoadComplete); + addChild(l); } private function onLoadComplete(e:Event) { - - //var loader = cast(e.currentTarget, AssetLoader); - //trace("asset loaded: " + loader.source); + var l:Loader = cast(e.currentTarget, LoaderInfo).loader; - l.content.width = l.content.height = avatarSize; - if(!contains(l)) addChild(l); - traceMagenta(l.width + " / " + l.height); - + l.content.width = l.content.height = avatarSize; + } } diff --git a/src/model/Constants.hx b/src/model/Constants.hx index 0dfb7a2..3617a52 100644 --- a/src/model/Constants.hx +++ b/src/model/Constants.hx @@ -9,6 +9,12 @@ class Constants { public static final MAIN_COLOR1:Int = 0x323D42; public static final MAIN_COLOR2:Int = 0x69808A; public static final MAIN_COLOR3:Int = 0xECEFF0; + public static final PURE_WHITE:Int = 0xFFFFFF; + + public static final ALARM:Int = 0x5E2075; + public static final ALERT:Int = 0xE65555; + public static final WARNING:Int = 0xE3DF62; + public static final INFO:Int = 0x6BE692; public static final BUTTON_UP_COLOR:Int = 0x050EB7; public static final BUTTON_HOVER_COLOR:Int = 0xFF5F0F; @@ -33,6 +39,7 @@ class Constants { // Strings public static final MENU_ITEM_0_STRING:String = "Cavalier·e·s"; public static final MENU_ITEM_1_STRING:String = "Licences FFE"; + public static final RIDERS_LIST_CREDIT_TEXT:String = "Crédit: "; // UI // number of rows in RidersList diff --git a/src/view/RidersList.hx b/src/view/RidersList.hx index 06e807b..a2df72e 100644 --- a/src/view/RidersList.hx +++ b/src/view/RidersList.hx @@ -1,27 +1,24 @@ package view; +import components.RidersListRendererAccessory; import components.RoundAvatar; -import components.RidersListRendererDecoration; -import openfl.display.Shape; +import feathers.controls.ListView; +import feathers.controls.dataRenderers.ItemRenderer; +import feathers.data.ListViewItemState; +import feathers.events.FeathersEvent; +import feathers.text.TextFormat; +import feathers.utils.DisplayObjectRecycler; +import model.AppModelLocator; import model.Constants; import openfl.Assets; -import openfl.text.Font; -import feathers.text.TextFormat; -import vo.RiderVO; -import uuid.Uuid; -import feathers.controls.AssetLoader; -import feathers.data.ListViewItemState; -import feathers.controls.dataRenderers.ItemRenderer; -import feathers.utils.DisplayObjectRecycler; -import feathers.layout.AutoSizeMode; -import feathers.controls.ListView; -import feathers.events.FeathersEvent; -import model.AppModelLocator; import openfl.events.Event; +import openfl.text.Font; import t9.util.ColorTraces.*; +import vo.RiderVO; class RidersList extends ListView { private var model = AppModelLocator.getInstance(); + private var rowHeight:Int; public function new() { super(); @@ -33,10 +30,12 @@ class RidersList extends ListView { // set common properties for all renderers in the same container here var recycler = DisplayObjectRecycler.withFunction(() -> { + final fnt1:Font = Assets.getFont(Constants.MONTSERRAT_MEDIUM_500); final fnt2:Font = Assets.getFont(Constants.MONTSERRAT_BOLD_700); - var rowHeight:Int = Std.int(height / Constants.RIDERS_LIST_ROWS_COUNT); + rowHeight = Std.int(height / Constants.RIDERS_LIST_ROWS_COUNT); + var itemRenderer = new ItemRenderer(); itemRenderer.height = rowHeight; itemRenderer.icon = new RoundAvatar(Std.int(rowHeight * 0.9)); @@ -44,6 +43,7 @@ class RidersList extends ListView { itemRenderer.secondaryTextFormat = new TextFormat(fnt2.fontName, Std.int(rowHeight * 0.2), Constants.MAIN_COLOR2); return itemRenderer; + }); itemRendererRecycler = recycler; @@ -53,14 +53,13 @@ class RidersList extends ListView { itemRenderer.text = rider.firstName; itemRenderer.secondaryText = rider.name; - var ra:RoundAvatar = cast(itemRenderer.icon, RoundAvatar); + var rlra:RidersListRendererAccessory = new RidersListRendererAccessory(Std.int(rowHeight * 0.8), rider.credit); + itemRenderer.accessoryView = rlra; // TODO change this to real iamge path // loader.source = "https://lepetittrot.com/path/to/pp_pictures" + state.data.id + ".jpg"; // loader.source = "https://testingbot.com/free-online-tools/random-avatar/50?u=" + Uuid.nanoId(); - var rlrd:RidersListRendererDecoration = new RidersListRendererDecoration(); - itemRenderer.accessoryView = rlrd; }; recycler.reset = (itemRenderer:ItemRenderer, state:ListViewItemState) -> {