[refactoring] add DataList
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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}');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
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:
|
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) -> {
|
||||||
@@ -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;
|
||||||
@@ -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;
|
||||||
Reference in New Issue
Block a user