Ver código fonte

catch original load error

Johann ELSASS 5 anos atrás
pai
commit
3064b8b70a

+ 10 - 0
lazpaint/image/uimage.pas

@@ -106,6 +106,8 @@ type
       AOriginal: TBGRALayerCustomOriginal; var ADiff: TBGRAOriginalDiff);
     procedure OriginalEditingChange({%H-}ASender: TObject;
       {%H-}AOriginal: TBGRALayerCustomOriginal);
+    procedure OriginalLoadError(ASender: TObject; AError: string;
+      var ARaise: boolean);
     procedure SetBlendOperation(AIndex: integer; AValue: TBlendOperation);
     procedure SetCurrentFilenameUTF8(AValue: string);
     procedure LayeredBitmapReplaced;
@@ -1099,6 +1101,13 @@ begin
   OnImageChanged.NotifyObservers;
 end;
 
+procedure TLazPaintImage.OriginalLoadError(ASender: TObject; AError: string;
+  var ARaise: boolean);
+begin
+  MessagePopup(rsErrorLoadingOriginal, 4000);
+  ARaise := false;
+end;
+
 procedure TLazPaintImage.Redo;
 var diff: TCustomImageDifference;
 begin
@@ -2355,6 +2364,7 @@ begin
   FCurrentState := TImageState.Create;
   FCurrentState.OnOriginalChange:= @OriginalChange;
   FCurrentState.OnOriginalEditingChange:= @OriginalEditingChange;
+  FCurrentState.OnOriginalLoadError:=@OriginalLoadError;
   FCurrentState.OnActionProgress:= @LayeredActionProgress;
   FCurrentState.OnActionDone:=@LayeredActionDone;
   FRenderUpdateRectInPicCoord := rect(0,0,0,0);

+ 13 - 0
lazpaint/image/uimagestate.pas

@@ -21,6 +21,7 @@ type
     FOnActionProgress: TLayeredActionProgressEvent;
     FOnOriginalChange: TEmbeddedOriginalChangeEvent;
     FOnOriginalEditingChange: TEmbeddedOriginalEditingChangeEvent;
+    FOnOriginalLoadError: TEmbeddedOriginalLoadErrorEvent;
     FSelectionMask: TBGRABitmap;
     FLastSelectionMaskBoundsIsDefined,
     FLastSelectionLayerBoundsIsDefined: TBoundsState;
@@ -53,6 +54,8 @@ type
       AOriginal: TBGRALayerCustomOriginal; var ADiff: TBGRAOriginalDiff);
     procedure OriginalEditingChange({%H-}ASender: TObject;
       AOriginal: TBGRALayerCustomOriginal);
+    procedure OriginalLoadError(ASender: TObject; AError: string;
+      var ARaise: boolean);
     procedure SelectImageLayer(AValue: TBGRABitmap);
     procedure SelectImageLayerByIndex(AValue: integer);
     procedure SetLayeredBitmap(AValue: TBGRALayeredBitmap);
@@ -179,6 +182,7 @@ type
     property SelectionTransform: TAffineMatrix read FSelectionTransform write FSelectionTransform;
     property OnOriginalChange: TEmbeddedOriginalChangeEvent read FOnOriginalChange write FOnOriginalChange;
     property OnOriginalEditingChange: TEmbeddedOriginalEditingChangeEvent read FOnOriginalEditingChange write FOnOriginalEditingChange;
+    property OnOriginalLoadError: TEmbeddedOriginalLoadErrorEvent read FOnOriginalLoadError write FOnOriginalLoadError;
     property OnActionProgress: TLayeredActionProgressEvent read FOnActionProgress write SetOnActionProgress;
     property OnActionDone: TNotifyEvent read FOnActionDone write SetOnActionDone;
   end;
@@ -400,6 +404,13 @@ begin
     FOnOriginalEditingChange(self, AOriginal);
 end;
 
+procedure TImageState.OriginalLoadError(ASender: TObject; AError: string;
+  var ARaise: boolean);
+begin
+  If Assigned(FOnOriginalLoadError) then
+    FOnOriginalLoadError(self, AError, ARaise);
+end;
+
 procedure TImageState.SelectImageLayer(AValue: TBGRABitmap);
 var
   i: Integer;
@@ -437,6 +448,7 @@ begin
     FLayeredBitmap.OnOriginalEditingChange:= nil;
     FLayeredBitmap.OnActionProgress:= nil;
     FLayeredBitmap.OnActionDone:= nil;
+    FLayeredBitmap.OnOriginalLoadError:= nil;
   end;
   FLayeredBitmap:=AValue;
   if Assigned(FLayeredBitmap) then
@@ -445,6 +457,7 @@ begin
     FLayeredBitmap.OnOriginalEditingChange:= @OriginalEditingChange;
     FLayeredBitmap.OnActionProgress:= @LayeredActionProgress;
     FLayeredBitmap.OnActionDone:=@LayeredActionDone;
+    FLayeredBitmap.OnOriginalLoadError:=@OriginalLoadError;
   end;
 end;
 

+ 9 - 4
lazpaint/tools/utoolvectorial.pas

@@ -1162,6 +1162,8 @@ begin
 end;
 
 constructor TEditShapeTool.Create(AManager: TToolManager);
+var
+  orig: TVectorOriginal;
 begin
   inherited Create(AManager);
   FRectEditor := nil;
@@ -1170,14 +1172,17 @@ begin
   FIsEditingGradient:= false;
   FLeftButton:= false;
   FRightButton:= false;
+  if GetCurrentLayerKind = lkVectorial then
+    orig := GetVectorOriginal
+    else orig := nil;
   if not Manager.Image.SelectionMaskEmpty then
   begin
-    if (GetCurrentLayerKind = lkVectorial) and Assigned(GetVectorOriginal.SelectedShape) then
-      GetVectorOriginal.DeselectShapes;
+    if Assigned(orig) and Assigned(orig.SelectedShape) then
+      orig.DeselectShapes;
     DoEditSelection;
   end else
-  if (GetCurrentLayerKind = lkVectorial) and Assigned(GetVectorOriginal.SelectedShape) then
-    UpdateToolManagerFromShape(GetVectorOriginal.SelectedShape);
+  if Assigned(orig) and Assigned(orig.SelectedShape) then
+    UpdateToolManagerFromShape(orig.SelectedShape);
 end;
 
 function TEditShapeTool.DoToolKeyDown(var key: Word): TRect;

+ 9 - 2
lazpaintcontrols/lcvectororiginal.pas

@@ -29,6 +29,7 @@ const
   errContainerMismatch = 'Container mismatch';
   errAlreadyRemovingShape = 'Already removing shape';
   errUnableToFindTexture = 'Unable to find texture';
+  errErrorLoadingShape = 'Error loading shape';
 
 type
   TVectorOriginal = class;
@@ -3476,6 +3477,7 @@ var
   idList: array of single;
   texId: integer;
   bmp: TBGRABitmap;
+  strErrors: string;
 begin
   Clear;
 
@@ -3503,6 +3505,7 @@ begin
     end;
   end;
 
+  strErrors := '';
   nb := AStorage.Int['count'];
   for i:= 0 to nb-1 do
   begin
@@ -3514,14 +3517,18 @@ begin
       loadedShape.OnEditingChange := @OnShapeEditingChange;
       if loadedShape.Id > FLastShapeId then FLastShapeId := loadedShape.Id;
       FShapes.Add(loadedShape);
-    finally
-      shapeObj.Free;
+    except
+      on ex: exception do
+        AppendStr(strErrors, ex.Message + ' ');
     end;
+    shapeObj.Free;
   end;
   for i := 0 to ShapeCount-1 do
     if Shape[i].Id = 0 then
       Shape[i].Id := GetNewShapeId;
   NotifyChange;
+  if strErrors <> '' then
+    raise exception.Create(errErrorLoadingShape + ': ' + Trim(strErrors));
 end;
 
 procedure TVectorOriginal.SaveToStorage(AStorage: TBGRACustomOriginalStorage);