diff options
Diffstat (limited to 'indra/newview/lldirpicker.cpp')
-rw-r--r-- | indra/newview/lldirpicker.cpp | 326 |
1 files changed, 163 insertions, 163 deletions
diff --git a/indra/newview/lldirpicker.cpp b/indra/newview/lldirpicker.cpp index 01790ad19e..bac435ad80 100644 --- a/indra/newview/lldirpicker.cpp +++ b/indra/newview/lldirpicker.cpp @@ -1,25 +1,25 @@ -/** +/** * @file lldirpicker.cpp * @brief OS-specific file picker * * $LicenseInfo:firstyear=2001&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -33,7 +33,7 @@ #include "lldir.h" #include "llframetimer.h" #include "lltrans.h" -#include "llwindow.h" // beforeDialog() +#include "llwindow.h" // beforeDialog() #include "llviewercontrol.h" #include "llwin32headerslean.h" @@ -55,100 +55,100 @@ LLDirPicker LLDirPicker::sInstance; // Implementation // -// utility function to check if access to local file system via file browser +// utility function to check if access to local file system via file browser // is enabled and if not, tidy up and indicate we're not allowed to do this. bool LLDirPicker::check_local_file_access_enabled() { - // if local file browsing is turned off, return without opening dialog - bool local_file_system_browsing_enabled = gSavedSettings.getBOOL("LocalFileSystemBrowsingEnabled"); - if ( ! local_file_system_browsing_enabled ) - { - mDir.clear(); // Windows - mFileName = NULL; // Mac/Linux - return false; - } - - return true; + // if local file browsing is turned off, return without opening dialog + bool local_file_system_browsing_enabled = gSavedSettings.getBOOL("LocalFileSystemBrowsingEnabled"); + if ( ! local_file_system_browsing_enabled ) + { + mDir.clear(); // Windows + mFileName = NULL; // Mac/Linux + return false; + } + + return true; } #if LL_WINDOWS LLDirPicker::LLDirPicker() : - mFileName(NULL), - mLocked(false) + mFileName(NULL), + mLocked(false) { - bi.hwndOwner = NULL; - bi.pidlRoot = NULL; - bi.pszDisplayName = NULL; - bi.lpszTitle = NULL; - bi.ulFlags = BIF_USENEWUI; - bi.lpfn = NULL; - bi.lParam = NULL; - bi.iImage = 0; + bi.hwndOwner = NULL; + bi.pidlRoot = NULL; + bi.pszDisplayName = NULL; + bi.lpszTitle = NULL; + bi.ulFlags = BIF_USENEWUI; + bi.lpfn = NULL; + bi.lParam = NULL; + bi.iImage = 0; } LLDirPicker::~LLDirPicker() { - // nothing + // nothing } BOOL LLDirPicker::getDir(std::string* filename, bool blocking) { - if( mLocked ) - { - return FALSE; - } - - // if local file browsing is turned off, return without opening dialog - if ( check_local_file_access_enabled() == false ) - { - return FALSE; - } - - BOOL success = FALSE; - - - if (blocking) - { - // Modal, so pause agent - send_agent_pause(); - } - - bi.hwndOwner = (HWND)gViewerWindow->getPlatformWindow(); - - ::OleInitialize(NULL); - LPITEMIDLIST pIDL = ::SHBrowseForFolder(&bi); - - if(pIDL != NULL) - { - WCHAR buffer[_MAX_PATH] = {'\0'}; - - if(::SHGetPathFromIDList(pIDL, buffer) != 0) - { - // Set the string value. - - mDir = utf16str_to_utf8str(llutf16string(buffer)); - success = TRUE; - } - // free the item id list - CoTaskMemFree(pIDL); - } - - ::OleUninitialize(); - - if (blocking) - { - send_agent_resume(); - } - - // Account for the fact that the app has been stalled. - LLFrameTimer::updateFrameTime(); - return success; + if( mLocked ) + { + return FALSE; + } + + // if local file browsing is turned off, return without opening dialog + if ( check_local_file_access_enabled() == false ) + { + return FALSE; + } + + BOOL success = FALSE; + + + if (blocking) + { + // Modal, so pause agent + send_agent_pause(); + } + + bi.hwndOwner = (HWND)gViewerWindow->getPlatformWindow(); + + ::OleInitialize(NULL); + LPITEMIDLIST pIDL = ::SHBrowseForFolder(&bi); + + if(pIDL != NULL) + { + WCHAR buffer[_MAX_PATH] = {'\0'}; + + if(::SHGetPathFromIDList(pIDL, buffer) != 0) + { + // Set the string value. + + mDir = utf16str_to_utf8str(llutf16string(buffer)); + success = TRUE; + } + // free the item id list + CoTaskMemFree(pIDL); + } + + ::OleUninitialize(); + + if (blocking) + { + send_agent_resume(); + } + + // Account for the fact that the app has been stalled. + LLFrameTimer::updateFrameTime(); + return success; } std::string LLDirPicker::getDirName() { - return mDir; + return mDir; } /////////////////////////////////////////////DARWIN @@ -158,19 +158,19 @@ LLDirPicker::LLDirPicker() : mFileName(NULL), mLocked(false) { - mFilePicker = new LLFilePicker(); - reset(); + mFilePicker = new LLFilePicker(); + reset(); } LLDirPicker::~LLDirPicker() { - delete mFilePicker; + delete mFilePicker; } void LLDirPicker::reset() { - if (mFilePicker) - mFilePicker->reset(); + if (mFilePicker) + mFilePicker->reset(); } @@ -178,81 +178,81 @@ void LLDirPicker::reset() BOOL LLDirPicker::getDir(std::string* filename, bool blocking) { LLFilePicker::ELoadFilter filter=LLFilePicker::FFLOAD_DIRECTORY; - + return mFilePicker->getOpenFile(filter, true); } std::string LLDirPicker::getDirName() { - return mFilePicker->getFirstFile(); + return mFilePicker->getFirstFile(); } #elif LL_LINUX LLDirPicker::LLDirPicker() : - mFileName(NULL), - mLocked(false) + mFileName(NULL), + mLocked(false) { - mFilePicker = new LLFilePicker(); - reset(); + mFilePicker = new LLFilePicker(); + reset(); } LLDirPicker::~LLDirPicker() { - delete mFilePicker; + delete mFilePicker; } void LLDirPicker::reset() { - if (mFilePicker) - mFilePicker->reset(); + if (mFilePicker) + mFilePicker->reset(); } BOOL LLDirPicker::getDir(std::string* filename, bool blocking) { - reset(); + reset(); - // if local file browsing is turned off, return without opening dialog - if ( check_local_file_access_enabled() == false ) - { - return FALSE; - } + // if local file browsing is turned off, return without opening dialog + if ( check_local_file_access_enabled() == false ) + { + return FALSE; + } #if !LL_MESA_HEADLESS - if (mFilePicker) - { - GtkWindow* picker = mFilePicker->buildFilePicker(false, true, - "dirpicker"); - - if (picker) - { - gtk_window_set_title(GTK_WINDOW(picker), LLTrans::getString("choose_the_directory").c_str()); - gtk_widget_show_all(GTK_WIDGET(picker)); - gtk_main(); - return (!mFilePicker->getFirstFile().empty()); - } - } + if (mFilePicker) + { + GtkWindow* picker = mFilePicker->buildFilePicker(false, true, + "dirpicker"); + + if (picker) + { + gtk_window_set_title(GTK_WINDOW(picker), LLTrans::getString("choose_the_directory").c_str()); + gtk_widget_show_all(GTK_WIDGET(picker)); + gtk_main(); + return (!mFilePicker->getFirstFile().empty()); + } + } #endif // !LL_MESA_HEADLESS - return FALSE; + return FALSE; } std::string LLDirPicker::getDirName() { - if (mFilePicker) - { - return mFilePicker->getFirstFile(); - } - return ""; + if (mFilePicker) + { + return mFilePicker->getFirstFile(); + } + return ""; } #else // not implemented -LLDirPicker::LLDirPicker() +LLDirPicker::LLDirPicker() { - reset(); + reset(); } LLDirPicker::~LLDirPicker() @@ -266,12 +266,12 @@ void LLDirPicker::reset() BOOL LLDirPicker::getDir(std::string* filename, bool blocking) { - return FALSE; + return FALSE; } std::string LLDirPicker::getDirName() { - return ""; + return ""; } #endif @@ -283,86 +283,86 @@ std::queue<LLDirPickerThread*> LLDirPickerThread::sDeadQ; void LLDirPickerThread::getFile() { #if LL_WINDOWS - start(); + start(); #else - run(); + run(); #endif } -//virtual +//virtual void LLDirPickerThread::run() { #if LL_WINDOWS - bool blocking = false; + bool blocking = false; #else - bool blocking = true; // modal + bool blocking = true; // modal #endif - LLDirPicker picker; + LLDirPicker picker; - if (picker.getDir(&mProposedName, blocking)) - { - mResponses.push_back(picker.getDirName()); - } + if (picker.getDir(&mProposedName, blocking)) + { + mResponses.push_back(picker.getDirName()); + } - { - LLMutexLock lock(sMutex); - sDeadQ.push(this); - } + { + LLMutexLock lock(sMutex); + sDeadQ.push(this); + } } //static void LLDirPickerThread::initClass() { - sMutex = new LLMutex(); + sMutex = new LLMutex(); } //static void LLDirPickerThread::cleanupClass() { - clearDead(); + clearDead(); - delete sMutex; - sMutex = NULL; + delete sMutex; + sMutex = NULL; } //static void LLDirPickerThread::clearDead() { - if (!sDeadQ.empty()) - { - LLMutexLock lock(sMutex); - while (!sDeadQ.empty()) - { - LLDirPickerThread* thread = sDeadQ.front(); - thread->notify(thread->mResponses); - delete thread; - sDeadQ.pop(); - } - } + if (!sDeadQ.empty()) + { + LLMutexLock lock(sMutex); + while (!sDeadQ.empty()) + { + LLDirPickerThread* thread = sDeadQ.front(); + thread->notify(thread->mResponses); + delete thread; + sDeadQ.pop(); + } + } } LLDirPickerThread::LLDirPickerThread(const dir_picked_signal_t::slot_type& cb, const std::string &proposed_name) - : LLThread("dir picker"), - mFilePickedSignal(NULL) + : LLThread("dir picker"), + mFilePickedSignal(NULL) { - mFilePickedSignal = new dir_picked_signal_t(); - mFilePickedSignal->connect(cb); + mFilePickedSignal = new dir_picked_signal_t(); + mFilePickedSignal->connect(cb); } LLDirPickerThread::~LLDirPickerThread() { - delete mFilePickedSignal; + delete mFilePickedSignal; } void LLDirPickerThread::notify(const std::vector<std::string>& filenames) { - if (!filenames.empty()) - { - if (mFilePickedSignal) - { - (*mFilePickedSignal)(filenames, mProposedName); - } - } + if (!filenames.empty()) + { + if (mFilePickedSignal) + { + (*mFilePickedSignal)(filenames, mProposedName); + } + } } |