[refactoring] add DataList

This commit is contained in:
2020-09-25 15:17:46 +03:00
parent fd73c6171a
commit 5e22d45d01
12 changed files with 75 additions and 78 deletions

View File

@@ -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();

View File

@@ -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}');
}

View File

@@ -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

View File

@@ -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<ImageId, ImageIdView>;
@:provide var switcher:FrameSwitcher;
@:provide var sourceBundle:ImageSourceBundle;
@:provide var gameStorage:GameStorage;

View File

@@ -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

View File

@@ -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<ImageId, ImageIdView>;
@:view("paginator") var paginatorView:PaginatorView;
private var loading:LoadingWrapper;
@:provide var switcher:FrameSwitcher;
public var data(default, set):DataPage<ImageId>;
public var onImageSelect(default, null):Signal<ImageId> = new Signal();
private function set_data(value:DataPage<ImageId>):DataPage<ImageId> {
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: [],
};
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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<T, V:View<Dynamic>> extends VGroupView {
public var source:DataSource<T>;
public var page:Page;
@:view public var list(default, null):DataView<T, V>;
@:view private var paginator:PaginatorView;
private var loading:LoadingWrapper;
public var data(default, set):DataPage<T>;
private function set_data(value:DataPage<T>):DataPage<T> {
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: [],
};
}
}

View File

@@ -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) -> {

View File

@@ -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;

View File

@@ -1,4 +1,4 @@
package ru.m.puzzlez.view.common;
package ru.m.view;
import ru.m.data.DataSource;
import hw.signal.Signal;