ACME-1237 : Use translation service for filter names so they can be localized and as also look proper in English. General filter manager cleanup

meow-7.2.2
Merov Linden 2014-01-16 17:52:14 -08:00
parent e0412a7d98
commit 91f401fa2d
4 changed files with 73 additions and 56 deletions

View File

@ -1,6 +1,6 @@
/**
* @file llimagefiltersmanager.cpp
* @brief Load and execute image filters. Mostly used for Flickr at the moment.
* @brief Load image filters list and retrieve their path. Mostly used for Flickr UI at the moment.
*
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
@ -29,10 +29,15 @@
#include "llimagefiltersmanager.h"
#include "lldiriterator.h"
#include "lltrans.h"
std::string get_sys_dir()
{
return gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "filters", "");
}
//---------------------------------------------------------------------------
// LLImageFilters
// LLImageFiltersManager
//---------------------------------------------------------------------------
LLImageFiltersManager::LLImageFiltersManager()
@ -49,16 +54,10 @@ void LLImageFiltersManager::initSingleton()
loadAllFilters();
}
// static
std::string LLImageFiltersManager::getSysDir()
{
return gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "filters", "");
}
void LLImageFiltersManager::loadAllFilters()
{
// Load system (coming out of the box) filters
loadFiltersFromDir(getSysDir());
loadFiltersFromDir(get_sys_dir());
}
void LLImageFiltersManager::loadFiltersFromDir(const std::string& dir)
@ -68,29 +67,44 @@ void LLImageFiltersManager::loadFiltersFromDir(const std::string& dir)
LLDirIterator dir_iter(dir, "*.xml");
while (1)
{
std::string file;
if (!dir_iter.next(file))
std::string file_name;
if (!dir_iter.next(file_name))
{
break; // no more files
}
// Get the ".xml" out of the file name to get the filter name
std::string filter_name = file.substr(0,file.length()-4);
mFiltersList.push_back(filter_name);
// Get the ".xml" out of the file name to get the filter name. That's the one known in strings.xml
std::string filter_name = file_name.substr(0,file_name.length()-4);
// Get the localized name for the filter
filter_name = LLTrans::getString(filter_name);
std::string path = gDirUtilp->add(dir, file);
// For the moment, just output the file found to the log
llinfos << "Merov : loadFiltersFromDir, filter = " << file << ",path = " << path << llendl;
mFiltersList[filter_name] = file_name;
}
}
// Note : That method is a bit heavy handed but the list of filters is always small (10 or so)
// and that method is typically called only once when building UI widgets.
const std::vector<std::string> LLImageFiltersManager::getFiltersList() const
{
std::vector<std::string> filter_list;
for (std::map<std::string,std::string>::const_iterator it = mFiltersList.begin(); it != mFiltersList.end(); ++it)
{
filter_list.push_back(it->first);
}
return filter_list;
}
std::string LLImageFiltersManager::getFilterPath(const std::string& filter_name)
{
// *TODO : we should store (filter name, path) in a std::map
std::string file = filter_name + ".xml";
std::string dir = getSysDir();
std::string path = gDirUtilp->add(dir, file);
std::string path = "";
std::map<std::string,std::string>::const_iterator it = mFiltersList.find(filter_name);
if (it != mFiltersList.end())
{
// Get the file name for that filter and build the complete path
std::string file = it->second;
std::string dir = get_sys_dir();
path = gDirUtilp->add(dir, file);
}
return path;
}

View File

@ -1,6 +1,6 @@
/**
* @file llimagefiltersmanager.h
* @brief Load and execute image filters. Mostly used for Flickr at the moment.
* @brief Load image filters list and retrieve their path. Mostly used for Flickr UI at the moment.
*
* $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
@ -28,49 +28,28 @@
#define LL_LLIMAGEFILTERSMANAGER_H
#include "llsingleton.h"
#include "llimage.h"
/*
typedef enum e_vignette_mode
{
VIGNETTE_MODE_NONE = 0,
VIGNETTE_MODE_BLEND = 1,
VIGNETTE_MODE_FADE = 2
} EVignetteMode;
typedef enum e_screen_mode
{
SCREEN_MODE_2DSINE = 0,
SCREEN_MODE_LINE = 1
} EScreenMode;
*/
//============================================================================
// library initialization class
// LLImageFiltersManager class
class LLImageFiltersManager : public LLSingleton<LLImageFiltersManager>
{
LOG_CLASS(LLImageFiltersManager);
public:
// getFilters(); get a vector of std::string containing the filter names
//LLSD loadFilter(const std::string& filter_name);
//void executeFilter(const LLSD& filter_data, LLPointer<LLImageRaw> raw_image);
const std::vector<std::string> &getFiltersList() const { return mFiltersList; }
const std::vector<std::string> getFiltersList() const;
std::string getFilterPath(const std::string& filter_name);
protected:
private:
void loadAllFilters();
void loadFiltersFromDir(const std::string& dir);
// LLSD loadFilter(const std::string& path);
static std::string getSysDir();
friend class LLSingleton<LLImageFiltersManager>;
/*virtual*/ void initSingleton();
LLImageFiltersManager();
~LLImageFiltersManager();
// List of filters
std::vector<std::string> mFiltersList;
// List of filters : first is the user friendly localized name, second is the xml file name
std::map<std::string,std::string> mFiltersList;
};
#endif // LL_LLIMAGEFILTERSMANAGER_H

View File

@ -591,11 +591,17 @@ void LLSnapshotLivePreview::generateThumbnailImage(BOOL force_update)
// Filter the thumbnail
if (getFilter() != "")
{
LLImageFilter filter;
std::string filter_path = LLImageFiltersManager::getInstance()->getFilterPath(getFilter());
filter.loadFromFile(filter_path);
filter.executeFilter(raw);
//raw->filterGrayScale();
if (filter_path != "")
{
LLImageFilter filter;
filter.loadFromFile(filter_path);
filter.executeFilter(raw);
}
else
{
llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl;
}
}
mThumbnailImage = LLViewerTextureManager::getLocalTexture(raw.get(), FALSE);
mThumbnailUpToDate = TRUE ;
@ -704,11 +710,17 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
// Apply the filter to mPreviewImage
if (previewp->getFilter() != "")
{
LLImageFilter filter;
std::string filter_path = LLImageFiltersManager::getInstance()->getFilterPath(previewp->getFilter());
filter.loadFromFile(filter_path);
filter.executeFilter(previewp->mPreviewImage);
//previewp->mPreviewImage->filterGrayScale();
if (filter_path != "")
{
LLImageFilter filter;
filter.loadFromFile(filter_path);
filter.executeFilter(previewp->mPreviewImage);
}
else
{
llwarns << "Couldn't find a path to the following filter : " << previewp->getFilter() << llendl;
}
}
// delete any existing image

View File

@ -168,6 +168,18 @@ Please try logging in again in a minute.</string>
<string name="SocialTwitterErrorPosting">Problem posting to Twitter</string>
<string name="SocialTwitterErrorDisconnecting">Problem disconnecting from Twitter</string>
<!-- SLShare: User Friendly Filter Names Translation -->
<string name="BlackAndWhite">Black &amp; White</string>
<string name="Colors1970">1970&apos;s Colors</string>
<string name="Heatwave">Heat Wave</string>
<string name="Intense">Intense</string>
<string name="JulesVerne">Jules Verne</string>
<string name="Newspaper">Newspaper</string>
<string name="Overcast">Overcast</string>
<string name="Sepia">Sepia</string>
<string name="Spotlight">Spotlight</string>
<string name="Video">Video</string>
<!-- Tooltip -->
<string name="TooltipPerson">Person</string><!-- Object under mouse pointer is an avatar -->
<string name="TooltipNoName">(no name)</string> <!-- No name on an object -->