[refactoring] update ImageIdView

This commit is contained in:
2020-09-10 16:36:01 +03:00
parent 7c97a17f43
commit fd73c6171a
4 changed files with 67 additions and 1 deletions

View File

@@ -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;
} }

View File

@@ -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);
} }

View File

@@ -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()

View File

@@ -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);
} }
} }