You've already forked lazarus-ccr
tvplanit: Improve usability and avoid crashes in PrintFormat element editor.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8532 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -201,7 +201,7 @@ end;
|
||||
procedure TfrmPrnFormat.btnDeleteElementClick(Sender: TObject);
|
||||
var
|
||||
Format: TVpPrintFormatItem;
|
||||
Idx: Integer;
|
||||
i, idx, n: Integer;
|
||||
Item: string;
|
||||
begin
|
||||
Format := TVpPrintFormatItem(lbFormats.Items.Objects[lbFormats.ItemIndex]);
|
||||
@ -210,30 +210,54 @@ begin
|
||||
Item := lbElements.Items[lbElements.ItemIndex];
|
||||
|
||||
if Item <> '' then begin
|
||||
for Idx := Pred(Format.Elements.Count) downto 0 do begin
|
||||
if Format.Elements.Items[Idx].ElementName = Item then begin
|
||||
Format.Elements.Items[Idx].Free;
|
||||
n := Format.Elements.Count;
|
||||
idx := lbElements.ItemIndex;
|
||||
for i := n-1 downto 0 do begin
|
||||
if Format.Elements.Items[i].ElementName = Item then begin
|
||||
Format.Elements.Items[i].Free;
|
||||
lbElements.Items.Delete(lbElements.ItemIndex);
|
||||
IsDirty := True;
|
||||
if idx = lbElements.Items.Count then
|
||||
idx := lbElements.Items.Count-1;
|
||||
lbElements.ItemIndex := idx;
|
||||
UpdatePreview;
|
||||
IsDirty := True;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
EnableElementButtons(true);
|
||||
end;
|
||||
|
||||
procedure TfrmPrnFormat.btnDeleteFormatClick(Sender: TObject);
|
||||
var
|
||||
Prn: TVpPrinter;
|
||||
Idx: Integer;
|
||||
Idx, fmtIdx: Integer;
|
||||
begin
|
||||
Prn := ControlLink.Printer;
|
||||
Idx := Prn.Find(lbFormats.Items[lbFormats.ItemIndex]);
|
||||
if (Idx < 0) or (Idx >= Prn.PrintFormats.Count) then
|
||||
Idx := lbFormats.ItemIndex;
|
||||
fmtIdx := Prn.Find(lbFormats.Items[idx]);
|
||||
if (fmtIdx < 0) or (fmtIdx >= Prn.PrintFormats.Count) then
|
||||
begin
|
||||
ShowMessage ('Invalid print format: ' + lbFormats.Items[lbFormats.ItemIndex]);
|
||||
Prn.PrintFormats.Items[Idx].Free;
|
||||
lbFormats.Items.Delete(lbFormats.ItemIndex);
|
||||
exit;
|
||||
end;
|
||||
Prn.PrintFormats.Items[FmtIdx].Free;
|
||||
lbElements.Items.Clear;
|
||||
lbFormats.Items.Delete(idx);
|
||||
IsDirty := True;
|
||||
UpdatePreview;
|
||||
if idx = lbFormats.Items.Count then
|
||||
idx := lbFormats.Items.Count-1;
|
||||
if idx >= 0 then
|
||||
begin
|
||||
lbFormats.ItemIndex := idx;
|
||||
fmtIdx := Prn.Find(lbFormats.Items[idx]);
|
||||
Prn.CurFormat := fmtIdx;
|
||||
UpdatePreview;
|
||||
end else
|
||||
; // to do: clear preview
|
||||
EnableFormatButtons(true);
|
||||
EnableElementButtons(true);
|
||||
end;
|
||||
|
||||
procedure TfrmPrnFormat.btnEditElementClick(Sender: TObject);
|
||||
@ -303,8 +327,8 @@ var
|
||||
i: Integer;
|
||||
begin
|
||||
NewFormatIdx := DoNewFormat;
|
||||
if (NewFormatIdx > 0) and (Assigned (ControlLink)) and
|
||||
(NewFormatIdx < ControlLink.Printer.PrintFormats.Count)
|
||||
if Assigned(ControlLink) and
|
||||
(NewFormatIdx > 0) and (NewFormatIdx < ControlLink.Printer.PrintFormats.Count)
|
||||
then
|
||||
for i := 0 to lbFormats.Items.Count - 1 do
|
||||
if lbFormats.Items[i] = ControlLink.Printer.PrintFormats.Items[NewFormatIdx].FormatName then
|
||||
@ -364,16 +388,15 @@ var
|
||||
frmEditElement: TfrmEditElement;
|
||||
begin
|
||||
if lbElements.ItemIndex > -1 then begin
|
||||
Application.CreateForm(TfrmEditElement, frmEditElement);
|
||||
|
||||
E := TVpPrintFormatElementItem(lbElements.Items.Objects[lbElements.ItemIndex]);
|
||||
if frmEditElement.Execute(E) then begin
|
||||
IsDirty := True;
|
||||
frmEditElement := TfrmEditElement.Create(nil);
|
||||
try
|
||||
E := TVpPrintFormatElementItem(lbElements.Items.Objects[lbElements.ItemIndex]);
|
||||
if frmEditElement.Execute(E) then
|
||||
IsDirty := True;
|
||||
UpdatePreview;
|
||||
finally
|
||||
frmEditElement.Free;
|
||||
end;
|
||||
|
||||
frmEditElement.Free;
|
||||
|
||||
UpdatePreview;
|
||||
end
|
||||
else begin
|
||||
DoNewElement;
|
||||
@ -419,36 +442,39 @@ begin
|
||||
|
||||
Unique := False;
|
||||
|
||||
Application.CreateForm(TfrmEditElement, frmEditElement);
|
||||
frmEditElement := TfrmEditElement.Create(nil);
|
||||
try
|
||||
repeat
|
||||
E := TVpPrintFormatElementItem.Create(Format.Elements);
|
||||
|
||||
repeat
|
||||
E := TVpPrintFormatElementItem.Create(Format.Elements);
|
||||
// Edit element
|
||||
Cancelled := not frmEditElement.Execute(E);
|
||||
|
||||
{ edit Element }
|
||||
Cancelled := not frmEditElement.Execute(E);
|
||||
|
||||
if not Cancelled then begin
|
||||
if lbElements.Items.IndexOf(E.ElementName) > -1 then begin
|
||||
ShowMessage('An Element named ' + E.ElementName + ' already exists.' +
|
||||
#13#10 + 'Please use another name.');
|
||||
{ dump empty element }
|
||||
if not Cancelled then begin
|
||||
if lbElements.Items.IndexOf(E.ElementName) > -1 then begin
|
||||
ShowMessage('An Element named ' + E.ElementName + ' already exists.' +
|
||||
#13#10 + 'Please use another name.');
|
||||
// Dump empty element
|
||||
Format.Elements.Items[E.Index].Free;
|
||||
Unique := False;
|
||||
end
|
||||
else begin
|
||||
lbElements.Items.AddObject(E.ElementName, E);
|
||||
lbElements.ItemIndex := E.Index;
|
||||
IsDirty := True;
|
||||
Unique := True;
|
||||
UpdatePreview;
|
||||
end;
|
||||
end else
|
||||
// Dump empty element
|
||||
Format.Elements.Items[E.Index].Free;
|
||||
Unique := False;
|
||||
end
|
||||
else begin
|
||||
lbElements.Items.AddObject(E.ElementName, E);
|
||||
lbElements.ItemIndex := E.Index;
|
||||
IsDirty := True;
|
||||
Unique := True;
|
||||
UpdatePreview;
|
||||
end;
|
||||
end else
|
||||
{ dump empty element }
|
||||
Format.Elements.Items[E.Index].Free;
|
||||
{ until element name is Unique or operation Cancelled }
|
||||
until Unique or Cancelled;
|
||||
// ...until element name is Unique or operation is cancelled
|
||||
until Unique or Cancelled;
|
||||
|
||||
frmEditElement.Free;
|
||||
EnableElementButtons(true);
|
||||
finally
|
||||
frmEditElement.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmPrnFormat.DoNewFile;
|
||||
@ -475,40 +501,44 @@ var
|
||||
frmEditFormat: TfrmEditFormat;
|
||||
begin
|
||||
Result := -1;
|
||||
Application.CreateForm(TfrmEditFormat, frmEditFormat);
|
||||
frmEditFormat := TfrmEditFormat.Create(nil);
|
||||
try
|
||||
Prn := ControlLink.Printer;
|
||||
Unique := False;
|
||||
repeat
|
||||
AFormat := TVpPrintFormatItem.Create(Prn.PrintFormats);
|
||||
// Edit format
|
||||
Cancelled := not frmEditFormat.Execute(AFormat);
|
||||
|
||||
Prn := ControlLink.Printer;
|
||||
Unique := False;
|
||||
repeat
|
||||
AFormat := TVpPrintFormatItem.Create(Prn.PrintFormats);
|
||||
{ edit format }
|
||||
Cancelled := not frmEditFormat.Execute(AFormat);
|
||||
|
||||
if not Cancelled then begin
|
||||
if lbFormats.Items.IndexOf(AFormat.FormatName) > -1 then begin
|
||||
ShowMessage('A format named ' + AFormat.FormatName + ' already exists.' +
|
||||
#13#10 + 'Please use another name.');
|
||||
{ dump empty format }
|
||||
if not Cancelled then begin
|
||||
if lbFormats.Items.IndexOf(AFormat.FormatName) > -1 then begin
|
||||
ShowMessage('A format named ' + AFormat.FormatName + ' already exists.' +
|
||||
#13#10 + 'Please use another name.');
|
||||
// Dump empty format
|
||||
Prn.PrintFormats.Items[AFormat.Index].Free;
|
||||
Unique := False;
|
||||
end
|
||||
else begin
|
||||
lbFormats.Items.AddObject(AFormat.FormatName, AFormat);
|
||||
lbFormats.ItemIndex := AFormat.Index;
|
||||
UpdatePreview;
|
||||
IsDirty := True;
|
||||
Unique := True;
|
||||
end;
|
||||
end else
|
||||
// Dump empty format
|
||||
Prn.PrintFormats.Items[AFormat.Index].Free;
|
||||
Unique := False;
|
||||
end
|
||||
else begin
|
||||
lbFormats.Items.AddObject(AFormat.FormatName, AFormat);
|
||||
lbFormats.ItemIndex := AFormat.Index;
|
||||
UpdatePreview;
|
||||
IsDirty := True;
|
||||
Unique := True;
|
||||
end;
|
||||
end else
|
||||
{ dump empty format }
|
||||
Prn.PrintFormats.Items[AFormat.Index].Free;
|
||||
{ until format name is Unique or operation Cancelled }
|
||||
until Unique or Cancelled;
|
||||
// ... until format name is Unique or operation cancelled
|
||||
until Unique or Cancelled;
|
||||
|
||||
if not Cancelled then
|
||||
Result := AFormat.Index;
|
||||
if not Cancelled then
|
||||
Result := AFormat.Index;
|
||||
|
||||
frmEditFormat.Free;
|
||||
EnableFormatButtons(true);
|
||||
EnableElementButtons(true);
|
||||
finally
|
||||
frmEditFormat.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmPrnFormat.DoSave;
|
||||
@ -527,17 +557,17 @@ end;
|
||||
|
||||
procedure TfrmPrnFormat.EnableElementButtons(Enable: Boolean);
|
||||
begin
|
||||
btnNewElement.Enabled := Enable;
|
||||
btnEditElement.Enabled := Enable;
|
||||
btnDeleteElement.Enabled := Enable;
|
||||
btnNewElement.Enabled := Enable and (lbFormats.ItemIndex > -1);
|
||||
btnEditElement.Enabled := btnNewElement.Enabled and (lbElements.ItemIndex > -1);
|
||||
btnDeleteElement.Enabled := btnEditElement.Enabled;
|
||||
EnableMoveButtons;
|
||||
end;
|
||||
|
||||
procedure TfrmPrnFormat.EnableFormatButtons(Enable: Boolean);
|
||||
begin
|
||||
btnNewFormat.Enabled := Enable;
|
||||
btnEditFormat.Enabled := Enable;
|
||||
btnDeleteFormat.Enabled := Enable;
|
||||
btnEditFormat.Enabled := Enable and (lbFormats.ItemIndex > -1);
|
||||
btnDeleteFormat.Enabled := Enable and (lbFormats.ItemIndex > -1);
|
||||
end;
|
||||
|
||||
function TfrmPrnFormat.Execute: Boolean;
|
||||
|
Reference in New Issue
Block a user