unit cdartworkform;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  StdCtrls, bitmapprogress, ExtCtrls,mydialog, picturescroller,jpeg,
  bitmapactionbutton, TransparentPanel,global;

type
  Tcdartwork = class(TForm)
    scanpanel: TTransparentPanel;
    scanlabel: TLabel;
    selectpanel: TTransparentPanel;
    selectlabel: TLabel;
    cancel: TBitmapActionButton;
    lb: TPictureScroller;
    progress: TBitmapProgress;
    procedure FormCreate(Sender: TObject);
    procedure cancelClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure lbClick(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


const maximages = 200;

var
  cdartwork: Tcdartwork;
  pictures : array of string;

function getcdartwork : integer;

implementation
uses empripmain, editmenuform;

function getcdartwork : integer;
begin
cdartwork:=tcdartwork.create(application);

result:=cdartwork.showmodal;
cdartwork.free;

end;

{$R *.DFM}

function getpics(cddrive : string) : integer;
var

sr : TSearchRec;
pic : TBitmap;
jp : TJPEGImage;
foundfile : boolean;
filecount : integer;
n : integer;
tr : trect;
begin
filecount:=0;
cdartwork.selectpanel.DoubleBuffered:=true;
cdartwork.progress.paint;
if cddrive[length(cddrive)]='\' then cddrive:=copy(cddrive,1,2);


if findfirst(cddrive+'\*.jpg',(faReadOnly + faHidden),sr)=0 then begin

   foundfile:=true;
   while(foundfile=true) do begin
       inc(filecount);
       if findnext(sr)<>0 then foundfile:=false;
   end;
end;
if filecount=0 then begin
findclose(sr);
result:=0;
exit;
end;

if filecount<maximages then cdartwork.progress.max:=filecount else cdartwork.progress.max:=maximages;

findclose(sr);

cdartwork.progress.visible:=true;



n:=0;
cdartwork.lb.clear;
tr.left:=0;
tr.right:=100;
tr.bottom:=100;
tr.top:=0;
if findfirst(cddrive+'\*.jpg',faArchive + faReadOnly,sr)=0 then begin
   foundfile:=true;

   while(foundfile=true) do begin
       try
       inc(n);
       pic:=Tbitmap.create;
       pic.PixelFormat:=pf16bit;
       pic.height:=100;
       pic.width:=100;
       jp:=TJPEGImage.create;
       jp.Loadfromfile(cddrive+'\'+sr.name);

       pic.Canvas.StretchDraw(tr,jp);
       cdartwork.lb.add(pic,0);
       setlength(pictures,n+1);
       pictures[n]:=cddrive+'\'+sr.name;
       pic.free;
       jp.free;
       except;
       end;
       if findnext(sr)<>0 then foundfile:=false;
       if n>maximages then foundfile:=false;
       application.processmessages;
       cdartwork.progress.position:=cdartwork.progress.position+1;
   end;

end;
findclose(sr);

result:=n;


end;

procedure Tcdartwork.FormCreate(Sender: TObject);
var
cdpic : Tbitmap;
begin
doublebuffered:=true;

canvas.Brush.style:=bsClear;
sizeform(self,'Get Artwork from CD',false);
selectpanel.sourcebitmap:=ripmain.bg.picture.bitmap;
scanpanel.sourcebitmap:=ripmain.bg.picture.bitmap;
progress.max:=100;
progress.left:=self.width div 2 - progress.width div 2;
progress.radius:=300;
progress.position:=0;
progress.startradius:=36;
cdpic:=tbitmap.create;
cdpic.loadfromresourcename (hinstance,'cd');
progress.assignbackground(cdpic);
progress.BringToFront;
progress.paint;
cdpic.free;


lb.across:=7;
cancel.font.color:=FONTCOL;
cancel.font.name:=DEFAULTFONT;
cancel.font.size:=18;
cancel.left:=self.width div 2 - cancel.width div 2;
scanlabel.left:=self.width div 2 - scanlabel.width div 2;
selectlabel.left:=self.width div 2 - selectlabel.width div 2;
lb.left:=self.width div 2 - lb.width div 2;


selectlabel.Left:=0;
selectlabel.width:=self.width;
end;

procedure Tcdartwork.cancelClick(Sender: TObject);
begin
modalresult:=mrcancel;
end;

procedure Tcdartwork.FormActivate(Sender: TObject);
var
d : string;
begin
progress.paint;
application.processmessages;
progress.paint;
d:=getfirstcddriveletter;
if d='' then d:='z:';
if getpics(d)=0 then begin
selectlabel.height:=selectlabel.height*2;

selectlabel.caption:='No Pictures found on CD. Check correct CD is inserted.'#13#10'You may need to wait for the CD to spin up.';
lb.visible:=false;
end;
progress.visible:=false;
scanpanel.visible:=false;
selectpanel.Visible:=true;
end;

procedure Tcdartwork.lbClick(Sender: TObject);
var
bm : tbitmap;
tr : trect;
jp : tjpegimage;
begin
bm := tbitmap.create;
bm.width:=300;
bm.height:=300;
tr.top:=0;
tr.left:=0;
tr.right:=300;
tr.bottom:=300;
jp:=tjpegimage.create;
try
jp.loadfromfile(pictures[lb.itemindex+1]);
bm.canvas.StretchDraw(tr,jp);
apic.Assign(bm);
jp.free;
bm.free;
except
end;
modalresult:=mrOk;
end;

procedure Tcdartwork.FormPaint(Sender: TObject);
begin
dobg(self);
end;

end.