235 lines
7.6 KiB
ObjectPascal
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.
|