Skip to content

Commit

Permalink
Added a "Reload Systems" button in the main menu
Browse files Browse the repository at this point in the history
  • Loading branch information
NeeeeB committed Nov 28, 2017
1 parent 9ff929d commit 16a48da
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 86 deletions.
9 changes: 7 additions & 2 deletions F_Main.dfm
Original file line number Diff line number Diff line change
Expand Up @@ -1039,7 +1039,7 @@ object Frm_Editor: TFrm_Editor
Top = 0
Width = 1238
Height = 698
ActivePage = Tbs_Scrape
ActivePage = Tbs_Main
Align = alClient
MultiLine = True
TabOrder = 0
Expand Down Expand Up @@ -13409,6 +13409,11 @@ object Frm_Editor: TFrm_Editor
Caption = 'Choose folder...'
OnClick = Mnu_ChoosefolderClick
end
object Mnu_Reload: TMenuItem
Caption = 'Reload Systems'
Enabled = False
OnClick = Mnu_ReloadClick
end
object Mnu_Quit: TMenuItem
Caption = 'Quit'
OnClick = Mnu_QuitClick
Expand Down Expand Up @@ -13741,7 +13746,7 @@ object Frm_Editor: TFrm_Editor
Left = 184
Top = 40
Bitmap = {
494C0101010008004C0110001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
494C010101000800500110001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000400000001000000001002000000000000010
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
Expand Down
187 changes: 103 additions & 84 deletions F_Main.pas
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ TFrm_Editor = class(TForm)
Chk_Title: TCheckBox;
Chk_ArcadeBox: TCheckBox;
Chk_Wheel: TCheckBox;
Mnu_Reload: TMenuItem;

procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
Expand Down Expand Up @@ -240,6 +241,7 @@ TFrm_Editor = class(TForm)
procedure Btn_ScrapeLowerClick(Sender: TObject);
procedure Chk_ScrapeClick(Sender: TObject);
procedure Chk_ManualCRCClick(Sender: TObject);
procedure Mnu_ReloadClick(Sender: TObject);

private

Expand All @@ -265,7 +267,7 @@ TFrm_Editor = class(TForm)

procedure LoadFromIni;
procedure SaveToIni;
procedure BuildSystemsList;
procedure BuildSystemsList( aReload : Boolean = False );
procedure LoadGamesList( const aSystem: string );
procedure LoadGame( aGame: TGame );
procedure ClearAllFields;
Expand Down Expand Up @@ -616,6 +618,19 @@ procedure TFrm_Editor.Mnu_ChoosefolderClick(Sender: TObject);
Btn_SaveChanges.Enabled:= False;
end;

//Action au click sur menuitem "Reload Systems"
procedure TFrm_Editor.Mnu_ReloadClick(Sender: TObject);
begin
Img_BackGround.Visible:= True;
EnableControls( False );
Edt_Search.Enabled:= False;
Lbl_Search.Enabled:= False;
ClearAllFields;
Lbx_Games.Items.Clear;
BuildSystemsList( True );
Btn_SaveChanges.Enabled:= False;
end;

//permet d'éxecuter la ligne de commande qui stop/start Emulation Station
//utilisé si on accède aux gamelist directement sur le Pi sinon les modifs ne
//sont pas prises en compte. Utilise le petit utilitaire plink.exe
Expand Down Expand Up @@ -646,7 +661,7 @@ procedure TFrm_Editor.StopOrStartES( aStop, aRecal: Boolean );
end;

//Construction de la liste des systèmes trouvés (et des listes de jeux associées)
procedure TFrm_Editor.BuildSystemsList;
procedure TFrm_Editor.BuildSystemsList( aReload : Boolean = False );
var
_GameListPath: string;
Info: TSearchRec;
Expand All @@ -656,7 +671,7 @@ procedure TFrm_Editor.BuildSystemsList;
_system: TSystemKindObject;
begin
//on met à vide le chemin de base et le logo systeme
FRootPath:= '';
//FRootPath:= '';
Img_System.Picture.Graphic:= nil;

//On vide le combobox des systèmes
Expand All @@ -679,105 +694,109 @@ procedure TFrm_Editor.BuildSystemsList;
ValidFolderCount:= 0;

//On sélectionne le dossier parent où se trouvent les dossiers de systèmes
if ( OpenDialog.Execute ) then begin

//On récupère le chemin vers le dossier parent
FRootPath:= IncludeTrailingPathDelimiter( OpenDialog.FileName );
if ( not aReload ) then begin
Mnu_Reload.Enabled:= False;
if ( OpenDialog.Execute ) then
//On récupère le chemin vers le dossier parent
FRootPath:= IncludeTrailingPathDelimiter( OpenDialog.FileName )
else
Exit;
end;

//On check si le dossier n'est pas vide
IsFound:= ( FindFirst( FRootPath + '*.*', faAnyFile, Info) = 0 );
//On check si le dossier n'est pas vide
IsFound:= ( FindFirst( FRootPath + '*.*', faAnyFile, Info) = 0 );

//Si le dossier est vide : message utilisateur
if not IsFound then begin
ShowMessage( Rst_WrongFolder );
Exit;
end;
//Si le dossier est vide : message utilisateur
if not IsFound then begin
ShowMessage( Rst_WrongFolder );
Exit;
end;

//On boucle sur les dossiers trouvés pour les lister
while IsFound do begin
//On boucle sur les dossiers trouvés pour les lister
while IsFound do begin

//Si le dossier trouvé ne commence pas par un . et qu'il contient
//bien un fichier gamelist.xml alors on crée la liste de jeux
if ( (Info.Attr and faDirectory) <> 0 ) and
( Info.Name[1] <> '.' ) and
( FileExists( FRootPath + IncludeTrailingPathDelimiter( Info.Name ) +
Cst_GameListFileName ) ) then begin
//Si le dossier trouvé ne commence pas par un . et qu'il contient
//bien un fichier gamelist.xml alors on crée la liste de jeux
if ( (Info.Attr and faDirectory) <> 0 ) and
( Info.Name[1] <> '.' ) and
( FileExists( FRootPath + IncludeTrailingPathDelimiter( Info.Name ) +
Cst_GameListFileName ) ) then begin

//on chope le nom du dossier en cours pour construire les chemins
FCurrentFolder:= IncludeTrailingPathDelimiter( Info.Name );
//on chope le nom du dossier en cours pour construire les chemins
FCurrentFolder:= IncludeTrailingPathDelimiter( Info.Name );

//Ici on récupère le chemin vers le fichier gamelist.xml
_GameListPath:= FRootPath + FCurrentFolder + Cst_GameListFileName;
//Ici on récupère le chemin vers le fichier gamelist.xml
_GameListPath:= FRootPath + FCurrentFolder + Cst_GameListFileName;

//On tente de construire la liste des jeux depuis le .xml
TmpList:= BuildGamesList( _GameListPath );
//On tente de construire la liste des jeux depuis le .xml
TmpList:= BuildGamesList( _GameListPath );

//Si la liste n'est pas vide, on traite, sinon on zappe
if Assigned( TmpList ) then begin
//Si la liste n'est pas vide, on traite, sinon on zappe
if Assigned( TmpList ) then begin

//On construit la liste des jeux du système
//et on joute le système à la liste globale de systèmes
GSystemList.Add( Info.Name, TmpList );
//On construit la liste des jeux du système
//et on joute le système à la liste globale de systèmes
GSystemList.Add( Info.Name, TmpList );

//On ajoute ensuite le nom du systeme au combobox des systemes trouvés
_system:= TSystemKindObject.Create( Info.Name );
if ( _system.FSystemKind = skMegaDrive ) and FGenesisLogo then
Cbx_Systems.Items.AddObject( Cst_SystemKindStr[skGenesis], _system )
else
Cbx_Systems.Items.AddObject( Cst_SystemKindStr[_system.FSystemKind], _system );
//On ajoute ensuite le nom du systeme au combobox des systemes trouvés
_system:= TSystemKindObject.Create( Info.Name );
if ( _system.FSystemKind = skMegaDrive ) and FGenesisLogo then
Cbx_Systems.Items.AddObject( Cst_SystemKindStr[skGenesis], _system )
else
Cbx_Systems.Items.AddObject( Cst_SystemKindStr[_system.FSystemKind], _system );

//On incrémente le compteur de dossier système valides
Inc( ValidFolderCount );
end;
//On incrémente le compteur de dossier système valides
Inc( ValidFolderCount );
end;

//Enfin, on passe au dossier suivant (s'il y en a un)
IsFound:= ( FindNext(Info) = 0 );
end;
FindClose(Info);

//Si le compteur de dossier valide est à zéro, message utilisateur
if ( ValidFolderCount = 0 ) then begin
ShowMessage( Rst_WrongFolder );
Screen.Cursor:= crDefault;
Exit;

//On active le Combobox des systemes si au moins un systeme a été trouvé
//Idem pour le listbox des jeux du systeme et on charge la liste du premier système
end else begin
//Enfin, on passe au dossier suivant (s'il y en a un)
IsFound:= ( FindNext(Info) = 0 );
end;
FindClose(Info);

//si le dossier sélectionné se trouve sur le Pi,
//on prévient l'utilisateur qu'on va stopper ES
FFolderIsOnPi:= FRootPath.StartsWith( Cst_Recalbox ) or
FRootPath.StartsWith( Cst_Retropie );

if FFolderIsOnPi and not FPiLoadedOnce then begin
FPiLoadedOnce:= True;
if not FPiPrompts then
MyMessageDlg( Rst_StopES, mtInformation, [mbOK], [Rst_Ok], Rst_Info );
if FRootPath.StartsWith( Cst_Recalbox ) then begin
StopOrStartES( True, True );
FSysIsRecal:= True;
end else begin
StopOrStartES( True, False );
FSysIsRecal:= False;
end;
end;
//Si le compteur de dossier valide est à zéro, message utilisateur
if ( ValidFolderCount = 0 ) then begin
ShowMessage( Rst_WrongFolder );
Screen.Cursor:= crDefault;
Exit;

Cbx_Systems.Enabled:= True;
Lbl_SelectSystem.Enabled:= Cbx_Systems.Enabled;
Cbx_Filter.Enabled:= Cbx_Systems.Enabled;
Lbl_Filter.Enabled:= Cbx_Systems.Enabled;
Cbx_Systems.ItemIndex:= 0;
EnableControls( True );
Cbx_Filter.ItemIndex:= 0;
Edt_Search.Enabled:= True;
Lbl_Search.Enabled:= True;
LoadGamesList( getCurrentFolderName );
//On active le Combobox des systemes si au moins un systeme a été trouvé
//Idem pour le listbox des jeux du systeme et on charge la liste du premier système
end else begin

//On remet le curseur par défaut
Screen.Cursor:= crDefault;
//si le dossier sélectionné se trouve sur le Pi,
//on prévient l'utilisateur qu'on va stopper ES
FFolderIsOnPi:= FRootPath.StartsWith( Cst_Recalbox ) or
FRootPath.StartsWith( Cst_Retropie );

if FFolderIsOnPi and not FPiLoadedOnce then begin
FPiLoadedOnce:= True;
if not FPiPrompts then
MyMessageDlg( Rst_StopES, mtInformation, [mbOK], [Rst_Ok], Rst_Info );
if FRootPath.StartsWith( Cst_Recalbox ) then begin
StopOrStartES( True, True );
FSysIsRecal:= True;
end else begin
StopOrStartES( True, False );
FSysIsRecal:= False;
end;
end;

Cbx_Systems.Enabled:= True;
Lbl_SelectSystem.Enabled:= Cbx_Systems.Enabled;
Cbx_Filter.Enabled:= Cbx_Systems.Enabled;
Lbl_Filter.Enabled:= Cbx_Systems.Enabled;
Cbx_Systems.ItemIndex:= 0;
EnableControls( True );
Cbx_Filter.ItemIndex:= 0;
Edt_Search.Enabled:= True;
Lbl_Search.Enabled:= True;
LoadGamesList( getCurrentFolderName );
Mnu_Reload.Enabled:= True;

//On remet le curseur par défaut
Screen.Cursor:= crDefault;
end;
end;

Expand Down
Binary file modified locale/de/LC_MESSAGES/default.mo
Binary file not shown.
Binary file modified locale/es/LC_MESSAGES/default.mo
Binary file not shown.
Binary file modified locale/fr/LC_MESSAGES/default.mo
Binary file not shown.
Binary file modified locale/pt_BR/LC_MESSAGES/default.mo
Binary file not shown.

0 comments on commit 16a48da

Please sign in to comment.