From 5e22d45d01fb5542839ee38f5b479efba10f38b8 Mon Sep 17 00:00:00 2001 From: shmyga Date: Fri, 25 Sep 2020 15:17:46 +0300 Subject: [PATCH] [refactoring] add DataList --- src/app/haxe/ru/m/puzzlez/render/Render.hx | 5 +- .../haxe/ru/m/puzzlez/settings/Settings.hx | 12 ++++ src/app/haxe/ru/m/puzzlez/view/GameFrame.yaml | 3 +- .../ru/m/puzzlez/view/ImageSourceFrame.hx | 5 +- .../ru/m/puzzlez/view/ImageSourceFrame.yaml | 5 +- .../ru/m/puzzlez/view/common/ImageDataList.hx | 63 ------------------- .../ru/m/puzzlez/view/common/ImageIdView.hx | 1 + .../ru/m/puzzlez/view/common/PresetView.hx | 1 + src/app/haxe/ru/m/view/DataList.hx | 47 ++++++++++++++ .../ImageDataList.yaml => view/DataList.yaml} | 6 +- .../ru/m/{puzzlez => }/view/LoadingWrapper.hx | 3 +- .../view/common => view}/PaginatorView.hx | 2 +- 12 files changed, 75 insertions(+), 78 deletions(-) delete mode 100644 src/app/haxe/ru/m/puzzlez/view/common/ImageDataList.hx create mode 100644 src/app/haxe/ru/m/view/DataList.hx rename src/app/haxe/ru/m/{puzzlez/view/common/ImageDataList.yaml => view/DataList.yaml} (68%) rename src/app/haxe/ru/m/{puzzlez => }/view/LoadingWrapper.hx (97%) rename src/app/haxe/ru/m/{puzzlez/view/common => view}/PaginatorView.hx (98%) diff --git a/src/app/haxe/ru/m/puzzlez/render/Render.hx b/src/app/haxe/ru/m/puzzlez/render/Render.hx index 8f8ad0e..50da822 100644 --- a/src/app/haxe/ru/m/puzzlez/render/Render.hx +++ b/src/app/haxe/ru/m/puzzlez/render/Render.hx @@ -1,6 +1,5 @@ package ru.m.puzzlez.render; -import ru.m.puzzlez.image.ImageData; import flash.display.BitmapData; import flash.display.PNGEncoderOptions; import flash.display.Sprite; @@ -12,6 +11,7 @@ import flash.utils.ByteArray; import hw.signal.Signal; import hw.view.popup.AlertView; import hw.view.SpriteView; +import ru.m.puzzlez.image.ImageData; import ru.m.puzzlez.proto.event.gameaction.Action; import ru.m.puzzlez.proto.event.GameAction; import ru.m.puzzlez.proto.event.GameEvent; @@ -61,13 +61,12 @@ class Render extends SpriteView implements IRender { private var movePoint:FlashPoint; - //@:provide var imageStorage:ImageStorage; - public function new() { super(); container = new Sprite(); content.addChild(container); manager = new RenderManager(content, container); + manager.locked = settings.locked; progress = new ProgressView(); actions = new Signal(); tableView = new Sprite(); diff --git a/src/app/haxe/ru/m/puzzlez/settings/Settings.hx b/src/app/haxe/ru/m/puzzlez/settings/Settings.hx index 49bbdaa..06d126e 100644 --- a/src/app/haxe/ru/m/puzzlez/settings/Settings.hx +++ b/src/app/haxe/ru/m/puzzlez/settings/Settings.hx @@ -6,6 +6,7 @@ import ru.m.puzzlez.render.Background; @:provide class Settings extends SharedObjectStorage { private inline static var VERSION = 2; private inline static var BACKGROUND_KEY = "background"; + private inline static var LOCKED_KEY = "locked"; public var background(get, set):Background; @@ -18,6 +19,17 @@ import ru.m.puzzlez.render.Background; return value; } + public var locked(get, set):Bool; + + private inline function get_locked():Bool { + return exists(LOCKED_KEY) ? read(LOCKED_KEY) : false; + } + + private inline function set_locked(value:Bool):Bool { + write(LOCKED_KEY, value); + return value; + } + public function new() { super('setting/${VERSION}'); } diff --git a/src/app/haxe/ru/m/puzzlez/view/GameFrame.yaml b/src/app/haxe/ru/m/puzzlez/view/GameFrame.yaml index fc8ad53..984ed2c 100644 --- a/src/app/haxe/ru/m/puzzlez/view/GameFrame.yaml +++ b/src/app/haxe/ru/m/puzzlez/view/GameFrame.yaml @@ -15,10 +15,11 @@ views: geometry.stretch: true - $type: hw.view.form.ToggleButtonView style: icon.lock - on: true + on: ~!settings.locked +onPress: | ~button -> { render.manager.locked = !render.manager.locked; + settings.locked = render.manager.locked; cast(button, hw.view.form.ToggleButtonView).on = !render.manager.locked; } - $type: hw.view.form.ButtonView diff --git a/src/app/haxe/ru/m/puzzlez/view/ImageSourceFrame.hx b/src/app/haxe/ru/m/puzzlez/view/ImageSourceFrame.hx index 1a8b12f..210c905 100644 --- a/src/app/haxe/ru/m/puzzlez/view/ImageSourceFrame.hx +++ b/src/app/haxe/ru/m/puzzlez/view/ImageSourceFrame.hx @@ -1,5 +1,7 @@ package ru.m.puzzlez.view; +import ru.m.puzzlez.view.common.ImageIdView; +import ru.m.view.DataList; import ru.m.puzzlez.storage.GameStorage; import hw.view.form.LabelView; import hw.view.frame.FrameSwitcher; @@ -7,7 +9,6 @@ import hw.view.frame.FrameView; import ru.m.data.DataSource; import ru.m.puzzlez.image.ImageSourceBundle; import ru.m.puzzlez.proto.game.ImageId; -import ru.m.puzzlez.view.common.ImageDataList; typedef ImageSourceConfig = { var title:String; @@ -19,7 +20,7 @@ typedef ImageSourceConfig = { public static var ID = "source"; @:view var header:LabelView; - @:view var images:ImageDataList; + @:view var images:DataList; @:provide var switcher:FrameSwitcher; @:provide var sourceBundle:ImageSourceBundle; @:provide var gameStorage:GameStorage; diff --git a/src/app/haxe/ru/m/puzzlez/view/ImageSourceFrame.yaml b/src/app/haxe/ru/m/puzzlez/view/ImageSourceFrame.yaml index 7165c7e..ee809e2 100644 --- a/src/app/haxe/ru/m/puzzlez/view/ImageSourceFrame.yaml +++ b/src/app/haxe/ru/m/puzzlez/view/ImageSourceFrame.yaml @@ -5,9 +5,10 @@ views: $type: hw.view.form.LabelView style: label.header - id: images - $type: ru.m.puzzlez.view.common.ImageDataList + $type: ru.m.view.DataList geometry.stretch: true - +onImageSelect: ~start + list.factory: ~ru.m.puzzlez.view.common.ImageIdView.factory + +list.onDataSelect: ~start - $type: hw.view.form.ButtonView text: Back geometry.position: absolute diff --git a/src/app/haxe/ru/m/puzzlez/view/common/ImageDataList.hx b/src/app/haxe/ru/m/puzzlez/view/common/ImageDataList.hx deleted file mode 100644 index 4ff15e2..0000000 --- a/src/app/haxe/ru/m/puzzlez/view/common/ImageDataList.hx +++ /dev/null @@ -1,63 +0,0 @@ -package ru.m.puzzlez.view.common; - -import hw.signal.Signal; -import hw.view.data.DataView; -import hw.view.form.ToggleButtonView; -import hw.view.frame.FrameSwitcher; -import hw.view.group.VGroupView; -import ru.m.data.DataSource.DataPage; -import ru.m.data.DataSource.Page; -import ru.m.puzzlez.image.ImageSource; -import ru.m.puzzlez.proto.game.ImageId; - -@:template class ImageDataList extends VGroupView { - - public var source:ImageSource; - public var page:Page; - - @:view("images") var imagesView:DataView; - @:view("paginator") var paginatorView:PaginatorView; - private var loading:LoadingWrapper; - - @:provide var switcher:FrameSwitcher; - - public var data(default, set):DataPage; - - public var onImageSelect(default, null):Signal = new Signal(); - - private function set_data(value:DataPage):DataPage { - data = value; - imagesView.data = data.data; - paginatorView.page = data; - for (view in imagesView.dataViews) { - view.onChange.connect(_ -> refresh()); - } - return data; - } - - public function new() { - super(); - loading = new LoadingWrapper(imagesView); - page = {index: 0, count: 6, order: [{field: "date", reverse: true}]}; - } - - private function pageFactory(index:Int, value:Int):ToggleButtonView { - var result = new ToggleButtonView(); - result.text = '${value}'; - result.on = data.page.index == value; - return result; - } - - public function refresh():Void { - loading.promise = source.getPage(page).then(data -> this.data = data); - } - - public function reset():Void { - page.index = 0; - data = { - page: page, - total: 0, - data: [], - }; - } -} diff --git a/src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.hx b/src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.hx index 12d0841..7fdaf79 100644 --- a/src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.hx +++ b/src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.hx @@ -1,5 +1,6 @@ package ru.m.puzzlez.view.common; +import ru.m.view.LoadingWrapper; import ru.m.puzzlez.image.GameUtil; import hw.view.popup.ConfirmView; import hw.signal.Signal; diff --git a/src/app/haxe/ru/m/puzzlez/view/common/PresetView.hx b/src/app/haxe/ru/m/puzzlez/view/common/PresetView.hx index e84616f..f8de7e9 100644 --- a/src/app/haxe/ru/m/puzzlez/view/common/PresetView.hx +++ b/src/app/haxe/ru/m/puzzlez/view/common/PresetView.hx @@ -1,5 +1,6 @@ package ru.m.puzzlez.view.common; +import ru.m.view.LoadingWrapper; import flash.display.BitmapData; import flash.display.Graphics; import flash.display.Shape; diff --git a/src/app/haxe/ru/m/view/DataList.hx b/src/app/haxe/ru/m/view/DataList.hx new file mode 100644 index 0000000..61fd544 --- /dev/null +++ b/src/app/haxe/ru/m/view/DataList.hx @@ -0,0 +1,47 @@ +package ru.m.view; + +import hw.view.data.DataView; +import hw.view.group.VGroupView; +import hw.view.View; +import ru.m.data.DataSource; +import ru.m.view.LoadingWrapper; + +@:template class DataList> extends VGroupView { + + public var source:DataSource; + public var page:Page; + + @:view public var list(default, null):DataView; + @:view private var paginator:PaginatorView; + private var loading:LoadingWrapper; + + public var data(default, set):DataPage; + + private function set_data(value:DataPage):DataPage { + data = value; + list.data = data.data; + paginator.page = data; + return data; + } + + public function new() { + super(); + trace("list", list); + trace("paginator", paginator); + loading = new LoadingWrapper(list); + page = {index: 0, count: 6, order: [{field: "date", reverse: true}]}; + } + + public function refresh():Void { + loading.promise = source.getPage(page).then(data -> this.data = data); + } + + public function reset():Void { + page.index = 0; + data = { + page: page, + total: 0, + data: [], + }; + } +} diff --git a/src/app/haxe/ru/m/puzzlez/view/common/ImageDataList.yaml b/src/app/haxe/ru/m/view/DataList.yaml similarity index 68% rename from src/app/haxe/ru/m/puzzlez/view/common/ImageDataList.yaml rename to src/app/haxe/ru/m/view/DataList.yaml index 80609c3..97cd549 100644 --- a/src/app/haxe/ru/m/puzzlez/view/common/ImageDataList.yaml +++ b/src/app/haxe/ru/m/view/DataList.yaml @@ -1,6 +1,6 @@ --- views: - - id: images + - id: list $type: hw.view.data.DataView layout: $type: hw.view.layout.TailLayout @@ -8,12 +8,10 @@ views: margin: 5 vAlign: middle geometry.stretch: true - factory: ~ru.m.puzzlez.view.common.ImageIdView.factory - +onDataSelect: ~onImageSelect.emit geometry.margin: 5 overflow.y: scroll - id: paginator - $type: ru.m.puzzlez.view.common.PaginatorView + $type: ru.m.view.PaginatorView geometry.width: 100% +onPageSelect: | ~(index) -> { diff --git a/src/app/haxe/ru/m/puzzlez/view/LoadingWrapper.hx b/src/app/haxe/ru/m/view/LoadingWrapper.hx similarity index 97% rename from src/app/haxe/ru/m/puzzlez/view/LoadingWrapper.hx rename to src/app/haxe/ru/m/view/LoadingWrapper.hx index a202dd4..eeb1e5a 100644 --- a/src/app/haxe/ru/m/puzzlez/view/LoadingWrapper.hx +++ b/src/app/haxe/ru/m/view/LoadingWrapper.hx @@ -1,7 +1,6 @@ -package ru.m.puzzlez.view; +package ru.m.view; import hw.view.form.LabelView; -import flash.text.TextFormatAlign; import hw.view.geometry.HAlign; import hw.view.geometry.Position; import hw.view.geometry.VAlign; diff --git a/src/app/haxe/ru/m/puzzlez/view/common/PaginatorView.hx b/src/app/haxe/ru/m/view/PaginatorView.hx similarity index 98% rename from src/app/haxe/ru/m/puzzlez/view/common/PaginatorView.hx rename to src/app/haxe/ru/m/view/PaginatorView.hx index 2b3c3da..037aef7 100644 --- a/src/app/haxe/ru/m/puzzlez/view/common/PaginatorView.hx +++ b/src/app/haxe/ru/m/view/PaginatorView.hx @@ -1,4 +1,4 @@ -package ru.m.puzzlez.view.common; +package ru.m.view; import ru.m.data.DataSource; import hw.signal.Signal;