diff options
Diffstat (limited to 'ScoreConverter/Umainform.pas')
-rw-r--r-- | ScoreConverter/Umainform.pas | 460 |
1 files changed, 230 insertions, 230 deletions
diff --git a/ScoreConverter/Umainform.pas b/ScoreConverter/Umainform.pas index c5cc5347..647cf3a4 100644 --- a/ScoreConverter/Umainform.pas +++ b/ScoreConverter/Umainform.pas @@ -1,230 +1,230 @@ -unit Umainform;
-
-interface
-
-uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ComCtrls, UDataBase, ShellAPI, ShlObj, USongs;
-
-type
- Tmainform = class(TForm)
- Label1: TLabel;
- lFolder: TLabel;
- bFLoad: TButton;
- Label2: TLabel;
- lDatabase: TLabel;
- bDLoad: TButton;
- lDatabase2: TLabel;
- lFolder2: TLabel;
- bToDB: TButton;
- bFromDB: TButton;
- pProgress: TProgressBar;
- oDatabase: TOpenDialog;
- lStatus: TLabel;
- procedure FormCreate(Sender: TObject);
- procedure bDLoadClick(Sender: TObject);
- function BrowseDialog (const Title: string; const Flag: integer): string;
- procedure bFLoadClick(Sender: TObject);
- procedure UpdateLoadedSongs(Path: String; Count: integer);
- procedure bToDBClick(Sender: TObject);
- procedure bFromDBClick(Sender: TObject);
- private
- { Private-Deklarationen }
- public
- { Public-Deklarationen }
- end;
-
-var
- mainform: Tmainform;
- DBLoaded: Boolean;
- SFLoaded: Boolean;
-
-
-implementation
-
-uses UScores;
-
-{$R *.dfm}
-
-function Tmainform.BrowseDialog
- (const Title: string; const Flag: integer): string;
-var
- lpItemID : PItemIDList;
- BrowseInfo : TBrowseInfo;
- DisplayName : array[0..MAX_PATH] of char;
- TempPath : array[0..MAX_PATH] of char;
-begin
- Result:='';
- FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
- with BrowseInfo do begin
- hwndOwner := Application.Handle;
- pszDisplayName := @DisplayName;
- lpszTitle := PChar(Title);
- ulFlags := Flag;
- end;
- lpItemID := SHBrowseForFolder(BrowseInfo);
- if lpItemId <> nil then begin
- SHGetPathFromIDList(lpItemID, TempPath);
- Result := TempPath;
- GlobalFreePtr(lpItemID);
- end;
-end;
-
-procedure Tmainform.FormCreate(Sender: TObject);
-begin
- Database := TDataBaseSystem.Create;
- Songs := TSongs.Create;
- lStatus.Caption := 'Welcome to USD Score Converter';
- lFolder2.Caption := 'No Songs loaded';
- lFolder.Caption := '';
- lDataBase2.Caption := 'No Database loaded';
- lDataBase.Caption := '';
-end;
-
-procedure Tmainform.bDLoadClick(Sender: TObject);
-begin
- if oDatabase.Execute then
- begin
- try
- Database.Init(oDataBase.FileName);
- lDataBase2.Caption := 'Database loaded';
- lDataBase.Caption := oDataBase.FileName;
- DBLoaded := True;
- except
- lDataBase2.Caption := 'No Database loaded';
- lDataBase.Caption := '';
- DBLoaded := False;
- end;
- end;
- bToDB.Enabled := DBLoaded and SFLoaded;
- bFromDB.Enabled := bToDB.Enabled;
-end;
-
-procedure Tmainform.bFLoadClick(Sender: TObject);
-var
- Path: String;
-begin
- Path := BrowseDialog('Select UltraStar SongFolder', BIF_RETURNONLYFSDIRS);
-
- if Path <> '' then
- begin
- SetLength(Songs.Song, 0);
- try
- Songs.BrowseDir(Path + '\');
- lFolder2.Caption := Inttostr(Length(Songs.Song)) + ' Songs loaded';
- lFolder.Caption := Path;
- SFLoaded := True;
- except
- lFolder2.Caption := 'No Songs loaded';
- lFolder.Caption := '';
- SFLoaded := False;
- end;
- end;
-
- bToDB.Enabled := DBLoaded and SFLoaded;
- bFromDB.Enabled := bToDB.Enabled;
-end;
-
-procedure Tmainform.UpdateLoadedSongs(Path: String; Count: integer);
-begin
- lFolder2.Caption := Inttostr(Count) + ' Songs loaded';
- lFolder.Caption := Path;
- Application.ProcessMessages;
-end;
-
-procedure Tmainform.bToDBClick(Sender: TObject);
-var
- I, J, K: Integer;
- LastI: integer;
-begin
- if (Messagebox(0, PChar('If the same directory is added more than one time the Score-File will be useless. Contėnue ?'), PChar(Mainform.Caption), MB_ICONWARNING or MB_YESNO) = IDYes) then
- begin
- pProgress.Max := high(Songs.Song);
- pProgress.Position := 0;
- // Go through all Songs
- For I := 0 to high(Songs.Song) do
- begin
- try
- //Read Scores from .SCO File
- ReadScore (Songs.Song[I]);
-
- //Go from Easy to Difficult
- For J := 0 to 2 do
- begin
- //Go through all Score Entrys with Difficulty J
- For K := 0 to high(Songs.Song[I].Score[J]) do
- begin
- //Add to DataBase
- DataBase.AddScore(Songs.Song[I], J, Songs.Song[I].Score[J][K].Name, Songs.Song[I].Score[J][K].Score);
- end;
- end;
-
- except
- showmessage ('Error Converting Score From Song: ' + Songs.Song[I].Path + Songs.Song[I].FileName);
- end;
-
- //Update ProgressBar
- J := I div 30;
- if (LastI <> J) then
- begin
- LastI := J;
- pProgress.Position := I;
- lStatus.Caption := 'Adding Songscore: ' + Songs.Song[I].Artist + ' - ' + Songs.Song[I].Title;
- Application.ProcessMessages;
- end;
- end;
-
- pProgress.Position := pProgress.Max;
- lStatus.Caption := 'Finished';
- end;
-end;
-
-procedure Tmainform.bFromDBClick(Sender: TObject);
-var
- I, J: Integer;
- LastI: integer;
- anyScoreinthere: boolean;
-begin
- if (Messagebox(0, PChar('All Score Entrys in the Song Directory having an equivalent will be Overwritten. Contėnue ?'), PChar(Mainform.Caption), MB_ICONWARNING or MB_YESNO) = IDYes) then
- begin
- pProgress.Max := high(Songs.Song);
- pProgress.Position := 0;
- // Go through all Songs
- For I := 0 to high(Songs.Song) do
- begin
- try
- //Not Write ScoreFile when there are no Scores for this File
- anyScoreinthere := false;
- //Read Scores from DB File
- Database.ReadScore (Songs.Song[I]);
-
- //Go from Easy to Difficult
- For J := 0 to 2 do
- begin
- anyScoreinthere := anyScoreinthere or (Length(Songs.Song[I].Score[J]) > 0);
- end;
-
- if AnyScoreinThere then
- WriteScore(Songs.Song[I]);
-
- except
- showmessage ('Error Converting Score From Song: ' + Songs.Song[I].Path + Songs.Song[I].FileName);
- end;
-
- //Update ProgressBar
- J := I div 30;
- if (LastI <> J) then
- begin
- LastI := J;
- pProgress.Position := I;
- lStatus.Caption := 'Writing ScoreFile: ' + Songs.Song[I].Artist + ' - ' + Songs.Song[I].Title;
- Application.ProcessMessages;
- end;
- end;
-
- pProgress.Position := pProgress.Max;
- lStatus.Caption := 'Finished';
- end;
-end;
-
-end.
+unit Umainform; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ComCtrls, UDataBase, ShellAPI, ShlObj, USongs; + +type + Tmainform = class(TForm) + Label1: TLabel; + lFolder: TLabel; + bFLoad: TButton; + Label2: TLabel; + lDatabase: TLabel; + bDLoad: TButton; + lDatabase2: TLabel; + lFolder2: TLabel; + bToDB: TButton; + bFromDB: TButton; + pProgress: TProgressBar; + oDatabase: TOpenDialog; + lStatus: TLabel; + procedure FormCreate(Sender: TObject); + procedure bDLoadClick(Sender: TObject); + function BrowseDialog (const Title: string; const Flag: integer): string; + procedure bFLoadClick(Sender: TObject); + procedure UpdateLoadedSongs(Path: String; Count: integer); + procedure bToDBClick(Sender: TObject); + procedure bFromDBClick(Sender: TObject); + private + { Private-Deklarationen } + public + { Public-Deklarationen } + end; + +var + mainform: Tmainform; + DBLoaded: Boolean; + SFLoaded: Boolean; + + +implementation + +uses UScores; + +{$R *.dfm} + +function Tmainform.BrowseDialog + (const Title: string; const Flag: integer): string; +var + lpItemID : PItemIDList; + BrowseInfo : TBrowseInfo; + DisplayName : array[0..MAX_PATH] of char; + TempPath : array[0..MAX_PATH] of char; +begin + Result:=''; + FillChar(BrowseInfo, sizeof(TBrowseInfo), #0); + with BrowseInfo do begin + hwndOwner := Application.Handle; + pszDisplayName := @DisplayName; + lpszTitle := PChar(Title); + ulFlags := Flag; + end; + lpItemID := SHBrowseForFolder(BrowseInfo); + if lpItemId <> nil then begin + SHGetPathFromIDList(lpItemID, TempPath); + Result := TempPath; + GlobalFreePtr(lpItemID); + end; +end; + +procedure Tmainform.FormCreate(Sender: TObject); +begin + Database := TDataBaseSystem.Create; + Songs := TSongs.Create; + lStatus.Caption := 'Welcome to USD Score Converter'; + lFolder2.Caption := 'No Songs loaded'; + lFolder.Caption := ''; + lDataBase2.Caption := 'No Database loaded'; + lDataBase.Caption := ''; +end; + +procedure Tmainform.bDLoadClick(Sender: TObject); +begin + if oDatabase.Execute then + begin + try + Database.Init(oDataBase.FileName); + lDataBase2.Caption := 'Database loaded'; + lDataBase.Caption := oDataBase.FileName; + DBLoaded := True; + except + lDataBase2.Caption := 'No Database loaded'; + lDataBase.Caption := ''; + DBLoaded := False; + end; + end; + bToDB.Enabled := DBLoaded and SFLoaded; + bFromDB.Enabled := bToDB.Enabled; +end; + +procedure Tmainform.bFLoadClick(Sender: TObject); +var + Path: String; +begin + Path := BrowseDialog('Select UltraStar SongFolder', BIF_RETURNONLYFSDIRS); + + if Path <> '' then + begin + SetLength(Songs.Song, 0); + try + Songs.BrowseDir(Path + '\'); + lFolder2.Caption := Inttostr(Length(Songs.Song)) + ' Songs loaded'; + lFolder.Caption := Path; + SFLoaded := True; + except + lFolder2.Caption := 'No Songs loaded'; + lFolder.Caption := ''; + SFLoaded := False; + end; + end; + + bToDB.Enabled := DBLoaded and SFLoaded; + bFromDB.Enabled := bToDB.Enabled; +end; + +procedure Tmainform.UpdateLoadedSongs(Path: String; Count: integer); +begin + lFolder2.Caption := Inttostr(Count) + ' Songs loaded'; + lFolder.Caption := Path; + Application.ProcessMessages; +end; + +procedure Tmainform.bToDBClick(Sender: TObject); +var + I, J, K: Integer; + LastI: integer; +begin + if (Messagebox(0, PChar('If the same directory is added more than one time the Score-File will be useless. Contėnue ?'), PChar(Mainform.Caption), MB_ICONWARNING or MB_YESNO) = IDYes) then + begin + pProgress.Max := high(Songs.Song); + pProgress.Position := 0; + // Go through all Songs + For I := 0 to high(Songs.Song) do + begin + try + //Read Scores from .SCO File + ReadScore (Songs.Song[I]); + + //Go from Easy to Difficult + For J := 0 to 2 do + begin + //Go through all Score Entrys with Difficulty J + For K := 0 to high(Songs.Song[I].Score[J]) do + begin + //Add to DataBase + DataBase.AddScore(Songs.Song[I], J, Songs.Song[I].Score[J][K].Name, Songs.Song[I].Score[J][K].Score); + end; + end; + + except + showmessage ('Error Converting Score From Song: ' + Songs.Song[I].Path + Songs.Song[I].FileName); + end; + + //Update ProgressBar + J := I div 30; + if (LastI <> J) then + begin + LastI := J; + pProgress.Position := I; + lStatus.Caption := 'Adding Songscore: ' + Songs.Song[I].Artist + ' - ' + Songs.Song[I].Title; + Application.ProcessMessages; + end; + end; + + pProgress.Position := pProgress.Max; + lStatus.Caption := 'Finished'; + end; +end; + +procedure Tmainform.bFromDBClick(Sender: TObject); +var + I, J: Integer; + LastI: integer; + anyScoreinthere: boolean; +begin + if (Messagebox(0, PChar('All Score Entrys in the Song Directory having an equivalent will be Overwritten. Contėnue ?'), PChar(Mainform.Caption), MB_ICONWARNING or MB_YESNO) = IDYes) then + begin + pProgress.Max := high(Songs.Song); + pProgress.Position := 0; + // Go through all Songs + For I := 0 to high(Songs.Song) do + begin + try + //Not Write ScoreFile when there are no Scores for this File + anyScoreinthere := false; + //Read Scores from DB File + Database.ReadScore (Songs.Song[I]); + + //Go from Easy to Difficult + For J := 0 to 2 do + begin + anyScoreinthere := anyScoreinthere or (Length(Songs.Song[I].Score[J]) > 0); + end; + + if AnyScoreinThere then + WriteScore(Songs.Song[I]); + + except + showmessage ('Error Converting Score From Song: ' + Songs.Song[I].Path + Songs.Song[I].FileName); + end; + + //Update ProgressBar + J := I div 30; + if (LastI <> J) then + begin + LastI := J; + pProgress.Position := I; + lStatus.Caption := 'Writing ScoreFile: ' + Songs.Song[I].Artist + ' - ' + Songs.Song[I].Title; + Application.ProcessMessages; + end; + end; + + pProgress.Position := pProgress.Max; + lStatus.Caption := 'Finished'; + end; +end; + +end. |