[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; package ru.m.puzzlez.render;
import ru.m.puzzlez.image.ImageData;
import flash.display.BitmapData; import flash.display.BitmapData;
import flash.display.PNGEncoderOptions; import flash.display.PNGEncoderOptions;
import flash.display.Sprite; import flash.display.Sprite;
@@ -12,6 +11,7 @@ import flash.utils.ByteArray;
import hw.signal.Signal; import hw.signal.Signal;
import hw.view.popup.AlertView; import hw.view.popup.AlertView;
import hw.view.SpriteView; 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.Action;
import ru.m.puzzlez.proto.event.GameAction; import ru.m.puzzlez.proto.event.GameAction;
import ru.m.puzzlez.proto.event.GameEvent; import ru.m.puzzlez.proto.event.GameEvent;
@@ -61,13 +61,12 @@ class Render extends SpriteView implements IRender {
private var movePoint:FlashPoint; private var movePoint:FlashPoint;
//@:provide var imageStorage:ImageStorage;
public function new() { public function new() {
super(); super();
container = new Sprite(); container = new Sprite();
content.addChild(container); content.addChild(container);
manager = new RenderManager(content, container); manager = new RenderManager(content, container);
manager.locked = settings.locked;
progress = new ProgressView(); progress = new ProgressView();
actions = new Signal(); actions = new Signal();
tableView = new Sprite(); tableView = new Sprite();

View File

@@ -6,6 +6,7 @@ import ru.m.puzzlez.render.Background;
@:provide class Settings extends SharedObjectStorage { @:provide class Settings extends SharedObjectStorage {
private inline static var VERSION = 2; private inline static var VERSION = 2;
private inline static var BACKGROUND_KEY = "background"; private inline static var BACKGROUND_KEY = "background";
private inline static var LOCKED_KEY = "locked";
public var background(get, set):Background; public var background(get, set):Background;
@@ -18,6 +19,17 @@ import ru.m.puzzlez.render.Background;
return value; 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() { public function new() {
super('setting/${VERSION}'); super('setting/${VERSION}');
} }

View File

@@ -15,10 +15,11 @@ views:
geometry.stretch: true geometry.stretch: true
- $type: hw.view.form.ToggleButtonView - $type: hw.view.form.ToggleButtonView
style: icon.lock style: icon.lock
on: true on: ~!settings.locked
+onPress: | +onPress: |
~button -> { ~button -> {
render.manager.locked = !render.manager.locked; render.manager.locked = !render.manager.locked;
settings.locked = render.manager.locked;
cast(button, hw.view.form.ToggleButtonView).on = !render.manager.locked; cast(button, hw.view.form.ToggleButtonView).on = !render.manager.locked;
} }
- $type: hw.view.form.ButtonView - $type: hw.view.form.ButtonView

View File

@@ -1,5 +1,7 @@
package ru.m.puzzlez.view; package ru.m.puzzlez.view;
import ru.m.puzzlez.view.common.ImageIdView;
import ru.m.view.DataList;
import ru.m.puzzlez.storage.GameStorage; import ru.m.puzzlez.storage.GameStorage;
import hw.view.form.LabelView; import hw.view.form.LabelView;
import hw.view.frame.FrameSwitcher; import hw.view.frame.FrameSwitcher;
@@ -7,7 +9,6 @@ import hw.view.frame.FrameView;
import ru.m.data.DataSource; import ru.m.data.DataSource;
import ru.m.puzzlez.image.ImageSourceBundle; import ru.m.puzzlez.image.ImageSourceBundle;
import ru.m.puzzlez.proto.game.ImageId; import ru.m.puzzlez.proto.game.ImageId;
import ru.m.puzzlez.view.common.ImageDataList;
typedef ImageSourceConfig = { typedef ImageSourceConfig = {
var title:String; var title:String;
@@ -19,7 +20,7 @@ typedef ImageSourceConfig = {
public static var ID = "source"; public static var ID = "source";
@:view var header:LabelView; @:view var header:LabelView;
@:view var images:ImageDataList; @:view var images:DataList<ImageId, ImageIdView>;
@:provide var switcher:FrameSwitcher; @:provide var switcher:FrameSwitcher;
@:provide var sourceBundle:ImageSourceBundle; @:provide var sourceBundle:ImageSourceBundle;
@:provide var gameStorage:GameStorage; @:provide var gameStorage:GameStorage;

View File

@@ -5,9 +5,10 @@ views:
$type: hw.view.form.LabelView $type: hw.view.form.LabelView
style: label.header style: label.header
- id: images - id: images
$type: ru.m.puzzlez.view.common.ImageDataList $type: ru.m.view.DataList
geometry.stretch: true geometry.stretch: true
+onImageSelect: ~start list.factory: ~ru.m.puzzlez.view.common.ImageIdView.factory
+list.onDataSelect: ~start
- $type: hw.view.form.ButtonView - $type: hw.view.form.ButtonView
text: Back text: Back
geometry.position: absolute 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; package ru.m.puzzlez.view.common;
import ru.m.view.LoadingWrapper;
import ru.m.puzzlez.image.GameUtil; import ru.m.puzzlez.image.GameUtil;
import hw.view.popup.ConfirmView; import hw.view.popup.ConfirmView;
import hw.signal.Signal; import hw.signal.Signal;

View File

@@ -1,5 +1,6 @@
package ru.m.puzzlez.view.common; package ru.m.puzzlez.view.common;
import ru.m.view.LoadingWrapper;
import flash.display.BitmapData; import flash.display.BitmapData;
import flash.display.Graphics; import flash.display.Graphics;
import flash.display.Shape; 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: views:
- id: images - id: list
$type: hw.view.data.DataView $type: hw.view.data.DataView
layout: layout:
$type: hw.view.layout.TailLayout $type: hw.view.layout.TailLayout
@@ -8,12 +8,10 @@ views:
margin: 5 margin: 5
vAlign: middle vAlign: middle
geometry.stretch: true geometry.stretch: true
factory: ~ru.m.puzzlez.view.common.ImageIdView.factory
+onDataSelect: ~onImageSelect.emit
geometry.margin: 5 geometry.margin: 5
overflow.y: scroll overflow.y: scroll
- id: paginator - id: paginator
$type: ru.m.puzzlez.view.common.PaginatorView $type: ru.m.view.PaginatorView
geometry.width: 100% geometry.width: 100%
+onPageSelect: | +onPageSelect: |
~(index) -> { ~(index) -> {

View File

@@ -1,7 +1,6 @@
package ru.m.puzzlez.view; package ru.m.view;
import hw.view.form.LabelView; import hw.view.form.LabelView;
import flash.text.TextFormatAlign;
import hw.view.geometry.HAlign; import hw.view.geometry.HAlign;
import hw.view.geometry.Position; import hw.view.geometry.Position;
import hw.view.geometry.VAlign; 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 ru.m.data.DataSource;
import hw.signal.Signal; import hw.signal.Signal;