[refactoring] update ImageIdView
This commit is contained in:
@@ -29,6 +29,9 @@ import ru.m.puzzlez.proto.game.ImageId;
|
||||
data = value;
|
||||
imagesView.data = data.data;
|
||||
paginatorView.page = data;
|
||||
for (view in imagesView.dataViews) {
|
||||
view.onChange.connect(_ -> refresh());
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,20 +1,52 @@
|
||||
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.ImageView;
|
||||
import ru.m.puzzlez.image.ImageData;
|
||||
import ru.m.puzzlez.proto.game.ImageId;
|
||||
import ru.m.puzzlez.storage.FileStorage;
|
||||
import ru.m.puzzlez.storage.GameStorage;
|
||||
|
||||
@:template class ImageIdView extends GroupView {
|
||||
public var imageId(default, set):ImageId;
|
||||
private function set_imageId(value:ImageId):ImageId {
|
||||
imageId = value;
|
||||
labelView.text = "";
|
||||
cleanButton.visible = false;
|
||||
removeButton.visible = false;
|
||||
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;
|
||||
}
|
||||
|
||||
@:view("image") var imageView:ImageView;
|
||||
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) {
|
||||
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 {
|
||||
return new ImageIdView(value);
|
||||
}
|
||||
|
||||
@@ -6,3 +6,17 @@ views:
|
||||
geometry.stretch: true
|
||||
stretch: false
|
||||
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);
|
||||
if (Reflect.hasField(dataObject.data, DATA_KEY)) {
|
||||
dataObject.clear();
|
||||
Reflect.deleteField(indexObject.data, helper.idKey(id));
|
||||
indexObject.flush();
|
||||
return Promise.promise(true);
|
||||
}
|
||||
Reflect.deleteField(dataObject.data, helper.idKey(id));
|
||||
return Promise.promise(false);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user