[refactoring] add DataList
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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}');
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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: [],
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
47
src/app/haxe/ru/m/view/DataList.hx
Normal file
47
src/app/haxe/ru/m/view/DataList.hx
Normal 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: [],
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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) -> {
|
||||
@@ -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;
|
||||
@@ -1,4 +1,4 @@
|
||||
package ru.m.puzzlez.view.common;
|
||||
package ru.m.view;
|
||||
|
||||
import ru.m.data.DataSource;
|
||||
import hw.signal.Signal;
|
||||
Reference in New Issue
Block a user