Merge branch 'master' into 7.1.13_preview
commit
36039a93e1
|
|
@ -313,7 +313,8 @@ jobs:
|
|||
FS_PF_UA: ${{ secrets.FS_PF_UA }}
|
||||
run: |
|
||||
if [ -n "${FS_PF_UA}" ]; then
|
||||
echo "EXTRA_ARGS=${{ env.EXTRA_ARGS }} -DFS_PS_USER_AGENT=\"${FS_PF_UA}\"" >> $GITHUB_ENV
|
||||
echo "EXTRA_ARGS=${{ env.EXTRA_ARGS }} -DFS_PF_USER_AGENT=\"${FS_PF_UA}\"" >> $GITHUB_ENV
|
||||
echo "Building with custom user-agent string."
|
||||
else
|
||||
echo "No custom user-agent string provided."
|
||||
fi
|
||||
|
|
@ -378,13 +379,13 @@ jobs:
|
|||
- name: Install Microsoft.Trusted.Signing.Client
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
.\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.53 -OutputDirectory .
|
||||
.\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.86 -OutputDirectory .
|
||||
shell: pwsh
|
||||
|
||||
- name: Locate Azure.CodeSigning.Dlib.dll
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
$dllPath = (Get-ChildItem ".\Microsoft.Trusted.Signing.Client.1.0.53\bin\x64\Azure.CodeSigning.Dlib.dll" -Recurse -File | Select-Object -First 1).FullName
|
||||
$dllPath = (Get-ChildItem ".\Microsoft.Trusted.Signing.Client.1.0.86\bin\x64\Azure.CodeSigning.Dlib.dll" -Recurse -File | Select-Object -First 1).FullName
|
||||
if (-not $dllPath) {
|
||||
Write-Error "Azure.CodeSigning.Dlib.dll not found."
|
||||
exit 1
|
||||
|
|
|
|||
|
|
@ -75,10 +75,12 @@ endif(TESTBUILD AND TESTBUILDPERIOD)
|
|||
|
||||
#<FS:Beq> Support for custom Primfeed UA
|
||||
option(FS_PF_USER_AGENT "Optional compile‐time Primfeed user‐agent string" "")
|
||||
if(FS_PF_USER_AGENT)
|
||||
# For a single target, say your executable is called "firestorm_viewer":
|
||||
if (FS_PF_USER_AGENT)
|
||||
add_compile_definitions(FS_PF_USER_AGENT="${FS_PF_USER_AGENT}")
|
||||
endif()
|
||||
message(STATUS "Compiling with custom Primfeed user-agent: ${FS_PF_USER_AGENT}")
|
||||
else (FS_PF_USER_AGENT)
|
||||
message(STATUS "Compiling with standard Primfeed user-agent")
|
||||
endif (FS_PF_USER_AGENT)
|
||||
# </Beq>
|
||||
# <FS:Ansariel> [AVX Optimization]
|
||||
option(USE_AVX_OPTIMIZATION "AVX optimization support" OFF)
|
||||
|
|
|
|||
|
|
@ -74,9 +74,14 @@ FSPrimfeedPhotoPanel::FSPrimfeedPhotoPanel() :
|
|||
mDescriptionTextBox(nullptr),
|
||||
mLocationCheckbox(nullptr),
|
||||
mRatingComboBox(nullptr),
|
||||
mStoresComboBox(nullptr),
|
||||
mPostButton(nullptr),
|
||||
mBtnPreview(nullptr),
|
||||
mBigPreviewFloater(nullptr)
|
||||
mBigPreviewFloater(nullptr),
|
||||
mCancelButton(nullptr),
|
||||
mCommercialCheckbox(nullptr),
|
||||
mFilterComboBox(nullptr),
|
||||
mPublicGalleryCheckbox(nullptr)
|
||||
{
|
||||
mCommitCallbackRegistrar.add("SocialSharing.SendPhoto", [this](LLUICtrl*, const LLSD&) { onSend(); });
|
||||
mCommitCallbackRegistrar.add("SocialSharing.RefreshPhoto", [this](LLUICtrl*, const LLSD&) { onClickNewSnapshot(); });
|
||||
|
|
@ -88,6 +93,16 @@ FSPrimfeedPhotoPanel::FSPrimfeedPhotoPanel() :
|
|||
LL_DEBUGS("primfeed") << "Info button clicked, opening " << url << LL_ENDL;
|
||||
LLWeb::loadURLExternal(url);
|
||||
});
|
||||
FSPrimfeedAuth::sPrimfeedAuthPump->listen("FSPrimfeedPhotoPanel",
|
||||
[this](const LLSD& data)
|
||||
{
|
||||
if (data["responseType"].asString() == "primfeed_user_info")
|
||||
{
|
||||
this->loadPrimfeedInfo(data);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
FSPrimfeedPhotoPanel::~FSPrimfeedPhotoPanel()
|
||||
|
|
@ -97,8 +112,6 @@ FSPrimfeedPhotoPanel::~FSPrimfeedPhotoPanel()
|
|||
mPreviewHandle.get()->die();
|
||||
}
|
||||
|
||||
FSPrimfeedAuth::sPrimfeedAuthPump->stopListening("FSPrimfeedAccountPanel");
|
||||
|
||||
gSavedSettings.setS32("FSLastSnapshotToPrimfeedResolution", getChild<LLComboBox>("resolution_combobox")->getCurrentIndex());
|
||||
gSavedSettings.setS32("FSLastSnapshotToPrimfeedWidth", getChild<LLSpinCtrl>("custom_snapshot_width")->getValue().asInteger());
|
||||
gSavedSettings.setS32("FSLastSnapshotToPrimfeedHeight", getChild<LLSpinCtrl>("custom_snapshot_height")->getValue().asInteger());
|
||||
|
|
@ -121,6 +134,7 @@ bool FSPrimfeedPhotoPanel::postBuild()
|
|||
mCommercialCheckbox = getChild<LLUICtrl>("primfeed_commercial_content");
|
||||
mPublicGalleryCheckbox = getChild<LLUICtrl>("primfeed_add_to_public_gallery");
|
||||
mRatingComboBox = getChild<LLUICtrl>("rating_combobox");
|
||||
mStoresComboBox = getChild<LLComboBox>("stores_combobox");
|
||||
mPostButton = getChild<LLUICtrl>("post_photo_btn");
|
||||
mCancelButton = getChild<LLUICtrl>("cancel_photo_btn");
|
||||
mBigPreviewFloater = dynamic_cast<LLFloaterBigPreview*>(LLFloaterReg::getInstance("big_preview"));
|
||||
|
|
@ -192,6 +206,8 @@ void FSPrimfeedPhotoPanel::draw()
|
|||
mCancelButton->setEnabled(can_post);
|
||||
mDescriptionTextBox->setEnabled(can_post);
|
||||
mRatingComboBox->setEnabled(can_post);
|
||||
// If the stores combo box is present, enable it only if we have stores to select from
|
||||
mStoresComboBox->setEnabled(can_post && mStoresComboBox->getItemCount() > 1);
|
||||
mResolutionComboBox->setEnabled(can_post);
|
||||
mFilterComboBox->setEnabled(can_post);
|
||||
mRefreshBtn->setEnabled(can_post);
|
||||
|
|
@ -327,7 +343,7 @@ bool FSPrimfeedPhotoPanel::onPrimfeedConnectStateChange(const LLSD& /*data*/)
|
|||
{
|
||||
if (FSPrimfeedAuth::isAuthorized())
|
||||
{
|
||||
sendPhoto();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
@ -352,10 +368,10 @@ void FSPrimfeedPhotoPanel::sendPhoto()
|
|||
std::string description = mDescriptionTextBox->getValue().asString();
|
||||
|
||||
// Get the content rating
|
||||
int content_rating = mRatingComboBox->getValue().asInteger();
|
||||
bool post_to_public_gallery = mPublicGalleryCheckbox->getValue().asBoolean();
|
||||
bool commercial_content = mCommercialCheckbox->getValue().asBoolean();
|
||||
|
||||
int content_rating = mRatingComboBox->getValue().asInteger();
|
||||
bool post_to_public_gallery = mPublicGalleryCheckbox->getValue().asBoolean();
|
||||
bool commercial_content = mCommercialCheckbox->getValue().asBoolean();
|
||||
std::string store_id = mStoresComboBox->getValue().asString();
|
||||
// Get the image
|
||||
LLSnapshotLivePreview* previewp = getPreviewView();
|
||||
|
||||
|
|
@ -376,6 +392,11 @@ void FSPrimfeedPhotoPanel::sendPhoto()
|
|||
|
||||
params["location"] = slurl_string;
|
||||
}
|
||||
if (!store_id.empty())
|
||||
{
|
||||
// Add the store ID if we have one selected
|
||||
params["store_id"] = store_id;
|
||||
}
|
||||
|
||||
FSPrimfeedConnect::instance().uploadPhoto(params, previewp->getFormattedImage().get(),
|
||||
[this](bool success, const std::string& url)
|
||||
|
|
@ -529,6 +550,35 @@ void FSPrimfeedPhotoPanel::checkAspectRatio(S32 index)
|
|||
}
|
||||
}
|
||||
|
||||
void FSPrimfeedPhotoPanel::loadPrimfeedInfo(const LLSD& data)
|
||||
{
|
||||
if (!mStoresComboBox)
|
||||
return;
|
||||
|
||||
// Clear any existing entries
|
||||
mStoresComboBox->clearRows();
|
||||
mStoresComboBox->add(LLTrans::getString("Personal"), LLSD(""));
|
||||
|
||||
// Read the saved stores array
|
||||
const LLSD& stores = data["stores"];
|
||||
if (!stores.isArray() || stores.size() == 0)
|
||||
{
|
||||
// No stores - disable the combobox
|
||||
mStoresComboBox->setEnabled(false);
|
||||
return;
|
||||
}
|
||||
|
||||
mStoresComboBox->setEnabled(true);
|
||||
for (S32 i = 0; i < stores.size(); ++i)
|
||||
{
|
||||
const LLSD& store = stores[i];
|
||||
std::string id = store["id"].asString();
|
||||
std::string name = store["name"].asString();
|
||||
mStoresComboBox->add(name, LLSD(id));
|
||||
}
|
||||
mStoresComboBox->setCurrentByIndex(0);
|
||||
}
|
||||
|
||||
LLUICtrl* FSPrimfeedPhotoPanel::getRefreshBtn()
|
||||
{
|
||||
return mRefreshBtn;
|
||||
|
|
@ -536,13 +586,10 @@ LLUICtrl* FSPrimfeedPhotoPanel::getRefreshBtn()
|
|||
|
||||
void FSPrimfeedPhotoPanel::onOpen(const LLSD& key)
|
||||
{
|
||||
if (!FSPrimfeedAuth::isAuthorized())
|
||||
{
|
||||
// Reauthorise if necessary.
|
||||
FSPrimfeedAuth::initiateAuthRequest();
|
||||
LLSD dummy;
|
||||
onPrimfeedConnectStateChange(dummy);
|
||||
}
|
||||
// Reauthorise if necessary.
|
||||
FSPrimfeedAuth::initiateAuthRequest();
|
||||
LLSD dummy;
|
||||
onPrimfeedConnectStateChange(dummy);
|
||||
}
|
||||
|
||||
void FSPrimfeedPhotoPanel::uploadCallback(bool success, const LLSD& response)
|
||||
|
|
@ -639,9 +686,23 @@ FSPrimfeedAccountPanel::FSPrimfeedAccountPanel() :
|
|||
FSPrimfeedAuth::sPrimfeedAuthPump->listen("FSPrimfeedAccountPanel",
|
||||
[this](const LLSD& data)
|
||||
{
|
||||
bool success = data["success"].asBoolean();
|
||||
primfeedAuthResponse(success, data);
|
||||
return true;
|
||||
if (data.has("responseType"))
|
||||
{
|
||||
auto response_type = data["responseType"].asString();
|
||||
if (response_type == "primfeed_auth_response")
|
||||
{
|
||||
bool success = data["success"].asBoolean();
|
||||
primfeedAuthResponse(success, data);
|
||||
return true;
|
||||
}
|
||||
if (response_type == "primfeed_auth_reset")
|
||||
{
|
||||
bool success = data["success"].asBoolean();
|
||||
primfeedAuthResponse(success, data);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
setVisibleCallback([this](LLUICtrl*, bool visible) { onVisibilityChange(visible); });
|
||||
|
|
@ -663,8 +724,8 @@ bool FSPrimfeedAccountPanel::postBuild()
|
|||
|
||||
void FSPrimfeedAccountPanel::draw()
|
||||
{
|
||||
FSPrimfeedConnect::EConnectionState connection_state = FSPrimfeedConnect::instance().getConnectionState();
|
||||
static FSPrimfeedConnect::EConnectionState last_state = FSPrimfeedConnect::PRIMFEED_DISCONNECTED;
|
||||
FSPrimfeedConnect::EConnectionState connection_state = FSPrimfeedConnect::instance().getConnectionState();
|
||||
static FSPrimfeedConnect::EConnectionState last_state = FSPrimfeedConnect::PRIMFEED_DISCONNECTED;
|
||||
|
||||
// Update the connection state if it has changed
|
||||
if (connection_state != last_state)
|
||||
|
|
@ -772,14 +833,20 @@ void FSPrimfeedAccountPanel::onConnect()
|
|||
{
|
||||
FSPrimfeedAuth::initiateAuthRequest();
|
||||
LLSD dummy;
|
||||
onPrimfeedConnectStateChange(dummy);
|
||||
onPrimfeedConnectStateChange(dummy);
|
||||
}
|
||||
|
||||
void FSPrimfeedAccountPanel::onDisconnect()
|
||||
{
|
||||
FSPrimfeedAuth::resetAuthStatus();
|
||||
LLSD dummy;
|
||||
onPrimfeedConnectStateChange(dummy);
|
||||
onPrimfeedConnectStateChange(dummy);
|
||||
}
|
||||
|
||||
FSPrimfeedAccountPanel::~FSPrimfeedAccountPanel()
|
||||
{
|
||||
// Disconnect the primfeed auth pump
|
||||
FSPrimfeedAuth::sPrimfeedAuthPump->stopListening("FSPrimfeedAccountPanel");
|
||||
}
|
||||
|
||||
////////////////////////
|
||||
|
|
@ -789,10 +856,10 @@ void FSPrimfeedAccountPanel::onDisconnect()
|
|||
FSFloaterPrimfeed::FSFloaterPrimfeed(const LLSD& key) :
|
||||
LLFloater(key),
|
||||
mPrimfeedPhotoPanel(nullptr),
|
||||
mPrimfeedAccountPanel(nullptr),
|
||||
mStatusErrorText(nullptr),
|
||||
mStatusLoadingText(nullptr),
|
||||
mStatusLoadingIndicator(nullptr),
|
||||
mPrimfeedAccountPanel(nullptr)
|
||||
mStatusLoadingIndicator(nullptr)
|
||||
{
|
||||
mCommitCallbackRegistrar.add("SocialSharing.Cancel", [this](LLUICtrl*, const LLSD&) { onCancel(); });
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
|
||||
class LLIconCtrl;
|
||||
class LLCheckBoxCtrl;
|
||||
class LLComboBox;
|
||||
class LLSnapshotLivePreview;
|
||||
class LLFloaterBigPreview;
|
||||
|
||||
|
|
@ -52,6 +53,7 @@ public:
|
|||
bool postBuild() override;
|
||||
S32 notify(const LLSD& info);
|
||||
void draw() override;
|
||||
void loadPrimfeedInfo(const LLSD& data);
|
||||
|
||||
LLSnapshotLivePreview* getPreviewView();
|
||||
void onVisibilityChange(bool new_visibility);
|
||||
|
|
@ -80,28 +82,30 @@ private:
|
|||
|
||||
LLHandle<LLView> mPreviewHandle;
|
||||
|
||||
LLUICtrl * mResolutionComboBox;
|
||||
LLUICtrl * mFilterComboBox;
|
||||
LLUICtrl * mRefreshBtn;
|
||||
LLUICtrl * mWorkingLabel;
|
||||
LLUICtrl * mThumbnailPlaceholder;
|
||||
LLUICtrl * mDescriptionTextBox;
|
||||
LLUICtrl * mLocationCheckbox;
|
||||
LLUICtrl* mResolutionComboBox;
|
||||
LLUICtrl* mFilterComboBox;
|
||||
LLUICtrl* mRefreshBtn;
|
||||
LLUICtrl* mWorkingLabel;
|
||||
LLUICtrl* mThumbnailPlaceholder;
|
||||
LLUICtrl* mDescriptionTextBox;
|
||||
LLUICtrl* mLocationCheckbox;
|
||||
|
||||
LLUICtrl * mCommercialCheckbox;
|
||||
LLUICtrl * mPublicGalleryCheckbox;
|
||||
LLUICtrl * mRatingComboBox;
|
||||
LLUICtrl * mPostButton;
|
||||
LLUICtrl * mCancelButton;
|
||||
LLButton * mBtnPreview;
|
||||
LLUICtrl* mCommercialCheckbox;
|
||||
LLUICtrl* mPublicGalleryCheckbox;
|
||||
LLUICtrl* mRatingComboBox;
|
||||
LLUICtrl* mPostButton;
|
||||
LLUICtrl* mCancelButton;
|
||||
LLButton* mBtnPreview;
|
||||
LLComboBox* mStoresComboBox;
|
||||
|
||||
LLFloaterBigPreview * mBigPreviewFloater;
|
||||
LLFloaterBigPreview* mBigPreviewFloater;
|
||||
};
|
||||
|
||||
class FSPrimfeedAccountPanel : public LLPanel
|
||||
{
|
||||
public:
|
||||
FSPrimfeedAccountPanel();
|
||||
~FSPrimfeedAccountPanel();
|
||||
bool postBuild() override;
|
||||
void draw() override;
|
||||
|
||||
|
|
|
|||
|
|
@ -112,31 +112,25 @@ void FSPrimfeedAuth::initiateAuthRequest()
|
|||
// It should be called when the user clicks the "Authenticate" button.
|
||||
// Also triggered on opening the floater.
|
||||
// The actual implementation is in the create() method.
|
||||
|
||||
if (!isAuthorized())
|
||||
|
||||
if (sPrimfeedAuth)
|
||||
{
|
||||
if (sPrimfeedAuth)
|
||||
LLNotificationsUtil::add("PrimfeedAuthorizationAlreadyInProgress");
|
||||
return;
|
||||
}
|
||||
// If no token stored, begin the login request; otherwise check user status.
|
||||
sPrimfeedAuth = FSPrimfeedAuth::create(
|
||||
[](bool success, const LLSD &response)
|
||||
{
|
||||
LLNotificationsUtil::add("PrimfeedAuthorizationAlreadyInProgress");
|
||||
return;
|
||||
LLSD event_data = response;
|
||||
event_data["responseType"] = "primfeed_auth_response";
|
||||
event_data["success"] = success;
|
||||
sPrimfeedAuthPump->post(event_data);
|
||||
// Now that auth is complete, clear the static pointer.
|
||||
sPrimfeedAuth.reset();
|
||||
}
|
||||
// If no token stored, begin the login request; otherwise check user status.
|
||||
sPrimfeedAuth = FSPrimfeedAuth::create(
|
||||
[](bool success, const LLSD &response)
|
||||
{
|
||||
LLSD event_data = response;
|
||||
event_data["success"] = success;
|
||||
sPrimfeedAuthPump->post(event_data);
|
||||
// Now that auth is complete, clear the static pointer.
|
||||
sPrimfeedAuth.reset();
|
||||
}
|
||||
);
|
||||
FSPrimfeedConnect::instance().setConnectionState(FSPrimfeedConnect::PRIMFEED_CONNECTING);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationsUtil::add("PrimfeedAlreadyAuthorized");
|
||||
}
|
||||
);
|
||||
FSPrimfeedConnect::instance().setConnectionState(FSPrimfeedConnect::PRIMFEED_CONNECTING);
|
||||
}
|
||||
|
||||
void FSPrimfeedAuth::resetAuthStatus()
|
||||
|
|
@ -147,7 +141,7 @@ void FSPrimfeedAuth::resetAuthStatus()
|
|||
gSavedPerAccountSettings.setString("FSPrimfeedPlan", "");
|
||||
gSavedPerAccountSettings.setString("FSPrimfeedUsername", "");
|
||||
LLSD event_data;
|
||||
event_data["status"] = "reset";
|
||||
event_data["responseType"] = "primfeed_auth_reset";
|
||||
event_data["success"] = "false";
|
||||
sPrimfeedAuthPump->post(event_data);
|
||||
FSPrimfeedConnect::instance().setConnectionState(FSPrimfeedConnect::PRIMFEED_DISCONNECTED);
|
||||
|
|
@ -201,7 +195,8 @@ std::shared_ptr<FSPrimfeedAuth> FSPrimfeedAuth::create(authorized_callback_t cal
|
|||
FSPrimfeedConnect::instance().setConnectionState(FSPrimfeedConnect::PRIMFEED_CONNECTING);
|
||||
|
||||
// If no token stored, begin the login request; otherwise check user status.
|
||||
if (gSavedPerAccountSettings.getString("FSPrimfeedOAuthToken").empty())
|
||||
auth->mOauthToken = gSavedPerAccountSettings.getString("FSPrimfeedOAuthToken");
|
||||
if (auth->mOauthToken.empty())
|
||||
{
|
||||
auth->beginLoginRequest();
|
||||
}
|
||||
|
|
@ -432,22 +427,23 @@ void FSPrimfeedAuth::checkUserStatus()
|
|||
}
|
||||
|
||||
|
||||
void FSPrimfeedAuth::gotUserStatus(bool success, const LLSD &response)
|
||||
void FSPrimfeedAuth::gotUserStatus(bool success, const LLSD &response) const
|
||||
{
|
||||
LL_INFOS("Primfeed") << "User status: " << response << "(" << success << ")" << LL_ENDL;
|
||||
if (success && response.has("plan"))
|
||||
if (success && response.has("plan") && response.has("username") && response.has("link"))
|
||||
{
|
||||
gSavedPerAccountSettings.setString("FSPrimfeedOAuthToken", mOauthToken);
|
||||
gSavedPerAccountSettings.setString("FSPrimfeedPlan", response["plan"].asString());
|
||||
gSavedPerAccountSettings.setString("FSPrimfeedProfileLink", response["link"].asString());
|
||||
gSavedPerAccountSettings.setString("FSPrimfeedUsername", response["username"].asString());
|
||||
FSPrimfeedConnect::instance().setConnectionState(FSPrimfeedConnect::PRIMFEED_CONNECTED);
|
||||
LLSD event_data = response;
|
||||
event_data["responseType"] = "primfeed_user_info";
|
||||
sPrimfeedAuthPump->post(event_data);
|
||||
mCallback(true, response);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationsUtil::add("PrimfeedUserStatusFailed");
|
||||
FSPrimfeedConnect::instance().setConnectionState(FSPrimfeedConnect::PRIMFEED_DISCONNECTED);
|
||||
mCallback(false, response);
|
||||
}
|
||||
LLNotificationsUtil::add("PrimfeedUserStatusFailed");
|
||||
FSPrimfeedConnect::instance().setConnectionState(FSPrimfeedConnect::PRIMFEED_DISCONNECTED);
|
||||
mCallback(false, response);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ private:
|
|||
// Callback when the validate response is received.
|
||||
void gotValidateResponse(bool success, const LLSD &response);
|
||||
// Callback when the user status response is received.
|
||||
void gotUserStatus(bool success, const LLSD &response);
|
||||
void gotUserStatus(bool success, const LLSD &response) const;
|
||||
|
||||
boost::signals2::connection mInstantMessageConnection;
|
||||
boost::signals2::connection mChatMessageConnection;
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ void FSPrimfeedConnect::uploadPhotoCoro(const LLSD& params, LLImageFormatted* im
|
|||
addPart("location", params["location"].asString());
|
||||
}
|
||||
|
||||
|
||||
LL_DEBUGS("primfeed") << "Adding image file header" << LL_ENDL;
|
||||
body << dash << sep
|
||||
<< "Content-Disposition: form-data; name=\"image\"; filename=\"snapshot." << fmt << "\"" << sep
|
||||
|
|
@ -122,12 +123,11 @@ void FSPrimfeedConnect::uploadPhotoCoro(const LLSD& params, LLImageFormatted* im
|
|||
headers->append(HTTP_OUT_HEADER_USER_AGENT, FS_PF_USER_AGENT);
|
||||
headers->append("Authorization", "Bearer " + token);
|
||||
headers->append("pf-viewer-api-key", apiKey);
|
||||
headers->append("Content-Type", "multipart/form-data; boundary=" + boundary);
|
||||
LL_DEBUGS("primfeed") << "Dumping HTTP headers for POST:" << LL_ENDL;
|
||||
for (auto it = headers->begin(); it != headers->end(); ++it)
|
||||
if (params.has("store_id") && !params["store_id"].asString().empty())
|
||||
{
|
||||
LL_DEBUGS("primfeed") << it->first << ": " << it->second << LL_ENDL;
|
||||
headers->append("kynno-selected-store", params["store_id"].asString());
|
||||
}
|
||||
headers->append("Content-Type", "multipart/form-data; boundary=" + boundary);
|
||||
LL_DEBUGS("primfeed") << "Headers set" << LL_ENDL;
|
||||
|
||||
LL_DEBUGS("primfeed") << "Starting HTTP POST" << LL_ENDL;
|
||||
|
|
@ -182,9 +182,3 @@ bool FSPrimfeedConnect::isTransactionOngoing() const
|
|||
mConnectionState == PRIMFEED_DISCONNECTING);
|
||||
}
|
||||
|
||||
void FSPrimfeedConnect::loadPrimfeedInfo()
|
||||
{
|
||||
LL_DEBUGS("primfeed") << "loadPrimfeedInfo() called" << LL_ENDL;
|
||||
// Nothing to do here for Primfeed
|
||||
setConnectionState(PRIMFEED_CONNECTED);
|
||||
}
|
||||
|
|
@ -305,7 +305,10 @@ S32 LLAgentBenefits::get2KTextureUploadCost(S32 area) const
|
|||
{
|
||||
if (m_2k_texture_upload_cost.empty())
|
||||
{
|
||||
return m_texture_upload_cost;
|
||||
// <FS:Ansariel> OpenSim legacy economy
|
||||
//return m_texture_upload_cost;
|
||||
return LLGridManager::instance().isInSecondLife() ? m_texture_upload_cost : LLGlobalEconomy::instance().getPriceUpload();
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
return m_2k_texture_upload_cost[0];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ static void touch_default_probe(LLReflectionMap* probe)
|
|||
}
|
||||
}
|
||||
|
||||
LLHeroProbeManager::LLHeroProbeManager():mMirrorNormal(0,0,1) // <FS:Beq/> [FIRE-35007][#3331] mirrors not working after relog. make sure the mirror normal is not zero length
|
||||
LLHeroProbeManager::LLHeroProbeManager()
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
<check_box label="Guide anzeigen" name="show_guides" tool_tip="Zeigt Aufnahme-Guide (Drittel-Regel) innerhalb des Aufnahmebereichs an."/>
|
||||
<button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/>
|
||||
<button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/>
|
||||
<text name="store_label">
|
||||
Teilen als:
|
||||
</text>
|
||||
<combo_box name="stores_combobox" tool_tip="Falls Ihnen einen oder mehrere Blogger-Bestände auf Primfeed zugewiesen sind, erscheinen diese hier."/>
|
||||
<text name="description_label">
|
||||
Beschreibung:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -10,10 +10,10 @@
|
|||
single_instance="true"
|
||||
reuse_instance="true"
|
||||
title="Share to Primfeed"
|
||||
height="600"
|
||||
height="638"
|
||||
width="272">
|
||||
<panel
|
||||
height="590"
|
||||
height="638"
|
||||
width="272"
|
||||
visible="true"
|
||||
name="background"
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
tab_height="21"
|
||||
tab_position="top"
|
||||
top="7"
|
||||
height="570"
|
||||
height="605"
|
||||
follows="all"
|
||||
halign="center">
|
||||
<panel
|
||||
|
|
|
|||
|
|
@ -628,7 +628,7 @@
|
|||
</scroll_list>
|
||||
</panel>
|
||||
<panel
|
||||
follows="right|top|bottom"
|
||||
follows="right|bottom"
|
||||
height="95"
|
||||
top_pad="0"
|
||||
width="258"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<panel
|
||||
height="540"
|
||||
height="590"
|
||||
width="272"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
|
|
@ -192,6 +192,29 @@
|
|||
width="100">
|
||||
<button.commit_callback function="SocialSharing.BigPreview" />
|
||||
</button>
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font="SansSerif"
|
||||
height="16"
|
||||
left="10"
|
||||
name="store_label"
|
||||
top_pad="8"
|
||||
type="string">
|
||||
Post as:
|
||||
</text>
|
||||
<combo_box
|
||||
control_name="FSPrimfeedSelectedStore"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
name="stores_combobox"
|
||||
tool_tip="If you have one or more easy blogger stores assigned on Primfeed they will appear here."
|
||||
top_pad="2"
|
||||
left="10"
|
||||
height="21"
|
||||
width="235">
|
||||
<!-- Initially empty; items will be populated at runtime -->
|
||||
</combo_box>
|
||||
<text
|
||||
length="1"
|
||||
follows="top|left|right"
|
||||
|
|
|
|||
|
|
@ -243,11 +243,12 @@
|
|||
Sensibilité du trackpad :
|
||||
</text>
|
||||
<slider name="trackpad_sensitivity_slider" tool_tip="Règle la sensibilité du trackpad"/>
|
||||
<check_box name="natural_direction_checkbox" label="Utiliser l'alignement naturel" tool_tip="Le squelette a des rotations d'articulations non naturelles par défaut. Cela complique la pose. Si cette option est cochée, les articulations tourneront de manière plus naturelle."/>
|
||||
<check_box name="stop_posing_on_close_checkbox" label="Arrêt pose si fermeture" tool_tip="Ne pas arrêter votre pose peut être utile si vous travaillez beaucoup et que vous ne voulez pas la perdre accidentellement."/>
|
||||
<check_box name="reset_base_rotation_on_edit_checkbox" label="Réinitialisation de la rotation" tool_tip="Lorsque vous modifiez une rotation pour la première fois, la remet à zéro. Cela signifie que votre travail peut enregistrer une pose (et non une différence - voir charger/enregistrer). Une coche verte apparaît à côté de chaque articulation dont l'exportation a été remise à zéro."/>
|
||||
<check_box name="also_save_bvh_checkbox" label="Ajouter BVH à l'enregis.**" tool_tip="Lorsque vous enregistrez votre pose, écrivez également un fichier BVH, qui peut être téléchargé via 'Construire > Charger > Animation' pour poser vous-même ou d'autres personnes dans le monde. Pour ce faire, les articulations doivent remettre leur « base » à zéro, car le BVH nécessite que l'on travaille sur l'original."/>
|
||||
<check_box name="confirm_overwrite_on_save_checkbox" label="Confirmer l'écrasement" tool_tip="Lorsque vous enregistrez une pose, si le fichier existe déjà, vous devez cliquer à nouveau sur le bouton d'enregistrement pour confirmer que vous êtes sûr de vouloir l'écraser."/>
|
||||
<check_box name="natural_direction_checkbox" label="Utiliser l'alignement naturel" tool_tip="Le squelette a des rotations d'articulations non naturelles par défaut. Cela complique la pose. Si cette option est cochée, les articulations tourneront de manière plus naturelle."/>
|
||||
<check_box name="show_joint_markers_checkbox" label="Aff. marqueurs de jointure" tool_tip="Afficher de petits indicateurs pour faciliter la sélection des articulations lors de la pose visuelle."/>
|
||||
</panel>
|
||||
</tab_container>
|
||||
<button name="toggleVisualManipulators" tool_tip="Activer et désactiver les manipulateurs visuels"/>
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
<check_box label="Guide de cadrage" tool_tip="Affiche le guide de cadrage (règle des tiers) à l'intérieur du cadre de la photo." name="show_guides"/>
|
||||
<button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquez pour actualiser"/>
|
||||
<button label="Aperçu" name="big_preview_btn" tool_tip="Cliquez pour afficher l'aperçu"/>
|
||||
<text name="store_label">
|
||||
Publier en tant que :
|
||||
</text>
|
||||
<combo_box name="stores_combobox" tool_tip="Si vous avez une ou plusieurs boutiques Easy Blogger attribuées sur Primfeed, elles apparaîtront ici."/>
|
||||
<text name="description_label">
|
||||
Description :
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -7152,4 +7152,13 @@ Votre position actuelle : [AVATAR_POS]
|
|||
<string name="ListEmpty">
|
||||
La liste est vide
|
||||
</string>
|
||||
<string name="NoValidUUIDs">
|
||||
Le fichier importé ne contient aucun UUID valide.
|
||||
</string>
|
||||
<string name="ImportListTooLarge">
|
||||
Trop d'entrées. Le fichier CSV contient [COUNT] entrées et il y a [MAX] emplacements disponibles.
|
||||
</string>
|
||||
<string name="ImportSuccessful">
|
||||
Successfully processed [COUNT] entries.
|
||||
</string>
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -479,6 +479,8 @@
|
|||
<name_list name="AccessList" tool_tip="(最大[MAX]人中[LISTED]人が登録されています。)"/>
|
||||
<button label="追加" name="add_allowed"/>
|
||||
<button label="削除" label_selected="削除" name="remove_allowed"/>
|
||||
<button label="エクスポート" label_selected="エクスポート" name="export_allowed"/>
|
||||
<button tool_tip="有効なUUIDのみ(1行に1つ、余分な文字やフォーマットなし)を含むCSV形式のファイルをインポートします。" label="インポート" label_selected="インポート" name="import_allowed"/>
|
||||
</panel>
|
||||
<panel name="Banned_layout_panel">
|
||||
<text label="バン" name="BanCheck">
|
||||
|
|
@ -490,6 +492,8 @@
|
|||
</name_list>
|
||||
<button label="追加" name="add_banned"/>
|
||||
<button label="削除" label_selected="削除" name="remove_banned"/>
|
||||
<button label="エクスポート" label_selected="エクスポート" name="export_banned"/>
|
||||
<button tool_tip="有効なUUIDのみ(1行に1つ、余分な文字やフォーマットなし)を含むCSV形式のファイルをインポートします。" label="インポート" label_selected="インポート" name="import_banned"/>
|
||||
</panel>
|
||||
</panel>
|
||||
<panel label="体験" name="land_experiences_panel"/>
|
||||
|
|
|
|||
|
|
@ -256,11 +256,12 @@
|
|||
トラックパッドの感度:
|
||||
</text>
|
||||
<slider name="trackpad_sensitivity_slider" tool_tip="トラックボールの感度を調整します。"/>
|
||||
<check_box name="natural_direction_checkbox" label="自然な配置を使用する" tool_tip="デフォルトでは、スケルトンの関節の回転は不自然です。これにより、ポーズが複雑になります。チェックすると、関節がより自然に回転します。"/>
|
||||
<check_box name="stop_posing_on_close_checkbox" label="閉じたらポーズを止める" tool_tip="ポーズを止めないことは、多くの作業を行っていて、誤ってポーズを失いたくない場合に役に立ちます。"/>
|
||||
<check_box name="reset_base_rotation_on_edit_checkbox" label="編集時にベース回転をリセット" tool_tip="回転を初めて編集するときは、ゼロにリセットします。これにより、作業でポーズを保存できます。(差分ではなく、読み込み/保存を参照)ゼロにエクスポートした各ジョイントの横に緑色のチェックマークが表示されます。"/>
|
||||
<check_box name="also_save_bvh_checkbox" label="保存時にBVHを書き込む**" tool_tip="ポーズを保存するときに、BVHファイルも作成します。このファイルは、「ビルド」>「アップロード」>「アニメーション」からアップロードして、自分自身または他のユーザーにインワールドのポーズを与えることができます。BVHにはオリジナルの作業が必要なので、ジョイントの「ベース」をゼロにリセットする必要があります。"/>
|
||||
<check_box name="confirm_overwrite_on_save_checkbox" label="上書きを確認" tool_tip="ポーズを保存するときに、ファイルがすでに存在する場合は、上書きすることを確認するために、もう一度保存ボタンをクリックする必要があります。"/>
|
||||
<check_box name="natural_direction_checkbox" label="自然な配置を使用する" tool_tip="デフォルトでは、スケルトンの関節の回転は不自然です。これにより、ポーズが複雑になります。チェックすると、関節がより自然に回転します。"/>
|
||||
<check_box name="show_joint_markers_checkbox" label="ジョイント部にマーカーを表示" tool_tip="視覚的なポージングにジョイント部の選択を支援するための小さなインジケーターを表示します。"/>
|
||||
</panel>
|
||||
</tab_container>
|
||||
<button name="toggleVisualManipulators" tool_tip="視覚マニピュレータのオン/オフを切り替えます。"/>
|
||||
|
|
|
|||
|
|
@ -208,7 +208,7 @@
|
|||
<text name="preferences_search_bg_label">
|
||||
背景:
|
||||
</text>
|
||||
<color_swatch name="preferences_search_color" tool_tip="初期設定の検索結果のハイライトの背景色を選択します。"/>
|
||||
<color_swatch name="preferences_search_bg_color" tool_tip="初期設定の検索結果のハイライトの背景色を選択します。"/>
|
||||
<text name="preferences_search_font_label">
|
||||
フォント:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@
|
|||
<check_box label="フレームのガイドを表示" tool_tip="スナップショットフレーム内にフレームのガイド(三分割法)を表示します。" name="show_guides"/>
|
||||
<button label="リフレッシュ" name="new_snapshot_btn" tool_tip="クリックでリフレッシュします。"/>
|
||||
<button label="プレビュー" name="big_preview_btn" tool_tip="クリックでプレビューを切り替えます。"/>
|
||||
<text name="store_label">
|
||||
投稿者:
|
||||
</text>
|
||||
<combo_box name="stores_combobox" tool_tip="Primfeedに1つ以上の簡単なブロガーストアが割り当てられている場合は、ここに表示されます。"/>
|
||||
<text name="description_label">
|
||||
説明:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@
|
|||
<!-- Estate Managers buttons -->
|
||||
<button label="追加…" name="add_estate_manager_btn"/>
|
||||
<button label="削除…" name="remove_estate_manager_btn"/>
|
||||
<button label="エクスポート…" name="export_estate_manager_btn"/>
|
||||
<button tool_tip="有効なUUIDのみ(1行に1つ、余分な文字やフォーマットなし)を含むCSV形式のファイルをインポートします。" label="インポート…" name="import_estate_manager_btn"/>
|
||||
</panel>
|
||||
<!-- ================================ ALLOWED tab =========================== -->
|
||||
<panel label="許可" name="allowed_panel">
|
||||
|
|
@ -30,6 +32,8 @@
|
|||
<!-- Always allowed buttons -->
|
||||
<button label="追加…" name="add_allowed_avatar_btn"/>
|
||||
<button label="削除…" name="remove_allowed_avatar_btn"/>
|
||||
<button label="エクスポート…" name="export_allowed_list_btn"/>
|
||||
<button tool_tip="有効なUUIDのみ(1行に1つ、余分な文字やフォーマットなし)を含むCSV形式のファイルをインポートします。" label="インポート…" name="import_allowed_list_btn"/>
|
||||
</panel>
|
||||
<!-- ============================= ALLOWED GROUPS tab ======================= -->
|
||||
<panel label="許可するグループ" name="allowed_groups_panel">
|
||||
|
|
@ -47,6 +51,8 @@
|
|||
<!-- Groups always allowed buttons -->
|
||||
<button label="追加…" name="add_allowed_group_btn"/>
|
||||
<button label="削除…" name="remove_allowed_group_btn"/>
|
||||
<button label="エクスポート…" name="export_allowed_group_btn"/>
|
||||
<button tool_tip="有効なUUIDのみ(1行に1つ、余分な文字やフォーマットなし)を含むCSV形式のファイルをインポートします。" label="インポート…" name="import_allowed_group_btn"/>
|
||||
</panel>
|
||||
<!-- ================================ BANNED tab ============================ -->
|
||||
<panel label="バン" name="banned_panel">
|
||||
|
|
@ -67,6 +73,8 @@
|
|||
<!-- Always banned buttons -->
|
||||
<button label="追加…" name="add_banned_avatar_btn"/>
|
||||
<button label="削除…" name="remove_banned_avatar_btn"/>
|
||||
<button label="エクスポート…" name="export_banned_avatar_btn"/>
|
||||
<button tool_tip="有効なUUIDのみ(1行に1つ、余分な文字やフォーマットなし)を含むCSV形式のファイルをインポートします。" label="インポート…" name="import_banned_avatar_btn"/>
|
||||
</panel>
|
||||
</tab_container>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -6586,4 +6586,9 @@ Rez時間:[OBJECT_REZ_TIME]
|
|||
<string name="FSObjectInventoryElements">[NUM_ELEMENTS]件の要素</string>
|
||||
<string name="OpenSimInventoryValidationErrorGenericHelp">グリッドオペレータのサポートチーム</string>
|
||||
<string name="Unlimited">無制限</string>
|
||||
</strings>
|
||||
|
||||
<string name="ListEmpty">リストは空です。</string>
|
||||
<string name="NoValidUUIDs">インポートされたファイル内に有効なUUIDが見つかりません。</string>
|
||||
<string name="ImportListTooLarge">エントリが多すぎます。CSVファイルには[COUNT]個のエントリがあり、残り使用可能なスロット数は[MAX]個です。</string>
|
||||
<string name="ImportSuccessful">[COUNT]件のエントリを正常に処理しました。</string>
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -244,11 +244,12 @@
|
|||
<panel title="Inne" name="settings_panel">
|
||||
<text name="trackpad_sensitivity_label">Czułość trackpada:</text>
|
||||
<slider name="trackpad_sensitivity_slider" tool_tip="Dostosowuje czułość trackballa / kółka" />
|
||||
<check_box name="natural_direction_checkbox" label="Naturalne wyrównanie" tool_tip="Szkielet ma domyślnie nienaturalne rotacje stawów. To utrudnia pozowanie. Po zaznaczeniu stawy będą się obracać w bardziej naturalny sposób." />
|
||||
<check_box name="stop_posing_on_close_checkbox" label="Stop pozy po zamknięciu" tool_tip="Brak zatrzymywania pozy może być pomocny, jeśli nie chcesz jej przypadkowo stracić." />
|
||||
<check_box name="reset_base_rotation_on_edit_checkbox" label="Reset bazy rotacji na edycji" tool_tip="Gdy po raz pierwszy edytujesz obrót, zresetuj go do zera. Oznacza to, że Twoja praca może zapisać pozę (a nie różnicę, patrz ładowanie / zapisywanie). Zielony 'ptaszek' pojawia się obok każdego wyzerowanego tak, wyeksportowanego stawu." />
|
||||
<check_box name="also_save_bvh_checkbox" label="Twórz BVH podczas zapisu**" tool_tip="Podczas zapisywania pozy twórz również plik BVH, który można przesłać za pomocą 'Buduj > Prześlij > Animację', aby móc ustawiać siebie lub innych w świecie. Należy zresetować 'bazę' stawów do zera, ponieważ BVH wymaga oryginalnej pracy." />
|
||||
<check_box name="confirm_overwrite_on_save_checkbox" label="Potwierdź nadpisanie" tool_tip="Gdy zapisujesz pozę, a plik już istnieje, musisz kliknąć przycisk zapisu ponownie, aby potwierdzić, że na pewno chcesz ją nadpisać." />
|
||||
<check_box name="natural_direction_checkbox" label="Naturalne wyrównanie" tool_tip="Szkielet ma domyślnie nienaturalne rotacje stawów. To utrudnia pozowanie. Po zaznaczeniu stawy będą się obracać w bardziej naturalny sposób." />
|
||||
<check_box name="show_joint_markers_checkbox" label="Wskaźniki stawów" tool_tip="Pokaż małe wskaźniki ułatwiające wybór stawów podczas pozowania." />
|
||||
</panel>
|
||||
</tab_container>
|
||||
<button name="toggleVisualManipulators" tool_tip="Włącz / wyłącz manipulatory wizualne." />
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
<check_box label="Prowadnice" tool_tip="Pokaż prowadnicę kadrowania (zasadę trójpodziału) wewnątrz ramki migawki." name="show_guides" />
|
||||
<button label="Odśwież" name="new_snapshot_btn" tool_tip="Kliknij, aby odświeżyć" />
|
||||
<button label="Podgląd" name="big_preview_btn" tool_tip="Kliknij, aby przełączyć podgląd" />
|
||||
<text name="store_label">
|
||||
Ślij jako:
|
||||
</text>
|
||||
<combo_box name="stores_combobox" tool_tip="Jeśli masz jeden lub więcej sklepów Easy Blogger przypisanych do Primfeed, to pojawią się one tutaj." />
|
||||
<text name="description_label">
|
||||
Opis:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -468,6 +468,7 @@
|
|||
<button label="Добавить" name="add_allowed" />
|
||||
<button label="Удалить" label_selected="Удалить" name="remove_allowed" />
|
||||
<button label="Экспорт" label_selected="Экспорт" name="export_allowed" />
|
||||
<button label="Импорт" label_selected="Импорт" name="import_allowed" tool_tip="Импортируйте CSV-файл, содержащий только действительные UUID — по одному на строку, без дополнительных символов или форматирования."/>
|
||||
</panel>
|
||||
<panel name="Banned_layout_panel">
|
||||
<text name="BanCheck">
|
||||
|
|
@ -480,6 +481,7 @@
|
|||
<button label="Добавить" name="add_banned"/>
|
||||
<button label="Удалить" label_selected="Удалить" name="remove_banned" />
|
||||
<button label="Экспорт" label_selected="Экспорт" name="export_banned" />
|
||||
<button label="Импорт" label_selected="Импорт" name="import_banned" tool_tip="Импортируйте CSV-файл, содержащий только действительные UUID — по одному на строку, без дополнительных символов или форматирования."/>
|
||||
</panel>
|
||||
</panel>
|
||||
<panel label="Приключения" name="land_experiences_panel"/>
|
||||
|
|
|
|||
|
|
@ -207,10 +207,13 @@
|
|||
<panel title="Настр." name="settings_panel">
|
||||
<text name="trackpad_sensitivity_label">Чувствительность трекпада:</text>
|
||||
<slider name="trackpad_sensitivity_slider" tool_tip="Регулирует чувствительность трекбола"/>
|
||||
<check_box name="natural_direction_checkbox" label="Используйте естественное выравнивание" tool_tip="Скелет имеет неестественные вращения суставов по умолчанию. Это усложняет позирование. Если отмечено, суставы будут вращаться более естественно." />
|
||||
|
||||
<check_box name="stop_posing_on_close_checkbox" label="Стоп позы по закрытию" tool_tip="Не прерывать позу может быть полезно, если вы много работаете и не хотите случайно потерять ее."/>
|
||||
<check_box name="reset_base_rotation_on_edit_checkbox" label="Сброс базовый поворот" tool_tip="При первом редактировании поворота обнулите его значение. Это означает, что в вашей работе можно сохранить позу (а не разницу, см. раздел Загрузка/сохранение). Рядом с каждым суставом, экспорт которого вы обнулили, появляется зеленая галочка."/>
|
||||
<check_box name="also_save_bvh_checkbox" label="Запись BVH при сохранении**" tool_tip="Когда вы сохраняете свою позу, также запишется файл BVH, который можно загрузить через 'Build > Upload > Animation', чтобы позировать себя или других в мире. Это требует, чтобы суставы сбросили свою 'базу' на ноль, потому что BVH требует оригинальной работы."/>
|
||||
<check_box name="confirm_overwrite_on_save_checkbox" label="Подтвердить перезапись" tool_tip="При сохранении позы, если файл уже существует, вам необходимо нажать кнопку сохранения еще раз, чтобы подтвердить, что вы действительно хотите перезаписать его."/>
|
||||
<check_box name="natural_direction_checkbox" label="Используйте естественное выравнивание" tool_tip="Скелет имеет неестественные вращения суставов по умолчанию. Это усложняет позирование. Если отмечено, суставы будут вращаться более естественно." />
|
||||
<check_box name="show_joint_markers_checkbox" label="Показать маркеры суставов" tool_tip="Покажите небольшие индикаторы, помогающие выбрать суставы при визуальном позировании."/>
|
||||
</panel>
|
||||
</tab_container>
|
||||
<button name="toggleVisualManipulators" tool_tip="Включать и выключать визуальные манипуляторы"/>
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@
|
|||
<check_box label="Направляющие кадрирования" tool_tip="Показать направляющую кадрирования (правило третей) внутри рамки снимка." name="show_guides" />
|
||||
<button label="Обновить" name="new_snapshot_btn" tool_tip="Нажмите, чтобы обновить"/>
|
||||
<button label="Просмотр" name="big_preview_btn" tool_tip="Нажмите, чтобы переключить предварительный просмотр"/>
|
||||
<text name="store_label">Опубликовать как:</text>
|
||||
<combo_box name="stores_combobox" tool_tip="Если у вас есть один или несколько простых магазинов блогеров, назначенных на Primfeed, они появятся здесь."/>
|
||||
<text name="description_label">Описание:</text>
|
||||
<check_box label="Включить местоположение" name="add_location_cb"/>
|
||||
<check_box label="Добавить в публичную галерею" name="primfeed_add_to_public_gallery"/>
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
<button label="Добавить..." name="add_estate_manager_btn"/>
|
||||
<button label="Удалить..." name="remove_estate_manager_btn"/>
|
||||
<button label="Экспорт..." name="export_estate_manager_btn"/>
|
||||
<button label="Импорт..." name="import_estate_manager_btn" tool_tip="Импортируйте CSV-файл, содержащий только действительные UUID - по одному на строку, без дополнительных символов или форматирования."/>
|
||||
</panel>
|
||||
<panel label="Разрешенные" name="allowed_panel">
|
||||
<panel label="top_panel" name="allowed_search_panel">
|
||||
|
|
@ -26,6 +27,7 @@
|
|||
<button label="Добавить..." name="add_allowed_avatar_btn"/>
|
||||
<button label="Удалить..." name="remove_allowed_avatar_btn"/>
|
||||
<button label="Экспорт..." name="export_allowed_list_btn"/>
|
||||
<button label="Импорт..." name="import_allowed_list_btn" tool_tip="Импортируйте CSV-файл, содержащий только действительные UUID - по одному на строку, без дополнительных символов или форматирования."/>
|
||||
</panel>
|
||||
<panel label="Допущенные Группы" name="allowed_groups_panel">
|
||||
<panel label="top_panel" name="allowed_group_search_panel">
|
||||
|
|
@ -41,6 +43,7 @@
|
|||
<button label="Добавить..." name="add_allowed_group_btn"/>
|
||||
<button label="Удалить..." name="remove_allowed_group_btn"/>
|
||||
<button label="Экспорт..." name="export_allowed_group_btn"/>
|
||||
<button label="Импорт..." name="import_allowed_group_btn" tool_tip="Импортируйте CSV-файл, содержащий только действительные UUID - по одному на строку, без дополнительных символов или форматирования."/>
|
||||
</panel>
|
||||
<panel label="Заблокированы" name="banned_panel">
|
||||
<panel label="top_panel" name="banned_search_panel">
|
||||
|
|
@ -59,6 +62,7 @@
|
|||
<button label="Добавить..." name="add_banned_avatar_btn"/>
|
||||
<button label="Удалить..." name="remove_banned_avatar_btn"/>
|
||||
<button label="Экспорт..." name="export_banned_avatar_btn"/>
|
||||
<button label="Импорт..." name="import_banned_avatar_btn" tool_tip="Импортируйте CSV-файл, содержащий только действительные UUID - по одному на строку, без дополнительных символов или форматирования."/>
|
||||
</panel>
|
||||
</tab_container>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -6873,5 +6873,10 @@ ID объекта: [INSPECTING_KEY]
|
|||
<string name="FSObjectInventoryElements">[NUM_ELEMENTS] элементов</string>
|
||||
<string name="OpenSimInventoryValidationErrorGenericHelp">команда поддержки оператора вашей сетки</string>
|
||||
<string name="Unlimited">Неограниченный</string>
|
||||
|
||||
<string name="ListEmpty">Список пуст</string>
|
||||
<string name="NoValidUUIDs">В импортированном файле не найдено действительных UUID.</string>
|
||||
<string name="ImportListTooLarge">Слишком много записей. CSV-файл содержит [COUNT] записей, а доступно [MAX] слотов.</string>
|
||||
<string name="ImportSuccessful">Успешно обработано [COUNT] записей.</string>
|
||||
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -246,11 +246,12 @@
|
|||
觸控板敏感度:
|
||||
</text>
|
||||
<slider name="trackpad_sensitivity_slider" tool_tip="設定觸控板的敏感度"/>
|
||||
<check_box name="natural_direction_checkbox" label="使用自然對齊" tool_tip="骨骼預設具有不自然的關節旋轉,這可能會讓姿勢調整變得更複雜。選取此選項後,關節將以更自然的方式旋轉。" />
|
||||
<check_box name="stop_posing_on_close_checkbox" label="關閉時停止" tool_tip="關閉時不停止姿勢可有助於保留目前工作。"/>
|
||||
<check_box name="reset_base_rotation_on_edit_checkbox" label="編輯時重設基礎旋轉" tool_tip="首次編輯旋轉時,將其重設為零。這意味著可以保存完整的姿勢(而不僅僅是差異,請參閱載入/保存)。每個以零為基準匯出的關節旁都會顯示綠色勾選標誌。" />
|
||||
<check_box name="also_save_bvh_checkbox" label="儲存時也儲存BHV" tool_tip="當姿勢被儲存時,將同時創建一個BHV檔案,該檔案可以透過建造 > 上傳 > 動畫上傳,並用於自己或其他化身的姿勢。為了實現此功能,關節的基礎位置必須設為零,因為BHV無法從其他姿勢推導出來。"/>
|
||||
<check_box name="confirm_overwrite_on_save_checkbox" label="確認覆蓋" tool_tip="儲存姿勢時,如果檔案已存在,您需要再次點擊保存按鈕以確認覆蓋。" />
|
||||
<check_box name="reset_base_rotation_on_edit_checkbox" label="編輯時重設基礎旋轉" tool_tip="首次編輯旋轉時,將其重設為零。這意味著可以保存完整的姿勢(而不僅僅是差異,請參閱載入/保存)。每個以零為基準匯出的關節旁都會顯示綠色勾選標誌。" />
|
||||
<check_box name="natural_direction_checkbox" label="使用自然對齊" tool_tip="骨骼預設具有不自然的關節旋轉,這可能會讓姿勢調整變得更複雜。選取此選項後,關節將以更自然的方式旋轉。" />
|
||||
<check_box name="show_joint_markers_checkbox" label="顯示關節標記" tool_tip="顯示關節標記,以便在姿勢編輯時更輕鬆地選擇關節。" />
|
||||
</panel>
|
||||
</tab_container>
|
||||
<button name="toggleVisualManipulators" tool_tip="啟用 / 停用可視操控器。" />
|
||||
|
|
|
|||
|
|
@ -136,6 +136,7 @@
|
|||
<combo_box.item label="少量" name="32" />
|
||||
<combo_box.item label="中等" name="64" />
|
||||
<combo_box.item label="很多" name="128" />
|
||||
<combo_box.item label="超多" name="256" />
|
||||
</combo_box>
|
||||
<slider label="曝光度:" name="RenderExposure" />
|
||||
<check_box label="鏡面" name="Mirrors" />
|
||||
|
|
@ -160,7 +161,6 @@
|
|||
<combo_box.item label="ACES" name="1"/>
|
||||
</combo_box>
|
||||
<slider label="色調映射混合:" tool_tip="在線性與色調映射顏色之間進行混合" name="TonemapMix"/>
|
||||
<!-- End of mirror settings -->
|
||||
<button label="重設為我們建議的設定" name="Defaults" />
|
||||
<button label="確定" label_selected="確定" name="OK" />
|
||||
<button label="取消" label_selected="取消" name="Cancel" />
|
||||
|
|
|
|||
|
|
@ -213,6 +213,7 @@
|
|||
<combo_box.item label="少量" name="32" />
|
||||
<combo_box.item label="中等" name="64" />
|
||||
<combo_box.item label="很多" name="128" />
|
||||
<combo_box.item label="超多" name="256" />
|
||||
</combo_box>
|
||||
<text name="TonemapTypeText">
|
||||
色調映射器:
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
<check_box label="顯示指導線" name="show_guides" tool_tip="在拍攝範圍內顯示拍攝指導線(例如三分法)。"/>
|
||||
<button label="更新" name="new_snapshot_btn" tool_tip="點擊更新"/>
|
||||
<button label="預覽" name="big_preview_btn" tool_tip="點擊切換預覽狀態"/>
|
||||
<text name="store_label">
|
||||
發布為:
|
||||
</text>
|
||||
<combo_box name="stores_combobox" tool_tip="如果您在Primfeed上分配了一個或多個EasyBloggers商店,它們將顯示在這裡。"/>
|
||||
<text name="description_label">
|
||||
描述:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -627,11 +627,11 @@
|
|||
</scroll_list>
|
||||
</panel>
|
||||
<panel
|
||||
follows="right|top|bottom"
|
||||
follows="right|bottom"
|
||||
height="95"
|
||||
top_pad="0"
|
||||
width="258"
|
||||
name="layout_panel_5">
|
||||
name="layout_panel_7">
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
|
|||
|
|
@ -629,11 +629,11 @@
|
|||
</scroll_list>
|
||||
</panel>
|
||||
<panel
|
||||
follows="right|top|bottom"
|
||||
follows="right|bottom"
|
||||
height="330"
|
||||
top_pad="0"
|
||||
width="258"
|
||||
name="layout_panel_5">
|
||||
name="layout_panel_7">
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
|
|||
Loading…
Reference in New Issue