home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 1995 May
/
pcw-0595.bin
/
demos
/
databeck
/
wsounds
/
setup.dir
/
wswsrc.exe
/
BRWSDLG.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1992-12-02
|
17KB
|
631 lines
{
Unit BrwsDlg - for passing
WAV files to the database
}
unit BrwsDlg;
interface
uses WinTypes, WinProcs, WinDos, WObjects, Strings, MMSystem, BWCC,
DataObj, CommDlg, SaveDlg, DiskDlg, Waveutil, Scandlg, TakeDlg, MarkDlg, SrchDlg, EventDlg;
const
dn_BrwsDlg = 'BrowseDlg';
id_FName = 800;
id_FPath = 801;
id_FLabl = 802;
id_FSize = 803;
id_FDate = 804;
id_FComm = 805;
id_ChngComm = 806;
id_Reverse = 807;
id_Forward = 808;
id_KillEntry = 809;
id_DBNumber = 810;
id_DBStart = 811;
id_DBEnd = 812;
id_DBPlay = 813;
id_NewSrch = 814;
id_NextSrch = 815;
id_DBSize = 816;
ID_SaveDB = 817;
ID_UpdateCom = 818;
ID_IsinWAV = 819;
id_DBList = 820;
ID_NewInDB = 825;
ID_StopSampl = 826;
ID_SveCheck = 827;
ID_DelWaveCB = 828;
type
PBrwsDlg = ^TBrwsDlg;
TBrwsDlg = object(TDialog)
CurrCollect : PWaveCollection;
CurrNr : Integer;
MaxNr : Integer;
DataLB : PListBox;
CurrSrch : Integer;
LocalCr : WAVECriteria;
SaveChckB : PCheckBox;
SaveCheck: Boolean;
DelWaveCB : PCheckBox;
{DBChanged : Boolean;}
constructor Init(AParent: PWindowsObject;AName: PChar; ACollect : PWaveCollection);
procedure SetupWindow; virtual;
procedure HandleDataLB(var Msg: TMessage);virtual id_First + id_DBList;
procedure HandleChngComm(var Msg: TMessage);virtual id_First + id_ChngComm;
procedure HandleKill(Var Msg:TMessage); virtual id_First + id_KillEntry;
Procedure HandleDelKey(VAR Msg:TMessage);virtual WM_KeyDown;
procedure HandleReverse (Var Msg: TMessage); virtual id_First + id_Reverse;
procedure HandleForward (Var Msg: TMessage); virtual id_First + id_Forward;
procedure HandleStart (Var Msg: TMessage); virtual id_First + id_DBStart;
procedure HandleEnd (Var Msg: TMessage); virtual id_First + id_DBEnd;
procedure HandlePlay (Var Msg: TMessage); virtual id_First + id_DBPlay;
procedure HandleStopPlay(Var Msg: TMessage); virtual id_First + id_StopSampl;
Procedure HandleSaveDB(VAR Msg : TMessage); virtual id_First + id_SaveDB;
Procedure HandleNewData(VAR Msg : Tmessage);virtual id_First + id_NewInDB;
Procedure HandleNewSrch(VAR Msg : Tmessage);virtual id_First + id_NewSrch;
Procedure HandleNextSrch(VAR Msg : Tmessage);virtual id_First + id_NextSrch;
Procedure HandleSaveCheck(VAR Msg : Tmessage);virtual id_First + id_SveCheck;
Procedure HandleDelWaveCB(VAR Msg : Tmessage);virtual id_First + id_DelWaveCB;
Procedure InfoNoList;
Procedure ClearLocalCr;
Procedure DeleteWaveFile;
procedure OK(Var Msg:TMessage);virtual id_First + id_Ok;
Destructor Done;virtual;
private
Procedure ShowItem(Nr : Integer);
end;
implementation
Procedure TBrwsDlg.DeleteWaveFile;
VAR
Message, Idx : Integer;
MDummy : DirStr;
F : File;
BEGIN
StrCopy(MDummy,'Do you want the WAV file deleted physically from the drive?');
Message := BWCCMessageBox(HWindow,MDummy,'Wicked Sounds for Windows: Note',MB_OkCancel+MB_IconQuestion);
IF Message = IDOk THEN BEGIN
PWaveData(CurrCollect^.At(CurrNr))^.GetData(WaveDummy);
DPlayObj := New(PDiskPlay,Init(@self));
DPlayObj^.DiskPlayDlg(WaveDummy, Message);
DPlayObj^.Done;
IF (DiskIntoDataBase = TRUE) THEN BEGIN
DiskIntoDataBase := FALSE;
Exit;
END;
DiskDummy[0] := WaveDummy.DiskDrive;
DiskDummy[1] := #0;
StrCat(DiskDummy, ':');
StrCat(DiskDummy,WaveDummy.PathName);
StrCat(DiskDummy,WaveDummy.FileName);
{$I-}
Assign(F,DiskDummy);
Erase(f);
{$I+}
IF IOResult <> 0 THEN BEGIN
StrCopy(MDummy,'Attention: The WAV file could not be physically deleted.');
Message := BWCCMessageBox(HWindow,MDummy,'Wicked Sounds for Windows: Note',MB_OkCancel+MB_IconInformation);
END;
END;
END;
Procedure TBrwsDlg.ClearLocalCr;
BEGIN
With LocalCr DO BEGIN
WName[0] := #0;
WPath[0] := #0;
WBase[0] := #0;
WLim1[0] := #0;
WLim2[0] := #0;
WDay [0] := #0;
WMon [0] := #0;
WYear[0] := #0;
WDat := 0;
WCon0 := 0;
WCon1 := 0;
WCon2 := 0;
END;
END;
Procedure TBrwsDlg.ShowItem(Nr : Integer);
VAR
TDummy : DirStrP2;
DateTime : TDateTime;
DateDum : Array[0..6] OF Char;
SRate : WORD;
Chann : ARRAY[0..10] of CHAR;
CDumm : String[10];
SPDummy : DirStr;
SPSDum : Array[0..50] OF Char;
Procedure Trim(PC : PChar);
VAR i : Integer;
BEGIN
For i := 0 to StrLen(PC) DO BEGIN
IF PC[i] = ' ' Then PC[i] := '0';
END;
END;
BEGIN
PWaveData(CurrCollect^.At(Nr))^.GetData(WaveDummy);
StrCopy(TDummy, WaveDummy.FileName);
StrCat(TDummy, ' ');
Str(WaveDummy.SampRate, CDumm);
StrPCopy(Chann, CDumm);
StrCat(TDummy, Chann);
StrCat(TDummy, ' Hertz, ');
IF WaveDummy.Channels = 1 THEN StrCopy(Chann,' Mono')
ELSE StrCopy(Chann,' Stereo');
StrCat(TDummy, Chann);
SetDlgItemText(HWindow, id_FName,TDummy);
TDummy[0] := WaveDummy.DiskDrive;
TDummy[1] := #0;
StrCat(TDummy, ':');
StrCat(TDummy,WaveDummy.PathName);
WD_NewShortHelp(TDummy,50);
SetDlgItemText(HWindow, id_FPath,ShortHelp);
SetDlgItemText(HWindow, id_FLabl,WaveDummy.DiskLabel);
Str(WaveDummy.FileSize, TDummy);
StrCat(TDummy,' bytes');
IF (WaveDummy.Save2Wave = C2W_IsSaved) THEN
StrCat(TDummy, ', with comment chunk')
ELSE
IF (WaveDummy.Save2Wave = C2W_Save) THEN
StrCat(TDummy, ', appended comment chunk');
SetDlgItemText(HWindow, id_FSize,TDummy);
SetDlgItemText(HWindow, id_FComm,WaveDummy.FileComment);
Str(Nr+1, TDummy);
SetDlgItemText(HWindow, id_DBNumber,TDummy);
Unpacktime(WaveDummy.CreationDate, DateTime);
{ Displays date and time }
Str(DateTime.Month:2, DateDum);
StrCopy(TDummy, DateDum);
StrCat(TDummy,'-');
Str(DateTime.Day:2, DateDum);
StrCat(TDummy, DateDum);
StrCat(TDummy,'-');
Str(DateTime.Year:4, DateDum);
StrCat(TDummy, DateDum);
StrCat(TDummy,',(');
Str(DateTime.Hour:2, DateDum);
StrCat(TDummy, DateDum);
StrCat(TDummy,':');
Str(DateTime.Min:2, DateDum);
StrCat(TDummy, DateDum);
StrCat(TDummy,')');
DataLB^.SetSelIndex(Nr);
Trim(TDummy);
SetDlgItemText(HWindow, id_FDate,TDummy);
Str(CurrCollect^.Count:5,CDumm);
StrPCopy(TDummy, CDumm);
Trim(TDummy);
SetDlgItemText(HWindow, id_DBSize, TDummy);
END;
constructor TBrwsDlg.Init(AParent: PWindowsObject;
AName: PChar; ACollect : PWaveCollection);
begin
TDialog.Init(AParent, AName);
CurrCollect := ACollect;
CurrNr := 0;
CurrSrch := -1;
MaxNr := CurrCollect^.Count-1;
DataLB := New(PListBox, InitResource(@self, id_DBList));
DataLB^.Attr.Style := DataLB^.Attr.Style - lbs_Sort;
DBChanged := FALSE;
ClearLocalCr;
SaveCheck := TRUE;
SaveChckB := New(PCheckBox, InitResource(@self ,ID_SveCheck));
DelWaveCB := New(PCheckBox, InitResource(@self ,ID_DelWaveCB));
end;
procedure TBrwsDlg.SetupWindow;
VAR
ACount : Word;
Out : Array [0..6] of char;
begin
TDialog.SetupWindow;
SaveChckB^.SetCheck(1);
DelWaveCB^.SetCheck(0);
IF (WaveCollect^.Count >0) THEN BEGIN
WD_InsertAll(WaveCollect, DataLB);
ShowItem(CurrNr);
END;
end;
procedure TBrwsDlg.HandleSaveCheck(VAR Msg:TMessage);
BEGIN
IF SAveCheck = FALSE THEN BEGIN
SaveCheck := True;
SaveChckB^.SetCheck(1);
END
ELSE BEGIN
SaveCheck := FALSE;
SaveChckB^.SetCheck(0);
END;
END;
procedure TBrwsDlg.HandleDelWaveCB(VAR Msg:TMessage);
BEGIN
IF (DelWaveCB^.GetCheck = BF_Unchecked) THEN BEGIN
DelWaveCB^.SetCheck(1);
END
ELSE BEGIN
DelWaveCB^.SetCheck(0);
END;
END;
procedure TBrwsDlg.HandleDataLB(var Msg: TMessage);
Var
Idx : Integer;
begin
IF (WaveCollect^.Count <= 0) THEN BEGIN
InfoNoList;
END
ELSE BEGIN
case Msg.LParamHi of
lbn_SelChange, lbn_DblClk:
begin
if Msg.LParamHi = lbn_SelChange then BEGIN
Idx := DataLB^.GetSelIndex;
CurrNr := Idx;
ShowItem(CurrNr);
END;
if Msg.LParamHi = lbn_DblClk then BEGIN
HandlePlay(Msg);
END;
end;
end;
END;
end;
procedure TBrwsDlg.HandleChngComm(var Msg: TMessage);
VAR
LDialog : PCommentDlg;
MDialog : PSaveDlg;
Puffer : ARRAY[0..12] OF CHAR;
Lommescount : Word;
pw : PWaveData;
BEGIN
IF (WaveCollect^.Count <= 0) THEN BEGIN
InfoNoList;
END
ELSE BEGIN
LDialog := New(PCommentDlg, Init(@self, DN_CommentDlg,WaveCollect,CurrNr));
IF Application^.ExecDialog(LDialog) = ID_Ok THEN BEGIN
{HandleSaveDB(Msg);}
ShowItem(CurrNr);
DBChanged := TRUE;
END;
END;
End;
procedure TBrwsDlg.HandleReverse(Var Msg: TMessage);
Begin
IF (WaveCollect^.Count <= 0) THEN BEGIN
InfoNoList;
Exit;
END
ELSE BEGIN
IF (CurrNr > 0) THEN BEGIN
DEC(CurrNr);
ShowItem(CurrNr);
END;
END;
End;
procedure TBrwsDlg.HandleForward(Var Msg: TMessage);
Begin
IF (WaveCollect^.Count <= 0) THEN BEGIN
InfoNoList;
Exit;
END
ELSE BEGIN
IF (CurrNr < MaxNr) THEN BEGIN
Inc(CurrNr);
ShowItem(CurrNr);
END;
END;
End;
procedure TBrwsDlg.HandleStart(Var Msg: TMessage);
Begin
IF (WaveCollect^.Count <= 0) THEN BEGIN
InfoNoList;
END
ELSE BEGIN
CurrNr := 0;
ShowItem(CurrNr);
END;
End;
procedure TBrwsDlg.HandleEnd(Var Msg: TMessage);
Begin
IF (WaveCollect^.Count <= 0) THEN BEGIN
InfoNoList;
END
ELSE BEGIN
CurrNr := MaxNr;
ShowItem(CurrNr);
END;
End;
procedure TBrwsDlg.HandleKill(Var Msg:TMessage);
VAR
Message : Integer;
MDummy : ARRAY[0..70] of CHAR;
BEGIN
IF (WaveCollect^.Count <= 0) THEN BEGIN
InfoNoList;
END
ELSE BEGIN
IF SaveCheck THEN BEGIN
StrCopy(MDummy,'Do you really want this record removed from the database?');
Message := BWCCMessageBox(HWindow,MDummy,'Wicked Sounds for Windows: Note',MB_OkCancel+MB_IconQuestion);
END
ELSE Message := IDOk;
IF Message = IDOk THEN BEGIN
IF (DelWaveCB^.GetCheck = BF_Checked) THEN BEGIN
DeleteWaveFile;
END;
DataLB^.DeleteString(Currnr);
WaveCollect^.AtDelete (CurrNr);
DBChanged := TRUE;
Dec(MaxNr,1);
CheckEvents;
if (CurrNr > MaxNr) THEN CurrNr := MaxNr;
WaveCollect^.Pack;
{HandleSaveDB(Msg);}
if Maxnr <0 then BEGIN
MaxNr := 0;
{TDialog.OK(Msg);}
SetDlgItemText(HWindow, id_FName,' ');
SetDlgItemText(HWindow, id_FPath,' ');
SetDlgItemText(HWindow, id_FLabl,' ');
SetDlgItemText(HWindow, id_FSize,' ');
SetDlgItemText(HWindow, id_FComm,' ');
SetDlgItemText(HWindow, id_DBNumber,' ');
SetDlgItemText(HWindow, id_FDate,' ');
SetDlgItemText(HWindow, id_DBSize, ' ');
END
ELSE ShowItem(CurrNr);
END;
END;
END;
procedure TBrwsDlg.HandleDelKey(Var Msg:TMessage);
BEGIN
{
HandleKill(Msg);
}
END;
procedure TBrwsDlg.HandleSaveDB(Var Msg:TMessage);
VAR
MDialog : PSaveDlg;
BEGIN
IF (WaveCollect^.Count <= 0) THEN BEGIN
InfoNoList;
END
ELSE BEGIN
MDialog := New(PSaveDlg, Init(@self, DN_SaveDlg,1));
IF Application^.ExecDialog(MDialog) = ID_Ok THEN BEGIN
END;
DBChanged := FALSE;
END;
END;
procedure TBrwsDlg.HandleNewData(Var Msg:TMessage);
VAR
LDialog : PScanDlg;
TkDialog : PTakeDlg;
Puffer : ARRAY[0..12] OF CHAR;
FileName: ARRAY[0..fsPathName] OF Char;
BEGIN
GetCurDir(FileName,0);
{WriteLn(FileName);}
IF ((UpCase(FileName[0]) = 'A') OR (UpCase(FileName[0]) = 'B')) THEN SetCurDir(RootDir);
LDialog := New(PScanDlg, Init(@self, dn_ScanDlg,StrCopy(FileName, '*.WAV')));
IF Application^.ExecDialog(LDialog) = ID_OK THEN
BEGIN
IF (WaveSelectColl^.Count > 0) THEN BEGIN
TkDialog := New(PTakeDlg, Init(@self, DN_TakeDlg,WaveSelectColl));
IF Application^.ExecDialog(TkDialog) = ID_Ok THEN
BEGIN
{DBChanged := True;} {Only needed if not saving immediately}
CurrNr := 0;
MaxNr := CurrCollect^.Count-1;
DataLB^.ClearList;
WD_InsertAll(WaveCollect, DataLB);
ShowItem(CurrNr);
DataLB^.SetSelIndex(CurrNr);
END;
END;
END;
END;
procedure TBrwsDlg.HandleNewSrch(Var Msg:TMessage);
VAR
LDialog : PMarkDlg;
TDialog : PSrchDlg;
Puffer : ARRAY[0..12] OF CHAR;
FileName: ARRAY[0..fsPathName] OF Char;
BEGIN
IF (WaveCollect^.Count <= 0) THEN BEGIN
InfoNoList;
END
ELSE BEGIN
LDialog := New(PMarkDlg, Init(@self, DN_MarkDlg,'HANS'));
IF Application^.ExecDialog(LDialog) = ID_Ok THEN
BEGIN
CurrSrch := -1;
CurrNr := 0;
ShowItem(CurrNr);
HandleNextSrch(Msg);
{
ClearLocalCr;
Move(WaveDCrit,LocalCr, SizeOf(WaveDCrit));
}
END;
END;
END;
procedure TBrwsDlg.HandleNextSrch(Var Msg:TMessage);
VAR
SDialog : PSrchDlg;
Count : Integer;
PWTest : PWaveData;
BEGIN
{
Count := CurrNr+1;
While (Count <= (WaveCollect^.Count-1)) DO BEGIN
PWTest := WaveCollect^.At(Count);
IF (WD_SearchNext(Count, PWTest, LocalCr) = Count) THEN BEGIN
CurrSrch := Count;
CurrNr := CurrSrch;
ShowItem(CurrNr);
Count:= WaveCollect^.Count+2;
END;
Inc(Count);
END;
IF (Count = WaveCollect^.Count) THEN BEGIN
StrCopy(ShortMain,'No more data records found');
BWCCMessageBox(HWindow,ShortMain, 'Wicked Sounds for Windows: Note',MB_Ok+MB_IconInformation);
END
}
IF (WaveCollect^.Count <= 0) THEN BEGIN
InfoNoList;
END
ELSE BEGIN
SDialog := New(PSrchDlg, Init(@self, dn_SrchDlg,WaveCollect,0,CurrNr));
IF Application^.ExecDialog(SDialog) = ID_OK THEN
BEGIN
CurrNr := SrchBack;
ShowItem(CurrNr);
END;
END;
END;
procedure TBrwsDlg.InfoNoList;
BEGIN
{
BWCCMessageBox(HWindow,'No more elements in list','Wicked Sounds for Windows: Note',mb_Ok + mb_IconStop);
}
END;
procedure TBrwsDlg.HandlePlay(Var Msg:TMessage);
VAR
Message,IDx : Integer;
PWTest : PWaveData;
BWCCMes : Integer;
MDummy : Array[0..100] OF Char;
BEGIN
IF (WaveCollect^.Count <= 0) THEN BEGIN
InfoNoList;
END
ELSE BEGIN
{--------------------------------------------------------------------}
{--------------------- Play dialog box ------------------------------}
PWaveData(CurrCollect^.At(CurrNr))^.GetData(WaveDummy);
DPlayObj := New(PDiskPlay,Init(@self));
DPlayObj^.DiskPlayDlg(WaveDummy, Message);
DPlayObj^.Done;
IF (DiskIntoDataBase = TRUE) THEN BEGIN
DiskIntoDataBase := FALSE;
PWTest := New(PWaveData, Init(WaveDummy));
IF (WaveCollect^.Search(PWTEst,Idx) = True) THEN BEGIN
StrCopy(MDummy,'Database already contains a file with this name and path.');
BWCCMes := BWCCMessageBox(HWindow,MDummy,'Wicked Sounds for Windows: Note',MB_Ok+mb_IconInformation);
Dispose(PWTest,Done);
END
ELSE BEGIN
CurrCollect^.AtPut(CurrNr,New(PWaveData, Init(WaveDummy)));
ShowItem(CurrNr);
DBChanged := TRUE;
END;
END;
DiskDummy[0] := WaveDummy.DiskDrive;
DiskDummy[1] := #0;
StrCat(DiskDummy, ':');
StrCat(DiskDummy,WaveDummy.PathName);
StrCat(DiskDummy,WaveDummy.FileName);
IF Message = idOK THEN sndPlaySound(DiskDummy,SND_Async);
{----------------------------------------------------------------------}
{----------------------------------------------------------------------}
END;
END;
procedure TBrwsDlg.HandleStopPlay(Var Msg:TMessage);
BEGIN
sndPlaySound(NIL,SND_Async);
END;
procedure TBrwsDlg.OK(Var Msg:TMessage);
VAR
Message : Integer;
MDummy : Array[0..100] of Char;
BEGIN
IF DBChanged THEN BEGIN
StrCopy(MDummy, 'Database changed since last save.');
StrCat(MDummy,' Save changes?');
Message := BWCCMessageBox(HWindow,MDummy, 'Wicked Sounds for Windows: Note', MB_OkCancel+mb_IconHand);
IF Message = idOK THEN HandleSaveDB(Msg);
END;
TDialog.OK (Msg);
End;
Destructor TBrwsDlg.Done;
BEGIN
Dispose(SaveChckB,Done);
Dispose(DelWaveCB,Done);
Dispose(DataLb,Done);
TDialog.Done;
END;
end.