Bookmarks (issue 92) are now functional in Save/Load screens

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@656 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Yves Rizoud 2009-02-26 00:31:36 +00:00
parent 5040a57bd1
commit 9f85f5f1bb
9 changed files with 198 additions and 38 deletions

View File

@ -2552,16 +2552,15 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
Fenetre_Definir_bouton_normal(8,17,117,23,"Select drive",0,1,SDLK_LAST); // 9 Fenetre_Definir_bouton_normal(8,17,117,23,"Select drive",0,1,SDLK_LAST); // 9
// Bookmarks // Bookmarks
for (Temp=0;Temp<4;Temp++) for (Temp=0;Temp<NB_BOOKMARKS;Temp++)
{ {
static const char *Lib[4] = {"My Docs", "USBdrive", "Desktop", "--------"};
Dropdown_bookmark[Temp]= Dropdown_bookmark[Temp]=
Fenetre_Definir_bouton_dropdown(126+(88+1)*(Temp%2),17+(Temp/2)*12,88,11,56,"",0,0,1,A_DROITE); // 10-13 Fenetre_Definir_bouton_dropdown(126+(88+1)*(Temp%2),17+(Temp/2)*12,88,11,56,"",0,0,1,A_DROITE); // 10-13
Fenetre_Afficher_sprite_drive(Dropdown_bookmark[Temp]->Pos_X+3,Dropdown_bookmark[Temp]->Pos_Y+2,5); Fenetre_Afficher_sprite_drive(Dropdown_bookmark[Temp]->Pos_X+3,Dropdown_bookmark[Temp]->Pos_Y+2,5);
Print_dans_fenetre(Dropdown_bookmark[Temp]->Pos_X+3+10,Dropdown_bookmark[Temp]->Pos_Y+2,Lib[Temp],Temp<3?CM_Noir:CM_Fonce,CM_Clair);
Fenetre_Dropdown_choix(Dropdown_bookmark[Temp],0,"Set"); Fenetre_Dropdown_choix(Dropdown_bookmark[Temp],0,"Set");
Fenetre_Dropdown_choix(Dropdown_bookmark[Temp],1,"Rename"); Fenetre_Dropdown_choix(Dropdown_bookmark[Temp],1,"Rename");
Fenetre_Dropdown_choix(Dropdown_bookmark[Temp],2,"Clear"); Fenetre_Dropdown_choix(Dropdown_bookmark[Temp],2,"Clear");
Afficher_bookmark(Dropdown_bookmark[Temp],Temp);
} }
// On prend bien soin de passer dans le répertoire courant (le bon qui faut! Oui madame!) // On prend bien soin de passer dans le répertoire courant (le bon qui faut! Oui madame!)
if (Load) if (Load)
@ -2837,7 +2836,67 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
Nouvelle_preview=1; Nouvelle_preview=1;
break; break;
default: default:
break; if (Bouton_clicke>=10 && Bouton_clicke<10+NB_BOOKMARKS)
{
// Bookmark
char * Nom_repertoire;
switch(Fenetre_Attribut2)
{
case -1: // bouton lui-même: aller au répertoire mémorisé
if (Config.Bookmark_directory[Bouton_clicke-10])
{
*Fichier_recherche=0;
strcpy(Principal_Nom_fichier,Config.Bookmark_directory[Bouton_clicke-10]);
Type_selectionne=1;
On_a_clicke_sur_OK=1;
}
break;
case 0: // Set
if (Config.Bookmark_directory[Bouton_clicke-10])
free(Config.Bookmark_directory[Bouton_clicke-10]);
Config.Bookmark_label[Bouton_clicke-10][0]='\0';
Temp=strlen(Principal_Repertoire_courant);
Config.Bookmark_directory[Bouton_clicke-10]=malloc(Temp+1);
strcpy(Config.Bookmark_directory[Bouton_clicke-10],Principal_Repertoire_courant);
Nom_repertoire=Position_dernier_slash(Principal_Repertoire_courant);
if (Nom_repertoire && Nom_repertoire[1]!='\0')
Nom_repertoire++;
else
Nom_repertoire=Principal_Repertoire_courant;
Temp=strlen(Nom_repertoire);
strncpy(Config.Bookmark_label[Bouton_clicke-10],Nom_repertoire,8);
if (Temp>8)
{
Config.Bookmark_label[Bouton_clicke-10][7]=CARACTERE_SUSPENSION;
Config.Bookmark_label[Bouton_clicke-10][8]='\0';
}
Afficher_bookmark(Dropdown_bookmark[Bouton_clicke-10],Bouton_clicke-10);
break;
case 1: // Rename
if (Config.Bookmark_directory[Bouton_clicke-10])
{
Readline_ex(Dropdown_bookmark[Bouton_clicke-10]->Pos_X+3+10,Dropdown_bookmark[Bouton_clicke-10]->Pos_Y+2,Config.Bookmark_label[Bouton_clicke-10],8,8,0);
Afficher_bookmark(Dropdown_bookmark[Bouton_clicke-10],Bouton_clicke-10);
Afficher_curseur();
}
break;
case 2: // Clear
if (Config.Bookmark_directory[Bouton_clicke-10])
{
free(Config.Bookmark_directory[Bouton_clicke-10]);
Config.Bookmark_directory[Bouton_clicke-10]=NULL;
Config.Bookmark_label[Bouton_clicke-10][0]='\0';
Afficher_bookmark(Dropdown_bookmark[Bouton_clicke-10],Bouton_clicke-10);
}
break;
}
}
break;
} }
switch (Touche) switch (Touche)
@ -2964,14 +3023,18 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
} }
// On doit rentrer dans le répertoire: // On doit rentrer dans le répertoire:
chdir(Principal_Nom_fichier); if (!chdir(Principal_Nom_fichier))
Determiner_repertoire_courant(); {
Determiner_repertoire_courant();
// On lit le nouveau répertoire // On lit le nouveau répertoire
Lire_liste_des_fichiers(Principal_Format); Lire_liste_des_fichiers(Principal_Format);
Trier_la_liste_des_fichiers(); Trier_la_liste_des_fichiers();
// On place la barre de sélection sur le répertoire d'où l'on vient // On place la barre de sélection sur le répertoire d'où l'on vient
Placer_barre_de_selection_sur(Repertoire_precedent); Placer_barre_de_selection_sur(Repertoire_precedent);
}
else
Erreur(0);
// Affichage des premiers fichiers visibles: // Affichage des premiers fichiers visibles:
Preparer_et_afficher_liste_fichiers(Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers); Preparer_et_afficher_liste_fichiers(Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
Afficher_curseur(); Afficher_curseur();

View File

@ -63,7 +63,7 @@
#define NB_PAGES_UNDO_MAX 99 // Nombre maximal de pages d'undo #define NB_PAGES_UNDO_MAX 99 // Nombre maximal de pages d'undo
#define FACTEUR_DE_ZOOM_PAR_DEFAUT 4 // Facteur de zoom initial #define FACTEUR_DE_ZOOM_PAR_DEFAUT 4 // Facteur de zoom initial
#define TAILLE_CHEMIN_FICHIER 260 // Le nombre de caractères maxi pour un nom de fichier avec chemin complet #define TAILLE_CHEMIN_FICHIER 260 // Le nombre de caractères maxi pour un nom de fichier avec chemin complet
#define NB_BOOKMARKS 4 // Nombre de boutons "signet" dans l'ecran Save/Load
// Caractères présents dans les deux fontes // Caractères présents dans les deux fontes
#define CARACTERE_TRIANGLE_DROIT 16 #define CARACTERE_TRIANGLE_DROIT 16
#define CARACTERE_TRIANGLE_GAUCHE 17 #define CARACTERE_TRIANGLE_GAUCHE 17

15
files.c
View File

@ -713,6 +713,21 @@ short Calculer_decalage_click_dans_fileselector(void)
return Decalage_calcule; return Decalage_calcule;
} }
void Afficher_bookmark(struct Fenetre_Bouton_dropdown * Bouton, int Numero_bookmark)
{
if (Config.Bookmark_directory[Numero_bookmark])
{
int Taille;
Print_dans_fenetre_limite(Bouton->Pos_X+3+10,Bouton->Pos_Y+2,Config.Bookmark_label[Numero_bookmark],8,CM_Noir,CM_Clair);
Taille=strlen(Config.Bookmark_label[Numero_bookmark]);
if (Taille<8)
Block(Fenetre_Pos_X+(Menu_Facteur_X*(Bouton->Pos_X+3+10+Taille*8)),Fenetre_Pos_Y+(Menu_Facteur_Y*(Bouton->Pos_Y+2)),Menu_Facteur_X*(8-Taille)*8,Menu_Facteur_Y*8,CM_Clair);
}
else
Print_dans_fenetre(Bouton->Pos_X+3+10,Bouton->Pos_Y+2,"--------",CM_Fonce,CM_Clair);
}
void for_each_file(const char * Nom_repertoire, void Callback(const char *)) void for_each_file(const char * Nom_repertoire, void Callback(const char *))
{ {
// Pour scan de répertoire // Pour scan de répertoire

View File

@ -35,6 +35,8 @@ void Afficher_la_liste_des_fichiers(short Decalage_premier,short Decalage_select
// -- Récupérer le libellé d'un élément de la liste ------------------------- // -- Récupérer le libellé d'un élément de la liste -------------------------
void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select,char * Libelle,int *Type); void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select,char * Libelle,int *Type);
void Afficher_bookmark(struct Fenetre_Bouton_dropdown * Bouton, int Numero_bookmark);
// -- Déplacements dans la liste des fichiers ------------------------------- // -- Déplacements dans la liste des fichiers -------------------------------
void Select_Scroll_Down(short * Decalage_premier,short * Decalage_select); void Select_Scroll_Down(short * Decalage_premier,short * Decalage_select);

View File

@ -308,3 +308,19 @@
; 1 to 16. The menu can always display the number of lines you request. ; 1 to 16. The menu can always display the number of lines you request.
; ;
Palette_Cells_Y = 8; (Default 8) Palette_Cells_Y = 8; (Default 8)
; Bookmarked directories. Leave the directory blank for unused ones.
;
Bookmark_label =
Bookmark_directory =
Bookmark_label =
Bookmark_directory =
Bookmark_label =
Bookmark_directory =
Bookmark_label =
Bookmark_directory =
; end of configuration

View File

@ -83,6 +83,8 @@ GFX2_GLOBAL struct S_Config
byte Taille_ecran_dans_GIF; byte Taille_ecran_dans_GIF;
byte Auto_nb_used; byte Auto_nb_used;
byte Resolution_par_defaut; byte Resolution_par_defaut;
char *Bookmark_directory[NB_BOOKMARKS]; // independant malloc of adaptive size
char Bookmark_label[NB_BOOKMARKS][8+1];
} Config; } Config;
// Tableau des touches spéciales // Tableau des touches spéciales

View File

@ -2217,7 +2217,6 @@ short Fenetre_Dropdown_click(struct Fenetre_Bouton_dropdown *Bouton)
Fenetre_Desenfoncer_bouton_normal(Bouton->Pos_X,Bouton->Pos_Y,Bouton->Largeur,Bouton->Hauteur); Fenetre_Desenfoncer_bouton_normal(Bouton->Pos_X,Bouton->Pos_Y,Bouton->Largeur,Bouton->Hauteur);
Afficher_curseur(); Afficher_curseur();
Fenetre_Attribut2=0;
if (Indice_selectionne>=0 && Indice_selectionne<Nb_choix) if (Indice_selectionne>=0 && Indice_selectionne<Nb_choix)
{ {
for(Choix=Bouton->Premier_choix; Indice_selectionne; Choix=Choix->Next,Indice_selectionne--) for(Choix=Bouton->Premier_choix; Indice_selectionne; Choix=Choix->Next,Indice_selectionne--)
@ -2230,6 +2229,7 @@ short Fenetre_Dropdown_click(struct Fenetre_Bouton_dropdown *Bouton)
} }
return Bouton->Numero; return Bouton->Numero;
} }
Fenetre_Attribut2=-1;
return 0; return 0;
} }
@ -2434,7 +2434,10 @@ short Fenetre_Numero_bouton_clicke(void)
if (Mouse_K & Temp5->Bouton_actif) if (Mouse_K & Temp5->Bouton_actif)
return Fenetre_Dropdown_click(Temp5); return Fenetre_Dropdown_click(Temp5);
else else
{
Fenetre_Attribut2=-1;
return Fenetre_bouton_normal_click(Temp5->Pos_X,Temp5->Pos_Y,Temp5->Largeur,Temp5->Hauteur,Temp5->Numero); return Fenetre_bouton_normal_click(Temp5->Pos_X,Temp5->Pos_Y,Temp5->Largeur,Temp5->Hauteur,Temp5->Numero);
}
} }
} }

View File

@ -31,14 +31,21 @@
void Charger_INI_Clear_string(char * String) void Charger_INI_Clear_string(char * String)
{ {
int Indice; int Indice;
int Egal_trouve=0;
for (Indice=0;String[Indice]!='\0';) for (Indice=0;String[Indice]!='\0';)
{ {
if ((String[Indice]==' ') || if ((String[Indice]=='='))
(String[Indice]=='\t')) {
Egal_trouve=1;
Indice++;
// On enleve les espaces après le '='
while (String[Indice]==' ' || String[Indice]=='\t')
memmove(String+Indice,String+Indice+1,strlen(String+Indice));
}
else if ((String[Indice]==' ' && !Egal_trouve) || (String[Indice]=='\t'))
{ {
// Suppression d'un espace ou d'un tab: // Suppression d'un espace ou d'un tab:
memmove(String+Indice,String+Indice+1,strlen(String+Indice)); memmove(String+Indice,String+Indice+1,strlen(String+Indice));
} }
else else
@ -48,17 +55,25 @@ void Charger_INI_Clear_string(char * String)
(String[Indice]=='\n')) (String[Indice]=='\n'))
{ {
// Rencontre d'un commentaire ou d'un saut de ligne: // Rencontre d'un commentaire ou d'un saut de ligne:
String[Indice]='\0'; String[Indice]='\0';
} }
else else
{ {
// Passage en majuscule d'un caractère: if (!Egal_trouve)
{
// Passage en majuscule d'un caractère:
String[Indice]=toupper((int)String[Indice]); String[Indice]=toupper((int)String[Indice]);
}
Indice++; Indice++;
} }
} }
// On enlève les espaces avant la fin de chaine
while (Indice>0 && (String[Indice-1]==' ' || String[Indice-1]=='\t'))
{
Indice--;
String[Indice]='\0';
}
} }
@ -173,10 +188,6 @@ int Charger_INI_Get_string(FILE * File,char * Buffer,char * Option,char * Retour
Indice_buffer=Charger_INI_Seek_pattern(Buffer_upper,"="); Indice_buffer=Charger_INI_Seek_pattern(Buffer_upper,"=");
strcpy(Retour, Buffer_upper + Indice_buffer); strcpy(Retour, Buffer_upper + Indice_buffer);
// On coupe la chaine au premier espace ou ; (commentaire)
for (Indice_buffer=0; Retour[Indice_buffer]!='\0' && Retour[Indice_buffer]!=' ' && Retour[Indice_buffer]!=';'; Indice_buffer++)
;
Retour[Indice_buffer]='\0';
} }
} }
while (!Arret); while (!Arret);
@ -191,28 +202,28 @@ int Charger_INI_Get_value(char * String,int * Index,int * Value)
{ {
// On teste si la valeur actuelle est YES (ou Y): // On teste si la valeur actuelle est YES (ou Y):
if (Charger_INI_Seek_pattern(String+(*Index),"YES,")==1) if (Charger_INI_Seek_pattern(String+(*Index),"yes,")==1)
{ {
(*Value)=1; (*Value)=1;
(*Index)+=4; (*Index)+=4;
return 0; return 0;
} }
else else
if (strcmp(String+(*Index),"YES")==0) if (strcmp(String+(*Index),"yes")==0)
{ {
(*Value)=1; (*Value)=1;
(*Index)+=3; (*Index)+=3;
return 0; return 0;
} }
else else
if (Charger_INI_Seek_pattern(String+(*Index),"Y,")==1) if (Charger_INI_Seek_pattern(String+(*Index),"y,")==1)
{ {
(*Value)=1; (*Value)=1;
(*Index)+=2; (*Index)+=2;
return 0; return 0;
} }
else else
if (strcmp(String+(*Index),"Y")==0) if (strcmp(String+(*Index),"y")==0)
{ {
(*Value)=1; (*Value)=1;
(*Index)+=1; (*Index)+=1;
@ -222,28 +233,28 @@ int Charger_INI_Get_value(char * String,int * Index,int * Value)
// On teste si la valeur actuelle est NO (ou N): // On teste si la valeur actuelle est NO (ou N):
if (Charger_INI_Seek_pattern(String+(*Index),"NO,")==1) if (Charger_INI_Seek_pattern(String+(*Index),"no,")==1)
{ {
(*Value)=0; (*Value)=0;
(*Index)+=3; (*Index)+=3;
return 0; return 0;
} }
else else
if (strcmp(String+(*Index),"NO")==0) if (strcmp(String+(*Index),"no")==0)
{ {
(*Value)=0; (*Value)=0;
(*Index)+=2; (*Index)+=2;
return 0; return 0;
} }
else else
if (Charger_INI_Seek_pattern(String+(*Index),"N,")==1) if (Charger_INI_Seek_pattern(String+(*Index),"n,")==1)
{ {
(*Value)=0; (*Value)=0;
(*Index)+=2; (*Index)+=2;
return 0; return 0;
} }
else else
if (strcmp(String+(*Index),"N")==0) if (strcmp(String+(*Index),"n")==0)
{ {
(*Value)=0; (*Value)=0;
(*Index)+=1; (*Index)+=1;
@ -391,10 +402,10 @@ int Charger_INI(struct S_Config * Conf)
FILE * Fichier; FILE * Fichier;
char * Buffer; char * Buffer;
int Valeurs[3]; int Valeurs[3];
//int Indice; int Indice;
char * Nom_du_fichier; char * Nom_du_fichier;
int Retour; int Retour;
char Libelle_resolution[1024]; char Libelle_valeur[1024];
Ligne_INI=0; Ligne_INI=0;
@ -676,9 +687,9 @@ int Charger_INI(struct S_Config * Conf)
// Optionnel, le mode video par défaut (à partir de beta 97.0%) // Optionnel, le mode video par défaut (à partir de beta 97.0%)
Conf->Resolution_par_defaut=0; Conf->Resolution_par_defaut=0;
if (!Charger_INI_Get_string (Fichier,Buffer,"Default_video_mode",Libelle_resolution)) if (!Charger_INI_Get_string (Fichier,Buffer,"Default_video_mode",Libelle_valeur))
{ {
int Mode = Conversion_argument_mode(Libelle_resolution); int Mode = Conversion_argument_mode(Libelle_valeur);
if (Mode>=0) if (Mode>=0)
Conf->Resolution_par_defaut=Mode; Conf->Resolution_par_defaut=Mode;
} }
@ -719,6 +730,41 @@ int Charger_INI(struct S_Config * Conf)
goto Erreur_ERREUR_INI_CORROMPU; goto Erreur_ERREUR_INI_CORROMPU;
Conf->Palette_Cells_Y=Valeurs[0]; Conf->Palette_Cells_Y=Valeurs[0];
} }
// Optionnel, bookmarks (>98.0%)
for (Indice=0;Indice<NB_BOOKMARKS;Indice++)
{
Conf->Bookmark_directory[Indice]=NULL;
Conf->Bookmark_label[Indice][0]='\0';
}
for (Indice=0;Indice<NB_BOOKMARKS;Indice++)
{
if (!Charger_INI_Get_string (Fichier,Buffer,"Bookmark_label",Libelle_valeur))
{
int Taille=0;
if (Libelle_valeur && (Taille=strlen(Libelle_valeur))!=0)
{
if (Taille>8)
{
Libelle_valeur[7]=CARACTERE_SUSPENSION;
Libelle_valeur[8]='\0';
}
strcpy(Conf->Bookmark_label[Indice],Libelle_valeur);
}
}
else
break;
if (!Charger_INI_Get_string (Fichier,Buffer,"Bookmark_directory",Libelle_valeur))
{
int Taille=0;
if (Libelle_valeur && (Taille=strlen(Libelle_valeur))!=0)
{
Conf->Bookmark_directory[Indice]=(char *)malloc(Taille+1);
strcpy(Conf->Bookmark_directory[Indice],Libelle_valeur);
}
}
else
break;
}
fclose(Fichier); fclose(Fichier);
@ -729,7 +775,7 @@ int Charger_INI(struct S_Config * Conf)
// Gestion des erreurs: // Gestion des erreurs:
Erreur_Retour: Erreur_Retour:
printf(Buffer);
fclose(Fichier); fclose(Fichier);
free(Nom_du_fichier); free(Nom_du_fichier);
free(Buffer); free(Buffer);

View File

@ -244,6 +244,10 @@ int Sauver_INI_Set_strings(FILE * Old_file,FILE * New_file,char * Buffer,char *
Buffer_upper=(char *)malloc(1024); Buffer_upper=(char *)malloc(1024);
Buffer_resultat=(char *)malloc(1024); Buffer_resultat=(char *)malloc(1024);
// On convertit un eventuel argument NULL en chaine vide.
if (Value == NULL)
Value="";
// On commence par se faire une version majuscule de l'option à rechercher: // On commence par se faire une version majuscule de l'option à rechercher:
strcpy(Option_upper,Option); strcpy(Option_upper,Option);
Charger_INI_Clear_string(Option_upper); Charger_INI_Clear_string(Option_upper);
@ -394,6 +398,7 @@ int Sauver_INI(struct S_Config * Conf)
int Retour; int Retour;
char Nom_du_fichier_DAT[TAILLE_CHEMIN_FICHIER]; char Nom_du_fichier_DAT[TAILLE_CHEMIN_FICHIER];
int Ini_existe; int Ini_existe;
int Indice;
// On alloue les zones de mémoire: // On alloue les zones de mémoire:
Buffer=(char *)malloc(1024); Buffer=(char *)malloc(1024);
@ -615,6 +620,14 @@ int Sauver_INI(struct S_Config * Conf)
if ((Retour=Sauver_INI_Set_values (Ancien_fichier,Nouveau_fichier,Buffer,"Palette_Cells_Y",1,Valeurs,0))) if ((Retour=Sauver_INI_Set_values (Ancien_fichier,Nouveau_fichier,Buffer,"Palette_Cells_Y",1,Valeurs,0)))
goto Erreur_Retour; goto Erreur_Retour;
for (Indice=0;Indice<NB_BOOKMARKS;Indice++)
{
if ((Retour=Sauver_INI_Set_strings (Ancien_fichier,Nouveau_fichier,Buffer,"Bookmark_label",Conf->Bookmark_label[Indice])))
goto Erreur_Retour;
if ((Retour=Sauver_INI_Set_strings (Ancien_fichier,Nouveau_fichier,Buffer,"Bookmark_directory",Conf->Bookmark_directory[Indice])))
goto Erreur_Retour;
}
Sauver_INI_Flush(Ancien_fichier,Nouveau_fichier,Buffer); Sauver_INI_Flush(Ancien_fichier,Nouveau_fichier,Buffer);
fclose(Nouveau_fichier); fclose(Nouveau_fichier);