Save/Load allows editing very long file names, still imperfect
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@157 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
87c3f89763
commit
9cae113c99
@ -2593,7 +2593,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
|
|||||||
break;
|
break;
|
||||||
case 8 : // Saisie du nom de fichier
|
case 8 : // Saisie du nom de fichier
|
||||||
Effacer_curseur();
|
Effacer_curseur();
|
||||||
if (Readline(13+9*8,90,Principal_Nom_fichier,27,2))
|
if (Readline(13+9*8,90,Principal_Nom_fichier,50,2))
|
||||||
{
|
{
|
||||||
// On regarde s'il faut rajouter une extension. C'est-à-dire s'il
|
// On regarde s'il faut rajouter une extension. C'est-à-dire s'il
|
||||||
// n'y a pas de '.' dans le nom du fichier.
|
// n'y a pas de '.' dans le nom du fichier.
|
||||||
|
|||||||
4
const.h
4
const.h
@ -47,6 +47,10 @@
|
|||||||
#define NB_SECTIONS_AIDE 3 // Nombre de sections dans l'aide
|
#define NB_SECTIONS_AIDE 3 // Nombre de sections dans l'aide
|
||||||
#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
|
||||||
|
|
||||||
|
// Caractères présents dans les deux fontes
|
||||||
|
#define CARACTERE_TRIANGLE_DROIT 16
|
||||||
|
#define CARACTERE_TRIANGLE_GAUCHE 17
|
||||||
|
|
||||||
// On impose à l'allocation dynamique des pages de backups de conserver un
|
// On impose à l'allocation dynamique des pages de backups de conserver un
|
||||||
// minimum de 256 Ko pour que le reste du programme puisse continuer à
|
// minimum de 256 Ko pour que le reste du programme puisse continuer à
|
||||||
// fonctionner.
|
// fonctionner.
|
||||||
|
|||||||
4
files.c
4
files.c
@ -35,10 +35,6 @@
|
|||||||
#define COULEUR_REPERTOIRE_SELECT CM_Clair // Couleur du texte pour une ligne de repértoire sélectionnée
|
#define COULEUR_REPERTOIRE_SELECT CM_Clair // Couleur du texte pour une ligne de repértoire sélectionnée
|
||||||
#define COULEUR_FOND_SELECT CM_Fonce // Couleur du fond pour une ligne sélectionnée
|
#define COULEUR_FOND_SELECT CM_Fonce // Couleur du fond pour une ligne sélectionnée
|
||||||
|
|
||||||
// Caractères présents dans les deux fontes
|
|
||||||
#define CARACTERE_TRIANGLE_DROIT 16
|
|
||||||
#define CARACTERE_TRIANGLE_GAUCHE 17
|
|
||||||
|
|
||||||
#define FILENAMESPACE 16
|
#define FILENAMESPACE 16
|
||||||
|
|
||||||
int Determiner_repertoire_courant(void)
|
int Determiner_repertoire_courant(void)
|
||||||
|
|||||||
85
readline.c
85
readline.c
@ -13,6 +13,7 @@
|
|||||||
#include "graph.h"
|
#include "graph.h"
|
||||||
#include "divers.h"
|
#include "divers.h"
|
||||||
#include "erreurs.h"
|
#include "erreurs.h"
|
||||||
|
#include "const.h"
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
#include "linux.h"
|
#include "linux.h"
|
||||||
@ -91,15 +92,24 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
|
|||||||
// 0: Sortie par annulation (Esc.) / 1: sortie par acceptation (Return)
|
// 0: Sortie par annulation (Esc.) / 1: sortie par acceptation (Return)
|
||||||
{
|
{
|
||||||
char Chaine_initiale[256];
|
char Chaine_initiale[256];
|
||||||
|
char Chaine_affichee[256];
|
||||||
byte Position;
|
byte Position;
|
||||||
byte Taille;
|
byte Taille;
|
||||||
word Touche_lue=0;
|
word Touche_lue=0;
|
||||||
byte Touche_autorisee;
|
byte Touche_autorisee;
|
||||||
|
byte Taille_affichee;
|
||||||
|
// Grosse astuce pour les noms de fichiers: La taille affichée est différente
|
||||||
|
// de la taille maximum gérée.
|
||||||
|
if (Type_saisie == 2)
|
||||||
|
Taille_affichee = 27;
|
||||||
|
else
|
||||||
|
Taille_affichee = Taille_maxi;
|
||||||
|
byte Offset=0; // Indice du premier caractère affiché
|
||||||
|
|
||||||
|
|
||||||
// Effacement de la chaîne
|
// Effacement de la chaîne
|
||||||
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
|
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
|
||||||
Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
|
Taille_affichee*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
|
||||||
|
|
||||||
// Mise à jour des variables se rapportant à la chaîne en fonction de la chaîne initiale
|
// Mise à jour des variables se rapportant à la chaîne en fonction de la chaîne initiale
|
||||||
strcpy(Chaine_initiale,Chaine);
|
strcpy(Chaine_initiale,Chaine);
|
||||||
@ -108,9 +118,18 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
|
|||||||
itoa(atoi(Chaine),Chaine,10); // On tasse la chaine à gauche
|
itoa(atoi(Chaine),Chaine,10); // On tasse la chaine à gauche
|
||||||
// Chaine[0]='\0'; // On efface la chaîne si c'est valeur numérique
|
// Chaine[0]='\0'; // On efface la chaîne si c'est valeur numérique
|
||||||
|
|
||||||
|
|
||||||
Taille=strlen(Chaine);
|
Taille=strlen(Chaine);
|
||||||
Position=(Taille<Taille_maxi)? Taille:Taille-1;
|
Position=(Taille<Taille_maxi)? Taille:Taille-1;
|
||||||
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,Position);
|
// Formatage d'une partie de la chaine (si trop longue pour tenir)
|
||||||
|
strncpy(Chaine_affichee, Chaine + Offset, Taille_affichee);
|
||||||
|
Chaine_affichee[Taille_affichee]='\0';
|
||||||
|
if (Offset>0)
|
||||||
|
Chaine_affichee[0]=CARACTERE_TRIANGLE_GAUCHE;
|
||||||
|
if (Taille_affichee + Offset + 1 < Taille )
|
||||||
|
Chaine_affichee[Taille_affichee-1]=CARACTERE_TRIANGLE_DROIT;
|
||||||
|
|
||||||
|
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine_affichee,Position - Offset);
|
||||||
|
|
||||||
|
|
||||||
while ((Touche_lue!=SDLK_RETURN) && (Touche_lue!=SDLK_ESCAPE))
|
while ((Touche_lue!=SDLK_RETURN) && (Touche_lue!=SDLK_ESCAPE))
|
||||||
@ -123,25 +142,36 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
|
|||||||
{
|
{
|
||||||
Supprimer_caractere(Chaine,Position);
|
Supprimer_caractere(Chaine,Position);
|
||||||
Taille--;
|
Taille--;
|
||||||
|
|
||||||
// Effacement de la chaîne
|
// Effacement de la chaîne
|
||||||
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
|
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
|
||||||
Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
|
Taille_affichee*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
|
||||||
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,Position);
|
goto affichage;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDLK_LEFT : // Gauche
|
case SDLK_LEFT : // Gauche
|
||||||
if (Position)
|
if (Position>0)
|
||||||
{
|
{
|
||||||
// Effacement de la chaîne
|
// Effacement de la chaîne
|
||||||
if (Position==Taille)
|
if (Position==Taille)
|
||||||
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
|
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
|
||||||
Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
|
Taille_affichee*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
|
||||||
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,--Position);
|
Position--;
|
||||||
|
if (Offset > 0 && (Position == 0 || Position < (Offset + 1)))
|
||||||
|
Offset--;
|
||||||
|
goto affichage;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDLK_RIGHT : // Droite
|
case SDLK_RIGHT : // Droite
|
||||||
if ((Position<Taille) && (Position<Taille_maxi-1))
|
if ((Position<Taille) && (Position<Taille_maxi-1))
|
||||||
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,++Position);
|
{
|
||||||
|
Position++;
|
||||||
|
//if (Position > Taille_affichee + Offset - 2)
|
||||||
|
//if (Offset + Taille_affichee < Taille_maxi && (Position == Taille || (Position > Taille_affichee + Offset - 2)))
|
||||||
|
if (Chaine_affichee[Position-Offset]==CARACTERE_TRIANGLE_DROIT || Position-Offset>=Taille_affichee)
|
||||||
|
Offset++;
|
||||||
|
goto affichage;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDLK_HOME : // Home
|
case SDLK_HOME : // Home
|
||||||
if (Position)
|
if (Position)
|
||||||
@ -149,13 +179,20 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
|
|||||||
// Effacement de la chaîne
|
// Effacement de la chaîne
|
||||||
if (Position==Taille)
|
if (Position==Taille)
|
||||||
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
|
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
|
||||||
Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
|
Taille_affichee*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
|
||||||
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,Position=0);
|
Position = 0;
|
||||||
|
Offset = 0;
|
||||||
|
goto affichage;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDLK_END : // End
|
case SDLK_END : // End
|
||||||
if ((Position<Taille) && (Position<Taille_maxi-1))
|
if ((Position<Taille) && (Position<Taille_maxi-1))
|
||||||
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,Position=(Taille<Taille_maxi)?Taille:Taille-1);
|
{
|
||||||
|
Position=(Taille<Taille_maxi)?Taille:Taille-1;
|
||||||
|
if (Position-Offset>Taille_affichee)
|
||||||
|
Offset=Position-Taille_affichee+1;
|
||||||
|
goto affichage;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDLK_BACKSPACE :
|
case SDLK_BACKSPACE :
|
||||||
if (Position)
|
if (Position)
|
||||||
@ -164,8 +201,8 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
|
|||||||
Taille--;
|
Taille--;
|
||||||
// Effacement de la chaîne
|
// Effacement de la chaîne
|
||||||
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
|
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
|
||||||
Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
|
Taille_affichee*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
|
||||||
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,Position);
|
goto affichage;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDLK_RETURN :
|
case SDLK_RETURN :
|
||||||
@ -206,11 +243,31 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
|
|||||||
Taille++;
|
Taille++;
|
||||||
// et qui risque de déplacer le curseur vers la droite
|
// et qui risque de déplacer le curseur vers la droite
|
||||||
if (Taille<Taille_maxi)
|
if (Taille<Taille_maxi)
|
||||||
|
{
|
||||||
Position++;
|
Position++;
|
||||||
|
//if (Position > Taille_affichee + Offset - 2 && !(Position<Taille) && (Position<Taille_maxi-1))
|
||||||
|
//if (Offset + Taille_affichee < Taille_maxi && (Position == Taille || (Position > Taille_affichee + Offset - 2)))
|
||||||
|
if (Chaine_affichee[Position-Offset]==CARACTERE_TRIANGLE_DROIT || Position-Offset>=Taille_affichee)
|
||||||
|
Offset++;
|
||||||
|
}
|
||||||
// Enfin, on raffiche la chaine
|
// Enfin, on raffiche la chaine
|
||||||
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,Position);
|
goto affichage;
|
||||||
} // Fin du test d'autorisation de touche
|
} // Fin du test d'autorisation de touche
|
||||||
} // Fin du test de place libre
|
} // Fin du test de place libre
|
||||||
|
break;
|
||||||
|
|
||||||
|
affichage:
|
||||||
|
Taille=strlen(Chaine);
|
||||||
|
// Formatage d'une partie de la chaine (si trop longue pour tenir)
|
||||||
|
strncpy(Chaine_affichee, Chaine + Offset, Taille_affichee);
|
||||||
|
Chaine_affichee[Taille_affichee]='\0';
|
||||||
|
if (Offset>0)
|
||||||
|
Chaine_affichee[0]=CARACTERE_TRIANGLE_GAUCHE;
|
||||||
|
if (Taille_affichee + Offset + 0 < Taille )
|
||||||
|
Chaine_affichee[Taille_affichee-1]=CARACTERE_TRIANGLE_DROIT;
|
||||||
|
|
||||||
|
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine_affichee,Position - Offset);
|
||||||
|
|
||||||
} // Fin du "switch(Touche_lue)"
|
} // Fin du "switch(Touche_lue)"
|
||||||
} // Fin du "while"
|
} // Fin du "while"
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user