cd_ejecter/sources/cdejecter_gui/data/cde_disc_frame.pas
Alexander c585c2f0cb Initial
Исходный код версии 2.0
2022-05-04 07:31:33 +03:00

235 lines
7.6 KiB
ObjectPascal

unit cde_disc_frame;
{$mode delphi}
{$codepage UTF8}
interface
uses Classes, SysUtils, FileUtil, UTF8Process, Forms, Controls, ExtCtrls, StdCtrls, Buttons, ComCtrls, cde_types,
cde_lang, ANBFormatString, ANBInputBox, cde_dir, SimplyJSON, BCRadialProgressBar, LazFileUtils, GraphicsEx;
type
{ Tcde_disc_frm }
Tcde_disc_frm = class(TFrame)
DiscBusyImg: TPaintBox;
DiscFreeImg: TPaintBox;
DiscFreeLbl: TLabel;
DiscSizeLbl: TLabel;
DiscSizeImg: TImage;
DiscBusyLbl: TLabel;
DiscSizePercentBar: TBCRadialProgressBar;
DiscStateHint: TLabel;
DriveInfoExistPanel: TPanel;
DriveInfoNotExistPanel: TPanel;
CloseDiscBtn: TSpeedButton;
DriveWatcher: TTimer;
NoDiscInfoLbl: TLabel;
NDiscLbl: TLabel;
RefrashInfoBtn: TSpeedButton;
InfoPanel: TPanel;
Separator: TBevel;
TitlePanel: TPanel;
EjectDiscBtn: TSpeedButton;
CreateLinkBtn: TSpeedButton;
DiscImg: TImage;
EDiscLbl: TLabel;
FileSystemImg: TImage;
DiscSerialImg: TImage;
DiscSerialLbl: TLabel;
AdditionalActionsPanel: TPanel;
BrowseDiscBtn: TSpeedButton;
VolumeNameLbl: TLabel;
VolumeNameImg: TImage;
FileSystemLbl: TLabel;
procedure BrowseDiscBtnClick(Sender: TObject);
procedure CloseDiscBtnClick (Sender: TObject );
procedure CreateLinkBtnClick(Sender: TObject);
procedure DiscBusyImgPaint (Sender: TObject );
procedure DiscFreeImgPaint (Sender: TObject );
procedure DriveWatcherTimer (Sender: TObject );
procedure EjectDiscBtnClick(Sender: TObject);
procedure RefrashInfoBtnClick(Sender: TObject);
procedure CreateFrm;
private
BusyColor, FreeColor: TRGBColor;
public
Drive: WideChar;
DriveInfo: TDiscInfo;
procedure UpdateDriveInfo;
procedure do_EjectDisc;
procedure do_CloseDisc;
procedure do_Refrash;
procedure do_CreateLink;
procedure do_BrowseDisc;
end;
implementation
uses kernel;
{$R *.lfm}
//frame actions procs
procedure Tcde_disc_frm.do_EjectDisc;
begin
EjectDrive(Drive);
UpdateDriveInfo;
end;
procedure Tcde_disc_frm.do_CloseDisc;
begin
CloseDrive(Drive);
UpdateDriveInfo;
end;
procedure Tcde_disc_frm.do_Refrash;
begin
UpdateDriveInfo;
end;
procedure Tcde_disc_frm.do_CreateLink;
var LinkName: String;
isAccepted: Boolean;
begin
LinkName:= ShowInputBox(GetLocalizedString(cdeg_linkcreation_caption), GetLocalizedString(cdeg_linkcreation_prompt), FormatStrUDI(GetLocalizedString(cdeg_linkcreation_default), DriveInfo), [GetLocalizedString(cdeg_linkcreation_okbtn), GetLocalizedString(cdeg_linkcreation_cancelbtn)], isAccepted);
if isAccepted then
CreateShortCut(ExpandPath(pth_desktop) + LinkName + '.lnk', '/eject="' + DriveInfo.diDrive + '"', GetCDEPath + 'bin\cdejecter.exe');
end;
procedure Tcde_disc_frm.do_BrowseDisc;
var AppName, AppParams: String;
RunProcess: TProcessUTF8;
begin
AppName:= JSReadString('/browse/program', '', GetCDEPath + 'configs\configs.json');
AppName:= ExpandPath(AppName);
AppParams:= JSReadString('/browse/param', '', GetCDEPath + 'configs\configs.json');
AppParams:= FormatStrUDI(AppParams, DriveInfo);
if not FileExistsUTF8(AppName) then
Abort;
RunProcess:= TProcessUTF8.Create(Nil);
with RunProcess do
begin
CommandLine:= AppName + ' ' + AppParams;
Execute;
Free;
end;
end;
procedure Tcde_disc_frm.RefrashInfoBtnClick(Sender: TObject);
begin
do_Refrash;
end;
procedure Tcde_disc_frm.EjectDiscBtnClick(Sender: TObject);
begin
do_EjectDisc;
end;
procedure Tcde_disc_frm.CreateLinkBtnClick(Sender: TObject);
begin
do_CreateLink;
end;
procedure Tcde_disc_frm.DiscBusyImgPaint (Sender: TObject );
begin
DiscBusyImg.Canvas.Brush.Color:= RGB2Color(BusyColor);
DiscBusyImg.Canvas.FillRect(DiscBusyImg.Canvas.ClipRect);
end;
procedure Tcde_disc_frm.DiscFreeImgPaint (Sender: TObject );
begin
DiscFreeImg.Canvas.Brush.Color:= RGB2Color(FreeColor);
DiscFreeImg.Canvas.FillRect(DiscFreeImg.Canvas.ClipRect);
end;
procedure Tcde_disc_frm.DriveWatcherTimer (Sender: TObject );
begin
do_Refrash;
end;
procedure Tcde_disc_frm.BrowseDiscBtnClick(Sender: TObject);
begin
do_BrowseDisc;
end;
procedure Tcde_disc_frm.CloseDiscBtnClick (Sender: TObject );
begin
do_CloseDisc;
end;
procedure Tcde_disc_frm.UpdateDriveInfo;
begin
DriveInfoExistPanel.Hide;
DriveInfoNotExistPanel.Hide;
DiscBusyImg.Refresh;
DiscFreeImg.Refresh;
DriveInfo:= GetDiscInfo(Drive);
DiscImg.Picture.Clear;
if GetDiscState(Drive) <> dsNIL then
begin
DiscImg.Picture.LoadFromFile(GetCDEPath + 'images\in_drive.png');
DiscStateHint.Caption:= GetLocalizedString(cdeg_discinfo_stateindrive);
DriveInfoExistPanel.Show;
end
else
begin
DiscImg.Picture.LoadFromFile(GetCDEPath + 'images\not_in_drive.png');
DiscStateHint.Caption:= GetLocalizedString(cdeg_discinfo_statenotindrive);
DriveInfoNotExistPanel.Show;
end;
EDiscLbl.Caption:= FormatStrUDI(GetLocalizedString(cdeg_discinfo_discletter), DriveInfo);
NDiscLbl.Caption:= EDiscLbl.Caption;
//Hints
VolumeNameImg.Hint:= GetLocalizedString(cdeg_discinfo_volumename_hint);
FileSystemImg.Hint:= GetLocalizedString(cdeg_discinfo_filesystem_hint);
DiscSerialImg.Hint:= GetLocalizedString(cdeg_discinfo_discserial_hint);
CreateLinkBtn.Hint:= GetLocalizedString(cdeg_discinfo_createlink_hint);
BrowseDiscBtn.Hint:= GetLocalizedString(cdeg_discinfo_discbrowse_hint);
EjectDiscBtn.Hint:= GetLocalizedString(cdeg_discinfo_disceject_hint);
RefrashInfoBtn.Hint:= GetLocalizedString(cdeg_discinfo_refrash_hint);
CloseDiscBtn.Hint:= GetLocalizedString(cdeg_discinfo_discclose_hint);
DiscSizeImg.Hint:= GetLocalizedString(cdeg_discinfo_discsize_hint);
DiscBusyImg.Hint:= GetLocalizedString(cdeg_discinfo_discbuzy_hint);
DiscFreeImg.Hint:= GetLocalizedString(cdeg_discinfo_discfree_hint);
if (GetDiscState(Drive) = dsUnFormatted) then
begin
VolumeNameLbl.Caption:= GetLocalizedString(cdeg_discinfo_discunformatted);
FileSystemLbl.Caption:= GetLocalizedString(cdeg_discinfo_discunformatted);
DiscSerialImg.Visible:= False;
DiscSerialLbl.Caption:= '';
DiscSizeImg.Visible:= False;
DiscSizeLbl.Caption:= '';
DiscBusyImg.Visible:= False;
DiscBusyLbl.Caption:= '';
DiscFreeImg.Visible:= False;
DiscFreeLbl.Caption:= '';
DiscSizePercentBar.Visible:= False;
end
else
begin
VolumeNameLbl.Caption:= FormatStrUDI(GetLocalizedString(cdeg_discinfo_volumename), DriveInfo);
FileSystemLbl.Caption:= FormatStrUDI(GetLocalizedString(cdeg_discinfo_filesystem), DriveInfo);
DiscSerialImg.Visible:= True;
DiscSerialLbl.Caption:= FormatStrUDI(GetLocalizedString(cdeg_discinfo_discserial), DriveInfo);
DiscSizeImg.Visible:= True;
DiscSizeLbl.Caption:= FormatStrUDI(GetLocalizedString(cdeg_discinfo_discsize), DriveInfo);
DiscBusyImg.Visible:= True;
DiscBusyLbl.Caption:= FormatStrUDI(GetLocalizedString(cdeg_discinfo_discbuzy), DriveInfo);
DiscFreeImg.Visible:= True;
DiscFreeLbl.Caption:= FormatStrUDI(GetLocalizedString(cdeg_discinfo_discfree), DriveInfo);
DiscSizePercentBar.Visible:= True;
DiscSizePercentBar.Value:= 100 - round((DriveInfo.diDiscFree * 100) / DriveInfo.diDiscSize);
end;
VolumeNameLbl.Hint:= FormatStr(VolumeNameLbl.Caption, ['&'], ['']);
NoDiscInfoLbl.Caption:= '';
end;
procedure Tcde_disc_frm.CreateFrm;
begin
//Colors
with BusyColor do
begin
R:= 0;
G:= 0;
B:= 0;
end;
BusyColor:= JSReadRGBColor('/interface/ds_busycolor', BusyColor, GetCDEPath + 'configs\configs.json');
with FreeColor do
begin
R:= 192;
G:= 192;
B:= 192;
end;
FreeColor:= JSReadRGBColor('/interface/ds_freecolor', FreeColor, GetCDEPath + 'configs\configs.json');
with DiscSizePercentBar do
begin
LineBkgColor:= RGB2Color(FreeColor);
LineColor:= RGB2Color(BusyColor);
end;
//Drive Watcher
with DriveWatcher do
begin
Enabled:= isDriveWatcherEnabled(Drive);
Interval:= JSReadInteger('/drivewatcher/interval', 2000, GetCDEPath + 'configs\configs.json');
end;
end;
end.