Change Selector_filename to Selector->filename
This commit is contained in:
parent
030b7fa9b8
commit
7d5f287737
238
src/filesel.c
238
src/filesel.c
@ -147,10 +147,6 @@ static T_Fileselector Filelist;
|
|||||||
/// Selector settings to use, for all functions called by Load_or_save
|
/// Selector settings to use, for all functions called by Load_or_save
|
||||||
static T_Selector_settings * Selector;
|
static T_Selector_settings * Selector;
|
||||||
|
|
||||||
/// Filename (without directory) of the highlighted file
|
|
||||||
static char Selector_filename[256];
|
|
||||||
static word Selector_filename_unicode[256];
|
|
||||||
|
|
||||||
// Conventions:
|
// Conventions:
|
||||||
//
|
//
|
||||||
// * Le fileselect modifie le répertoire courant. Ceci permet de n'avoir
|
// * Le fileselect modifie le répertoire courant. Ceci permet de n'avoir
|
||||||
@ -1049,33 +1045,32 @@ void Display_file_list(T_Fileselector *list, short offset_first,short selector_o
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the label of a list item.
|
* Get the label of a list item.
|
||||||
|
*
|
||||||
|
* selector->filename and selector->filename_unicode are updated
|
||||||
|
*
|
||||||
* @param list the file list
|
* @param list the file list
|
||||||
* @param offset_first offset between the 1st visible file and the 1st file in list.
|
* @param selector the current File selector
|
||||||
* @param selector_offset offset between the 1st visible file and the wanted label.
|
|
||||||
* @param label pointer to a buffer to receive the label (ANSI)
|
|
||||||
* @param unicode_label pointer to a buffer to receive the label (Unicode)
|
|
||||||
* @param type NULL or a pointer to receive the type : 0 = file, 1 = directory, 2 = drive.
|
* @param type NULL or a pointer to receive the type : 0 = file, 1 = directory, 2 = drive.
|
||||||
*/
|
*/
|
||||||
static void Get_selected_item(T_Fileselector *list, short offset_first,short selector_offset,char * label,word * unicode_label, enum FSOBJECT_TYPE *type)
|
static void Get_selected_item(T_Fileselector *list, T_Selector_settings * selector, enum FSOBJECT_TYPE *type)
|
||||||
{
|
{
|
||||||
T_Fileselector_item * current_item;
|
T_Fileselector_item * current_item;
|
||||||
|
|
||||||
// On vérifie s'il y a au moins 1 fichier dans la liste:
|
// On vérifie s'il y a au moins 1 fichier dans la liste:
|
||||||
if (list->Nb_elements>0)
|
if (list->Nb_elements > 0)
|
||||||
{
|
{
|
||||||
// On commence par chercher à pointer sur le premier fichier visible:
|
// On commence par chercher à pointer sur le premier fichier visible:
|
||||||
// Ensuite, on saute autant d'éléments que le décalage demandé:
|
// Ensuite, on saute autant d'éléments que le décalage demandé:
|
||||||
current_item = Get_item_by_index(list, offset_first + selector_offset);
|
current_item = Get_item_by_index(list, selector->Position + selector->Offset);
|
||||||
|
|
||||||
// On recopie la chaîne
|
// On recopie la chaîne
|
||||||
strcpy(label, current_item->Full_name);
|
free(selector->filename);
|
||||||
if (unicode_label != NULL)
|
selector->filename = strdup(current_item->Full_name);
|
||||||
{
|
free(selector->filename_unicode);
|
||||||
if (current_item->Unicode_full_name)
|
if (current_item->Unicode_full_name)
|
||||||
Unicode_strlcpy(unicode_label, current_item->Unicode_full_name, 256);
|
selector->filename_unicode = Unicode_strdup(current_item->Unicode_full_name);
|
||||||
else
|
else
|
||||||
Unicode_char_strlcpy(unicode_label, current_item->Full_name, 256);
|
selector->filename_unicode = NULL;
|
||||||
}
|
|
||||||
|
|
||||||
if (type != NULL)
|
if (type != NULL)
|
||||||
*type=current_item->Type;
|
*type=current_item->Type;
|
||||||
@ -1344,11 +1339,15 @@ static void Print_current_directory(void)
|
|||||||
void Print_filename_in_fileselector(void)
|
void Print_filename_in_fileselector(void)
|
||||||
{
|
{
|
||||||
char filename[32];
|
char filename[32];
|
||||||
strncpy(filename, Selector_filename, sizeof(filename));
|
if (Selector->filename != NULL)
|
||||||
|
strncpy(filename, Selector->filename, sizeof(filename));
|
||||||
|
else
|
||||||
|
filename[0] = '\0';
|
||||||
#ifdef ENABLE_FILENAMES_ICONV
|
#ifdef ENABLE_FILENAMES_ICONV
|
||||||
|
if (Selector->filename != NULL)
|
||||||
{
|
{
|
||||||
char * input = (char *)Selector_filename;
|
char * input = (char *)Selector->filename;
|
||||||
size_t inbytesleft = strlen(Selector_filename);
|
size_t inbytesleft = strlen(Selector->filename);
|
||||||
char * output = filename;
|
char * output = filename;
|
||||||
size_t outbytesleft = sizeof(filename)-1;
|
size_t outbytesleft = sizeof(filename)-1;
|
||||||
if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0)
|
if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0)
|
||||||
@ -1356,10 +1355,10 @@ void Print_filename_in_fileselector(void)
|
|||||||
}
|
}
|
||||||
#endif /* ENABLE_FILENAMES_ICONV */
|
#endif /* ENABLE_FILENAMES_ICONV */
|
||||||
Window_rectangle(82,48,27*8,8,MC_Light);
|
Window_rectangle(82,48,27*8,8,MC_Light);
|
||||||
if (Selector_filename_unicode[0] != 0)
|
if (Selector->filename_unicode != NULL)
|
||||||
{
|
{
|
||||||
word filename_unicode[32];
|
word filename_unicode[32];
|
||||||
Unicode_strlcpy(filename_unicode, Selector_filename_unicode, 28); // 28 including the terminating 0
|
Unicode_strlcpy(filename_unicode, Selector->filename_unicode, 28); // 28 including the terminating 0
|
||||||
Print_in_window_unicode(82,48,filename_unicode,MC_Black,MC_Light);
|
Print_in_window_unicode(82,48,filename_unicode,MC_Black,MC_Light);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1392,7 +1391,7 @@ static void Prepare_and_display_filelist(short Position, short offset, T_Scrolle
|
|||||||
if (setfilename)
|
if (setfilename)
|
||||||
{
|
{
|
||||||
// On récupère le nom du schmilblick à "accéder"
|
// On récupère le nom du schmilblick à "accéder"
|
||||||
Get_selected_item(&Filelist, Position,offset,Selector_filename,Selector_filename_unicode,&Selected_type);
|
Get_selected_item(&Filelist, Selector, &Selected_type);
|
||||||
}
|
}
|
||||||
// On affiche le nouveau nom de fichier
|
// On affiche le nouveau nom de fichier
|
||||||
Print_filename_in_fileselector();
|
Print_filename_in_fileselector();
|
||||||
@ -1436,9 +1435,7 @@ static void Reload_list_of_files(byte filter, T_Scroller_button * button)
|
|||||||
|
|
||||||
void Scroll_fileselector(T_Scroller_button * file_scroller)
|
void Scroll_fileselector(T_Scroller_button * file_scroller)
|
||||||
{
|
{
|
||||||
char old_filename[256];
|
char * old_filename = strdup(Selector->filename);
|
||||||
|
|
||||||
strcpy(old_filename,Selector_filename);
|
|
||||||
|
|
||||||
// On regarde si la liste a bougé
|
// On regarde si la liste a bougé
|
||||||
if (file_scroller->Position!=Selector->Position)
|
if (file_scroller->Position!=Selector->Position)
|
||||||
@ -1448,9 +1445,10 @@ void Scroll_fileselector(T_Scroller_button * file_scroller)
|
|||||||
Window_draw_slider(file_scroller);
|
Window_draw_slider(file_scroller);
|
||||||
}
|
}
|
||||||
// On récupére le nom du schmilblick à "accéder"
|
// On récupére le nom du schmilblick à "accéder"
|
||||||
Get_selected_item(&Filelist, Selector->Position,Selector->Offset,Selector_filename,Selector_filename_unicode,&Selected_type);
|
Get_selected_item(&Filelist, Selector, &Selected_type);
|
||||||
if (strcmp(old_filename,Selector_filename))
|
if (strcmp(old_filename, Selector->filename))
|
||||||
New_preview_is_needed=1;
|
New_preview_is_needed=1;
|
||||||
|
free(old_filename);
|
||||||
|
|
||||||
// On affiche le nouveau nom de fichier
|
// On affiche le nouveau nom de fichier
|
||||||
Print_filename_in_fileselector();
|
Print_filename_in_fileselector();
|
||||||
@ -1661,8 +1659,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
byte has_clicked_ok=0;// Indique si on a clické sur Load ou Save ou sur
|
byte has_clicked_ok=0;// Indique si on a clické sur Load ou Save ou sur
|
||||||
//un bouton enclenchant Load ou Save juste après.
|
//un bouton enclenchant Load ou Save juste après.
|
||||||
byte initial_back_color; // preview destroys it (how nice)
|
byte initial_back_color; // preview destroys it (how nice)
|
||||||
char save_filename[256];
|
char *save_filename = NULL;
|
||||||
word save_filename_unicode[256];
|
|
||||||
char initial_comment[COMMENT_SIZE+1];
|
char initial_comment[COMMENT_SIZE+1];
|
||||||
short window_shortcut;
|
short window_shortcut;
|
||||||
const char * directory_to_change_to = NULL;
|
const char * directory_to_change_to = NULL;
|
||||||
@ -1809,11 +1806,10 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
|
|
||||||
// On initialise le nom de fichier à celui en cours et non pas celui sous
|
// On initialise le nom de fichier à celui en cours et non pas celui sous
|
||||||
// la barre de sélection
|
// la barre de sélection
|
||||||
strcpy(Selector_filename, context->File_name);
|
free(Selector->filename);
|
||||||
if (context->File_name_unicode != NULL)
|
Selector->filename = strdup(context->File_name);
|
||||||
Unicode_strlcpy(Selector_filename_unicode, context->File_name_unicode, 256);
|
free(Selector->filename_unicode);
|
||||||
else
|
Selector->filename_unicode = Unicode_strdup(context->File_name_unicode);
|
||||||
Selector_filename_unicode[0] = 0;
|
|
||||||
// On affiche le nouveau nom de fichier
|
// On affiche le nouveau nom de fichier
|
||||||
Print_filename_in_fileselector();
|
Print_filename_in_fileselector();
|
||||||
}
|
}
|
||||||
@ -1837,9 +1833,9 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
if (load_from_clipboard)
|
if (load_from_clipboard)
|
||||||
Selected_type = FSOBJECT_FILE;
|
Selected_type = FSOBJECT_FILE;
|
||||||
else if(load) // Determine the type
|
else if(load) // Determine the type
|
||||||
Selected_type = (File_exists(Selector_filename) && !Directory_exists(Selector_filename)) ? FSOBJECT_FILE : FSOBJECT_DIR;
|
Selected_type = (File_exists(Selector->filename) && !Directory_exists(Selector->filename)) ? FSOBJECT_FILE : FSOBJECT_DIR;
|
||||||
else
|
else
|
||||||
Selected_type = Directory_exists(Selector_filename) ? FSOBJECT_DIR : FSOBJECT_FILE;
|
Selected_type = Directory_exists(Selector->filename) ? FSOBJECT_DIR : FSOBJECT_FILE;
|
||||||
has_clicked_ok=1;
|
has_clicked_ok=1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1847,7 +1843,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 3 : // Delete
|
case 3 : // Delete
|
||||||
if (Filelist.Nb_elements && (*Selector_filename!='.') && Selected_type != FSOBJECT_DRIVE)
|
if (Filelist.Nb_elements && (Selector->filename[0] != '.') && Selected_type != FSOBJECT_DRIVE)
|
||||||
{
|
{
|
||||||
char * message;
|
char * message;
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
@ -1865,10 +1861,10 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
// Si c'est un fichier
|
// Si c'est un fichier
|
||||||
if (Selector->Position+Selector->Offset>=Filelist.Nb_directories)
|
if (Selector->Position+Selector->Offset>=Filelist.Nb_directories)
|
||||||
// On efface le fichier (si on peut)
|
// On efface le fichier (si on peut)
|
||||||
temp=(!Remove_path(Selector_filename));
|
temp=(!Remove_path(Selector->filename));
|
||||||
else // Si c'est un repertoire
|
else // Si c'est un repertoire
|
||||||
// On efface le repertoire (si on peut)
|
// On efface le repertoire (si on peut)
|
||||||
temp=(!Remove_directory(Selector_filename));
|
temp=(!Remove_directory(Selector->filename));
|
||||||
|
|
||||||
if (temp) // temp indique si l'effacement s'est bien passé
|
if (temp) // temp indique si l'effacement s'est bien passé
|
||||||
{
|
{
|
||||||
@ -1915,7 +1911,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
Selector->Offset=temp;
|
Selector->Offset=temp;
|
||||||
|
|
||||||
// get item name and details
|
// get item name and details
|
||||||
Get_selected_item(&Filelist, Selector->Position,Selector->Offset,Selector_filename,Selector_filename_unicode,&Selected_type);
|
Get_selected_item(&Filelist, Selector, &Selected_type);
|
||||||
// display the new filename
|
// display the new filename
|
||||||
Print_filename_in_fileselector();
|
Print_filename_in_fileselector();
|
||||||
// and update list
|
// and update list
|
||||||
@ -1936,7 +1932,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
if (Selector->Position+Selector->Offset < Filelist.Nb_directories)
|
if (Selector->Position+Selector->Offset < Filelist.Nb_directories)
|
||||||
{ // clicked on a directory
|
{ // clicked on a directory
|
||||||
// retrieve again the item name
|
// retrieve again the item name
|
||||||
Get_selected_item(&Filelist, Selector->Position,Selector->Offset,Selector_filename,Selector_filename_unicode,&Selected_type);
|
Get_selected_item(&Filelist, Selector, &Selected_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
has_clicked_ok=1;
|
has_clicked_ok=1;
|
||||||
@ -1952,7 +1948,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
Selector->Position=Window_attribute2;
|
Selector->Position=Window_attribute2;
|
||||||
// On récupére le nom du schmilblick à "accéder"
|
// On récupére le nom du schmilblick à "accéder"
|
||||||
Get_selected_item(&Filelist, Selector->Position,Selector->Offset,Selector_filename,Selector_filename_unicode,&Selected_type);
|
Get_selected_item(&Filelist, Selector, &Selected_type);
|
||||||
load_from_clipboard = 0;
|
load_from_clipboard = 0;
|
||||||
// On affiche le nouveau nom de fichier
|
// On affiche le nouveau nom de fichier
|
||||||
Print_filename_in_fileselector();
|
Print_filename_in_fileselector();
|
||||||
@ -1969,7 +1965,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
{
|
{
|
||||||
int pos_last_dot;
|
int pos_last_dot;
|
||||||
char* savename = NULL;
|
char* savename = NULL;
|
||||||
word Selector_filename_unicode_save[256];
|
word* Selector_filename_unicode_save = NULL;
|
||||||
|
|
||||||
GFX2_Log(GFX2_DEBUG, "fileselector format changed from %d to %d\n", (int)Selector->Format_filter, (int)Window_attribute2);
|
GFX2_Log(GFX2_DEBUG, "fileselector format changed from %d to %d\n", (int)Selector->Format_filter, (int)Window_attribute2);
|
||||||
Selector->Format_filter = Window_attribute2;
|
Selector->Format_filter = Window_attribute2;
|
||||||
@ -1979,22 +1975,22 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
{
|
{
|
||||||
// In "save" box, if current name is a (possible) filename
|
// In "save" box, if current name is a (possible) filename
|
||||||
// with extension, set it to new format's extension
|
// with extension, set it to new format's extension
|
||||||
pos_last_dot = Position_last_dot(Selector_filename);
|
pos_last_dot = Position_last_dot(Selector->filename);
|
||||||
if (Get_fileformat(Selector->Format_filter)->Default_extension[0] != '\0' &&
|
if (Get_fileformat(Selector->Format_filter)->Default_extension[0] != '\0' &&
|
||||||
pos_last_dot!=-1 &&
|
pos_last_dot!=-1 &&
|
||||||
Selector_filename[pos_last_dot+1]!='\0')
|
Selector->filename[pos_last_dot+1]!='\0')
|
||||||
{
|
{
|
||||||
GFX2_Log(GFX2_DEBUG, "extension %s => %s\n", Selector_filename + pos_last_dot + 1, Get_fileformat(Selector->Format_filter)->Default_extension);
|
GFX2_Log(GFX2_DEBUG, "extension %s => %s\n", Selector->filename + pos_last_dot + 1, Get_fileformat(Selector->Format_filter)->Default_extension);
|
||||||
strcpy(Selector_filename + pos_last_dot + 1,
|
strcpy(Selector->filename + pos_last_dot + 1,
|
||||||
Get_fileformat(Selector->Format_filter)->Default_extension);
|
Get_fileformat(Selector->Format_filter)->Default_extension);
|
||||||
pos_last_dot = Position_last_dot_unicode(Selector_filename_unicode);
|
pos_last_dot = Position_last_dot_unicode(Selector->filename_unicode);
|
||||||
if (pos_last_dot != -1)
|
if (pos_last_dot != -1)
|
||||||
Unicode_char_strlcpy(Selector_filename_unicode + pos_last_dot + 1,
|
Unicode_char_strlcpy(Selector->filename_unicode + pos_last_dot + 1,
|
||||||
Get_fileformat(Selector->Format_filter)->Default_extension, 256 - pos_last_dot - 1);
|
Get_fileformat(Selector->Format_filter)->Default_extension, 256 - pos_last_dot - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
savename = (char *)strdup(Selector_filename);
|
savename = strdup(Selector->filename);
|
||||||
memcpy(Selector_filename_unicode_save, Selector_filename_unicode, sizeof(Selector_filename_unicode_save));
|
Selector_filename_unicode_save = Unicode_strdup(Selector->filename_unicode);
|
||||||
// By default, position list at the beginning
|
// By default, position list at the beginning
|
||||||
Selector->Position = 0;
|
Selector->Position = 0;
|
||||||
Selector->Offset = 0;
|
Selector->Offset = 0;
|
||||||
@ -2003,7 +1999,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
Reload_list_of_files(Selector->Format_filter, file_scroller);
|
Reload_list_of_files(Selector->Format_filter, file_scroller);
|
||||||
New_preview_is_needed = 1;
|
New_preview_is_needed = 1;
|
||||||
Reset_quicksearch();
|
Reset_quicksearch();
|
||||||
if (savename != NULL)
|
if (savename != NULL && savename[0] != '\0')
|
||||||
{
|
{
|
||||||
// attempt to find the file name in new list
|
// attempt to find the file name in new list
|
||||||
short pos=Find_file_in_fileselector(&Filelist, savename);
|
short pos=Find_file_in_fileselector(&Filelist, savename);
|
||||||
@ -2016,11 +2012,16 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
// extension, set it as the proposed file name.
|
// extension, set it as the proposed file name.
|
||||||
if (pos >= 0 || !load)
|
if (pos >= 0 || !load)
|
||||||
{
|
{
|
||||||
strcpy(Selector_filename, savename);
|
free(Selector->filename);
|
||||||
memcpy(Selector_filename_unicode, Selector_filename_unicode_save, sizeof(Selector_filename_unicode_save));
|
Selector->filename = strdup(savename);
|
||||||
|
savename = NULL;
|
||||||
|
free(Selector->filename_unicode);
|
||||||
|
Selector->filename_unicode = Unicode_strdup(Selector_filename_unicode_save);
|
||||||
|
Selector_filename_unicode_save = NULL;
|
||||||
}
|
}
|
||||||
free(savename);
|
|
||||||
}
|
}
|
||||||
|
free(savename);
|
||||||
|
free(Selector_filename_unicode_save);
|
||||||
Print_filename_in_fileselector();
|
Print_filename_in_fileselector();
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
}
|
}
|
||||||
@ -2036,31 +2037,37 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
{
|
{
|
||||||
char filename_ansi[256];
|
char filename_ansi[256];
|
||||||
word filename_unicode[256];
|
word filename_unicode[256];
|
||||||
|
word * save_filename_unicode = Unicode_strdup(Selector->filename_unicode);
|
||||||
|
|
||||||
// Save the filename
|
free(save_filename);
|
||||||
strcpy(save_filename, Selector_filename);
|
save_filename = strdup(Selector->filename);
|
||||||
Unicode_strlcpy(save_filename_unicode, Selector_filename_unicode, 256);
|
|
||||||
// Check if the selected entry is a drive/directory :
|
// Check if the selected entry is a drive/directory :
|
||||||
// in, this case, clear the filename
|
// in, this case, clear the filename
|
||||||
if (Filelist.Nb_elements>0)
|
if (Filelist.Nb_elements>0)
|
||||||
{
|
{
|
||||||
T_Fileselector_item * current_item;
|
T_Fileselector_item * current_item;
|
||||||
current_item = Get_item_by_index(&Filelist, Selector->Position + Selector->Offset);
|
current_item = Get_item_by_index(&Filelist, Selector->Position + Selector->Offset);
|
||||||
if (current_item->Type != FSOBJECT_FILE && !FILENAME_COMPARE(current_item->Full_name,Selector_filename))
|
if (current_item->Type != FSOBJECT_FILE && !FILENAME_COMPARE(current_item->Full_name, Selector->filename))
|
||||||
{
|
{
|
||||||
// current name is a highlighted directory
|
// current name is a highlighted directory
|
||||||
Selector_filename[0]='\0';
|
free(Selector->filename);
|
||||||
Selector_filename_unicode[0]=0;
|
Selector->filename = NULL;
|
||||||
|
free(Selector->filename_unicode);
|
||||||
|
Selector->filename_unicode = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
strncpy(filename_ansi, Selector_filename, sizeof(filename_ansi));
|
if (Selector->filename != NULL)
|
||||||
if (Selector_filename_unicode[0] == 0 && strlen(Selector_filename) > 0)
|
strncpy(filename_ansi, Selector->filename, sizeof(filename_ansi));
|
||||||
Unicode_char_strlcpy(filename_unicode, Selector_filename, sizeof(filename_unicode)/sizeof(word));
|
|
||||||
else
|
else
|
||||||
Unicode_strlcpy(filename_unicode, Selector_filename_unicode, sizeof(filename_unicode)/sizeof(word));
|
filename_ansi[0] = '\0';
|
||||||
|
filename_unicode[0] = '\0';
|
||||||
|
if (Selector->filename_unicode != NULL && Selector->filename_unicode[0] != 0)
|
||||||
|
Unicode_strlcpy(filename_unicode, Selector->filename_unicode, sizeof(filename_unicode)/sizeof(word));
|
||||||
|
else if (Selector->filename != NULL && strlen(Selector->filename) > 0)
|
||||||
|
Unicode_char_strlcpy(filename_unicode, Selector->filename, sizeof(filename_unicode)/sizeof(word));
|
||||||
#ifdef ENABLE_FILENAMES_ICONV
|
#ifdef ENABLE_FILENAMES_ICONV
|
||||||
{ /* convert from UTF8 to ANSI */
|
{ /* convert from UTF8 to ANSI */
|
||||||
char * input = (char *)Selector_filename;
|
char * input = (char *)Selector->filename;
|
||||||
size_t inbytesleft = strlen(input);
|
size_t inbytesleft = strlen(input);
|
||||||
char * output = filename_ansi;
|
char * output = filename_ansi;
|
||||||
size_t outbytesleft = sizeof(filename_ansi)-1;
|
size_t outbytesleft = sizeof(filename_ansi)-1;
|
||||||
@ -2075,8 +2082,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#if defined(WIN32)
|
#if defined(WIN32)
|
||||||
DWORD short_len;
|
DWORD short_len = GetShortPathNameW((WCHAR *)filename_unicode, NULL, 0);
|
||||||
short_len = GetShortPathNameW((WCHAR *)filename_unicode, NULL, 0);
|
|
||||||
if (short_len > 0)
|
if (short_len > 0)
|
||||||
{
|
{
|
||||||
WCHAR * temp_str = (WCHAR *)malloc(short_len * sizeof(WCHAR));
|
WCHAR * temp_str = (WCHAR *)malloc(short_len * sizeof(WCHAR));
|
||||||
@ -2104,25 +2110,20 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
/* convert back from UTF16 to UTF8 */
|
/* convert back from UTF16 to UTF8 */
|
||||||
char * input = (char *)filename_unicode;
|
char * input = (char *)filename_unicode;
|
||||||
size_t inbytesleft = 2 * Unicode_strlen(filename_unicode);
|
size_t inbytesleft = 2 * Unicode_strlen(filename_unicode);
|
||||||
char * output = Selector_filename;
|
char * output = filename_ansi;
|
||||||
size_t outbytesleft = sizeof(Selector_filename)-1;
|
size_t outbytesleft = sizeof(filename_ansi)-1;
|
||||||
if(cd_utf16_inv != (iconv_t)-1 && (ssize_t)iconv(cd_utf16_inv, &input, &inbytesleft, &output, &outbytesleft) >= 0)
|
if(cd_utf16_inv != (iconv_t)-1 && (ssize_t)iconv(cd_utf16_inv, &input, &inbytesleft, &output, &outbytesleft) >= 0)
|
||||||
*output = '\0';
|
*output = '\0';
|
||||||
else
|
|
||||||
#endif
|
#endif
|
||||||
strncpy(Selector_filename, filename_ansi, sizeof(Selector_filename));
|
|
||||||
|
|
||||||
#if defined(WIN32) || defined(ENABLE_FILENAMES_ICONV)
|
|
||||||
Unicode_strlcpy(Selector_filename_unicode, filename_unicode, sizeof(Selector_filename_unicode)/sizeof(word));
|
|
||||||
#endif
|
|
||||||
// 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.
|
||||||
for(temp=0,dummy=0; ((Selector_filename[temp]) && (!dummy)); temp++)
|
for(temp=0, dummy=0; ((filename_ansi[temp]) && (!dummy)); temp++)
|
||||||
if (Selector_filename[temp]=='.')
|
if (filename_ansi[temp]=='.')
|
||||||
dummy=1;
|
dummy=1;
|
||||||
if (!dummy)
|
if (!dummy)
|
||||||
{
|
{
|
||||||
if(!Directory_exists(Selector_filename))
|
if(!Directory_exists(filename_ansi))
|
||||||
{
|
{
|
||||||
const char * ext = Get_fileformat(Selector->Format_filter)->Default_extension;
|
const char * ext = Get_fileformat(Selector->Format_filter)->Default_extension;
|
||||||
// put default extension
|
// put default extension
|
||||||
@ -2130,16 +2131,25 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
// something suitable ?)
|
// something suitable ?)
|
||||||
if (ext == NULL)
|
if (ext == NULL)
|
||||||
ext = "pkm";
|
ext = "pkm";
|
||||||
strcat(Selector_filename, ".");
|
strcat(filename_ansi, ".");
|
||||||
strcat(Selector_filename, ext);
|
strcat(filename_ansi, ext);
|
||||||
Unicode_char_strlcat(Selector_filename_unicode, ".", sizeof(Selector_filename_unicode)/sizeof(word));
|
Unicode_char_strlcat(filename_unicode, ".", sizeof(filename_unicode)/sizeof(word));
|
||||||
Unicode_char_strlcat(Selector_filename_unicode, ext, sizeof(Selector_filename_unicode)/sizeof(word));
|
Unicode_char_strlcat(filename_unicode, ext, sizeof(filename_unicode)/sizeof(word));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(Selector->filename);
|
||||||
|
Selector->filename = strdup(filename_ansi);
|
||||||
|
free(Selector->filename_unicode);
|
||||||
|
#if defined(WIN32) || defined(ENABLE_FILENAMES_ICONV)
|
||||||
|
Selector->filename_unicode = Unicode_strdup(filename_unicode);
|
||||||
|
#else
|
||||||
|
Selector->filename_unicode = NULL;
|
||||||
|
#endif
|
||||||
if(load) // Determine the type
|
if(load) // Determine the type
|
||||||
Selected_type = (File_exists(Selector_filename) && !Directory_exists(Selector_filename)) ? FSOBJECT_FILE : FSOBJECT_DIR;
|
Selected_type = (File_exists(Selector->filename) && !Directory_exists(Selector->filename)) ? FSOBJECT_FILE : FSOBJECT_DIR;
|
||||||
else
|
else
|
||||||
Selected_type = Directory_exists(Selector_filename) ? FSOBJECT_DIR : FSOBJECT_FILE;
|
Selected_type = Directory_exists(Selector->filename) ? FSOBJECT_DIR : FSOBJECT_FILE;
|
||||||
|
|
||||||
// Now load immediately, but only if the user exited readline by pressing ENTER
|
// Now load immediately, but only if the user exited readline by pressing ENTER
|
||||||
if (Mouse_K == 0) has_clicked_ok = 1;
|
if (Mouse_K == 0) has_clicked_ok = 1;
|
||||||
@ -2147,9 +2157,15 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Restore the old filename
|
// Restore the old filename
|
||||||
strcpy(Selector_filename, save_filename);
|
free(Selector->filename);
|
||||||
Unicode_strlcpy(Selector_filename_unicode, save_filename_unicode, sizeof(Selector_filename_unicode)/sizeof(word));
|
Selector->filename = save_filename; // steal buffer
|
||||||
|
save_filename = NULL;
|
||||||
|
free(Selector->filename_unicode);
|
||||||
|
Selector->filename_unicode = save_filename_unicode; // steal buffer
|
||||||
|
save_filename_unicode = NULL;
|
||||||
}
|
}
|
||||||
|
free(save_filename_unicode);
|
||||||
|
save_filename_unicode = NULL;
|
||||||
Print_filename_in_fileselector();
|
Print_filename_in_fileselector();
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
break;
|
break;
|
||||||
@ -2175,8 +2191,10 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
// paste from clipboard
|
// paste from clipboard
|
||||||
load_from_clipboard = 1;
|
load_from_clipboard = 1;
|
||||||
New_preview_is_needed = 1;
|
New_preview_is_needed = 1;
|
||||||
strcpy(Selector_filename, "* CLIPBOARD *");
|
free(Selector->filename);
|
||||||
Selector_filename_unicode[0] = 0;
|
Selector->filename = strdup("* CLIPBOARD *");
|
||||||
|
free(Selector->filename_unicode);
|
||||||
|
Selector->filename_unicode = NULL;
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
Print_filename_in_fileselector();
|
Print_filename_in_fileselector();
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
@ -2207,7 +2225,8 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
{
|
{
|
||||||
GFX2_Log(GFX2_DEBUG,"Go to bookmark %s\n", Config.Bookmark_directory[clicked_button-10]);
|
GFX2_Log(GFX2_DEBUG,"Go to bookmark %s\n", Config.Bookmark_directory[clicked_button-10]);
|
||||||
// backup the currently selected filename
|
// backup the currently selected filename
|
||||||
strncpy(save_filename, Selector_filename, sizeof(save_filename));
|
free(save_filename);
|
||||||
|
save_filename = strdup(Selector->filename);
|
||||||
// simulate a click on the bookmarked directory
|
// simulate a click on the bookmarked directory
|
||||||
directory_to_change_to = Config.Bookmark_directory[clicked_button-10];
|
directory_to_change_to = Config.Bookmark_directory[clicked_button-10];
|
||||||
Reset_quicksearch();
|
Reset_quicksearch();
|
||||||
@ -2356,10 +2375,12 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
if (Filelist.Nb_elements && !strcmp(Filelist.First->Full_name,PARENT_DIR))
|
if (Filelist.Nb_elements && !strcmp(Filelist.First->Full_name,PARENT_DIR))
|
||||||
{
|
{
|
||||||
// On va dans le répertoire parent.
|
// On va dans le répertoire parent.
|
||||||
strcpy(Selector_filename,PARENT_DIR);
|
free(Selector->filename);
|
||||||
Selector_filename_unicode[0] = 0;
|
Selector->filename = strdup(PARENT_DIR);
|
||||||
Selected_type=FSOBJECT_DIR;
|
free(Selector->filename_unicode);
|
||||||
has_clicked_ok=1;
|
Selector->filename_unicode = NULL;
|
||||||
|
Selected_type = FSOBJECT_DIR;
|
||||||
|
has_clicked_ok = 1;
|
||||||
}
|
}
|
||||||
Key=0;
|
Key=0;
|
||||||
break;
|
break;
|
||||||
@ -2408,7 +2429,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
has_clicked_ok=0;
|
has_clicked_ok=0;
|
||||||
|
|
||||||
if (directory_to_change_to == NULL)
|
if (directory_to_change_to == NULL)
|
||||||
directory_to_change_to = Selector_filename;
|
directory_to_change_to = Selector->filename;
|
||||||
|
|
||||||
// We must enter the directory
|
// We must enter the directory
|
||||||
|
|
||||||
@ -2449,10 +2470,11 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
Sort_list_of_files(&Filelist);
|
Sort_list_of_files(&Filelist);
|
||||||
// Set the fileselector bar on the directory we're coming from
|
// Set the fileselector bar on the directory we're coming from
|
||||||
pos = Find_file_in_fileselector(&Filelist, previous_directory);
|
pos = Find_file_in_fileselector(&Filelist, previous_directory);
|
||||||
strcpy(Selector_filename, previous_directory);
|
free(Selector->filename);
|
||||||
free(previous_directory);
|
Selector->filename = previous_directory; // Steal heap buffer
|
||||||
if (!Get_Unicode_Filename(Selector_filename_unicode, Selector_filename, "."))
|
previous_directory = NULL;
|
||||||
Selector_filename_unicode[0] = 0;
|
free(Selector->filename_unicode);
|
||||||
|
Selector->filename_unicode = Get_Unicode_Filename(NULL, Selector->filename, ".");
|
||||||
Highlight_file((pos >= 0) ? pos : 0);
|
Highlight_file((pos >= 0) ? pos : 0);
|
||||||
// display the 1st visible files
|
// display the 1st visible files
|
||||||
Prepare_and_display_filelist(Selector->Position,Selector->Offset,file_scroller,0);
|
Prepare_and_display_filelist(Selector->Position,Selector->Offset,file_scroller,0);
|
||||||
@ -2471,7 +2493,9 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
GFX2_Log(GFX2_WARNING, "Current directory is \"%s\"", current_dir);
|
GFX2_Log(GFX2_WARNING, "Current directory is \"%s\"", current_dir);
|
||||||
free(current_dir);
|
free(current_dir);
|
||||||
// restore Selector_filename
|
// restore Selector_filename
|
||||||
strncpy(Selector_filename, save_filename, sizeof(Selector_filename));
|
free(Selector->filename);
|
||||||
|
Selector->filename = save_filename; // steal heap buffer
|
||||||
|
save_filename = NULL;
|
||||||
Error(0);
|
Error(0);
|
||||||
}
|
}
|
||||||
directory_to_change_to = NULL;
|
directory_to_change_to = NULL;
|
||||||
@ -2484,6 +2508,8 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
save_or_load_image=1;
|
save_or_load_image=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
free(save_filename);
|
||||||
|
save_filename = NULL;
|
||||||
|
|
||||||
// Gestion du chrono et des previews
|
// Gestion du chrono et des previews
|
||||||
if (New_preview_is_needed)
|
if (New_preview_is_needed)
|
||||||
@ -2537,9 +2563,9 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Init_context_preview(&preview_context, Selector_filename, Selector->Directory);
|
Init_context_preview(&preview_context, Selector->filename, Selector->Directory);
|
||||||
preview_context.Format = Selector->Format_filter;
|
preview_context.Format = Selector->Format_filter;
|
||||||
preview_context.File_name_unicode = Unicode_strdup(Selector_filename_unicode);
|
preview_context.File_name_unicode = Unicode_strdup(Selector->filename_unicode);
|
||||||
}
|
}
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
if (context->Type == CONTEXT_PALETTE)
|
if (context->Type == CONTEXT_PALETTE)
|
||||||
@ -2569,8 +2595,8 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
context->File_name = strdup(Selector_filename);
|
context->File_name = strdup(Selector->filename);
|
||||||
context->File_name_unicode = Unicode_strdup(Selector_filename_unicode);
|
context->File_name_unicode = Unicode_strdup(Selector->filename_unicode);
|
||||||
free(context->File_directory);
|
free(context->File_directory);
|
||||||
context->File_directory = strdup(Selector->Directory);
|
context->File_directory = strdup(Selector->Directory);
|
||||||
if (!load)
|
if (!load)
|
||||||
|
|||||||
@ -1293,12 +1293,20 @@ void Program_shutdown(void)
|
|||||||
|
|
||||||
FREE_POINTER(Main.selector.Directory);
|
FREE_POINTER(Main.selector.Directory);
|
||||||
FREE_POINTER(Main.selector.Directory_unicode);
|
FREE_POINTER(Main.selector.Directory_unicode);
|
||||||
|
FREE_POINTER(Main.selector.filename);
|
||||||
|
FREE_POINTER(Main.selector.filename_unicode);
|
||||||
FREE_POINTER(Spare.selector.Directory);
|
FREE_POINTER(Spare.selector.Directory);
|
||||||
FREE_POINTER(Spare.selector.Directory_unicode);
|
FREE_POINTER(Spare.selector.Directory_unicode);
|
||||||
|
FREE_POINTER(Spare.selector.filename);
|
||||||
|
FREE_POINTER(Spare.selector.filename_unicode);
|
||||||
FREE_POINTER(Brush_selector.Directory);
|
FREE_POINTER(Brush_selector.Directory);
|
||||||
FREE_POINTER(Brush_selector.Directory_unicode);
|
FREE_POINTER(Brush_selector.Directory_unicode);
|
||||||
|
FREE_POINTER(Brush_selector.filename);
|
||||||
|
FREE_POINTER(Brush_selector.filename_unicode);
|
||||||
FREE_POINTER(Palette_selector.Directory);
|
FREE_POINTER(Palette_selector.Directory);
|
||||||
FREE_POINTER(Palette_selector.Directory_unicode);
|
FREE_POINTER(Palette_selector.Directory_unicode);
|
||||||
|
FREE_POINTER(Palette_selector.filename);
|
||||||
|
FREE_POINTER(Palette_selector.filename_unicode);
|
||||||
|
|
||||||
// Free Config
|
// Free Config
|
||||||
FREE_POINTER(Config.Skin_file);
|
FREE_POINTER(Config.Skin_file);
|
||||||
|
|||||||
@ -557,6 +557,8 @@ typedef struct T_Selector_settings
|
|||||||
short Offset; ///< Position of the "highlight" bar in the file list
|
short Offset; ///< Position of the "highlight" bar in the file list
|
||||||
char * Directory; ///< Directory currently browsed
|
char * Directory; ///< Directory currently browsed
|
||||||
word * Directory_unicode; ///< Directory currently browsed
|
word * Directory_unicode; ///< Directory currently browsed
|
||||||
|
char * filename; ///< Filename (without directory) of the highlighted file
|
||||||
|
word * filename_unicode; ///< /// Filename (without directory) of the highlighted file
|
||||||
} T_Selector_settings;
|
} T_Selector_settings;
|
||||||
|
|
||||||
/// structure for Main or Spare page global data
|
/// structure for Main or Spare page global data
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user