[refactoring] update ImageIdView
This commit is contained in:
@@ -29,6 +29,9 @@ import ru.m.puzzlez.proto.game.ImageId;
|
|||||||
data = value;
|
data = value;
|
||||||
imagesView.data = data.data;
|
imagesView.data = data.data;
|
||||||
paginatorView.page = data;
|
paginatorView.page = data;
|
||||||
|
for (view in imagesView.dataViews) {
|
||||||
|
view.onChange.connect(_ -> refresh());
|
||||||
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,20 +1,52 @@
|
|||||||
package ru.m.puzzlez.view.common;
|
package ru.m.puzzlez.view.common;
|
||||||
|
|
||||||
|
import ru.m.puzzlez.image.GameUtil;
|
||||||
|
import hw.view.popup.ConfirmView;
|
||||||
|
import hw.signal.Signal;
|
||||||
|
import hw.view.form.LabelView;
|
||||||
|
import hw.view.form.ButtonView;
|
||||||
import hw.view.group.GroupView;
|
import hw.view.group.GroupView;
|
||||||
import hw.view.ImageView;
|
import hw.view.ImageView;
|
||||||
import ru.m.puzzlez.image.ImageData;
|
import ru.m.puzzlez.image.ImageData;
|
||||||
import ru.m.puzzlez.proto.game.ImageId;
|
import ru.m.puzzlez.proto.game.ImageId;
|
||||||
|
import ru.m.puzzlez.storage.FileStorage;
|
||||||
|
import ru.m.puzzlez.storage.GameStorage;
|
||||||
|
|
||||||
@:template class ImageIdView extends GroupView {
|
@:template class ImageIdView extends GroupView {
|
||||||
public var imageId(default, set):ImageId;
|
public var imageId(default, set):ImageId;
|
||||||
private function set_imageId(value:ImageId):ImageId {
|
private function set_imageId(value:ImageId):ImageId {
|
||||||
imageId = value;
|
imageId = value;
|
||||||
|
labelView.text = "";
|
||||||
|
cleanButton.visible = false;
|
||||||
|
removeButton.visible = false;
|
||||||
loading.promise = ImageData.fromImageId(imageId).resolve().then(data -> this.imageView.image = data);
|
loading.promise = ImageData.fromImageId(imageId).resolve().then(data -> this.imageView.image = data);
|
||||||
|
gameStorage.get(imageId).then(state -> {
|
||||||
|
if (state != null) {
|
||||||
|
var progress = GameUtil.calcProgress(state);
|
||||||
|
labelView.text = '${progress.complete}/${progress.total}';
|
||||||
|
cleanButton.visible = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (imageId.source == "file") {
|
||||||
|
fileStorage.get(imageId.id).then(value -> {
|
||||||
|
if (value != null) {
|
||||||
|
removeButton.visible = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
return imageId;
|
return imageId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@:view("image") var imageView:ImageView;
|
@:view("image") var imageView:ImageView;
|
||||||
private var loading:LoadingWrapper;
|
private var loading:LoadingWrapper;
|
||||||
|
@:view("label") var labelView:LabelView;
|
||||||
|
@:view("remove") var removeButton:ButtonView;
|
||||||
|
@:view("clean") var cleanButton:ButtonView;
|
||||||
|
|
||||||
|
@:provide private var fileStorage:FileStorage;
|
||||||
|
@:provide private var gameStorage:GameStorage;
|
||||||
|
|
||||||
|
public var onChange(default, null):Signal<Bool> = new Signal();
|
||||||
|
|
||||||
public function new(imageId:ImageId = null) {
|
public function new(imageId:ImageId = null) {
|
||||||
super();
|
super();
|
||||||
@@ -24,6 +56,22 @@ import ru.m.puzzlez.proto.game.ImageId;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function removeImage():Void {
|
||||||
|
ConfirmView.confirm("Remove image?").then(result -> {
|
||||||
|
if (result) {
|
||||||
|
fileStorage.delete(imageId.id).then(_ -> onChange.emit(true));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private function cleanGame():Void {
|
||||||
|
ConfirmView.confirm("Remove game?").then(result -> {
|
||||||
|
if (result) {
|
||||||
|
gameStorage.delete(imageId).then(_ -> onChange.emit(true));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public static function factory(index:Int, value:ImageId):ImageIdView {
|
public static function factory(index:Int, value:ImageId):ImageIdView {
|
||||||
return new ImageIdView(value);
|
return new ImageIdView(value);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,3 +6,17 @@ views:
|
|||||||
geometry.stretch: true
|
geometry.stretch: true
|
||||||
stretch: false
|
stretch: false
|
||||||
fillType: COVER
|
fillType: COVER
|
||||||
|
- id: label
|
||||||
|
$type: hw.view.form.LabelView
|
||||||
|
- id: remove
|
||||||
|
$type: hw.view.form.ButtonView
|
||||||
|
visible: false
|
||||||
|
propagation: false
|
||||||
|
style: icon.control.small.close.red
|
||||||
|
+onPress: ~removeImage()
|
||||||
|
- id: clean
|
||||||
|
$type: hw.view.form.ButtonView
|
||||||
|
visible: false
|
||||||
|
propagation: false
|
||||||
|
style: icon.control.small.close.orange
|
||||||
|
+onPress: ~cleanGame()
|
||||||
|
|||||||
@@ -168,9 +168,10 @@ class SharedObjectDataStorage<D, I> implements DataStorage<D, I> {
|
|||||||
var dataObject = resolveDataObject(id);
|
var dataObject = resolveDataObject(id);
|
||||||
if (Reflect.hasField(dataObject.data, DATA_KEY)) {
|
if (Reflect.hasField(dataObject.data, DATA_KEY)) {
|
||||||
dataObject.clear();
|
dataObject.clear();
|
||||||
|
Reflect.deleteField(indexObject.data, helper.idKey(id));
|
||||||
|
indexObject.flush();
|
||||||
return Promise.promise(true);
|
return Promise.promise(true);
|
||||||
}
|
}
|
||||||
Reflect.deleteField(dataObject.data, helper.idKey(id));
|
|
||||||
return Promise.promise(false);
|
return Promise.promise(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user