summaryrefslogtreecommitdiff
path: root/indra/newview/lldirpicker.cpp
diff options
context:
space:
mode:
authorErik Kundiman <erik@megapahit.org>2024-05-16 13:52:40 +0800
committerErik Kundiman <erik@megapahit.org>2024-05-16 13:52:40 +0800
commit6d51e91895a7f2435c46a876410ccc6c63fe8c82 (patch)
treef2b48ebd99cb414227bf365f47665b8d4baa752b /indra/newview/lldirpicker.cpp
parentd1b5917bb9c92e4e47eba19b43781e4d1328b1ca (diff)
parent094dcc07f8c1d90ae723dbe60eddacb90a09eae8 (diff)
Merge tag '7.1.7-release'
source for viewer 7.1.7.8974243247
Diffstat (limited to 'indra/newview/lldirpicker.cpp')
-rw-r--r--indra/newview/lldirpicker.cpp326
1 files changed, 163 insertions, 163 deletions
diff --git a/indra/newview/lldirpicker.cpp b/indra/newview/lldirpicker.cpp
index f2a027f174..94fb5fefe5 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 || LL_FREEBSD
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);
+ }
+ }
}