aboutsummaryrefslogtreecommitdiffstats
path: root/src/screens/UScreenPopup.pas
diff options
context:
space:
mode:
Diffstat (limited to 'src/screens/UScreenPopup.pas')
-rw-r--r--src/screens/UScreenPopup.pas1161
1 files changed, 1160 insertions, 1 deletions
diff --git a/src/screens/UScreenPopup.pas b/src/screens/UScreenPopup.pas
index fdf4a69c..e950581b 100644
--- a/src/screens/UScreenPopup.pas
+++ b/src/screens/UScreenPopup.pas
@@ -60,6 +60,66 @@ type
function Draw: boolean; override;
end;
+{ for later addition
+type
+ TPopupInsertUserHandler = procedure(Value: boolean; Data: pointer);
+
+ TScreenPopupInsertUser = class(TMenu)
+ private
+ fHandler: TPopupInsertUserHandler;
+ fHandlerData: Pointer;
+
+ public
+ Visible: boolean; // whether the menu should be drawn
+ Username: UTF8String;
+ Password: UTF8String;
+ InteractionTmp: integer;
+
+ constructor Create; override;
+ function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override;
+ procedure OnShow; override;
+ procedure ShowPopup(const Title: UTF8String; Msg: UTF8String; Handler: TPopupInsertUserHandler;
+ HandlerData: Pointer);
+ function Draw: boolean; override;
+ end;
+
+type
+ TPopupSendScoreHandler = procedure(Value: integer; Data: pointer);
+
+ TScreenPopupSendScore = class(TMenu)
+ private
+ fHandler: TPopupSendScoreHandler;
+ fHandlerData: pointer;
+
+ TColorR: real;
+ TColorG: real;
+ TColorB: real;
+
+ TDColorR: real;
+ TDColorG: real;
+ TDColorB: real;
+
+ public
+ Visible: boolean; // whether the menu should be drawn
+ IWebsite: array of UTF8String;
+ IUsername: array of UTF8String;
+ IPlayersPlay: array of UTF8String;
+ Password: UTF8String;
+ Username: UTF8String;
+
+ SelectValueP: integer;
+ SelectValueW: integer;
+ SelectValueU: integer;
+
+ constructor Create; override;
+ function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override;
+ procedure OnShow; override;
+ procedure ShowPopup(const Title: UTF8String; Handler: TPopupSendScoreHandler;
+ HandlerData: Pointer);
+ function Draw: boolean; override;
+ end;
+}
+
type
TScreenPopup = class(TMenu)
{
@@ -87,6 +147,49 @@ type
constructor Create;
end;
+{ for later addition
+type
+ TScreenPopupScoreDownload = class(TMenu)
+ public
+ Visible: boolean; // whether the menu should be drawn
+ Actual_Song: integer;
+ Actual_Web: integer;
+ Index_Song: integer;
+ Num_Songs: integer;
+ Num_Webs: integer;
+ CountSongsUpdate: integer;
+
+ OpScoreFile: boolean;
+ ScoreFile: TextFile;
+
+ Download_Phase: integer;
+
+ Text_SongSituation: UTF8String;
+ Text_WebSituation: UTF8String;
+
+ Texture_ProgressBar: TTexture;
+
+ List_MD5Song: widestring;
+ Receive_List: array[0..2] of widestring;
+ Actual_Level: integer;
+ Position_Receive_List: array[0..2] of integer;
+
+ constructor Create; override;
+ function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override;
+ procedure OnShow; override;
+ procedure ShowPopup(optmode: integer; optsong: integer; optweb: integer);
+ procedure DownloadTimeBarSong();
+ procedure DownloadTimeBarWeb();
+ function Draw: boolean; override;
+ procedure ReadMD5FileSong();
+ procedure ReceiveListScore();
+ procedure SaveScoreSong();
+ procedure FileSaveScoreSong();
+ procedure LogSongUpdate(Artist, Title, WebName: UTF8String);
+ procedure OpenFile();
+ end;
+}
+
var
//ISelections: array of string;
SelectValue: integer;
@@ -132,7 +235,7 @@ begin
SDLK_DOWN: InteractNext;
SDLK_UP: InteractPrev;
-
+
SDLK_RIGHT: InteractNext;
SDLK_LEFT: InteractPrev;
end;
@@ -199,6 +302,1062 @@ begin
Background.OnShow
end;
+{ TScreenPopupInsertUser }
+
+{for later addition
+function TScreenPopupInsertUser.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean;
+var
+ Value: boolean;
+ I: integer;
+ Password_TMP: UTF8String;
+begin
+ Result := true;
+ if (PressedDown) then
+ begin // Key Down
+ // check normal keys
+ if (IsPrintableChar(CharCode)) then
+ begin
+ if (Interaction = 0) or (Interaction = 1) then
+ begin
+ if (Interaction = 0) then
+ begin
+ Button[0].Text[0].Text := Button[0].Text[0].Text + UCS4ToUTF8String(CharCode);
+ Username := Username + UCS4ToUTF8String(CharCode);
+ end
+ else
+ begin
+ Password := Password + UCS4ToUTF8String(CharCode);
+ Button[1].Text[0].Text := Button[1].Text[0].Text + '*';
+ end;
+ end;
+ end;
+
+ // check special keys
+ case PressedKey of
+ SDLK_ESCAPE:
+ begin
+ Value := false;
+ Visible := false;
+ Result := false;
+ end;
+
+ SDLK_BACKSPACE :
+ begin
+ if (Interaction = 0) or (Interaction = 1) then
+ begin
+ Button[Interaction].Text[0].DeleteLastLetter();
+
+ if (Interaction = 0) then
+ Username := Button[Interaction].Text[0].Text;
+
+ if (Interaction = 1) then
+ begin
+ Password_TMP := '';
+ for I := 1 to Length(Password)-1 do
+ Password_TMP := Password_TMP + Password[I];
+ Password := Password_TMP;
+ end;
+ end;
+ end;
+
+ SDLK_RETURN:
+ begin
+ InteractionTmp := Interaction;
+
+ if (Interaction <> 3) then
+ Interaction := 2;
+
+ Value := (Interaction = 2);
+ if (Interaction = 3) then
+ Visible := false;
+ Result := false;
+ end;
+
+ SDLK_TAB: InteractNext;
+
+ SDLK_DOWN: InteractNext;
+ SDLK_UP: InteractPrev;
+
+ SDLK_RIGHT: InteractNext;
+ SDLK_LEFT: InteractPrev;
+ end;
+ end;
+
+ if (not Result) then
+ begin
+ if (@fHandler <> nil) then
+ fHandler(Value, fHandlerData);
+ end;
+end;
+
+constructor TScreenPopupInsertUser.Create;
+begin
+ inherited Create;
+
+ fHandler := nil;
+ fHandlerData := nil;
+
+ AddText(Theme.InsertUserPopup.TextInsertUser);
+
+ LoadFromTheme(Theme.InsertUserPopup);
+
+ AddButton(Theme.InsertUserPopup.ButtonUsername);
+ if (Length(Button[0].Text) = 0) then
+ AddButtonText(14, 20, '');
+
+ AddButton(Theme.InsertUserPopup.ButtonPassword);
+ if (Length(Button[1].Text) = 0) then
+ AddButtonText(14, 20, '');
+
+ AddButton(Theme.InsertUserPopup.Button1);
+ if (Length(Button[2].Text) = 0) then
+ AddButtonText(14, 20, 'Add');
+
+ AddButton(Theme.InsertUserPopup.Button2);
+ if (Length(Button[3].Text) = 0) then
+ AddButtonText(14, 20, 'Cancel');
+
+ Button[0].Text[0].Writable := true;
+ Button[1].Text[0].Writable := true;
+
+ Interaction := 0;
+end;
+
+function TScreenPopupInsertUser.Draw: boolean;
+begin
+ Result := inherited Draw;
+end;
+
+procedure TScreenPopupInsertUser.OnShow;
+begin
+ inherited;
+end;
+
+procedure TScreenPopupInsertUser.ShowPopup(const Title: UTF8String; Msg: UTF8String; Handler: TPopupInsertUserHandler;
+ HandlerData: Pointer);
+begin
+
+ Visible := true; //Set Visible
+ fHandler := Handler;
+ fHandlerData := HandlerData;
+
+ Text[0].Text := Language.Translate(Msg);
+ Text[1].Text := Title;
+
+ Button[0].Visible := true;
+ Button[1].Visible := true;
+ Button[2].Visible := true;
+ Button[3].Visible := true;
+
+ Password := '';
+ Username := '';
+
+ Button[0].Text[0].Text := '';
+ Button[1].Text[0].Text := '';
+ Button[2].Text[0].Text := Language.Translate('MSG_INSERT_USER_ADD');
+ Button[3].Text[0].Text := Language.Translate('MSG_INSERT_USER_CANCEL');
+
+ Interaction := 0;
+
+ Background.OnShow
+end;
+}
+{ TScreenPopupSendScore }
+{
+function TScreenPopupSendScore.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean;
+var
+ New_User: boolean;
+ I, Value: integer;
+ Password_TMP: UTF8String;
+begin
+ Result := true;
+ if (PressedDown) then
+ begin // Key Down
+ // check normal keys
+ if (IsPrintableChar(CharCode)) then
+ begin
+ if (Interaction = 3) or (Interaction = 4) then
+ begin
+ if (Interaction = 3) then
+ begin
+ Button[0].Text[0].Text := Button[0].Text[0].Text + UCS4ToUTF8String(CharCode);
+ Username := Username + UCS4ToUTF8String(CharCode);
+ end;
+
+ if (Interaction = 4) then
+ begin
+ Button[1].Text[0].Text := Button[1].Text[0].Text + '*';
+ Password := Password + UCS4ToUTF8String(CharCode);
+ end;
+ end
+ end;
+
+ // check special keys
+ case PressedKey of
+ SDLK_ESCAPE:
+ begin
+ Value := 0;
+ Visible := false;
+ Result := false;
+ end;
+
+ SDLK_BACKSPACE:
+ begin
+ if (Interaction = 3) or (Interaction = 4) then
+ begin
+ Button[Interaction - 3].Text[0].DeleteLastLetter;
+
+ if (Interaction = 3) then
+ Username := Button[Interaction - 3].Text[0].Text;
+
+ if (Interaction = 4) then
+ begin
+ Password_TMP := '';
+ for I := 1 to Length(Password)-1 do
+ Password_TMP := Password_TMP + Password[I];
+ Password := Password_TMP;
+ end;
+
+ end
+ else
+ begin
+ Value := 0;
+ Visible := false;
+ Result := false;
+ end;
+ end;
+
+ SDLK_RETURN:
+ begin
+
+ if (Interaction = 5) then
+ begin
+ Value := 1;
+ Visible := false;
+ end;
+
+ if (Interaction = 6) then
+ begin
+ Value := 2;
+ Visible := false;
+ end;
+
+ Result := false;
+ end;
+
+ SDLK_DOWN: InteractNext;
+ SDLK_UP: InteractPrev;
+
+ SDLK_TAB: InteractNext;
+
+ SDLK_RIGHT:
+ begin
+ if (Interaction < 3) then
+ InteractInc;
+
+ if (Interaction = 1) and (SelectValueW <= High(IWebsite)) then
+ begin
+ New_User := false;
+
+ if (SelectValueU <> High(IUsername)) then
+ SelectValueU := 0
+ else
+ New_User := true;
+
+ SetLength(IUsername, Length(DataBase.NetworkUser[SelectValueW].UserList));
+ for I := 0 to High(DataBase.NetworkUser[SelectValueW].UserList) do
+ IUsername[I] := DataBase.NetworkUser[SelectValueW].UserList[I].Username;
+ SetLength(IUsername, Length(IUsername) + 1);
+ IUsername[High(IUsername)] := Language.Translate('SCORE_SEND_OTHER_USER');
+
+
+ if (New_User = true) then
+ SelectValueU := High(IUsername);
+
+ UpdateSelectSlideOptions(Theme.SendScorePopup.SelectSlide3, 2, IUsername, SelectValueU);
+ end;
+
+ if (SelectValueU = High(IUsername)) then
+ begin
+ Button[0].Text[1].ColR := TColorR;
+ Button[0].Text[1].ColG := TColorG;
+ Button[0].Text[1].ColB := TColorB;
+
+ Button[1].Text[1].ColR := TColorR;
+ Button[1].Text[1].ColG := TColorG;
+ Button[1].Text[1].ColB := TColorB;
+
+ Button[0].Selectable := true;
+ Button[1].Selectable := true;
+ end
+ else
+ begin
+ Button[0].Text[1].ColR := TDColorR;
+ Button[0].Text[1].ColG := TDColorG;
+ Button[0].Text[1].ColB := TDColorB;
+
+ Button[1].Text[1].ColR := TDColorR;
+ Button[1].Text[1].ColG := TDColorG;
+ Button[1].Text[1].ColB := TDColorB;
+
+ Button[0].Selectable := false;
+ Button[1].Selectable := false;
+ end;
+
+ end;
+ SDLK_LEFT:
+ begin
+ if (Interaction < 3) then
+ InteractDec;
+
+ if (Interaction = 1) then
+ begin
+ New_User := false;
+
+ SetLength(IUsername, Length(DataBase.NetworkUser[SelectValueW].UserList));
+
+ for I := 0 to High(DataBase.NetworkUser[SelectValueW].UserList) do
+ IUsername[I] := DataBase.NetworkUser[SelectValueW].UserList[I].Username;
+
+ SetLength(IUsername, Length(IUsername) + 1);
+ IUsername[High(IUsername)] := Language.Translate('SCORE_SEND_OTHER_USER');
+
+ if ((SelectValueU <> High(IUsername)) and (High(IUsername) <> 0)) then
+ SelectValueU := 0
+ else
+ New_User := true;
+
+ if (New_User = true) then
+ SelectValueU := High(IUsername);
+
+ UpdateSelectSlideOptions(Theme.SendScorePopup.SelectSlide3, 2, IUsername, SelectValueU);
+ end;
+
+ if (SelectValueU = High(IUsername)) then
+ begin
+ Button[0].Text[1].ColR := TColorR;
+ Button[0].Text[1].ColG := TColorG;
+ Button[0].Text[1].ColB := TColorB;
+
+ Button[1].Text[1].ColR := TColorR;
+ Button[1].Text[1].ColG := TColorG;
+ Button[1].Text[1].ColB := TColorB;
+
+ Button[0].Selectable := true;
+ Button[1].Selectable := true;
+ end
+ else
+ begin
+ Button[0].Text[1].ColR := TDColorR;
+ Button[0].Text[1].ColG := TDColorG;
+ Button[0].Text[1].ColB := TDColorB;
+
+ Button[1].Text[1].ColR := TDColorR;
+ Button[1].Text[1].ColG := TDColorG;
+ Button[1].Text[1].ColB := TDColorB;
+
+ Button[0].Selectable := false;
+ Button[1].Selectable := false;
+ end;
+
+ end;
+
+ end;
+ end;
+
+ if (not Result) then
+ begin
+ if (@fHandler <> nil) then
+ fHandler(Value, fHandlerData);
+ end;
+
+end;
+
+constructor TScreenPopupSendScore.Create;
+var
+ I: integer;
+begin
+ inherited Create;
+
+ fHandler := nil;
+ fHandlerData := nil;
+ SelectValueP := 0;
+ SelectValueW := 0;
+ SelectValueU := 0;
+
+ LoadFromTheme(Theme.SendScorePopup);
+
+ SetLength(IWebsite, 0);
+ for I := 0 to High(DataBase.NetworkUser) do
+ begin
+ SetLength(IWebsite, Length(IWebsite) + 1);
+ IWebsite[High(IWebsite)] := DataBase.NetworkUser[I].Website;
+ end;
+
+ AddSelectSlide(Theme.SendScorePopup.SelectSlide1, SelectValueP, IPlayersPlay);
+ AddSelectSlide(Theme.SendScorePopup.SelectSlide2, SelectValueW, IWebsite);
+ AddSelectSlide(Theme.SendScorePopup.SelectSlide3, SelectValueU, IUsername);
+
+ TColorR := Theme.SendScorePopup.ButtonUsername.ColR;
+ TColorG := Theme.SendScorePopup.ButtonUsername.ColG;
+ TColorB := Theme.SendScorePopup.ButtonUsername.ColB;
+
+ TDColorR := Theme.SendScorePopup.ButtonUsername.DColR;
+ TDColorG := Theme.SendScorePopup.ButtonUsername.DColG;
+ TDColorB := Theme.SendScorePopup.ButtonUsername.DColB;
+
+ AddButton(Theme.SendScorePopup.ButtonUsername);
+ AddButton(Theme.SendScorePopup.ButtonPassword);
+
+ AddButton(Theme.SendScorePopup.Button1);
+ AddButton(Theme.SendScorePopup.Button2);
+
+ Interaction := 0;
+end;
+
+function TScreenPopupSendScore.Draw: boolean;
+begin
+ Result := inherited Draw;
+end;
+
+procedure TScreenPopupSendScore.OnShow;
+begin
+ inherited;
+end;
+
+procedure TScreenPopupSendScore.ShowPopup(const Title: UTF8String; Handler: TPopupSendScoreHandler;
+ HandlerData: Pointer);
+var
+ I: integer;
+begin
+
+ Visible := true; //Set Visible
+ fHandler := Handler;
+ fHandlerData := HandlerData;
+ Password := '';
+ Username := '';
+
+ SelectValueP := 0;
+ SelectValueW := 0;
+ SelectValueU := 0;
+
+ Interaction := 0;
+
+ Text[0].Text := Language.Translate(Title);
+
+ for I := 0 to 3 do
+ Button[I].Visible := true;
+
+ Button[0].Text[0].Text := '';
+ Button[1].Text[0].Text := '';
+
+ Button[2].Text[0].Text := Language.Translate('SCORE_SEND');
+ Button[3].Text[0].Text := Language.Translate('SCORE_SAVE');
+
+ SetLength(IPlayersPlay, PlayersPlay);
+
+ for I := 0 to PlayersPlay - 1 do
+ IPlayersPlay[I] := Ini.Name[I];
+
+ UpdateSelectSlideOptions(Theme.SendScorePopup.SelectSlide1, 0, IPlayersPlay, SelectValueP);
+
+ //UpdateSelectSlideOptions(Theme.SendScorePopup.SelectSlide2, 1, IWebsite, SelectValueW);
+
+ SetLength(IUsername, Length(DataBase.NetworkUser[SelectValueW].UserList));
+
+ for I := 0 to High(DataBase.NetworkUser[SelectValueW].UserList) do
+ IUsername[I] := DataBase.NetworkUser[SelectValueW].UserList[I].Username;
+
+ SetLength(IUsername, Length(IUsername) + 1);
+ IUsername[High(IUsername)] := Language.Translate('SCORE_SEND_OTHER_USER');
+
+ UpdateSelectSlideOptions(Theme.SendScorePopup.SelectSlide3, 2, IUsername, SelectValueU);
+
+ if (SelectValueU = High(IUsername)) then
+ begin
+ Button[0].Text[1].ColR := TColorR;
+ Button[0].Text[1].ColG := TColorG;
+ Button[0].Text[1].ColB := TColorB;
+
+ Button[1].Text[1].ColR := TColorR;
+ Button[1].Text[1].ColG := TColorG;
+ Button[1].Text[1].ColB := TColorB;
+
+ Button[0].Selectable := true;
+ Button[1].Selectable := true;
+ end
+ else
+ begin
+ Button[0].Selectable := false;
+ Button[1].Selectable := false;
+
+ Button[0].Text[1].ColR := TDColorR;
+ Button[0].Text[1].ColG := TDColorG;
+ Button[0].Text[1].ColB := TDColorB;
+
+ Button[1].Text[1].ColR := TDColorR;
+ Button[1].Text[1].ColG := TDColorG;
+ Button[1].Text[1].ColB := TDColorB;
+ end;
+
+ SelectsS[0].Visible := true;
+ SelectsS[1].Visible := true;
+ SelectsS[2].Visible := true;
+
+ Interaction := 0;
+
+ Background.OnShow
+end;
+}
+{ TScreenPopupScoreDownload }
+{
+function TScreenPopupScoreDownload.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean;
+var
+ Value: boolean;
+begin
+ Result := true;
+ if (PressedDown) then
+ begin // Key Down
+ // check special keys
+ case PressedKey of
+ SDLK_ESCAPE,
+ SDLK_BACKSPACE :
+ begin
+ Value := false;
+ Visible := false;
+ Result := false;
+ Text[0].Text := Language.Translate('SCORE_DOWNLOAD_RECEIVE_LIST');
+ Text[1].Text := '';
+ end;
+
+ SDLK_RETURN:
+ begin
+ Value := (Interaction = 0);
+ if (Interaction = 0) then
+ begin
+ Visible := false;
+ Result := false;
+ Text[0].Text := Language.Translate('SCORE_DOWNLOAD_RECEIVE_LIST');
+ Text[1].Text := '';
+ end;
+ end;
+
+ SDLK_DOWN: Interaction := -1;
+ SDLK_UP: Interaction := -1;
+
+ SDLK_RIGHT: InteractNext;
+ SDLK_LEFT: InteractPrev;
+ end;
+ end;
+
+end;
+
+constructor TScreenPopupScoreDownload.Create;
+begin
+ inherited Create;
+
+ Texture_ProgressBar := Texture.LoadTexture(Skin.GetTextureFileName('ProgressBar'));
+
+ Theme.ScoreDownloadPopup.TextSongScoreDownload.Text := Language.Translate('SCORE_DOWNLOAD_RECEIVE_LIST');
+ Theme.ScoreDownloadPopup.TextWebScoreDownload.Text := '';
+
+ AddText(Theme.ScoreDownloadPopup.TextSongScoreDownload);
+ AddText(Theme.ScoreDownloadPopup.TextWebScoreDownload);
+
+ LoadFromTheme(Theme.ScoreDownloadPopup);
+
+ AddButton(Theme.ScoreDownloadPopup.Button1);
+ if (Length(Button[0].Text) = 0) then
+ AddButtonText(14, 20, 'Button 1');
+
+ Interaction := 0;
+end;
+
+procedure TScreenPopupScoreDownload.LogSongUpdate(Artist, Title, WebName: UTF8String);
+var
+ UpdateFile: TextFile;
+begin
+ AssignFile(UpdateFile, WebScoresPath.Append(WebName + ' [Song Update].txt').ToNative);
+
+ if FileExists(WebScoresPath.Append(WebName + ' [Song Update].txt').ToNative) then
+ Append(UpdateFile)
+ else
+ Rewrite(UpdateFile);
+
+ WriteLn(UpdateFile, Artist + ' - ' + Title);
+
+ Flush(UpdateFile);
+ Close(UpdateFile);
+end;
+
+procedure TScreenPopupScoreDownload.SaveScoreSong();
+var
+ String_Text, User_Score, Max_Score, Media_Score: string;
+ I, J, Update: integer;
+ DeleteSongLevel: array [0..2] of boolean;
+begin
+
+ if not(CatSongs.Song[Index_Song].Main) then
+ begin
+ Actual_Song := Actual_Song + 1;
+ Text_SongSituation := Language.Translate('SCORE_DOWNLOAD_SONG') + ' ' + IntToStr(Actual_Song) + '/' + IntToStr(Num_Songs);
+ Text_WebSituation := IntToStr(Actual_Web) + '/' + IntToStr(Num_Webs);
+
+ for J := 0 to 2 do
+ begin
+
+ if (Position_Receive_List[J] <= Length(Receive_List[J])) then
+ begin
+
+ String_Text := '';
+
+ while (Receive_List[J][Position_Receive_List[J]] <> #10) and (Position_Receive_List[J] <= Length(Receive_List[J])) do
+ begin
+ String_Text := String_Text + Receive_List[J][Position_Receive_List[J]];
+ Position_Receive_List[J] := Position_Receive_List[J] + 1;
+ end;
+
+ // E -> Error song no exist in web
+ if (String_Text <> 'ERROR') then
+ begin
+ DeleteSongLevel[J] := false;
+
+ DataBase.AddSong(CatSongs.Song[Index_Song]);
+
+ Max_Score := Copy(String_Text, 0, 5);
+ Media_Score := Copy(String_Text, 6, 5);
+ User_Score := Copy(String_Text, 11, Length(String_Text) - 10);
+
+ DataBase.AddMax_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID, StrToInt(Max_Score), J);
+ DataBase.AddMedia_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID, StrToInt(Media_Score), J);
+ DataBase.AddUser_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID, User_Score, J);
+ end
+ else
+ DeleteSongLevel[J] := true;
+
+ Position_Receive_List[J] := Position_Receive_List[J] + 1;
+ end;
+ end;
+
+ if (DeleteSongLevel[0]) and (DeleteSongLevel[1]) and (DeleteSongLevel[2]) then
+ begin
+ Update := DataBase.Delete_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID);
+
+ if (Update <> 0) then
+ begin
+ LogSongUpdate(CatSongs.Song[Index_Song].Artist, CatSongs.Song[Index_Song].Title, DllMan.Websites[Actual_Web - 1].Name);
+ CountSongsUpdate := CountSongsUpdate + 1;
+ end;
+ end;
+
+ end;
+
+ Index_Song := Index_Song + 1;
+
+end;
+
+procedure TScreenPopupScoreDownload.FileSaveScoreSong();
+var
+ String_Text, User_Score, Max_Score, Media_Score, MD5_Song: string;
+ Level: byte;
+ Update: integer;
+ SongExist: boolean;
+begin
+
+ if not(CatSongs.Song[Index_Song].Main) then
+ begin
+ Actual_Song := Actual_Song + 1;
+ Text_SongSituation := Language.Translate('SCORE_DOWNLOAD_SONG') + ' ' + IntToStr(Actual_Song) + '/' + IntToStr(Num_Songs);
+ Text_WebSituation := IntToStr(Actual_Web) + '/' + IntToStr(Num_Webs);
+
+ SongExist := false;
+
+ while not (EOF(ScoreFile)) do
+ begin
+ ReadLn(ScoreFile, String_Text);
+
+ MD5_Song := Copy(String_Text, 0, 32);
+
+ if (CatSongs.Song[Index_Song].MD5 = MD5_Song) then
+ begin
+ SongExist := true;
+ DataBase.AddSong(CatSongs.Song[Index_Song]);
+
+ Level := StrToInt(Copy(String_Text, 33, 1)) - 1;
+ Max_Score := Copy(String_Text, 34, 5);
+ Media_Score := Copy(String_Text, 39, 5);
+ User_Score := Copy(String_Text, 44, Length(String_Text) - 43);
+
+ DataBase.AddMax_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID, StrToInt(Max_Score), Level);
+ DataBase.AddMedia_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID, StrToInt(Media_Score), Level);
+ DataBase.AddUser_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID, User_Score, Level);
+ end;
+ end;
+
+ if not(SongExist) then
+ begin
+ Update := DataBase.Delete_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID);
+
+ if (Update <> 0) then
+ begin
+ LogSongUpdate(CatSongs.Song[Index_Song].Artist, CatSongs.Song[Index_Song].Title, DllMan.Websites[Actual_Web - 1].Name);
+ CountSongsUpdate := CountSongsUpdate + 1;
+ end;
+ end;
+
+ Reset(ScoreFile);
+ end;
+
+ Index_Song := Index_Song + 1;
+
+end;
+
+procedure TScreenPopupScoreDownload.ReadMD5FileSong();
+var
+ I: integer;
+begin
+
+ if (Num_Songs = 1) then
+ begin
+ Index_Song := ScreenSong.Interaction;
+ List_MD5Song := CatSongs.Song[ScreenSong.Interaction].MD5;
+ end
+ else
+ begin
+ for I := 0 to High(CatSongs.Song) do
+ begin
+ if not (CatSongs.Song[I].Main) then
+ List_MD5Song := List_MD5Song + CatSongs.Song[I].MD5;
+ end;
+ end;
+
+ ScreenPopupScoreDownload.Download_Phase := 1;
+end;
+
+procedure TScreenPopupScoreDownload.ReceiveListScore();
+begin
+
+ Text_WebSituation := IntToStr(Actual_Web) + '/' + IntToStr(Num_Webs);
+ Text_SongSituation := Language.Translate('SCORE_DOWNLOAD_RECEIVE_LIST');
+
+ Receive_List[Actual_Level] := '';
+ Receive_List[Actual_Level] := DllMan.WebsiteDownloadScore(List_MD5Song, Actual_Level + 1);
+
+ if (Receive_List[Actual_Level] = '0') then
+ begin
+ ScreenPopupError.ShowPopup(Format(Language.Translate('SONG_MENU_REFRESH_SCORES_ERROR_CONNECTION'), [UTF8Encode(DllMan.Websites[Actual_Web -1].Name)]));
+ Text_SongSituation := Language.Translate('WEBSITE_NO_CONNECTION');
+ Actual_Song := Num_Songs;
+ Actual_Level := 2;
+
+ if (Num_Webs = 1) then
+ Visible := false
+ end;
+
+ Actual_Level := Actual_Level + 1;
+
+end;
+
+procedure TScreenPopupScoreDownload.OpenFile;
+var
+ Filename: string;
+begin
+
+ Filename := WebScoresPath.Append(DataBase.NetworkUser[Actual_Web - 1].Website + ' [Download Scores].txt').ToNative;
+
+ if (FileExists(Filename)) then
+ begin
+ AssignFile(ScoreFile, Filename);
+ Reset(ScoreFile);
+ end
+ else
+ begin
+ ScreenPopupError.ShowPopup(Format(Language.Translate('SONG_MENU_REFRESH_SCORES_ERROR_FILE'), [UTF8Encode(DllMan.Websites[Actual_Web -1].Name)]));
+
+ Actual_Song := Num_Songs;
+ Actual_Level := 2;
+
+ if (Num_Webs = 1) then
+ Visible := false
+ end;
+
+end;
+
+function TScreenPopupScoreDownload.Draw: boolean;
+var
+ I: integer;
+begin
+ inherited Draw;
+
+ Text[0].Text := Text_SongSituation;
+ Text[1].Text := Text_WebSituation;
+
+ DownloadTimeBarSong();
+
+ if (Num_Webs > 1) then
+ DownloadTimeBarWeb();
+
+ if (Download_Phase = 0) then
+ begin
+
+ if (OpScoreFile) then
+ begin
+ OpenFile;
+ Download_Phase := 1;
+ end
+ else
+ ReadMD5FileSong();
+
+ end
+ else
+ begin
+ // ONLINE DOWNLOAD SCORE
+ if not (OpScoreFile) then
+ begin
+ if (Download_Phase = 1) then
+ begin
+ if (Actual_Level <= 2) then
+ begin
+ DLLMan.LoadWebsite(Actual_Web - 1);
+ ReceiveListScore();
+ end
+ else
+ Download_Phase := 2;
+ end
+ else
+ begin
+ if (Actual_Song < Num_Songs) then
+ begin
+ SaveScoreSong();
+ end
+ else
+ begin
+ if ((Actual_Web < Num_Webs) and (Num_Webs > 1)) then
+ begin
+ for I:= 0 to 2 do
+ begin
+ Receive_List[I] := '';
+ Position_Receive_List[I] := 1;
+ end;
+
+ Download_Phase := 1;
+ Actual_Song := 0;
+ Index_Song := 0;
+ Actual_Level := 0;
+ Actual_Web := Actual_Web + 1;
+ end
+ else
+ begin
+ Button[0].Text[0].Text := Language.Translate('SCORE_DOWNLOAD_OK');
+ if (CountSongsUpdate > 0) then
+ begin
+ Visible := false;
+ ScreenPopupInfo.ShowPopup(Format(Language.Translate('SCORE_DOWNLOAD_SONG_UPDATE'), [CountSongsUpdate]));
+ end
+ else
+ Interaction := 0;
+ end;
+ end;
+ end;
+ end
+ else
+ begin
+ // FILE DOWNLOAD
+ if (Actual_Song < Num_Songs) then
+ begin
+ FileSaveScoreSong();
+ end
+ else
+ begin
+ if ((Actual_Web < Num_Webs) and (Num_Webs > 1)) then
+ begin
+ //Download_Phase := 1;
+ Actual_Song := 0;
+ Index_Song := 0;
+ Actual_Level := 0;
+ Actual_Web := Actual_Web + 1;
+ OpenFile;
+ end
+ else
+ begin
+ Button[0].Text[0].Text := Language.Translate('SCORE_DOWNLOAD_OK');
+
+ if (CountSongsUpdate > 0) then
+ begin
+ Visible := false;
+ ScreenPopupInfo.ShowPopup(Format(Language.Translate('SCORE_DOWNLOAD_SONG_UPDATE'), [CountSongsUpdate]));
+ end
+ else
+ Interaction := 0;
+ end;
+
+ end;
+ end;
+ end;
+
+ Result := true;
+
+end;
+
+procedure TScreenPopupScoreDownload.OnShow;
+begin
+ inherited;
+end;
+
+procedure TScreenPopupScoreDownload.DownloadTimeBarSong();
+var
+ x, y: real;
+ width, height: real;
+ Progress: real;
+ CurProgress: real;
+begin
+ x := Theme.ScoreDownloadPopup.DownloadProgressSong.X;
+ y := Theme.ScoreDownloadPopup.DownloadProgressSong.Y;
+
+ width := Theme.ScoreDownloadPopup.DownloadProgressSong.W;
+ height := Theme.ScoreDownloadPopup.DownloadProgressSong.H;
+
+ glColor4f(Theme.ScoreDownloadPopup.DownloadProgressSong.ColR, Theme.ScoreDownloadPopup.DownloadProgressSong.ColG, Theme.ScoreDownloadPopup.DownloadProgressSong.ColB, 1); //Set Color
+
+ glEnable(GL_TEXTURE_2D);
+ glEnable(GL_BLEND);
+
+ glBindTexture(GL_TEXTURE_2D, Texture_ProgressBar.TexNum);
+
+ glBegin(GL_QUADS);
+ glTexCoord2f(0, 0);
+ glVertex2f(x, y);
+
+ CurProgress := Actual_Song;
+ if (CurProgress > 0) then
+ begin
+ Progress := CurProgress / Num_Songs;
+ glTexCoord2f((width * Progress) / 8, 0);
+ glVertex2f(x + width * Progress, y);
+
+ glTexCoord2f((width * Progress) / 8, 1);
+ glVertex2f(x + width * Progress, y + height);
+ end;
+
+ glTexCoord2f(0, 1);
+ glVertex2f(x, y + height);
+ glEnd;
+
+ glDisable(GL_TEXTURE_2D);
+ glDisable(GL_BLEND);
+ glcolor4f(1, 0, 0, 1);
+
+end;
+
+procedure TScreenPopupScoreDownload.DownloadTimeBarWeb();
+var
+ x, y: real;
+ width, height: real;
+ Progress: real;
+ CurProgress: real;
+begin
+ x := Theme.ScoreDownloadPopup.DownloadProgressWeb.X;
+ y := Theme.ScoreDownloadPopup.DownloadProgressWeb.Y;
+
+ width := Theme.ScoreDownloadPopup.DownloadProgressWeb.W;
+ height := Theme.ScoreDownloadPopup.DownloadProgressWeb.H;
+
+ glColor4f(Theme.ScoreDownloadPopup.DownloadProgressWeb.ColR, Theme.ScoreDownloadPopup.DownloadProgressWeb.ColG, Theme.ScoreDownloadPopup.DownloadProgressWeb.ColB, 1); //Set Color
+
+ glEnable(GL_TEXTURE_2D);
+ glEnable(GL_BLEND);
+
+ glBindTexture(GL_TEXTURE_2D, Texture_ProgressBar.TexNum);
+
+ glBegin(GL_QUADS);
+ glTexCoord2f(0, 0);
+ glVertex2f(x, y);
+
+ CurProgress := Actual_Song + ((Actual_Web - 1) * Num_Songs);
+ if (CurProgress > 0) then
+ begin
+ Progress := CurProgress / (Num_Songs * Num_Webs);
+ glTexCoord2f((width * Progress) / 8, 0);
+ glVertex2f(x + width * Progress, y);
+
+ glTexCoord2f((width * Progress) / 8, 1);
+ glVertex2f(x + width * Progress, y + height);
+ end;
+
+ glTexCoord2f(0, 1);
+ glVertex2f(x, y + height);
+ glEnd;
+
+ glDisable(GL_TEXTURE_2D);
+ glDisable(GL_BLEND);
+ glcolor4f(1, 0, 0, 1);
+
+end;
+
+procedure TScreenPopupScoreDownload.ShowPopup(optmode: integer; optsong: integer; optweb: integer);
+var
+ I: integer;
+begin
+ Background.OnShow;
+
+ //reset vars
+ Actual_Song := 0;
+ Actual_Web := 1;
+ Actual_Level := 0;
+ Index_Song := 0;
+ Download_Phase := 0;
+ List_MD5Song := '';
+ OpScoreFile := false;
+ CountSongsUpdate := 0;
+
+ if (optmode = 1) then
+ OpScoreFile := true;
+
+ for I := 0 to 2 do
+ begin
+ Receive_List[I] := '';
+ Position_Receive_List[I] := 1;
+ end;
+
+ Text_SongSituation := Language.Translate('SCORE_DOWNLOAD_CREATE_LIST');
+ Text_WebSituation := '';
+
+ if (optsong = 0) then
+ Num_Songs := 1
+ else
+ Num_Songs := Songs.SongList.Count;
+
+ if (optweb = 0) then
+ begin
+ Num_Webs := High(DataBase.NetworkUser) + 1;
+ if (Num_Webs > 1) then
+ begin
+ Statics[2].Visible := true;
+ Text[1].Visible := true;
+ end
+ else
+ begin
+ Text[1].Visible := false;
+ Statics[2].Visible := false;
+ end;
+ end
+ else
+ begin
+ Num_Webs := 1;
+ Actual_Web := optweb;
+ Text[1].Visible := false;
+ Statics[2].Visible := false;
+ end;
+
+ Visible := true; //Set Visible
+ Button[0].Visible := true;
+ Button[0].Text[0].Text := Language.Translate('SCORE_DOWNLOAD_CANCEL');
+
+ Interaction := -1;
+
+end;
+}
+
{ TScreenPopup }
function TScreenPopup.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean;