Skip to content

Commit

Permalink
Download form: highlight current build
Browse files Browse the repository at this point in the history
  • Loading branch information
ollydev committed Jan 12, 2024
1 parent 3484d19 commit 5829770
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 25 deletions.
27 changes: 27 additions & 0 deletions Source/components/simba.component_treeview.pas
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ TSimbaInternalTreeView = class(TTreeView)
constructor Create(AnOwner: TComponent); override;
end;

TNodeColorEvent = procedure(const Node: TTreeNode; var Color: TColor) of object;
TNodeHintEvent = function(const Node: TTreeNode): String of object;
TNodeForEachEvent = procedure(const Node: TTreeNode) is nested;

Expand All @@ -55,8 +56,10 @@ TSimbaTreeView = class(TCustomControl)
FScrollbarVert: TSimbaScrollBar;
FScrollbarHorz: TSimbaScrollBar;
FOnGetNodeHint: TNodeHintEvent;
FOnGetNodeColor: TNodeColorEvent;
FNodeClass: TTreeNodeClass;
FOnAfterFilter: TNotifyEvent;
FTempBackgroundColor: TColor;

procedure FontChanged(Sender: TObject); override;

Expand Down Expand Up @@ -88,6 +91,9 @@ TSimbaTreeView = class(TCustomControl)
procedure DoFilterEditChange(Sender: TObject);
procedure DoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure DoCreateNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);
// for GetNodeColor
procedure DoDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean);

procedure DoSettingChanged_ImageSize(Setting: TSimbaSetting);

procedure ScrollHorzChange(Sender: TObject);
Expand All @@ -107,6 +113,7 @@ TSimbaTreeView = class(TCustomControl)

procedure Invalidate; override;

property OnGetNodeColor: TNodeColorEvent read FOnGetNodeColor write FOnGetNodeColor;
property OnGetNodeHint: TNodeHintEvent read FOnGetNodeHint write FOnGetNodeHint;
property OnDoubleClick: TNotifyEvent read GetOnDoubleClick write SetOnDoubleClick;
property OnSelectionChange: TNotifyEvent read GetOnSelectionChange write SetOnSelectionChange;
Expand Down Expand Up @@ -183,6 +190,7 @@ constructor TSimbaTreeView.Create(AOwner: TComponent; NodeClass: TTreeNodeClass)
FTree.SelectionColor := SimbaTheme.ColorActive;
FTree.Font.Color := SimbaTheme.ColorFont;
FTree.Images := SimbaForm.Images;
FTree.OnAdvancedCustomDrawItem := @DoDrawItem;

FScrollbarVert.ForwardScrollControl := FTree;

Expand Down Expand Up @@ -481,6 +489,25 @@ procedure TSimbaTreeView.DoCreateNodeClass(Sender: TCustomTreeView; var NodeClas
NodeClass := TTreeNode;
end;

procedure TSimbaTreeView.DoDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean);
var
TheColor: TColor;
begin
if Assigned(FOnGetNodeColor) then
case Stage of
cdPrePaint:
begin
FTempBackgroundColor := Sender.BackgroundColor;
TheColor := Sender.BackgroundColor;
FOnGetNodeColor(Node, TheColor);
Sender.BackgroundColor := TheColor;
end;

cdPostPaint:
Sender.BackgroundColor := FTempBackgroundColor;
end;
end;

procedure TSimbaTreeView.DoSettingChanged_ImageSize(Setting: TSimbaSetting);
begin
Invalidate();
Expand Down
59 changes: 34 additions & 25 deletions Source/forms/simba.downloadsimbaform.pas
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ interface

uses
Classes, SysUtils, Forms, ComCtrls, Controls, Graphics, Dialogs, ExtCtrls,
simba.mufasatypes, simba.component_treeview, simba.component_buttonpanel, simba.component_button, simba.component_edit,
simba.settings;
simba.mufasatypes, simba.settings,
simba.component_treeview, simba.component_buttonpanel, simba.component_button, simba.component_edit;

type
TSimbaDownloadSimbaForm = class(TForm)
Expand Down Expand Up @@ -47,6 +47,8 @@ TSimbaDownloadSimbaForm = class(TForm)
Pos, Size: Int64;
end;

procedure DoGetNodeColor(const Node: TTreeNode; var TheColor: TColor);

procedure DoDownloadButtonClick(Sender: TObject);
procedure DoSelectionChange(Sender: TObject);

Expand All @@ -68,13 +70,14 @@ implementation
{$R *.lfm}

uses
ATCanvasPrimitives,
simba.httpclient, simba.theme, simba.main;

type
TUpdateFormNode = class(TTreeNode)
public
URL: String;
ShortCommit: String;
Commit: String;
DownloadURL: String;
end;

const
Expand All @@ -91,6 +94,8 @@ procedure TSimbaDownloadSimbaForm.FormCreate(Sender: TObject);
FTreeView.Align := alClient;
FTreeView.FilterVisible := False;
FTreeView.OnSelectionChange := @DoSelectionChange;
if (SIMBA_COMMIT <> '') then
FTreeView.OnGetNodeColor := @DoGetNodeColor;

FDownloadButton := TSimbaButton.Create(Self);
FDownloadButton.Parent := Panel2;
Expand Down Expand Up @@ -127,6 +132,12 @@ procedure TSimbaDownloadSimbaForm.DoProgressTimerStart(Sender: TObject);
FDownloadProgress.Size := 0;
end;

procedure TSimbaDownloadSimbaForm.DoGetNodeColor(const Node: TTreeNode; var TheColor: TColor);
begin
if (TUpdateFormNode(Node).Commit.StartsWith(SIMBA_COMMIT)) then
TheColor := SimbaTheme.ColorLine;
end;

procedure TSimbaDownloadSimbaForm.DoProgressTimerStop(Sender: TObject);
begin
FDownloadButton.Caption := 'Download';
Expand All @@ -152,11 +163,10 @@ procedure TSimbaDownloadSimbaForm.DoDownloadButtonClick(Sender: TObject);
Node: TUpdateFormNode;
begin
Node := TUpdateFormNode(FTreeView.Selected);
if (Node <> nil) and (Node.URL <> '') then
if (Node <> nil) and (Node.DownloadURL <> '') then
begin
ProgressUpdateTimer.Enabled := True;

FDownloadURL := Node.URL;
FDownloadURL := Node.DownloadURL;
FDownloadFileName := FPathEdit.Text;

TThread.ExecuteInThread(@DoDownload, @DoDownloadFinished);
Expand All @@ -168,8 +178,8 @@ procedure TSimbaDownloadSimbaForm.DoSelectionChange(Sender: TObject);
Node: TUpdateFormNode;
begin
Node := TUpdateFormNode(FTreeView.Selected);
if (Node <> nil) and (Node.URL <> '') then
FPathEdit.Text := Application.Location + Node.ShortCommit + '_' + Node.Text;
if (Node <> nil) and (Node.DownloadURL <> '') then
FPathEdit.Text := Application.Location + Copy(Node.Commit, 1, 8) + '_' + Node.Text;
end;

procedure TSimbaDownloadSimbaForm.DoDownloadProgress(Sender: TObject; URL, ContentType: String; Pos, Size: Int64);
Expand Down Expand Up @@ -236,31 +246,30 @@ procedure TSimbaDownloadSimbaForm.DoPopulate;

procedure TSimbaDownloadSimbaForm.DoPopulated(Sender: TObject);

procedure Add(ParentNode: TTreeNode; Name: String; Link: String; Commit: String);
function Add(ParentNode: TTreeNode; Text: String; DataIndex: Integer; ImageIndex: Integer = -1): TUpdateFormNode;
begin
with TUpdateFormNode(FTreeView.AddNode(ParentNode, Name, IMG_SIMBA)) do
begin
URL := Link.Replace('/tree/', '/raw/') + '/' + Name;
ShortCommit := Copy(Commit, 1, 8);
end;
Result := TUpdateFormNode(FTreeView.AddNode(ParentNode, Text, ImageIndex));
Result.Commit := FData[DataIndex].Commit;
if (ImageIndex = IMG_SIMBA) then
Result.DownloadURL := FData[DataIndex].Link.Replace('/tree/', '/raw/') + '/' + Text;
end;

var
i:Integer;
I:Integer;
Node: TTreeNode;
begin
FTreeView.BeginUpdate();
FTreeView.Clear();
for i:=0 to High(FData) do
for I := 0 to High(FData) do
begin
Node := FTreeView.AddNode(FData[i].Date + ' | ' + FData[i].Commit + ' | ' + FData[i].Branch);

Add(Node, 'Simba-Win32.exe', FData[i].Link, FData[I].Commit);
Add(Node, 'Simba-Win64.exe', FData[i].Link, FData[I].Commit);
Add(Node, 'Simba-Linux-AArch64', FData[i].Link, FData[I].Commit);
Add(Node, 'Simba-Linux64', FData[i].Link, FData[I].Commit);
Add(Node, 'Simba-MacOS-AArch64.dmg', FData[i].Link, FData[I].Commit);
Add(Node, 'Simba-MacOS.dmg', FData[i].Link, FData[I].Commit);
Node := Add(nil, FData[I].Date + ' | ' + FData[I].Commit + ' | ' + FData[I].Branch, I);

Add(Node, 'Simba-Win32.exe', I, IMG_SIMBA);
Add(Node, 'Simba-Win64.exe', I, IMG_SIMBA);
Add(Node, 'Simba-Linux-AArch64', I, IMG_SIMBA);
Add(Node, 'Simba-Linux64', I, IMG_SIMBA);
Add(Node, 'Simba-MacOS-AArch64.dmg', I, IMG_SIMBA);
Add(Node, 'Simba-MacOS.dmg', I, IMG_SIMBA);
end;
FTreeView.EndUpdate();
if (FTreeView.Items.Count > 0) then
Expand Down
8 changes: 8 additions & 0 deletions Third-Party/atcanvasprimitives.pas
Original file line number Diff line number Diff line change
Expand Up @@ -669,6 +669,9 @@ function ColorBlend(c1, c2: Longint; A: Longint): Longint;
var
r, g, b, v1, v2: byte;
begin
{$PUSH}
{$R-}
{$Q-}
v1:= Byte(c1);
v2:= Byte(c2);
r:= A * (v1 - v2) shr 8 + v2;
Expand All @@ -679,12 +682,16 @@ function ColorBlend(c1, c2: Longint; A: Longint): Longint;
v2:= Byte(c2 shr 16);
b:= A * (v1 - v2) shr 8 + v2;
Result := (b shl 16) + (g shl 8) + r;
{$POP}
end;

function ColorBlendHalf(c1, c2: Longint): Longint;
var
r, g, b, v1, v2: byte;
begin
{$PUSH}
{$R-}
{$Q-}
v1:= Byte(c1);
v2:= Byte(c2);
r:= (v1+v2) shr 1;
Expand All @@ -695,6 +702,7 @@ function ColorBlendHalf(c1, c2: Longint): Longint;
v2:= Byte(c2 shr 16);
b:= (v1+v2) shr 1;
Result := (b shl 16) + (g shl 8) + r;
{$POP}
end;


Expand Down

0 comments on commit 5829770

Please sign in to comment.