fpspreadsheet: Collapsable/expandable items in TsSpreadsheetInspector

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4165 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2015-05-30 14:32:09 +00:00
parent 5b0181c297
commit dc32996691
2 changed files with 121 additions and 68 deletions

View File

@@ -71,6 +71,7 @@ object MainForm: TMainForm
Top = 23 Top = 23
Width = 277 Width = 277
Align = alClient Align = alClient
DefaultColWidth = 125
MouseWheelOption = mwGrid MouseWheelOption = mwGrid
RowCount = 30 RowCount = 30
TabOrder = 1 TabOrder = 1
@@ -114,10 +115,7 @@ object MainForm: TMainForm
) )
WorkbookSource = WorkbookSource WorkbookSource = WorkbookSource
Mode = imWorkbook Mode = imWorkbook
ColWidths = ( ExtendedColSizing = True
114
114
)
end end
end end
object InspectorSplitter: TSplitter object InspectorSplitter: TSplitter

View File

@@ -395,6 +395,10 @@ type
can be assigned to a tab of a TabControl. } can be assigned to a tab of a TabControl. }
TsInspectorMode = (imWorkbook, imWorksheet, imCellValue, imCellProperties); TsInspectorMode = (imWorkbook, imWorksheet, imCellValue, imCellProperties);
{@@ Inspector expanded nodes }
TsInspectorExpandedNode = (ienFormatSettings, ienPageLayout);
TsInspectorExpandedNodes = set of TsInspectorExpandedNode;
{@@ TsSpreadsheetInspector displays all properties of a workbook, worksheet, {@@ TsSpreadsheetInspector displays all properties of a workbook, worksheet,
cell content and cell formatting in a way similar to the Object Inspector cell content and cell formatting in a way similar to the Object Inspector
of Lazarus. } of Lazarus. }
@@ -402,11 +406,14 @@ type
private private
FWorkbookSource: TsWorkbookSource; FWorkbookSource: TsWorkbookSource;
FMode: TsInspectorMode; FMode: TsInspectorMode;
FExpanded: TsInspectorExpandedNodes;
function GetWorkbook: TsWorkbook; function GetWorkbook: TsWorkbook;
function GetWorksheet: TsWorksheet; function GetWorksheet: TsWorksheet;
procedure SetExpanded(AValue: TsInspectorExpandedNodes);
procedure SetMode(AValue: TsInspectorMode); procedure SetMode(AValue: TsInspectorMode);
procedure SetWorkbookSource(AValue: TsWorkbookSource); procedure SetWorkbookSource(AValue: TsWorkbookSource);
protected protected
procedure DblClick; override;
procedure DoUpdate; virtual; procedure DoUpdate; virtual;
procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure UpdateCellValue(ACell: PCell; AStrings: TStrings); virtual; procedure UpdateCellValue(ACell: PCell; AStrings: TStrings); virtual;
@@ -432,6 +439,9 @@ type
{@@ inherited from TValueListEditor, activates column titles and automatic {@@ inherited from TValueListEditor, activates column titles and automatic
column width adjustment by default } column width adjustment by default }
property DisplayOptions default [doColumnTitles, doAutoColResize]; property DisplayOptions default [doColumnTitles, doAutoColResize];
{@@ Displays subproperties }
property ExpandedNodes: TsInspectorExpandedNodes
read FExpanded write SetExpanded default [ienFormatSettings, ienPageLayout];
{@@ inherited from TValueListEditor. Turns of the fixed column by default} {@@ inherited from TValueListEditor. Turns of the fixed column by default}
property FixedCols default 0; property FixedCols default 0;
{@@ inherited from TStringGrid, but not published in TValueListEditor. } {@@ inherited from TStringGrid, but not published in TValueListEditor. }
@@ -2457,6 +2467,7 @@ begin
inherited Create(AOwner); inherited Create(AOwner);
DisplayOptions := DisplayOptions - [doKeyColFixed]; DisplayOptions := DisplayOptions - [doKeyColFixed];
FixedCols := 0; FixedCols := 0;
FExpanded := [ienFormatSettings, ienPageLayout];
with (TitleCaptions as TStringList) do begin with (TitleCaptions as TStringList) do begin
OnChange := nil; // This fixes an issue with Laz 1.0 OnChange := nil; // This fixes an issue with Laz 1.0
Clear; Clear;
@@ -2476,6 +2487,32 @@ begin
inherited Destroy; inherited Destroy;
end; end;
{@@ ----------------------------------------------------------------------------
Double-click on an expandable line expands or collapsed the sub-items
-------------------------------------------------------------------------------}
procedure TsSpreadsheetInspector.DblClick;
var
s: String;
expNodes: TsInspectorExpandedNodes;
begin
expNodes := FExpanded;
s := Cells[0, Row];
if (pos('FormatSettings', s) > 0) or (pos('Format settings', s) > 0) then
begin
if (ienFormatSettings in expNodes)
then Exclude(expNodes, ienFormatSettings)
else Include(expNodes, ienFormatSettings);
end else
if (pos('Page layout', s) > 0) or (pos('PageLayout', s) > 0) then
begin
if (ienPageLayout in expNodes)
then Exclude(expNodes, ienPageLayout)
else Include(expNodes, ienPageLayout);
end else
exit;
SetExpanded(expNodes);
end;
{@@ ---------------------------------------------------------------------------- {@@ ----------------------------------------------------------------------------
Updates the data shown by the inspector grid. Display depends on the FMode Updates the data shown by the inspector grid. Display depends on the FMode
setting (workbook, worksheet, cell values, cell properties). setting (workbook, worksheet, cell values, cell properties).
@@ -2580,6 +2617,17 @@ begin
SetWorkbookSource(nil); SetWorkbookSource(nil);
end; end;
{@@ ----------------------------------------------------------------------------
Setter method for the Expanded property
-------------------------------------------------------------------------------}
procedure TsSpreadsheetInspector.SetExpanded(AValue: TsInspectorExpandedNodes);
begin
if AValue = FExpanded then
exit;
FExpanded := AValue;
DoUpdate;
end;
{@@ ---------------------------------------------------------------------------- {@@ ----------------------------------------------------------------------------
Setter method for the Mode property. This property filters groups of properties Setter method for the Mode property. This property filters groups of properties
for display (workbook-, worksheet-, cell value- or cell formatting-related for display (workbook-, worksheet-, cell value- or cell formatting-related
@@ -2835,38 +2883,41 @@ begin
if s <> '' then Delete(s, 1, 2); if s <> '' then Delete(s, 1, 2);
AStrings.Add('Options='+s); AStrings.Add('Options='+s);
AStrings.Add('FormatSettings='); if (ienFormatSettings in FExpanded) then begin
AStrings.Add(' ThousandSeparator='+AWorkbook.FormatSettings.ThousandSeparator); AStrings.Add('(-) FormatSettings=');
AStrings.Add(' DecimalSeparator='+AWorkbook.FormatSettings.DecimalSeparator); AStrings.Add(' ThousandSeparator='+AWorkbook.FormatSettings.ThousandSeparator);
AStrings.Add(' ListSeparator='+AWorkbook.FormatSettings.ListSeparator); AStrings.Add(' DecimalSeparator='+AWorkbook.FormatSettings.DecimalSeparator);
AStrings.Add(' DateSeparator='+AWorkbook.FormatSettings.DateSeparator); AStrings.Add(' ListSeparator='+AWorkbook.FormatSettings.ListSeparator);
AStrings.Add(' TimeSeparator='+AWorkbook.FormatSettings.TimeSeparator); AStrings.Add(' DateSeparator='+AWorkbook.FormatSettings.DateSeparator);
AStrings.Add(' ShortDateFormat='+AWorkbook.FormatSettings.ShortDateFormat); AStrings.Add(' TimeSeparator='+AWorkbook.FormatSettings.TimeSeparator);
AStrings.Add(' LongDateFormat='+AWorkbook.FormatSettings.LongDateFormat); AStrings.Add(' ShortDateFormat='+AWorkbook.FormatSettings.ShortDateFormat);
AStrings.Add(' ShortTimeFormat='+AWorkbook.FormatSettings.ShortTimeFormat); AStrings.Add(' LongDateFormat='+AWorkbook.FormatSettings.LongDateFormat);
AStrings.Add(' LongTimeFormat='+AWorkbook.FormatSettings.LongTimeFormat); AStrings.Add(' ShortTimeFormat='+AWorkbook.FormatSettings.ShortTimeFormat);
AStrings.Add(' TimeAMString='+AWorkbook.FormatSettings.TimeAMString); AStrings.Add(' LongTimeFormat='+AWorkbook.FormatSettings.LongTimeFormat);
AStrings.Add(' TimePMString='+AWorkbook.FormatSettings.TimePMString); AStrings.Add(' TimeAMString='+AWorkbook.FormatSettings.TimeAMString);
s := AWorkbook.FormatSettings.ShortMonthNames[1]; AStrings.Add(' TimePMString='+AWorkbook.FormatSettings.TimePMString);
for i:=2 to 12 do s := AWorkbook.FormatSettings.ShortMonthNames[1];
s := s + ', ' + AWorkbook.FormatSettings.ShortMonthNames[i]; for i:=2 to 12 do
AStrings.Add(' ShortMonthNames='+s); s := s + ', ' + AWorkbook.FormatSettings.ShortMonthNames[i];
s := AWorkbook.FormatSettings.LongMonthnames[1]; AStrings.Add(' ShortMonthNames='+s);
for i:=2 to 12 do s := AWorkbook.FormatSettings.LongMonthnames[1];
s := s +', ' + AWorkbook.FormatSettings.LongMonthNames[i]; for i:=2 to 12 do
AStrings.Add(' LongMontNames='+s); s := s +', ' + AWorkbook.FormatSettings.LongMonthNames[i];
s := AWorkbook.FormatSettings.ShortDayNames[1]; AStrings.Add(' LongMontNames='+s);
for i:=2 to 7 do s := AWorkbook.FormatSettings.ShortDayNames[1];
s := s + ', ' + AWorkbook.FormatSettings.ShortDayNames[i]; for i:=2 to 7 do
AStrings.Add(' ShortMonthNames='+s); s := s + ', ' + AWorkbook.FormatSettings.ShortDayNames[i];
s := AWorkbook.FormatSettings.LongDayNames[1]; AStrings.Add(' ShortMonthNames='+s);
for i:=2 to 7 do s := AWorkbook.FormatSettings.LongDayNames[1];
s := s +', ' + AWorkbook.FormatSettings.LongDayNames[i]; for i:=2 to 7 do
AStrings.Add(' LongMontNames='+s); s := s +', ' + AWorkbook.FormatSettings.LongDayNames[i];
AStrings.Add(' CurrencyString='+AWorkbook.FormatSettings.CurrencyString); AStrings.Add(' LongMontNames='+s);
AStrings.Add(' PosCurrencyFormat='+IntToStr(AWorkbook.FormatSettings.CurrencyFormat)); AStrings.Add(' CurrencyString='+AWorkbook.FormatSettings.CurrencyString);
AStrings.Add(' NegCurrencyFormat='+IntToStr(AWorkbook.FormatSettings.NegCurrFormat)); AStrings.Add(' PosCurrencyFormat='+IntToStr(AWorkbook.FormatSettings.CurrencyFormat));
AStrings.Add(' TwoDigitYearCenturyWindow='+IntToStr(AWorkbook.FormatSettings.TwoDigitYearCenturyWindow)); AStrings.Add(' NegCurrencyFormat='+IntToStr(AWorkbook.FormatSettings.NegCurrFormat));
AStrings.Add(' TwoDigitYearCenturyWindow='+IntToStr(AWorkbook.FormatSettings.TwoDigitYearCenturyWindow));
end else
AStrings.Add('(+) FormatSettings=(dblclick for more...)');
for i:=0 to AWorkbook.GetFontCount-1 do for i:=0 to AWorkbook.GetFontCount-1 do
AStrings.Add(Format('Font%d=%s', [i, AWorkbook.GetFontAsString(i)])); AStrings.Add(Format('Font%d=%s', [i, AWorkbook.GetFontAsString(i)]));
@@ -2912,40 +2963,44 @@ begin
AStrings.Add(Format('Comments=%d items', [ASheet.Comments.Count])); AStrings.Add(Format('Comments=%d items', [ASheet.Comments.Count]));
AStrings.Add(Format('Hyperlinks=%d items', [ASheet.Hyperlinks.Count])); AStrings.Add(Format('Hyperlinks=%d items', [ASheet.Hyperlinks.Count]));
AStrings.Add(Format('MergedCells=%d items', [ASheet.MergedCells.Count])); AStrings.Add(Format('MergedCells=%d items', [ASheet.MergedCells.Count]));
AStrings.Add('Page layout='); if ienPageLayout in FExpanded then
AStrings.Add(Format(' Orientation=%s', [GetEnumName(TypeInfo(TsPageOrientation), ord(ASheet.PageLayout.Orientation))]));
AStrings.Add(Format(' Page width=%.1f mm', [ASheet.PageLayout.PageWidth]));
AStrings.Add(Format(' Page height=%.1f mm', [ASheet.PageLayout.PageHeight]));
AStrings.Add(Format(' Left margin=%.1f mm', [ASheet.PageLayout.LeftMargin]));
AStrings.Add(Format(' Right margin=%.1f mm', [ASheet.PageLayout.RightMargin]));
AStrings.Add(Format(' Top margin=%.1f mm', [ASheet.PageLayout.TopMargin]));
AStrings.Add(Format(' Bottom margin=%.1f mm', [ASheet.PageLayout.BottomMargin]));
AStrings.Add(Format(' Header distance=%.1f mm', [ASheet.PageLayout.HeaderMargin]));
AStrings.Add(Format(' Footer distance=%.1f mm', [ASheet.PageLayout.FooterMargin]));
if poUseStartPageNumber in ASheet.PageLayout.Options then
AStrings.Add(Format(' Start page number=%d', [ASheet.pageLayout.StartPageNumber]))
else
AStrings.Add (' Start page number=automatic');
AStrings.Add(Format(' Scaling factor=%d%%', [ASheet.PageLayout.ScalingFactor]));
AStrings.Add(Format(' Copies=%d', [ASheet.PageLayout.Copies]));
if (ASheet.PageLayout.Options * [poDifferentOddEven, poDifferentFirst] <> []) then
begin begin
AStrings.Add(Format(' Header (first)=%s', [StringReplace(ASheet.PageLayout.Headers[0], LineEnding, '\n', [rfReplaceAll])])); AStrings.Add('(+) Page layout=');
AStrings.Add(Format(' Header (odd)=%s', [StringReplace(ASheet.PageLayout.Headers[1], LineEnding, '\n', [rfReplaceAll])])); AStrings.Add(Format(' Orientation=%s', [GetEnumName(TypeInfo(TsPageOrientation), ord(ASheet.PageLayout.Orientation))]));
AStrings.Add(Format(' Header (even)=%s', [StringReplace(ASheet.PageLayout.Headers[2], LineEnding, '\n', [rfReplaceAll])])); AStrings.Add(Format(' Page width=%.1f mm', [ASheet.PageLayout.PageWidth]));
AStrings.Add(Format(' Footer (first)=%s', [StringReplace(ASheet.PageLayout.Footers[0], LineEnding, '\n', [rfReplaceAll])])); AStrings.Add(Format(' Page height=%.1f mm', [ASheet.PageLayout.PageHeight]));
AStrings.Add(Format(' Footer (odd)=%s', [StringReplace(ASheet.PageLayout.Footers[1], LineEnding, '\n', [rfReplaceall])])); AStrings.Add(Format(' Left margin=%.1f mm', [ASheet.PageLayout.LeftMargin]));
AStrings.Add(Format(' Footer (even)=%s', [StringReplace(ASheet.PageLayout.Footers[2], LineEnding, '\n', [rfReplaceAll])])); AStrings.Add(Format(' Right margin=%.1f mm', [ASheet.PageLayout.RightMargin]));
AStrings.Add(Format(' Top margin=%.1f mm', [ASheet.PageLayout.TopMargin]));
AStrings.Add(Format(' Bottom margin=%.1f mm', [ASheet.PageLayout.BottomMargin]));
AStrings.Add(Format(' Header distance=%.1f mm', [ASheet.PageLayout.HeaderMargin]));
AStrings.Add(Format(' Footer distance=%.1f mm', [ASheet.PageLayout.FooterMargin]));
if poUseStartPageNumber in ASheet.PageLayout.Options then
AStrings.Add(Format(' Start page number=%d', [ASheet.pageLayout.StartPageNumber]))
else
AStrings.Add (' Start page number=automatic');
AStrings.Add(Format(' Scaling factor=%d%%', [ASheet.PageLayout.ScalingFactor]));
AStrings.Add(Format(' Copies=%d', [ASheet.PageLayout.Copies]));
if (ASheet.PageLayout.Options * [poDifferentOddEven, poDifferentFirst] <> []) then
begin
AStrings.Add(Format(' Header (first)=%s', [StringReplace(ASheet.PageLayout.Headers[0], LineEnding, '\n', [rfReplaceAll])]));
AStrings.Add(Format(' Header (odd)=%s', [StringReplace(ASheet.PageLayout.Headers[1], LineEnding, '\n', [rfReplaceAll])]));
AStrings.Add(Format(' Header (even)=%s', [StringReplace(ASheet.PageLayout.Headers[2], LineEnding, '\n', [rfReplaceAll])]));
AStrings.Add(Format(' Footer (first)=%s', [StringReplace(ASheet.PageLayout.Footers[0], LineEnding, '\n', [rfReplaceAll])]));
AStrings.Add(Format(' Footer (odd)=%s', [StringReplace(ASheet.PageLayout.Footers[1], LineEnding, '\n', [rfReplaceall])]));
AStrings.Add(Format(' Footer (even)=%s', [StringReplace(ASheet.PageLayout.Footers[2], LineEnding, '\n', [rfReplaceAll])]));
end else
begin
AStrings.Add(Format(' Header=%s', [StringReplace(ASheet.PageLayout.Headers[1], LineEnding, '\n', [rfReplaceAll])]));
AStrings.Add(Format(' Footer=%s', [StringReplace(ASheet.PageLayout.Footers[1], LineEnding, '\n', [rfReplaceAll])]));
end;
s := '';
for po in TsPrintOption do
if po in ASheet.PageLayout.Options then s := s + '; ' + GetEnumName(typeInfo(TsPrintOption), ord(po));
if s <> '' then Delete(s, 1, 2);
AStrings.Add(Format(' Options=%s', [s]));
end else end else
begin AStrings.Add('(+) Page layout=(dblclick for more...)');
AStrings.Add(Format(' Header=%s', [StringReplace(ASheet.PageLayout.Headers[1], LineEnding, '\n', [rfReplaceAll])]));
AStrings.Add(Format(' Footer=%s', [StringReplace(ASheet.PageLayout.Footers[1], LineEnding, '\n', [rfReplaceAll])]));
end;
s := '';
for po in TsPrintOption do
if po in ASheet.PageLayout.Options then s := s + '; ' + GetEnumName(typeInfo(TsPrintOption), ord(po));
if s <> '' then Delete(s, 1, 2);
AStrings.Add(Format(' Options=%s', [s]));
end; end;
end; end;