aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/llfilepicker.cpp
diff options
context:
space:
mode:
authorJacek Antonelli2009-04-30 13:04:20 -0500
committerJacek Antonelli2009-04-30 13:07:16 -0500
commitca8149ca6d157eb4b5fc8ba0e5ba3a6e56f72e7e (patch)
tree8348301d0ac44a524f1819b777686bf086907d76 /linden/indra/newview/llfilepicker.cpp
parentSecond Life viewer sources 1.22.11 (diff)
downloadmeta-impy-ca8149ca6d157eb4b5fc8ba0e5ba3a6e56f72e7e.zip
meta-impy-ca8149ca6d157eb4b5fc8ba0e5ba3a6e56f72e7e.tar.gz
meta-impy-ca8149ca6d157eb4b5fc8ba0e5ba3a6e56f72e7e.tar.bz2
meta-impy-ca8149ca6d157eb4b5fc8ba0e5ba3a6e56f72e7e.tar.xz
Second Life viewer sources 1.23.0-RC
Diffstat (limited to '')
-rw-r--r--linden/indra/newview/llfilepicker.cpp87
1 files changed, 57 insertions, 30 deletions
diff --git a/linden/indra/newview/llfilepicker.cpp b/linden/indra/newview/llfilepicker.cpp
index f9616ba..8f58826 100644
--- a/linden/indra/newview/llfilepicker.cpp
+++ b/linden/indra/newview/llfilepicker.cpp
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
@@ -37,6 +38,7 @@
37#include "llkeyboard.h" 38#include "llkeyboard.h"
38#include "lldir.h" 39#include "lldir.h"
39#include "llframetimer.h" 40#include "llframetimer.h"
41#include "lltrans.h"
40 42
41#if LL_SDL 43#if LL_SDL
42#include "llwindowsdl.h" // for some X/GTK utils to help with filepickers 44#include "llwindowsdl.h" // for some X/GTK utils to help with filepickers
@@ -115,7 +117,7 @@ const std::string LLFilePicker::getFirstFile()
115 117
116const std::string LLFilePicker::getNextFile() 118const std::string LLFilePicker::getNextFile()
117{ 119{
118 if (mCurrentFile >= (S32)mFiles.size()) 120 if (mCurrentFile >= getFileCount())
119 { 121 {
120 mLocked = FALSE; 122 mLocked = FALSE;
121 return std::string(); 123 return std::string();
@@ -128,7 +130,7 @@ const std::string LLFilePicker::getNextFile()
128 130
129const std::string LLFilePicker::getCurFile() 131const std::string LLFilePicker::getCurFile()
130{ 132{
131 if (mCurrentFile >= (S32)mFiles.size()) 133 if (mCurrentFile >= getFileCount())
132 { 134 {
133 mLocked = FALSE; 135 mLocked = FALSE;
134 return std::string(); 136 return std::string();
@@ -824,7 +826,7 @@ BOOL LLFilePicker::getOpenFile(ELoadFilter filter)
824 send_agent_resume(); 826 send_agent_resume();
825 if (error == noErr) 827 if (error == noErr)
826 { 828 {
827 if (mFiles.size()) 829 if (getFileCount())
828 success = true; 830 success = true;
829 } 831 }
830 832
@@ -853,9 +855,9 @@ BOOL LLFilePicker::getMultipleOpenFiles(ELoadFilter filter)
853 send_agent_resume(); 855 send_agent_resume();
854 if (error == noErr) 856 if (error == noErr)
855 { 857 {
856 if (mFiles.size()) 858 if (getFileCount())
857 success = true; 859 success = true;
858 if (mFiles.size() > 1) 860 if (getFileCount() > 1)
859 mLocked = TRUE; 861 mLocked = TRUE;
860 } 862 }
861 863
@@ -883,7 +885,7 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename)
883 send_agent_resume(); 885 send_agent_resume();
884 if (error == noErr) 886 if (error == noErr)
885 { 887 {
886 if (mFiles.size()) 888 if (getFileCount())
887 success = true; 889 success = true;
888 } 890 }
889 891
@@ -892,19 +894,45 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename)
892 return success; 894 return success;
893} 895}
894 896
895#elif LL_LINUX 897#elif LL_LINUX || LL_SOLARIS
896 898
897# if LL_GTK 899# if LL_GTK
898 900
899// static 901// static
900void LLFilePicker::add_to_selectedfiles(gpointer data, gpointer user_data) 902void LLFilePicker::add_to_selectedfiles(gpointer data, gpointer user_data)
901{ 903{
904 // We need to run g_filename_to_utf8 in the user's locale
905 std::string saved_locale(setlocale(LC_ALL, NULL));
906 setlocale(LC_ALL, "");
907
902 LLFilePicker* picker = (LLFilePicker*) user_data; 908 LLFilePicker* picker = (LLFilePicker*) user_data;
909 GError *error = NULL;
903 gchar* filename_utf8 = g_filename_to_utf8((gchar*)data, 910 gchar* filename_utf8 = g_filename_to_utf8((gchar*)data,
904 -1, NULL, NULL, NULL); 911 -1, NULL, NULL, &error);
905 picker->mFiles.push_back(std::string(filename_utf8)); 912 if (error)
906 lldebugs << "ADDED FILE " << filename_utf8 << llendl; 913 {
907 g_free(filename_utf8); 914 // *FIXME.
915 // This condition should really be notified to the user, e.g.
916 // through a message box. Just logging it is inappropriate.
917
918 // g_filename_display_name is ideal, but >= glib 2.6, so:
919 // a hand-rolled hacky makeASCII which disallows control chars
920 std::string display_name;
921 for (const gchar *str = (const gchar *)data; *str; str++)
922 {
923 display_name += (char)((*str >= 0x20 && *str <= 0x7E) ? *str : '?');
924 }
925 llwarns << "g_filename_to_utf8 failed on \"" << display_name << "\": " << error->message << llendl;
926 }
927
928 if (filename_utf8)
929 {
930 picker->mFiles.push_back(std::string(filename_utf8));
931 lldebugs << "ADDED FILE " << filename_utf8 << llendl;
932 g_free(filename_utf8);
933 }
934
935 setlocale(LC_ALL, saved_locale.c_str());
908} 936}
909 937
910// static 938// static
@@ -933,8 +961,7 @@ void LLFilePicker::chooser_responder(GtkWidget *widget, gint response, gpointer
933 961
934GtkWindow* LLFilePicker::buildFilePicker(bool is_save, bool is_folder, std::string context) 962GtkWindow* LLFilePicker::buildFilePicker(bool is_save, bool is_folder, std::string context)
935{ 963{
936 if (LLWindowSDL::ll_try_gtk_init() && 964 if (LLWindowSDL::ll_try_gtk_init())
937 ! gViewerWindow->getWindow()->getFullscreen())
938 { 965 {
939 GtkWidget *win = NULL; 966 GtkWidget *win = NULL;
940 GtkFileChooserAction pickertype = 967 GtkFileChooserAction pickertype =
@@ -1016,7 +1043,7 @@ static void add_common_filters_to_gtkchooser(GtkFileFilter *gfilter,
1016 gfilter); 1043 gfilter);
1017 GtkFileFilter *allfilter = gtk_file_filter_new(); 1044 GtkFileFilter *allfilter = gtk_file_filter_new();
1018 gtk_file_filter_add_pattern(allfilter, "*"); 1045 gtk_file_filter_add_pattern(allfilter, "*");
1019 gtk_file_filter_set_name(allfilter, "All Files"); 1046 gtk_file_filter_set_name(allfilter, LLTrans::getString("all_files").c_str());
1020 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(picker), allfilter); 1047 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(picker), allfilter);
1021 gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(picker), gfilter); 1048 gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(picker), gfilter);
1022} 1049}
@@ -1044,13 +1071,13 @@ static std::string add_simple_mime_filter_to_gtkchooser(GtkWindow *picker,
1044static std::string add_wav_filter_to_gtkchooser(GtkWindow *picker) 1071static std::string add_wav_filter_to_gtkchooser(GtkWindow *picker)
1045{ 1072{
1046 return add_simple_mime_filter_to_gtkchooser(picker, "audio/x-wav", 1073 return add_simple_mime_filter_to_gtkchooser(picker, "audio/x-wav",
1047 "Sounds (*.wav)"); 1074 LLTrans::getString("sound_files") + " (*.wav)");
1048} 1075}
1049 1076
1050static std::string add_bvh_filter_to_gtkchooser(GtkWindow *picker) 1077static std::string add_bvh_filter_to_gtkchooser(GtkWindow *picker)
1051{ 1078{
1052 return add_simple_pattern_filter_to_gtkchooser(picker, "*.bvh", 1079 return add_simple_pattern_filter_to_gtkchooser(picker, "*.bvh",
1053 "Animations (*.bvh)"); 1080 LLTrans::getString("animation_files") + " (*.bvh)");
1054} 1081}
1055 1082
1056static std::string add_imageload_filter_to_gtkchooser(GtkWindow *picker) 1083static std::string add_imageload_filter_to_gtkchooser(GtkWindow *picker)
@@ -1060,7 +1087,7 @@ static std::string add_imageload_filter_to_gtkchooser(GtkWindow *picker)
1060 gtk_file_filter_add_mime_type(gfilter, "image/jpeg"); 1087 gtk_file_filter_add_mime_type(gfilter, "image/jpeg");
1061 gtk_file_filter_add_mime_type(gfilter, "image/png"); 1088 gtk_file_filter_add_mime_type(gfilter, "image/png");
1062 gtk_file_filter_add_mime_type(gfilter, "image/bmp"); 1089 gtk_file_filter_add_mime_type(gfilter, "image/bmp");
1063 std::string filtername = "Images (*.tga; *.bmp; *.jpg; *.png)"; 1090 std::string filtername = LLTrans::getString("image_files") + " (*.tga; *.bmp; *.jpg; *.png)";
1064 add_common_filters_to_gtkchooser(gfilter, picker, filtername); 1091 add_common_filters_to_gtkchooser(gfilter, picker, filtername);
1065 return filtername; 1092 return filtername;
1066} 1093}
@@ -1080,7 +1107,7 @@ BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename
1080 { 1107 {
1081 std::string suggest_name = "untitled"; 1108 std::string suggest_name = "untitled";
1082 std::string suggest_ext = ""; 1109 std::string suggest_ext = "";
1083 std::string caption = "Save "; 1110 std::string caption = LLTrans::getString("save_file_verb") + " ";
1084 switch (filter) 1111 switch (filter)
1085 { 1112 {
1086 case FFSAVE_WAV: 1113 case FFSAVE_WAV:
@@ -1089,39 +1116,39 @@ BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename
1089 break; 1116 break;
1090 case FFSAVE_TGA: 1117 case FFSAVE_TGA:
1091 caption += add_simple_pattern_filter_to_gtkchooser 1118 caption += add_simple_pattern_filter_to_gtkchooser
1092 (picker, "*.tga", "Targa Images (*.tga)"); 1119 (picker, "*.tga", LLTrans::getString("targa_image_files") + " (*.tga)");
1093 suggest_ext = ".tga"; 1120 suggest_ext = ".tga";
1094 break; 1121 break;
1095 case FFSAVE_BMP: 1122 case FFSAVE_BMP:
1096 caption += add_simple_mime_filter_to_gtkchooser 1123 caption += add_simple_mime_filter_to_gtkchooser
1097 (picker, "image/bmp", "Bitmap Images (*.bmp)"); 1124 (picker, "image/bmp", LLTrans::getString("bitmap_image_files") + " (*.bmp)");
1098 suggest_ext = ".bmp"; 1125 suggest_ext = ".bmp";
1099 break; 1126 break;
1100 case FFSAVE_AVI: 1127 case FFSAVE_AVI:
1101 caption += add_simple_mime_filter_to_gtkchooser 1128 caption += add_simple_mime_filter_to_gtkchooser
1102 (picker, "video/x-msvideo", 1129 (picker, "video/x-msvideo",
1103 "AVI Movie File (*.avi)"); 1130 LLTrans::getString("avi_movie_file") + " (*.avi)");
1104 suggest_ext = ".avi"; 1131 suggest_ext = ".avi";
1105 break; 1132 break;
1106 case FFSAVE_ANIM: 1133 case FFSAVE_ANIM:
1107 caption += add_simple_pattern_filter_to_gtkchooser 1134 caption += add_simple_pattern_filter_to_gtkchooser
1108 (picker, "*.xaf", "XAF Anim File (*.xaf)"); 1135 (picker, "*.xaf", LLTrans::getString("xaf_animation_file") + " (*.xaf)");
1109 suggest_ext = ".xaf"; 1136 suggest_ext = ".xaf";
1110 break; 1137 break;
1111 case FFSAVE_XML: 1138 case FFSAVE_XML:
1112 caption += add_simple_pattern_filter_to_gtkchooser 1139 caption += add_simple_pattern_filter_to_gtkchooser
1113 (picker, "*.xml", "XML File (*.xml)"); 1140 (picker, "*.xml", LLTrans::getString("xml_file") + " (*.xml)");
1114 suggest_ext = ".xml"; 1141 suggest_ext = ".xml";
1115 break; 1142 break;
1116 case FFSAVE_RAW: 1143 case FFSAVE_RAW:
1117 caption += add_simple_pattern_filter_to_gtkchooser 1144 caption += add_simple_pattern_filter_to_gtkchooser
1118 (picker, "*.raw", "RAW File (*.raw)"); 1145 (picker, "*.raw", LLTrans::getString("raw_file") + " (*.raw)");
1119 suggest_ext = ".raw"; 1146 suggest_ext = ".raw";
1120 break; 1147 break;
1121 case FFSAVE_J2C: 1148 case FFSAVE_J2C:
1122 caption += add_simple_mime_filter_to_gtkchooser 1149 caption += add_simple_mime_filter_to_gtkchooser
1123 (picker, "images/jp2", 1150 (picker, "images/jp2",
1124 "Compressed Images (*.j2c)"); 1151 LLTrans::getString("compressed_image_files") + " (*.j2c)");
1125 suggest_ext = ".j2c"; 1152 suggest_ext = ".j2c";
1126 break; 1153 break;
1127 default:; 1154 default:;
@@ -1147,7 +1174,7 @@ BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename
1147 gtk_widget_show_all(GTK_WIDGET(picker)); 1174 gtk_widget_show_all(GTK_WIDGET(picker));
1148 gtk_main(); 1175 gtk_main();
1149 1176
1150 rtn = (mFiles.size() == 1); 1177 rtn = (getFileCount() == 1);
1151 } 1178 }
1152 1179
1153 gViewerWindow->mWindow->afterDialog(); 1180 gViewerWindow->mWindow->afterDialog();
@@ -1167,7 +1194,7 @@ BOOL LLFilePicker::getOpenFile( ELoadFilter filter )
1167 1194
1168 if (picker) 1195 if (picker)
1169 { 1196 {
1170 std::string caption = "Load "; 1197 std::string caption = LLTrans::getString("load_file_verb") + " ";
1171 std::string filtername = ""; 1198 std::string filtername = "";
1172 switch (filter) 1199 switch (filter)
1173 { 1200 {
@@ -1191,7 +1218,7 @@ BOOL LLFilePicker::getOpenFile( ELoadFilter filter )
1191 gtk_widget_show_all(GTK_WIDGET(picker)); 1218 gtk_widget_show_all(GTK_WIDGET(picker));
1192 gtk_main(); 1219 gtk_main();
1193 1220
1194 rtn = (mFiles.size() == 1); 1221 rtn = (getFileCount() == 1);
1195 } 1222 }
1196 1223
1197 gViewerWindow->mWindow->afterDialog(); 1224 gViewerWindow->mWindow->afterDialog();
@@ -1214,7 +1241,7 @@ BOOL LLFilePicker::getMultipleOpenFiles( ELoadFilter filter )
1214 gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER(picker), 1241 gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER(picker),
1215 TRUE); 1242 TRUE);
1216 1243
1217 gtk_window_set_title(GTK_WINDOW(picker), "Load Files"); 1244 gtk_window_set_title(GTK_WINDOW(picker), LLTrans::getString("load_files").c_str());
1218 1245
1219 gtk_widget_show_all(GTK_WIDGET(picker)); 1246 gtk_widget_show_all(GTK_WIDGET(picker));
1220 gtk_main(); 1247 gtk_main();