(trunk) File save/load only shows common file extensions by default. (choice 'all' in filter, different from '*.*')
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1083 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
9e68266ff8
commit
9ef0e6b74c
@ -2764,7 +2764,7 @@ void Load_picture(byte image)
|
|||||||
{
|
{
|
||||||
// Si c'est une image qu'on charge, on efface l'ancien commentaire
|
// Si c'est une image qu'on charge, on efface l'ancien commentaire
|
||||||
// C'est loin d'ętre indispensable, m'enfin bon...
|
// C'est loin d'ętre indispensable, m'enfin bon...
|
||||||
if (File_formats[Main_fileformat-1].Backup_done)
|
if (Get_fileformat(Main_fileformat)->Backup_done)
|
||||||
Main_comment[0]='\0';
|
Main_comment[0]='\0';
|
||||||
|
|
||||||
Original_screen_X=0;
|
Original_screen_X=0;
|
||||||
@ -2828,7 +2828,7 @@ void Load_picture(byte image)
|
|||||||
Cursor_shape=old_cursor_shape;
|
Cursor_shape=old_cursor_shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (File_error==1) || (!File_formats[Main_fileformat-1].Backup_done) )
|
if ( (File_error==1) || (!Get_fileformat(Main_fileformat)->Backup_done) )
|
||||||
{
|
{
|
||||||
do_not_restore=0;
|
do_not_restore=0;
|
||||||
if (File_error!=1)
|
if (File_error!=1)
|
||||||
@ -3097,7 +3097,7 @@ void Save_picture(byte image)
|
|||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
Cursor_shape=old_cursor_shape;
|
Cursor_shape=old_cursor_shape;
|
||||||
|
|
||||||
if ((File_error==1) || (!File_formats[Main_fileformat-1].Backup_done))
|
if ((File_error==1) || (!Get_fileformat(Main_fileformat)->Backup_done))
|
||||||
do_not_restore=0;
|
do_not_restore=0;
|
||||||
|
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
|
|||||||
24
const.h
24
const.h
@ -92,38 +92,26 @@
|
|||||||
#define PARENT_DIR ".."
|
#define PARENT_DIR ".."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// -- File formats
|
|
||||||
|
|
||||||
#ifndef __no_pnglib__
|
|
||||||
#define NB_KNOWN_FORMATS 15 ///< Total number of known file formats.
|
|
||||||
#define NB_FORMATS_LOAD 15 ///< Number of file formats that grafx2 can load.
|
|
||||||
#define NB_FORMATS_SAVE 15 ///< Number of file formats that grafx2 can save.
|
|
||||||
#else
|
|
||||||
// Without pnglib
|
|
||||||
#define NB_KNOWN_FORMATS 14 ///< Total number of known file formats.
|
|
||||||
#define NB_FORMATS_LOAD 14 ///< Number of file formats that grafx2 can load.
|
|
||||||
#define NB_FORMATS_SAVE 14 ///< Number of file formats that grafx2 can save.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// List of file formats recognized by grafx2
|
/// List of file formats recognized by grafx2
|
||||||
enum FILE_FORMATS
|
enum FILE_FORMATS
|
||||||
{
|
{
|
||||||
FORMAT_ANY=0, ///< This is not really a file format, it's reserverd for the "*.*" filter option.
|
FORMAT_ALL_IMAGES=0, ///< This is not really a file format, it's reserverd for a compilation of all file extensions
|
||||||
FORMAT_PKM=1,
|
FORMAT_ALL_FILES=1, ///< This is not really a file format, it's reserverd for the "*.*" filter option.
|
||||||
FORMAT_LBM,
|
FORMAT_PNG,
|
||||||
FORMAT_GIF,
|
FORMAT_GIF,
|
||||||
FORMAT_BMP,
|
FORMAT_BMP,
|
||||||
FORMAT_PCX,
|
FORMAT_PCX,
|
||||||
|
FORMAT_PKM,
|
||||||
|
FORMAT_LBM,
|
||||||
FORMAT_IMG,
|
FORMAT_IMG,
|
||||||
FORMAT_SCx,
|
FORMAT_SCx,
|
||||||
FORMAT_PI1,
|
FORMAT_PI1,
|
||||||
FORMAT_PC1,
|
FORMAT_PC1,
|
||||||
FORMAT_CEL,
|
FORMAT_CEL,
|
||||||
FORMAT_NEO,
|
FORMAT_NEO,
|
||||||
|
FORMAT_C64,
|
||||||
FORMAT_KCF,
|
FORMAT_KCF,
|
||||||
FORMAT_PAL,
|
FORMAT_PAL,
|
||||||
FORMAT_C64,
|
|
||||||
FORMAT_PNG
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Default format for 'save as'
|
/// Default format for 'save as'
|
||||||
|
|||||||
73
filesel.c
73
filesel.c
@ -210,9 +210,11 @@ void Add_element_to_list(T_Fileselector *list, const char * fname, int type)
|
|||||||
list->First=temp_item;
|
list->First=temp_item;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Vérification si un fichier a l'extension demandée.
|
///
|
||||||
// Autorise les '?', et '*' si c'est le seul caractère.
|
/// Checks if a file has the requested file extension.
|
||||||
int Check_extension(const char *filename, char * filter)
|
/// The extension string can end with a ';' (remainder is ignored)
|
||||||
|
/// This function allows wildcard '?', and '*' if it's the only character.
|
||||||
|
int Check_extension(const char *filename, const char * filter)
|
||||||
{
|
{
|
||||||
int pos_last_dot = -1;
|
int pos_last_dot = -1;
|
||||||
int c = 0;
|
int c = 0;
|
||||||
@ -225,20 +227,21 @@ int Check_extension(const char *filename, char * filter)
|
|||||||
pos_last_dot = c;
|
pos_last_dot = c;
|
||||||
// Fichier sans extension (ca arrive)
|
// Fichier sans extension (ca arrive)
|
||||||
if (pos_last_dot == -1)
|
if (pos_last_dot == -1)
|
||||||
return (filter[0] == '\0');
|
return (filter[0] == '\0' || filter[0] == ';');
|
||||||
|
|
||||||
// Vérification caractère par caractère, case-insensitive.
|
// Vérification caractère par caractère, case-insensitive.
|
||||||
c = 0;
|
c = 0;
|
||||||
do
|
while (1)
|
||||||
{
|
{
|
||||||
|
if (filter[c] == '\0' || filter[c] == ';')
|
||||||
|
return filename[pos_last_dot + 1 + c] == '\0';
|
||||||
|
|
||||||
if (filter[c] != '?' &&
|
if (filter[c] != '?' &&
|
||||||
tolower(filter[c]) != tolower(filename[pos_last_dot + 1 + c]))
|
tolower(filter[c]) != tolower(filename[pos_last_dot + 1 + c]))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
c++;
|
c++;
|
||||||
} while (filter[c++] != '\0');
|
}
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -254,8 +257,7 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format)
|
|||||||
char * current_path;
|
char * current_path;
|
||||||
|
|
||||||
// Tout d'abord, on déduit du format demandé un filtre à utiliser:
|
// Tout d'abord, on déduit du format demandé un filtre à utiliser:
|
||||||
if (selected_format) // Format (extension) spécifique
|
filter = Get_fileformat(selected_format)->Extensions;
|
||||||
filter = File_formats[selected_format-1].Extension;
|
|
||||||
|
|
||||||
// Ensuite, on vide la liste actuelle:
|
// Ensuite, on vide la liste actuelle:
|
||||||
Free_fileselector_list(list);
|
Free_fileselector_list(list);
|
||||||
@ -288,11 +290,23 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format)
|
|||||||
(Config.Show_hidden_files || //Il n'est pas caché
|
(Config.Show_hidden_files || //Il n'est pas caché
|
||||||
!isHidden(entry)))
|
!isHidden(entry)))
|
||||||
{
|
{
|
||||||
if (Check_extension(entry->d_name, filter))
|
const char * ext = filter;
|
||||||
|
while (ext!=NULL)
|
||||||
{
|
{
|
||||||
// On rajoute le fichier à la liste
|
if (Check_extension(entry->d_name, ext))
|
||||||
Add_element_to_list(list, entry->d_name, 0);
|
{
|
||||||
list->Nb_files++;
|
// On rajoute le fichier à la liste
|
||||||
|
Add_element_to_list(list, entry->d_name, 0);
|
||||||
|
list->Nb_files++;
|
||||||
|
// Stop searching
|
||||||
|
ext=NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ext = strchr(ext, ';');
|
||||||
|
if (ext)
|
||||||
|
ext++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1061,21 +1075,21 @@ byte Button_Load_or_Save(byte load, byte image)
|
|||||||
else
|
else
|
||||||
Open_window(310,200,"Save brush");
|
Open_window(310,200,"Save brush");
|
||||||
Window_set_normal_button(198,180,51,14,"Save",0,1,SDLK_RETURN); // 1
|
Window_set_normal_button(198,180,51,14,"Save",0,1,SDLK_RETURN); // 1
|
||||||
if (Main_format==FORMAT_ANY) // Correction du *.*
|
if (Main_format<=FORMAT_ALL_FILES) // Correction du *.*
|
||||||
{
|
{
|
||||||
Main_format=Main_fileformat;
|
Main_format=Main_fileformat;
|
||||||
Main_fileselector_position=0;
|
Main_fileselector_position=0;
|
||||||
Main_fileselector_offset=0;
|
Main_fileselector_offset=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Main_format>NB_FORMATS_SAVE) // Correction d'un format insauvable
|
if (Get_fileformat(Main_format)->Save == NULL) // Correction d'un format insauvable
|
||||||
{
|
{
|
||||||
Main_format=DEFAULT_FILEFORMAT;
|
Main_format=DEFAULT_FILEFORMAT;
|
||||||
Main_fileselector_position=0;
|
Main_fileselector_position=0;
|
||||||
Main_fileselector_offset=0;
|
Main_fileselector_offset=0;
|
||||||
}
|
}
|
||||||
// Affichage du commentaire
|
// Affichage du commentaire
|
||||||
if (File_formats[Main_format-1].Comment)
|
if (Get_fileformat(Main_format)->Comment)
|
||||||
Print_in_window(47,70,Main_comment,MC_Black,MC_Light);
|
Print_in_window(47,70,Main_comment,MC_Black,MC_Light);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1097,16 +1111,15 @@ byte Button_Load_or_Save(byte load, byte image)
|
|||||||
|
|
||||||
// Dropdown pour les formats de fichier
|
// Dropdown pour les formats de fichier
|
||||||
formats_dropdown=
|
formats_dropdown=
|
||||||
Window_set_dropdown_button(69,28,49,11,0,
|
Window_set_dropdown_button(68,28,52,11,0,
|
||||||
(Main_format==FORMAT_ANY)?"*.*":File_formats[Main_format-1].Extension,
|
Get_fileformat(Main_format)->Label,
|
||||||
1,0,1,RIGHT_SIDE|LEFT_SIDE); // 6
|
1,0,1,RIGHT_SIDE|LEFT_SIDE); // 6
|
||||||
if (load)
|
|
||||||
Window_dropdown_add_item(formats_dropdown,0,"*.*");
|
for (temp=0; temp < NB_KNOWN_FORMATS; temp++)
|
||||||
for (temp=0;temp<NB_KNOWN_FORMATS;temp++)
|
|
||||||
{
|
{
|
||||||
if ((load && File_formats[temp].Load) ||
|
if ((load && (File_formats[temp].Identifier <= FORMAT_ALL_FILES || File_formats[temp].Load)) ||
|
||||||
(!load && File_formats[temp].Save))
|
(!load && File_formats[temp].Save))
|
||||||
Window_dropdown_add_item(formats_dropdown,temp+1,File_formats[temp].Extension);
|
Window_dropdown_add_item(formats_dropdown,File_formats[temp].Identifier,File_formats[temp].Label);
|
||||||
}
|
}
|
||||||
Print_in_window(70,18,"Format",MC_Dark,MC_Light);
|
Print_in_window(70,18,"Format",MC_Dark,MC_Light);
|
||||||
|
|
||||||
@ -1333,7 +1346,7 @@ byte Button_Load_or_Save(byte load, byte image)
|
|||||||
*quicksearch_filename=0;
|
*quicksearch_filename=0;
|
||||||
break;
|
break;
|
||||||
case 7 : // Saisie d'un commentaire pour la sauvegarde
|
case 7 : // Saisie d'un commentaire pour la sauvegarde
|
||||||
if ( (!load) && (File_formats[Main_format-1].Comment) )
|
if ( (!load) && (Get_fileformat(Main_format)->Comment) )
|
||||||
{
|
{
|
||||||
Readline(45,70,Main_comment,32,0);
|
Readline(45,70,Main_comment,32,0);
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
@ -1353,12 +1366,12 @@ byte Button_Load_or_Save(byte load, byte image)
|
|||||||
dummy=1;
|
dummy=1;
|
||||||
if (!dummy)
|
if (!dummy)
|
||||||
{
|
{
|
||||||
if (Main_format != FORMAT_ANY)
|
if (Get_fileformat(Main_format)->Default_extension)
|
||||||
{
|
{
|
||||||
if(!Directory_exists(Main_filename))
|
if(!Directory_exists(Main_filename))
|
||||||
{
|
{
|
||||||
strcat(Main_filename,".");
|
strcat(Main_filename, ".");
|
||||||
strcat(Main_filename,File_formats[Main_format-1].Extension);
|
strcat(Main_filename,Get_fileformat(Main_format)->Default_extension);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1658,9 +1671,9 @@ byte Button_Load_or_Save(byte load, byte image)
|
|||||||
// On efface la taille du fichier
|
// On efface la taille du fichier
|
||||||
Window_rectangle(236,59,56,8,MC_Light);
|
Window_rectangle(236,59,56,8,MC_Light);
|
||||||
// On efface le format du fichier
|
// On efface le format du fichier
|
||||||
Window_rectangle(59,59,3*8,8,MC_Light);
|
Window_rectangle(59,59,5*8,8,MC_Light);
|
||||||
// Affichage du commentaire
|
// Affichage du commentaire
|
||||||
if ( (!load) && (File_formats[Main_format-1].Comment) )
|
if ( (!load) && (Get_fileformat(Main_format)->Comment) )
|
||||||
{
|
{
|
||||||
Print_in_window(45,70,Main_comment,MC_Black,MC_Light);
|
Print_in_window(45,70,Main_comment,MC_Black,MC_Light);
|
||||||
}
|
}
|
||||||
|
|||||||
90
loadsave.c
90
loadsave.c
@ -126,23 +126,25 @@ void Save_PNG(void);
|
|||||||
void Init_preview(short width,short height,long size,int format,enum PIXEL_RATIO ratio);
|
void Init_preview(short width,short height,long size,int format,enum PIXEL_RATIO ratio);
|
||||||
|
|
||||||
T_Format File_formats[NB_KNOWN_FORMATS] = {
|
T_Format File_formats[NB_KNOWN_FORMATS] = {
|
||||||
{"pkm", Test_PKM, Load_PKM, Save_PKM, 1, 1},
|
{FORMAT_ALL_IMAGES, "(all)", NULL, NULL, NULL, 0, 0, "", "gif;png;bmp;pcx;pkm;lbm;iff;img;sci;scq;scf;scn;sco;pi1;pc1;cel;neo;kcf;pal;c64;koa"},
|
||||||
{"lbm", Test_LBM, Load_LBM, Save_LBM, 1, 0},
|
{FORMAT_ALL_FILES, "(*.*)", NULL, NULL, NULL, 0, 0, "", "*"},
|
||||||
{"gif", Test_GIF, Load_GIF, Save_GIF, 1, 1},
|
{FORMAT_GIF, " gif", Test_GIF, Load_GIF, Save_GIF, 1, 1, "gif", "gif"},
|
||||||
{"bmp", Test_BMP, Load_BMP, Save_BMP, 1, 0},
|
|
||||||
{"pcx", Test_PCX, Load_PCX, Save_PCX, 1, 0},
|
|
||||||
{"img", Test_IMG, Load_IMG, Save_IMG, 1, 0},
|
|
||||||
{"sc?", Test_SCx, Load_SCx, Save_SCx, 1, 0},
|
|
||||||
{"pi1", Test_PI1, Load_PI1, Save_PI1, 1, 0},
|
|
||||||
{"pc1", Test_PC1, Load_PC1, Save_PC1, 1, 0},
|
|
||||||
{"cel", Test_CEL, Load_CEL, Save_CEL, 1, 0},
|
|
||||||
{"neo", Test_NEO, Load_NEO, Save_NEO, 1, 0},
|
|
||||||
{"kcf", Test_KCF, Load_KCF, Save_KCF, 0, 0},
|
|
||||||
{"pal", Test_PAL, Load_PAL, Save_PAL, 0, 0},
|
|
||||||
{"c64", Test_C64, Load_C64, Save_C64, 1, 1},
|
|
||||||
#ifndef __no_pnglib__
|
#ifndef __no_pnglib__
|
||||||
{"png", Test_PNG, Load_PNG, Save_PNG, 1, 1}
|
{FORMAT_PNG, " png", Test_PNG, Load_PNG, Save_PNG, 1, 1, "png", "png"},
|
||||||
#endif
|
#endif
|
||||||
|
{FORMAT_BMP, " bmp", Test_BMP, Load_BMP, Save_BMP, 1, 0, "bmp", "bmp"},
|
||||||
|
{FORMAT_PCX, " pcx", Test_PCX, Load_PCX, Save_PCX, 1, 0, "pcx", "pcx"},
|
||||||
|
{FORMAT_PKM, " pkm", Test_PKM, Load_PKM, Save_PKM, 1, 1, "pkm", "pkm"},
|
||||||
|
{FORMAT_LBM, " lbm", Test_LBM, Load_LBM, Save_LBM, 1, 0, "lbm", "lbm;iff"},
|
||||||
|
{FORMAT_IMG, " img", Test_IMG, Load_IMG, Save_IMG, 1, 0, "img", "img"},
|
||||||
|
{FORMAT_SCx, " sc?", Test_SCx, Load_SCx, Save_SCx, 1, 0, "sc?", "sci;scq;scf;scn;sco"},
|
||||||
|
{FORMAT_PI1, " pi1", Test_PI1, Load_PI1, Save_PI1, 1, 0, "pi1", "pi1"},
|
||||||
|
{FORMAT_PC1, " pc1", Test_PC1, Load_PC1, Save_PC1, 1, 0, "pc1", "pc1"},
|
||||||
|
{FORMAT_CEL, " cel", Test_CEL, Load_CEL, Save_CEL, 1, 0, "cel", "cel"},
|
||||||
|
{FORMAT_NEO, " neo", Test_NEO, Load_NEO, Save_NEO, 1, 0, "neo", "neo"},
|
||||||
|
{FORMAT_KCF, " kcf", Test_KCF, Load_KCF, Save_KCF, 0, 0, "kcf", "kcf"},
|
||||||
|
{FORMAT_PAL, " pal", Test_PAL, Load_PAL, Save_PAL, 0, 0, "pal", "pal"},
|
||||||
|
{FORMAT_C64, " c64", Test_C64, Load_C64, Save_C64, 1, 1, "c64", "c64;koa"},
|
||||||
};
|
};
|
||||||
|
|
||||||
// Cette variable est alimentée après chargement réussi d'une image.
|
// Cette variable est alimentée après chargement réussi d'une image.
|
||||||
@ -415,13 +417,13 @@ void Init_preview(short width,short height,long size,int format, enum PIXEL_RATI
|
|||||||
// Affichage du vrai format
|
// Affichage du vrai format
|
||||||
if (format!=Main_format)
|
if (format!=Main_format)
|
||||||
{
|
{
|
||||||
Print_in_window( 59,59,File_formats[format-1].Extension,MC_Black,MC_Light);
|
Print_in_window( 59,59,Get_fileformat(format)->Label,MC_Black,MC_Light);
|
||||||
}
|
}
|
||||||
|
|
||||||
// On efface le commentaire précédent
|
// On efface le commentaire précédent
|
||||||
Window_rectangle(45,70,32*8,8,MC_Light);
|
Window_rectangle(45,70,32*8,8,MC_Light);
|
||||||
// Affichage du commentaire
|
// Affichage du commentaire
|
||||||
if (File_formats[format-1].Comment)
|
if (Get_fileformat(format)->Comment)
|
||||||
Print_in_window(45,70,Main_comment,MC_Black,MC_Light);
|
Print_in_window(45,70,Main_comment,MC_Black,MC_Light);
|
||||||
|
|
||||||
// Calculs des données nécessaires à l'affichage de la preview:
|
// Calculs des données nécessaires à l'affichage de la preview:
|
||||||
@ -604,36 +606,36 @@ void Set_file_error(int value)
|
|||||||
// -- Charger n'importe connu quel type de fichier d'image (ou palette) -----
|
// -- Charger n'importe connu quel type de fichier d'image (ou palette) -----
|
||||||
void Load_image(byte image)
|
void Load_image(byte image)
|
||||||
{
|
{
|
||||||
int index; // index de balayage des formats
|
unsigned int index; // index de balayage des formats
|
||||||
int format=0; // Format du fichier à charger
|
T_Format *format = &(File_formats[2]); // Format du fichier à charger
|
||||||
|
|
||||||
|
|
||||||
// On place par défaut File_error à vrai au cas où on ne sache pas
|
// On place par défaut File_error à vrai au cas où on ne sache pas
|
||||||
// charger le format du fichier:
|
// charger le format du fichier:
|
||||||
File_error=1;
|
File_error=1;
|
||||||
|
|
||||||
if (Main_format!=0)
|
if (Main_format>FORMAT_ALL_FILES)
|
||||||
{
|
{
|
||||||
File_formats[Main_format-1].Test();
|
format = Get_fileformat(Main_format);
|
||||||
if (!File_error)
|
format->Test();
|
||||||
// Si dans le sélecteur il y a un format valide on le prend tout de suite
|
|
||||||
format=Main_format-1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (File_error)
|
if (File_error)
|
||||||
{
|
{
|
||||||
// Sinon, on va devoir scanner les différents formats qu'on connait pour
|
// Sinon, on va devoir scanner les différents formats qu'on connait pour
|
||||||
// savoir à quel format est le fichier:
|
// savoir à quel format est le fichier:
|
||||||
for (index=0;index<NB_FORMATS_LOAD;index++)
|
for (index=0; index < NB_KNOWN_FORMATS; index++)
|
||||||
{
|
{
|
||||||
|
format = Get_fileformat(index);
|
||||||
|
// Loadable format
|
||||||
|
if (format->Load == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
// On appelle le testeur du format:
|
// On appelle le testeur du format:
|
||||||
File_formats[index].Test();
|
format->Test();
|
||||||
// On s'arrête si le fichier est au bon format:
|
// On s'arrête si le fichier est au bon format:
|
||||||
if (File_error==0)
|
if (File_error==0)
|
||||||
{
|
|
||||||
format=index;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -645,7 +647,7 @@ void Load_image(byte image)
|
|||||||
Ratio_of_loaded_image=PIXEL_SIMPLE;
|
Ratio_of_loaded_image=PIXEL_SIMPLE;
|
||||||
// Dans certains cas il est possible que le chargement plante
|
// Dans certains cas il est possible que le chargement plante
|
||||||
// après avoir modifié la palette. TODO
|
// après avoir modifié la palette. TODO
|
||||||
File_formats[format].Load();
|
format->Load();
|
||||||
|
|
||||||
if (File_error>0)
|
if (File_error>0)
|
||||||
{
|
{
|
||||||
@ -685,7 +687,7 @@ void Load_image(byte image)
|
|||||||
|
|
||||||
if (image)
|
if (image)
|
||||||
{
|
{
|
||||||
if ( (File_error!=1) && (File_formats[format].Backup_done) )
|
if ( (File_error!=1) && (format->Backup_done) )
|
||||||
{
|
{
|
||||||
if (Pixel_load_function==Pixel_load_in_preview)
|
if (Pixel_load_function==Pixel_load_in_preview)
|
||||||
{
|
{
|
||||||
@ -700,7 +702,7 @@ void Load_image(byte image)
|
|||||||
// On considère que l'image chargée n'est plus modifiée
|
// On considère que l'image chargée n'est plus modifiée
|
||||||
Main_image_is_modified=0;
|
Main_image_is_modified=0;
|
||||||
// Et on documente la variable Main_fileformat avec la valeur:
|
// Et on documente la variable Main_fileformat avec la valeur:
|
||||||
Main_fileformat=format+1;
|
Main_fileformat=format->Identifier;
|
||||||
|
|
||||||
// Correction des dimensions
|
// Correction des dimensions
|
||||||
if (Main_image_width<1)
|
if (Main_image_width<1)
|
||||||
@ -713,7 +715,7 @@ void Load_image(byte image)
|
|||||||
// On considère que l'image chargée est encore modifiée
|
// On considère que l'image chargée est encore modifiée
|
||||||
Main_image_is_modified=1;
|
Main_image_is_modified=1;
|
||||||
// Et on documente la variable Main_fileformat avec la valeur:
|
// Et on documente la variable Main_fileformat avec la valeur:
|
||||||
Main_fileformat=format+1;
|
Main_fileformat=format->Identifier;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -741,13 +743,13 @@ void Save_image(byte image)
|
|||||||
|
|
||||||
Read_pixel_function=(image)?Read_pixel_from_current_screen:Read_pixel_from_brush;
|
Read_pixel_function=(image)?Read_pixel_from_current_screen:Read_pixel_from_brush;
|
||||||
|
|
||||||
File_formats[Main_fileformat-1].Save();
|
Get_fileformat(Main_fileformat)->Save();
|
||||||
|
|
||||||
if (File_error)
|
if (File_error)
|
||||||
Error(0);
|
Error(0);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((image) && (File_formats[Main_fileformat-1].Backup_done))
|
if ((image) && (Get_fileformat(Main_fileformat)->Backup_done))
|
||||||
Main_image_is_modified=0;
|
Main_image_is_modified=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6899,3 +6901,21 @@ void Image_emergency_backup()
|
|||||||
Emergency_backup("phoenix.img",Main_screen, Main_image_width, Main_image_height, &Main_palette);
|
Emergency_backup("phoenix.img",Main_screen, Main_image_width, Main_image_height, &Main_palette);
|
||||||
Emergency_backup("phoenix2.img",Spare_screen, Spare_image_width, Spare_image_height, &Spare_palette);
|
Emergency_backup("phoenix2.img",Spare_screen, Spare_image_width, Spare_image_height, &Spare_palette);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
T_Format * Get_fileformat(byte format)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
T_Format * safe_default = File_formats;
|
||||||
|
|
||||||
|
for (i=0; i < NB_KNOWN_FORMATS; i++)
|
||||||
|
{
|
||||||
|
if (File_formats[i].Identifier == format)
|
||||||
|
return &(File_formats[i]);
|
||||||
|
|
||||||
|
if (File_formats[i].Identifier == FORMAT_GIF)
|
||||||
|
safe_default=&(File_formats[i]);
|
||||||
|
}
|
||||||
|
// Normally impossible to reach this point, unless called with an invalid
|
||||||
|
// enum....
|
||||||
|
return safe_default;
|
||||||
|
}
|
||||||
|
|||||||
29
loadsave.h
29
loadsave.h
@ -40,16 +40,19 @@ void Save_image(byte image);
|
|||||||
|
|
||||||
/// Data for an image file format.
|
/// Data for an image file format.
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *Extension; ///< Three-letter file extension
|
byte Identifier; ///< Identifier for this format in enum :FILE_FORMATS
|
||||||
Func_action Test; ///< Function which tests if the file is of this format
|
char *Label; ///< Five-letter label
|
||||||
Func_action Load; ///< Function which loads an image of this format
|
Func_action Test; ///< Function which tests if the file is of this format
|
||||||
Func_action Save; ///< Function which saves an image of this format
|
Func_action Load; ///< Function which loads an image of this format
|
||||||
byte Backup_done; ///< Boolean, true if this format saves all the image, and considers it backed up. Set false for formats which only save the palette.
|
Func_action Save; ///< Function which saves an image of this format
|
||||||
byte Comment; ///< This file format allows a text comment
|
byte Backup_done; ///< Boolean, true if this format saves all the image, and considers it backed up. Set false for formats which only save the palette.
|
||||||
|
byte Comment; ///< This file format allows a text comment
|
||||||
|
char *Default_extension; ///< Default file extension
|
||||||
|
char *Extensions; ///< List of semicolon-separated file extensions
|
||||||
} T_Format;
|
} T_Format;
|
||||||
|
|
||||||
/// Array of the known file formats
|
/// Array of the known file formats
|
||||||
extern T_Format File_formats[NB_KNOWN_FORMATS];
|
extern T_Format File_formats[];
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Function which attempts to save backups of the images (main and spare),
|
/// Function which attempts to save backups of the images (main and spare),
|
||||||
@ -58,3 +61,15 @@ void Image_emergency_backup(void);
|
|||||||
|
|
||||||
/// Pixel ratio of last loaded image: one of :PIXEL_SIMPLE, :PIXEL_WIDE or :PIXEL_TALL
|
/// Pixel ratio of last loaded image: one of :PIXEL_SIMPLE, :PIXEL_WIDE or :PIXEL_TALL
|
||||||
extern enum PIXEL_RATIO Ratio_of_loaded_image;
|
extern enum PIXEL_RATIO Ratio_of_loaded_image;
|
||||||
|
|
||||||
|
T_Format * Get_fileformat(byte format);
|
||||||
|
|
||||||
|
// -- File formats
|
||||||
|
|
||||||
|
#ifndef __no_pnglib__
|
||||||
|
#define NB_KNOWN_FORMATS 17 ///< Total number of known file formats.
|
||||||
|
#else
|
||||||
|
// Without pnglib
|
||||||
|
#define NB_KNOWN_FORMATS 16 ///< Total number of known file formats.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|||||||
6
main.c
6
main.c
@ -368,13 +368,13 @@ int Init_program(int argc,char * argv[])
|
|||||||
|
|
||||||
Main_fileselector_position=0; // Au début, le fileselect est en haut de la liste des fichiers
|
Main_fileselector_position=0; // Au début, le fileselect est en haut de la liste des fichiers
|
||||||
Main_fileselector_offset=0; // Au début, le fileselect est en haut de la liste des fichiers
|
Main_fileselector_offset=0; // Au début, le fileselect est en haut de la liste des fichiers
|
||||||
Main_format=0;
|
Main_format=FORMAT_ALL_IMAGES;
|
||||||
Spare_fileselector_position=0;
|
Spare_fileselector_position=0;
|
||||||
Spare_fileselector_offset=0;
|
Spare_fileselector_offset=0;
|
||||||
Spare_format=0;
|
Spare_format=FORMAT_ALL_IMAGES;
|
||||||
Brush_fileselector_position=0;
|
Brush_fileselector_position=0;
|
||||||
Brush_fileselector_offset=0;
|
Brush_fileselector_offset=0;
|
||||||
Brush_format=0;
|
Brush_format=FORMAT_ALL_IMAGES;
|
||||||
|
|
||||||
// On initialise les commentaires des images à des chaînes vides
|
// On initialise les commentaires des images à des chaînes vides
|
||||||
Main_comment[0]='\0';
|
Main_comment[0]='\0';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user