diff options
author | Jacek Antonelli | 2009-04-30 13:04:20 -0500 |
---|---|---|
committer | Jacek Antonelli | 2009-04-30 13:07:16 -0500 |
commit | ca8149ca6d157eb4b5fc8ba0e5ba3a6e56f72e7e (patch) | |
tree | 8348301d0ac44a524f1819b777686bf086907d76 /linden/indra/newview/llfilepicker.cpp | |
parent | Second Life viewer sources 1.22.11 (diff) | |
download | meta-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.cpp | 87 |
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 | ||
116 | const std::string LLFilePicker::getNextFile() | 118 | const 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 | ||
129 | const std::string LLFilePicker::getCurFile() | 131 | const 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 |
900 | void LLFilePicker::add_to_selectedfiles(gpointer data, gpointer user_data) | 902 | void 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 | ||
934 | GtkWindow* LLFilePicker::buildFilePicker(bool is_save, bool is_folder, std::string context) | 962 | GtkWindow* 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, | |||
1044 | static std::string add_wav_filter_to_gtkchooser(GtkWindow *picker) | 1071 | static 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 | ||
1050 | static std::string add_bvh_filter_to_gtkchooser(GtkWindow *picker) | 1077 | static 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 | ||
1056 | static std::string add_imageload_filter_to_gtkchooser(GtkWindow *picker) | 1083 | static 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(); |