mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-26 03:38:39 +01:00
Merge pull request #20986 from hrydgard/guess-what-more-ui
More UI improvements for portrait
This commit is contained in:
81 files changed
+674
-622
No files matched your search
@@ -70,7 +70,7 @@ void TextDrawerAndroid::SetOrCreateFont(const FontStyle &style) {
|
||||
|
||||
AndroidFontEntry entry{};
|
||||
entry.font = allocatedFonts_[filename];
|
||||
entry.size = 1.4f * style.sizePts / dpiScale_; // Not sure why this formula works.
|
||||
entry.size = 1.25f * style.sizePts / dpiScale_; // Not sure why this formula works.
|
||||
|
||||
// Just chose a factor that looks good, don't know what unit size is in anyway.
|
||||
fontMap_[style] = entry;
|
||||
|
||||
+185
-3
@@ -10,17 +10,199 @@
|
||||
#include "Common/Data/Text/I18n.h"
|
||||
#include "Common/System/System.h"
|
||||
#include "Common/System/Request.h"
|
||||
#include "Common/System/Display.h"
|
||||
#include "Common/Math/curves.h"
|
||||
#include "Common/Render/DrawBuffer.h"
|
||||
|
||||
namespace UI {
|
||||
|
||||
PopupScreen::PopupScreen(std::string_view title, std::string_view button1, std::string_view button2)
|
||||
: title_(title), button1_(button1), button2_(button2) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
// Auto-assign images. A bit hack to have this here.
|
||||
if (button1 == di->T("Delete") || button1 == di->T("Move to trash")) {
|
||||
button1Image_ = ImageID("I_TRASHCAN");
|
||||
}
|
||||
|
||||
alpha_ = 0.0f; // inherited
|
||||
}
|
||||
|
||||
void PopupScreen::touch(const TouchInput &touch) {
|
||||
if (!box_ || (touch.flags & TOUCH_DOWN) == 0) {
|
||||
// Handle down-presses here.
|
||||
UIDialogScreen::touch(touch);
|
||||
return;
|
||||
}
|
||||
|
||||
// Extra bounds to avoid closing the dialog while trying to aim for something
|
||||
// near the edge. Now that we only close on actual down-events, we can shrink
|
||||
// this border a bit.
|
||||
if (!box_->GetBounds().Expand(30.0f, 30.0f).Contains(touch.x, touch.y)) {
|
||||
TriggerFinish(DR_CANCEL);
|
||||
}
|
||||
|
||||
UIDialogScreen::touch(touch);
|
||||
}
|
||||
|
||||
bool PopupScreen::key(const KeyInput &key) {
|
||||
if (key.flags & KEY_DOWN) {
|
||||
if ((key.keyCode == NKCODE_ENTER || key.keyCode == NKCODE_NUMPAD_ENTER) && defaultButton_) {
|
||||
UI::EventParams e{};
|
||||
defaultButton_->OnClick.Trigger(e);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return UIDialogScreen::key(key);
|
||||
}
|
||||
|
||||
void PopupScreen::update() {
|
||||
UIDialogScreen::update();
|
||||
|
||||
if (defaultButton_)
|
||||
defaultButton_->SetEnabled(CanComplete(DR_OK));
|
||||
|
||||
float animatePos = 1.0f;
|
||||
|
||||
++frames_;
|
||||
if (finishFrame_ >= 0) {
|
||||
float leadOut = bezierEaseInOut((frames_ - finishFrame_) * (1.0f / (float)FRAMES_LEAD_OUT));
|
||||
animatePos = 1.0f - leadOut;
|
||||
|
||||
if (frames_ >= finishFrame_ + FRAMES_LEAD_OUT) {
|
||||
// Actual finish happens here.
|
||||
screenManager()->finishDialog(this, finishResult_);
|
||||
}
|
||||
} else if (frames_ < FRAMES_LEAD_IN) {
|
||||
float leadIn = bezierEaseInOut(frames_ * (1.0f / (float)FRAMES_LEAD_IN));
|
||||
animatePos = leadIn;
|
||||
}
|
||||
|
||||
if (animatePos < 1.0f) {
|
||||
alpha_ = animatePos;
|
||||
scale_.x = 0.9f + animatePos * 0.1f;
|
||||
scale_.y = 0.9f + animatePos * 0.1f;
|
||||
|
||||
if (hasPopupOrigin_) {
|
||||
float xoff = popupOrigin_.x - g_display.dp_xres / 2;
|
||||
float yoff = popupOrigin_.y - g_display.dp_yres / 2;
|
||||
|
||||
// Pull toward the origin a bit.
|
||||
translation_.x = xoff * (1.0f - animatePos) * 0.2f;
|
||||
translation_.y = yoff * (1.0f - animatePos) * 0.2f;
|
||||
} else {
|
||||
translation_.y = -g_display.dp_yres * (1.0f - animatePos) * 0.2f;
|
||||
}
|
||||
} else {
|
||||
alpha_ = 1.0f;
|
||||
scale_.x = 1.0f;
|
||||
scale_.y = 1.0f;
|
||||
translation_.x = 0.0f;
|
||||
translation_.y = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void PopupScreen::SetPopupOrigin(const UI::View *view) {
|
||||
hasPopupOrigin_ = true;
|
||||
popupOrigin_ = view->GetBounds().Center();
|
||||
}
|
||||
|
||||
void PopupScreen::TriggerFinish(DialogResult result) {
|
||||
if (CanComplete(result)) {
|
||||
ignoreInput_ = true;
|
||||
finishFrame_ = frames_;
|
||||
finishResult_ = result;
|
||||
|
||||
OnCompleted(result);
|
||||
}
|
||||
// Inform UI that popup close to hide OSK (if visible)
|
||||
System_NotifyUIEvent(UIEventNotification::POPUP_CLOSED);
|
||||
}
|
||||
|
||||
void PopupScreen::CreateViews() {
|
||||
using namespace UI;
|
||||
UIContext &dc = *screenManager()->getUIContext();
|
||||
|
||||
AnchorLayout *anchor = new AnchorLayout(new LayoutParams(FILL_PARENT, FILL_PARENT));
|
||||
anchor->Overflow(false);
|
||||
root_ = anchor;
|
||||
|
||||
const float ySize = FillVertical() ? dc.GetLayoutBounds().h - 30 : WRAP_CONTENT;
|
||||
|
||||
int y = dc.GetBounds().centerY() + offsetY_;
|
||||
Centering vCentering = Centering::Vertical;
|
||||
if (alignTop_) {
|
||||
y = 0;
|
||||
vCentering = Centering::None;
|
||||
}
|
||||
|
||||
const float popupWidth = PopupWidth();
|
||||
|
||||
AnchorLayoutParams *anchorParams;
|
||||
// NOTE: We purely use the popup width here to decide the type of layout, instead of the device orientation.
|
||||
if (dc.GetLayoutBounds().w < popupWidth + 50) {
|
||||
anchorParams = new AnchorLayoutParams(popupWidth, ySize,
|
||||
10, y, 10, NONE, vCentering);
|
||||
} else {
|
||||
anchorParams = new AnchorLayoutParams(popupWidth, ySize,
|
||||
dc.GetBounds().centerX(), y, NONE, NONE, vCentering | Centering::Horizontal);
|
||||
}
|
||||
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, anchorParams);
|
||||
|
||||
root_->Add(box_);
|
||||
box_->SetBG(dc.GetTheme().popupStyle.background);
|
||||
box_->SetHasDropShadow(hasDropShadow_);
|
||||
// Since we scale a bit, make the dropshadow bleed past the edges.
|
||||
box_->SetDropShadowExpand(std::max(g_display.dp_xres, g_display.dp_yres));
|
||||
box_->SetSpacing(0.0f);
|
||||
|
||||
if (!title_.empty()) {
|
||||
View *title = new PopupHeader(title_);
|
||||
box_->Add(title);
|
||||
}
|
||||
|
||||
CreatePopupContents(box_);
|
||||
root_->Recurse([](View *view) {
|
||||
view->SetPopupStyle(true);
|
||||
});
|
||||
|
||||
root_->SetDefaultFocusView(box_);
|
||||
|
||||
if (ShowButtons() && !button1_.empty()) {
|
||||
// And the two buttons at the bottom.
|
||||
LinearLayout *buttonRow = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(200, WRAP_CONTENT));
|
||||
buttonRow->SetSpacing(0);
|
||||
Margins buttonMargins(5, 5);
|
||||
|
||||
// Adjust button order to the platform default.
|
||||
if (System_GetPropertyBool(SYSPROP_OK_BUTTON_LEFT)) {
|
||||
defaultButton_ = buttonRow->Add(new Choice(button1_, button1Image_, new LinearLayoutParams(1.0f, buttonMargins)));
|
||||
defaultButton_->OnClick.Handle<UIScreen>(this, &UIScreen::OnOK);
|
||||
if (!button2_.empty()) {
|
||||
buttonRow->Add(new Choice(button2_, new LinearLayoutParams(1.0f, buttonMargins)))->OnClick.Handle<UIScreen>(this, &UIScreen::OnCancel);
|
||||
}
|
||||
} else {
|
||||
if (!button2_.empty()) {
|
||||
buttonRow->Add(new Choice(button2_, new LinearLayoutParams(1.0f, buttonMargins)))->OnClick.Handle<UIScreen>(this, &UIScreen::OnCancel);
|
||||
}
|
||||
defaultButton_ = buttonRow->Add(new Choice(button1_, button1Image_, new LinearLayoutParams(1.0f, buttonMargins)));
|
||||
defaultButton_->OnClick.Handle<UIScreen>(this, &UIScreen::OnOK);
|
||||
}
|
||||
|
||||
box_->Add(buttonRow);
|
||||
}
|
||||
}
|
||||
|
||||
void MessagePopupScreen::CreatePopupContents(UI::ViewGroup *parent) {
|
||||
using namespace UI;
|
||||
UIContext &dc = *screenManager()->getUIContext();
|
||||
|
||||
std::vector<std::string_view> messageLines;
|
||||
SplitString(message_, '\n', messageLines);
|
||||
for (auto lineOfText : messageLines)
|
||||
parent->Add(new UI::TextView(lineOfText, ALIGN_LEFT | ALIGN_VCENTER, false));
|
||||
for (auto lineOfText : messageLines) {
|
||||
parent->Add(new UI::TextView(lineOfText, ALIGN_LEFT | ALIGN_VCENTER | FLAG_WRAP_TEXT, false, new LinearLayoutParams(Margins(8))));
|
||||
}
|
||||
}
|
||||
|
||||
void MessagePopupScreen::OnCompleted(DialogResult result) {
|
||||
@@ -80,7 +262,7 @@ void PopupContextMenuScreen::CreatePopupContents(UI::ViewGroup *parent) {
|
||||
|
||||
// Hacky: Override the position to look like a popup menu.
|
||||
AnchorLayoutParams *ap = (AnchorLayoutParams *)parent->GetLayoutParams();
|
||||
ap->center = false;
|
||||
ap->centering = Centering::None;
|
||||
ap->left = sourceView_->GetBounds().x;
|
||||
ap->top = sourceView_->GetBounds().y2();
|
||||
}
|
||||
|
||||
@@ -16,6 +16,62 @@ namespace UI {
|
||||
static const float NO_DEFAULT_FLOAT = -1000000.0f;
|
||||
static const int NO_DEFAULT_INT = -1000000;
|
||||
|
||||
class PopupScreen : public UIDialogScreen {
|
||||
public:
|
||||
PopupScreen(std::string_view title, std::string_view button1 = "", std::string_view button2 = "");
|
||||
|
||||
virtual void CreatePopupContents(UI::ViewGroup *parent) = 0;
|
||||
void CreateViews() override;
|
||||
bool isTransparent() const override { return true; }
|
||||
void touch(const TouchInput &touch) override;
|
||||
bool key(const KeyInput &key) override;
|
||||
|
||||
void TriggerFinish(DialogResult result) override;
|
||||
|
||||
void SetPopupOrigin(const UI::View *view);
|
||||
void SetPopupOffset(float y) { offsetY_ = y; }
|
||||
|
||||
void SetAlignTop(bool alignTop) { alignTop_ = alignTop; }
|
||||
|
||||
void SetHasDropShadow(bool has) { hasDropShadow_ = has; }
|
||||
|
||||
// For the postproc param sliders on DisplayLayoutScreen
|
||||
bool wantBrightBackground() const override { return !hasDropShadow_; }
|
||||
|
||||
protected:
|
||||
virtual bool FillVertical() const { return false; }
|
||||
virtual UI::Size PopupWidth() const { return 550; }
|
||||
virtual bool ShowButtons() const { return true; }
|
||||
virtual bool CanComplete(DialogResult result) { return true; }
|
||||
virtual void OnCompleted(DialogResult result) {}
|
||||
std::string_view Title() { return title_; }
|
||||
|
||||
void update() override;
|
||||
|
||||
private:
|
||||
UI::LinearLayout *box_ = nullptr;
|
||||
UI::Choice *defaultButton_ = nullptr;
|
||||
ImageID button1Image_;
|
||||
std::string title_;
|
||||
std::string button1_;
|
||||
std::string button2_;
|
||||
|
||||
enum {
|
||||
FRAMES_LEAD_IN = 6,
|
||||
FRAMES_LEAD_OUT = 4,
|
||||
};
|
||||
|
||||
int frames_ = 0;
|
||||
int finishFrame_ = -1;
|
||||
DialogResult finishResult_ = DR_CANCEL;
|
||||
bool hasPopupOrigin_ = false;
|
||||
Point2D popupOrigin_;
|
||||
float offsetY_ = 0.0f;
|
||||
bool alignTop_ = false;
|
||||
|
||||
bool hasDropShadow_ = true;
|
||||
};
|
||||
|
||||
class ListPopupScreen : public PopupScreen {
|
||||
public:
|
||||
ListPopupScreen(std::string_view title) : PopupScreen(title) {}
|
||||
@@ -60,7 +116,7 @@ private:
|
||||
|
||||
class MessagePopupScreen : public PopupScreen {
|
||||
public:
|
||||
MessagePopupScreen(std::string_view title, std::string message, std::string button1, std::string button2, std::function<void(bool)> callback)
|
||||
MessagePopupScreen(std::string_view title, std::string_view message, std::string_view button1, std::string_view button2, std::function<void(bool)> callback)
|
||||
: PopupScreen(title, button1, button2), message_(message), callback_(callback) {}
|
||||
|
||||
const char *tag() const override { return "MessagePopupScreen"; }
|
||||
@@ -195,9 +251,6 @@ public:
|
||||
|
||||
UI::Event OnChoice;
|
||||
|
||||
protected:
|
||||
bool HasTitleBar() const override { return false; }
|
||||
|
||||
private:
|
||||
const ContextMenuItem *items_;
|
||||
size_t itemCount_;
|
||||
@@ -444,13 +497,12 @@ class ChoiceWithValueDisplay : public AbstractChoiceWithValueDisplay {
|
||||
public:
|
||||
ChoiceWithValueDisplay(int *value, std::string_view text, LayoutParams *layoutParams = 0)
|
||||
: AbstractChoiceWithValueDisplay(text, layoutParams), iValue_(value) {}
|
||||
|
||||
ChoiceWithValueDisplay(int *value, ImageID imageId, LayoutParams *layoutParams = 0)
|
||||
: AbstractChoiceWithValueDisplay("", imageId, layoutParams), iValue_(value) {}
|
||||
ChoiceWithValueDisplay(std::string *value, std::string_view text, I18NCat category, LayoutParams *layoutParams = 0)
|
||||
: AbstractChoiceWithValueDisplay(text, layoutParams), sValue_(value), category_(category) {}
|
||||
|
||||
ChoiceWithValueDisplay(std::string *value, std::string_view text, std::string(*translateCallback)(std::string_view value), LayoutParams *layoutParams = 0)
|
||||
: AbstractChoiceWithValueDisplay(text, layoutParams), sValue_(value), translateCallback_(translateCallback) {
|
||||
}
|
||||
: AbstractChoiceWithValueDisplay(text, layoutParams), sValue_(value), translateCallback_(translateCallback) {}
|
||||
|
||||
private:
|
||||
std::string ValueText() const override;
|
||||
|
||||
@@ -6,12 +6,10 @@
|
||||
#include "Common/System/Request.h"
|
||||
#include "Common/Input/InputState.h"
|
||||
#include "Common/Input/KeyCodes.h"
|
||||
#include "Common/Math/curves.h"
|
||||
#include "Common/UI/UIScreen.h"
|
||||
#include "Common/UI/Context.h"
|
||||
#include "Common/UI/Screen.h"
|
||||
#include "Common/UI/Root.h"
|
||||
#include "Common/Data/Text/I18n.h"
|
||||
#include "Common/Render/DrawBuffer.h"
|
||||
|
||||
static const bool ClickDebug = false;
|
||||
@@ -300,169 +298,3 @@ void UIScreen::OnOK(UI::EventParams &e) {
|
||||
void UIScreen::OnCancel(UI::EventParams &e) {
|
||||
TriggerFinish(DR_CANCEL);
|
||||
}
|
||||
|
||||
PopupScreen::PopupScreen(std::string_view title, std::string_view button1, std::string_view button2)
|
||||
: title_(title) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
if (!button1.empty())
|
||||
button1_ = di->T(button1);
|
||||
if (!button2.empty())
|
||||
button2_ = di->T(button2);
|
||||
alpha_ = 0.0f; // inherited
|
||||
}
|
||||
|
||||
void PopupScreen::touch(const TouchInput &touch) {
|
||||
if (!box_ || (touch.flags & TOUCH_DOWN) == 0) {
|
||||
// Handle down-presses here.
|
||||
UIDialogScreen::touch(touch);
|
||||
return;
|
||||
}
|
||||
|
||||
// Extra bounds to avoid closing the dialog while trying to aim for something
|
||||
// near the edge. Now that we only close on actual down-events, we can shrink
|
||||
// this border a bit.
|
||||
if (!box_->GetBounds().Expand(30.0f, 30.0f).Contains(touch.x, touch.y)) {
|
||||
TriggerFinish(DR_CANCEL);
|
||||
}
|
||||
|
||||
UIDialogScreen::touch(touch);
|
||||
}
|
||||
|
||||
bool PopupScreen::key(const KeyInput &key) {
|
||||
if (key.flags & KEY_DOWN) {
|
||||
if ((key.keyCode == NKCODE_ENTER || key.keyCode == NKCODE_NUMPAD_ENTER) && defaultButton_) {
|
||||
UI::EventParams e{};
|
||||
defaultButton_->OnClick.Trigger(e);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return UIDialogScreen::key(key);
|
||||
}
|
||||
|
||||
void PopupScreen::update() {
|
||||
UIDialogScreen::update();
|
||||
|
||||
if (defaultButton_)
|
||||
defaultButton_->SetEnabled(CanComplete(DR_OK));
|
||||
|
||||
float animatePos = 1.0f;
|
||||
|
||||
++frames_;
|
||||
if (finishFrame_ >= 0) {
|
||||
float leadOut = bezierEaseInOut((frames_ - finishFrame_) * (1.0f / (float)FRAMES_LEAD_OUT));
|
||||
animatePos = 1.0f - leadOut;
|
||||
|
||||
if (frames_ >= finishFrame_ + FRAMES_LEAD_OUT) {
|
||||
// Actual finish happens here.
|
||||
screenManager()->finishDialog(this, finishResult_);
|
||||
}
|
||||
} else if (frames_ < FRAMES_LEAD_IN) {
|
||||
float leadIn = bezierEaseInOut(frames_ * (1.0f / (float)FRAMES_LEAD_IN));
|
||||
animatePos = leadIn;
|
||||
}
|
||||
|
||||
if (animatePos < 1.0f) {
|
||||
alpha_ = animatePos;
|
||||
scale_.x = 0.9f + animatePos * 0.1f;
|
||||
scale_.y = 0.9f + animatePos * 0.1f;
|
||||
|
||||
if (hasPopupOrigin_) {
|
||||
float xoff = popupOrigin_.x - g_display.dp_xres / 2;
|
||||
float yoff = popupOrigin_.y - g_display.dp_yres / 2;
|
||||
|
||||
// Pull toward the origin a bit.
|
||||
translation_.x = xoff * (1.0f - animatePos) * 0.2f;
|
||||
translation_.y = yoff * (1.0f - animatePos) * 0.2f;
|
||||
} else {
|
||||
translation_.y = -g_display.dp_yres * (1.0f - animatePos) * 0.2f;
|
||||
}
|
||||
} else {
|
||||
alpha_ = 1.0f;
|
||||
scale_.x = 1.0f;
|
||||
scale_.y = 1.0f;
|
||||
translation_.x = 0.0f;
|
||||
translation_.y = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void PopupScreen::SetPopupOrigin(const UI::View *view) {
|
||||
hasPopupOrigin_ = true;
|
||||
popupOrigin_ = view->GetBounds().Center();
|
||||
}
|
||||
|
||||
void PopupScreen::TriggerFinish(DialogResult result) {
|
||||
if (CanComplete(result)) {
|
||||
ignoreInput_ = true;
|
||||
finishFrame_ = frames_;
|
||||
finishResult_ = result;
|
||||
|
||||
OnCompleted(result);
|
||||
}
|
||||
// Inform UI that popup close to hide OSK (if visible)
|
||||
System_NotifyUIEvent(UIEventNotification::POPUP_CLOSED);
|
||||
}
|
||||
|
||||
void PopupScreen::CreateViews() {
|
||||
using namespace UI;
|
||||
UIContext &dc = *screenManager()->getUIContext();
|
||||
|
||||
AnchorLayout *anchor = new AnchorLayout(new LayoutParams(FILL_PARENT, FILL_PARENT));
|
||||
anchor->Overflow(false);
|
||||
root_ = anchor;
|
||||
|
||||
float yres = screenManager()->getUIContext()->GetBounds().h;
|
||||
|
||||
AnchorLayoutParams *anchorParams;
|
||||
if (!alignTop_) {
|
||||
// Standard centering etc.
|
||||
anchorParams = new AnchorLayoutParams(PopupWidth(), FillVertical() ? yres - 30 : WRAP_CONTENT,
|
||||
dc.GetBounds().centerX(), dc.GetBounds().centerY() + offsetY_, NONE, NONE, true);
|
||||
} else {
|
||||
// Top-aligned, for dialogs where we need to pop a keyboard below.
|
||||
anchorParams = new AnchorLayoutParams(PopupWidth(), FillVertical() ? yres - 30 : WRAP_CONTENT,
|
||||
NONE, 0, NONE, NONE, false);
|
||||
}
|
||||
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, anchorParams);
|
||||
|
||||
root_->Add(box_);
|
||||
box_->SetBG(dc.GetTheme().popupStyle.background);
|
||||
box_->SetHasDropShadow(hasDropShadow_);
|
||||
// Since we scale a bit, make the dropshadow bleed past the edges.
|
||||
box_->SetDropShadowExpand(std::max(g_display.dp_xres, g_display.dp_yres));
|
||||
box_->SetSpacing(0.0f);
|
||||
|
||||
if (HasTitleBar()) {
|
||||
View *title = new PopupHeader(title_);
|
||||
box_->Add(title);
|
||||
}
|
||||
|
||||
CreatePopupContents(box_);
|
||||
root_->Recurse([](View *view) {
|
||||
view->SetPopupStyle(true);
|
||||
});
|
||||
|
||||
root_->SetDefaultFocusView(box_);
|
||||
if (ShowButtons() && !button1_.empty()) {
|
||||
// And the two buttons at the bottom.
|
||||
LinearLayout *buttonRow = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(200, WRAP_CONTENT));
|
||||
buttonRow->SetSpacing(0);
|
||||
Margins buttonMargins(5, 5);
|
||||
|
||||
// Adjust button order to the platform default.
|
||||
if (System_GetPropertyBool(SYSPROP_OK_BUTTON_LEFT)) {
|
||||
defaultButton_ = buttonRow->Add(new Button(button1_, new LinearLayoutParams(1.0f, buttonMargins)));
|
||||
defaultButton_->OnClick.Handle<UIScreen>(this, &UIScreen::OnOK);
|
||||
if (!button2_.empty())
|
||||
buttonRow->Add(new Button(button2_, new LinearLayoutParams(1.0f, buttonMargins)))->OnClick.Handle<UIScreen>(this, &UIScreen::OnCancel);
|
||||
} else {
|
||||
if (!button2_.empty())
|
||||
buttonRow->Add(new Button(button2_, new LinearLayoutParams(1.0f)))->OnClick.Handle<UIScreen>(this, &UIScreen::OnCancel);
|
||||
defaultButton_ = buttonRow->Add(new Button(button1_, new LinearLayoutParams(1.0f)));
|
||||
defaultButton_->OnClick.Handle<UIScreen>(this, &UIScreen::OnOK);
|
||||
}
|
||||
|
||||
box_->Add(buttonRow);
|
||||
}
|
||||
}
|
||||
@@ -97,59 +97,3 @@ public:
|
||||
private:
|
||||
bool finished_;
|
||||
};
|
||||
|
||||
class PopupScreen : public UIDialogScreen {
|
||||
public:
|
||||
PopupScreen(std::string_view title, std::string_view button1 = "", std::string_view button2 = "");
|
||||
|
||||
virtual void CreatePopupContents(UI::ViewGroup *parent) = 0;
|
||||
void CreateViews() override;
|
||||
bool isTransparent() const override { return true; }
|
||||
void touch(const TouchInput &touch) override;
|
||||
bool key(const KeyInput &key) override;
|
||||
|
||||
void TriggerFinish(DialogResult result) override;
|
||||
|
||||
void SetPopupOrigin(const UI::View *view);
|
||||
void SetPopupOffset(float y) { offsetY_ = y; }
|
||||
|
||||
void SetAlignTop(bool alignTop) { alignTop_ = alignTop; }
|
||||
|
||||
void SetHasDropShadow(bool has) { hasDropShadow_ = has; }
|
||||
|
||||
// For the postproc param sliders on DisplayLayoutScreen
|
||||
bool wantBrightBackground() const override { return !hasDropShadow_; }
|
||||
|
||||
protected:
|
||||
virtual bool FillVertical() const { return false; }
|
||||
virtual UI::Size PopupWidth() const { return 550; }
|
||||
virtual bool ShowButtons() const { return true; }
|
||||
virtual bool CanComplete(DialogResult result) { return true; }
|
||||
virtual void OnCompleted(DialogResult result) {}
|
||||
virtual bool HasTitleBar() const { return true; }
|
||||
const std::string &Title() { return title_; }
|
||||
|
||||
void update() override;
|
||||
|
||||
private:
|
||||
UI::LinearLayout *box_ = nullptr;
|
||||
UI::Button *defaultButton_ = nullptr;
|
||||
std::string title_;
|
||||
std::string button1_;
|
||||
std::string button2_;
|
||||
|
||||
enum {
|
||||
FRAMES_LEAD_IN = 6,
|
||||
FRAMES_LEAD_OUT = 4,
|
||||
};
|
||||
|
||||
int frames_ = 0;
|
||||
int finishFrame_ = -1;
|
||||
DialogResult finishResult_ = DR_CANCEL;
|
||||
bool hasPopupOrigin_ = false;
|
||||
Point2D popupOrigin_;
|
||||
float offsetY_ = 0.0f;
|
||||
bool alignTop_ = false;
|
||||
|
||||
bool hasDropShadow_ = true;
|
||||
};
|
||||
+8
-8
@@ -468,15 +468,14 @@ void Choice::ClickInternal() {
|
||||
void Choice::GetContentDimensionsBySpec(const UIContext &dc, MeasureSpec horiz, MeasureSpec vert, float &w, float &h) const {
|
||||
float totalW = 0.0f;
|
||||
float totalH = 0.0f;
|
||||
int paddingLeft = 12;
|
||||
int paddingRight = 12;
|
||||
|
||||
if (!text_.empty() && !hideTitle_) {
|
||||
int paddingLeft = 12;
|
||||
int paddingRight = 12;
|
||||
if (rightIconImage_.isValid()) {
|
||||
paddingRight = ITEM_HEIGHT;
|
||||
}
|
||||
|
||||
float availWidth = horiz.size - paddingLeft - paddingRight - textPadding_.horiz();
|
||||
float availWidth = horiz.size - paddingLeft - paddingRight - textPadding_.horiz() - totalW;
|
||||
if (availWidth < 0.0f) {
|
||||
// Let it have as much space as it needs.
|
||||
availWidth = MAX_ITEM_SIZE;
|
||||
@@ -488,19 +487,20 @@ void Choice::GetContentDimensionsBySpec(const UIContext &dc, MeasureSpec horiz,
|
||||
float textW = 0.0f, textH = 0.0f;
|
||||
dc.MeasureTextRect(dc.GetTheme().uiFont, scale, scale, text_, availBounds, &textW, &textH, FLAG_WRAP_TEXT);
|
||||
totalH = std::max(totalH, textH);
|
||||
totalW += textW;
|
||||
if (image_.isValid()) {
|
||||
paddingLeft = ITEM_HEIGHT;
|
||||
totalW += 12;
|
||||
totalW += totalH;
|
||||
}
|
||||
totalW = paddingLeft + textW + paddingRight + textPadding_.horiz();
|
||||
} else {
|
||||
if (image_.isValid()) {
|
||||
dc.Draw()->GetAtlas()->measureImage(image_, &w, &h);
|
||||
totalW = w * imgScale_ + paddingLeft + paddingRight;
|
||||
totalW = w * imgScale_ + 6;
|
||||
totalH = h * imgScale_;
|
||||
}
|
||||
}
|
||||
|
||||
w = totalW;
|
||||
w = totalW + (text_.empty() ? 16 : 24);
|
||||
h = totalH + 16;
|
||||
h = std::max(h, ITEM_HEIGHT);
|
||||
}
|
||||
|
||||
@@ -819,6 +819,9 @@ public:
|
||||
AbstractChoiceWithValueDisplay(std::string_view text, LayoutParams *layoutParams = nullptr)
|
||||
: Choice(text, layoutParams) {
|
||||
}
|
||||
AbstractChoiceWithValueDisplay(std::string_view text, ImageID image, LayoutParams *layoutParams = nullptr)
|
||||
: Choice(text, image, layoutParams) {
|
||||
}
|
||||
|
||||
void Draw(UIContext &dc) override;
|
||||
void GetContentDimensionsBySpec(const UIContext &dc, MeasureSpec horiz, MeasureSpec vert, float &w, float &h) const override;
|
||||
|
||||
@@ -805,10 +805,12 @@ void AnchorLayout::MeasureViews(const UIContext &dc, MeasureSpec horiz, MeasureS
|
||||
width = params->width;
|
||||
height = params->height;
|
||||
|
||||
if (!params->center) {
|
||||
if (!(params->centering & Centering::Horizontal)) {
|
||||
if (params->left > NONE && params->right > NONE) {
|
||||
width = measuredWidth_ - params->left - params->right;
|
||||
}
|
||||
}
|
||||
if (!(params->centering & Centering::Vertical)) {
|
||||
if (params->top > NONE && params->bottom > NONE) {
|
||||
height = measuredHeight_ - params->top - params->bottom;
|
||||
}
|
||||
@@ -839,22 +841,22 @@ static void ApplyAnchorLayoutParams(float measuredWidth, float measuredHeight, c
|
||||
if (vBounds->h > container.h) vBounds->h = container.h;
|
||||
|
||||
float left = 0, top = 0, right = 0, bottom = 0;
|
||||
bool center = false;
|
||||
Centering centering = Centering::None;
|
||||
if (params) {
|
||||
left = params->left;
|
||||
top = params->top;
|
||||
right = params->right;
|
||||
bottom = params->bottom;
|
||||
center = params->center;
|
||||
centering = params->centering;
|
||||
}
|
||||
|
||||
if (left > NONE) {
|
||||
vBounds->x = container.x + left;
|
||||
if (center)
|
||||
if (centering & Centering::Horizontal)
|
||||
vBounds->x -= vBounds->w * 0.5f;
|
||||
} else if (right > NONE) {
|
||||
vBounds->x = container.x2() - right - vBounds->w;
|
||||
if (center) {
|
||||
if (centering & Centering::Horizontal) {
|
||||
vBounds->x += vBounds->w * 0.5f;
|
||||
}
|
||||
} else {
|
||||
@@ -864,11 +866,11 @@ static void ApplyAnchorLayoutParams(float measuredWidth, float measuredHeight, c
|
||||
|
||||
if (top > NONE) {
|
||||
vBounds->y = container.y + top;
|
||||
if (center)
|
||||
if (centering & Centering::Vertical)
|
||||
vBounds->y -= vBounds->h * 0.5f;
|
||||
} else if (bottom > NONE) {
|
||||
vBounds->y = container.y2() - bottom - vBounds->h;
|
||||
if (center)
|
||||
if (centering & Centering::Vertical)
|
||||
vBounds->y += vBounds->h * 0.5f;
|
||||
} else {
|
||||
// Both top and bottom are NONE. Center.
|
||||
|
||||
+15
-7
@@ -109,22 +109,30 @@ public:
|
||||
|
||||
const float NONE = -FLT_MAX;
|
||||
|
||||
enum class Centering {
|
||||
None = 0,
|
||||
Vertical = 1,
|
||||
Horizontal = 2,
|
||||
Both = 3, // 1 | 2
|
||||
};
|
||||
ENUM_CLASS_BITOPS(Centering);
|
||||
|
||||
class AnchorLayoutParams : public LayoutParams {
|
||||
public:
|
||||
AnchorLayoutParams(Size w, Size h, float l, float t, float r, float b, bool c = false)
|
||||
: LayoutParams(w, h, LP_ANCHOR), left(l), top(t), right(r), bottom(b), center(c) {}
|
||||
AnchorLayoutParams(Size w, Size h, float l, float t, float r, float b, Centering c = Centering::None)
|
||||
: LayoutParams(w, h, LP_ANCHOR), left(l), top(t), right(r), bottom(b), centering(c) {}
|
||||
// There's a small hack here to make this behave more intuitively - AnchorLayout ordinarily ignores FILL_PARENT.
|
||||
AnchorLayoutParams(Size w, Size h, bool c = false)
|
||||
: LayoutParams(w, h, LP_ANCHOR), left(0), top(0), right(w == FILL_PARENT ? 0 : NONE), bottom(h == FILL_PARENT ? 0 : NONE), center(c) {
|
||||
AnchorLayoutParams(Size w, Size h, Centering c = Centering::None)
|
||||
: LayoutParams(w, h, LP_ANCHOR), left(0), top(0), right(w == FILL_PARENT ? 0 : NONE), bottom(h == FILL_PARENT ? 0 : NONE), centering(c) {
|
||||
}
|
||||
AnchorLayoutParams(float l, float t, float r, float b, bool c = false)
|
||||
: LayoutParams(WRAP_CONTENT, WRAP_CONTENT, LP_ANCHOR), left(l), top(t), right(r), bottom(b), center(c) {}
|
||||
AnchorLayoutParams(float l, float t, float r, float b, Centering c = Centering::None)
|
||||
: LayoutParams(WRAP_CONTENT, WRAP_CONTENT, LP_ANCHOR), left(l), top(t), right(r), bottom(b), centering(c) {}
|
||||
|
||||
// These are not bounds, but distances from the container edges.
|
||||
// Set to NONE to not attach this edge to the container.
|
||||
// If two opposite edges are NONE, centering will happen.
|
||||
float left, top, right, bottom;
|
||||
bool center; // If set, only two "sides" can be set, and they refer to the center, not the edge, of the view being layouted.
|
||||
Centering centering; // If set, only two "sides" can be set, and they refer to the center, not the edge, of the view being layouted.
|
||||
|
||||
static LayoutParamsType StaticType() {
|
||||
return LP_ANCHOR;
|
||||
|
||||
Generated
+85
-105
@@ -108,9 +108,9 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.2.43"
|
||||
version = "1.2.45"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "739eb0f94557554b3ca9a86d2d37bebd49c5e6d0c1d2bda35ba5bdac830befc2"
|
||||
checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe"
|
||||
dependencies = [
|
||||
"find-msvc-tools",
|
||||
"shlex",
|
||||
@@ -124,9 +124,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.5.50"
|
||||
version = "4.5.51"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623"
|
||||
checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5"
|
||||
dependencies = [
|
||||
"clap_builder",
|
||||
"clap_derive",
|
||||
@@ -134,9 +134,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.5.50"
|
||||
version = "4.5.51"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0"
|
||||
checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
@@ -153,7 +153,7 @@ dependencies = [
|
||||
"heck",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.108",
|
||||
"syn 2.0.110",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -228,7 +228,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.108",
|
||||
"syn 2.0.110",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -556,9 +556,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "icu_collections"
|
||||
version = "2.0.0"
|
||||
version = "2.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
|
||||
checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
|
||||
dependencies = [
|
||||
"displaydoc",
|
||||
"potential_utf",
|
||||
@@ -569,9 +569,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "icu_locale_core"
|
||||
version = "2.0.0"
|
||||
version = "2.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
|
||||
checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
|
||||
dependencies = [
|
||||
"displaydoc",
|
||||
"litemap",
|
||||
@@ -582,11 +582,10 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "icu_normalizer"
|
||||
version = "2.0.0"
|
||||
version = "2.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
|
||||
checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
|
||||
dependencies = [
|
||||
"displaydoc",
|
||||
"icu_collections",
|
||||
"icu_normalizer_data",
|
||||
"icu_properties",
|
||||
@@ -597,42 +596,38 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "icu_normalizer_data"
|
||||
version = "2.0.0"
|
||||
version = "2.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
|
||||
checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
|
||||
|
||||
[[package]]
|
||||
name = "icu_properties"
|
||||
version = "2.0.1"
|
||||
version = "2.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
|
||||
checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99"
|
||||
dependencies = [
|
||||
"displaydoc",
|
||||
"icu_collections",
|
||||
"icu_locale_core",
|
||||
"icu_properties_data",
|
||||
"icu_provider",
|
||||
"potential_utf",
|
||||
"zerotrie",
|
||||
"zerovec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "icu_properties_data"
|
||||
version = "2.0.1"
|
||||
version = "2.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
|
||||
checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899"
|
||||
|
||||
[[package]]
|
||||
name = "icu_provider"
|
||||
version = "2.0.0"
|
||||
version = "2.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
|
||||
checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
|
||||
dependencies = [
|
||||
"displaydoc",
|
||||
"icu_locale_core",
|
||||
"stable_deref_trait",
|
||||
"tinystr",
|
||||
"writeable",
|
||||
"yoke",
|
||||
"zerofrom",
|
||||
@@ -679,9 +674,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
|
||||
|
||||
[[package]]
|
||||
name = "iri-string"
|
||||
version = "0.7.8"
|
||||
version = "0.7.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
|
||||
checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
"serde",
|
||||
@@ -701,9 +696,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
||||
|
||||
[[package]]
|
||||
name = "js-sys"
|
||||
version = "0.3.81"
|
||||
version = "0.3.82"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305"
|
||||
checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"wasm-bindgen",
|
||||
@@ -735,9 +730,9 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
|
||||
|
||||
[[package]]
|
||||
name = "litemap"
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
|
||||
checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
@@ -874,9 +869,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
|
||||
|
||||
[[package]]
|
||||
name = "openssl"
|
||||
version = "0.10.74"
|
||||
version = "0.10.75"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654"
|
||||
checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328"
|
||||
dependencies = [
|
||||
"bitflags 2.10.0",
|
||||
"cfg-if",
|
||||
@@ -895,7 +890,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.108",
|
||||
"syn 2.0.110",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -906,9 +901,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
|
||||
|
||||
[[package]]
|
||||
name = "openssl-sys"
|
||||
version = "0.9.110"
|
||||
version = "0.9.111"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2"
|
||||
checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
@@ -962,9 +957,9 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
|
||||
|
||||
[[package]]
|
||||
name = "potential_utf"
|
||||
version = "0.1.3"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a"
|
||||
checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
|
||||
dependencies = [
|
||||
"zerovec",
|
||||
]
|
||||
@@ -980,9 +975,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.41"
|
||||
version = "1.0.42"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
|
||||
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
@@ -1064,9 +1059,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rustls"
|
||||
version = "0.23.34"
|
||||
version = "0.23.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7"
|
||||
checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"rustls-pki-types",
|
||||
@@ -1077,18 +1072,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rustls-pki-types"
|
||||
version = "1.12.0"
|
||||
version = "1.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79"
|
||||
checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a"
|
||||
dependencies = [
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls-webpki"
|
||||
version = "0.103.7"
|
||||
version = "0.103.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf"
|
||||
checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52"
|
||||
dependencies = [
|
||||
"ring",
|
||||
"rustls-pki-types",
|
||||
@@ -1166,7 +1161,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.108",
|
||||
"syn 2.0.110",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1259,9 +1254,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.108"
|
||||
version = "2.0.110"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917"
|
||||
checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -1285,7 +1280,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.108",
|
||||
"syn 2.0.110",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1339,14 +1334,14 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.108",
|
||||
"syn 2.0.110",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tinystr"
|
||||
version = "0.8.1"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
|
||||
checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
|
||||
dependencies = [
|
||||
"displaydoc",
|
||||
"zerovec",
|
||||
@@ -1388,9 +1383,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "tokio-util"
|
||||
version = "0.7.16"
|
||||
version = "0.7.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5"
|
||||
checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"futures-core",
|
||||
@@ -1483,9 +1478,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.20"
|
||||
version = "1.0.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06"
|
||||
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
|
||||
|
||||
[[package]]
|
||||
name = "untrusted"
|
||||
@@ -1549,9 +1544,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen"
|
||||
version = "0.2.104"
|
||||
version = "0.2.105"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d"
|
||||
checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"once_cell",
|
||||
@@ -1560,25 +1555,11 @@ dependencies = [
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-backend"
|
||||
version = "0.2.104"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19"
|
||||
dependencies = [
|
||||
"bumpalo",
|
||||
"log",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.108",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-futures"
|
||||
version = "0.4.54"
|
||||
version = "0.4.55"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c"
|
||||
checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"js-sys",
|
||||
@@ -1589,9 +1570,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro"
|
||||
version = "0.2.104"
|
||||
version = "0.2.105"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119"
|
||||
checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"wasm-bindgen-macro-support",
|
||||
@@ -1599,22 +1580,22 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro-support"
|
||||
version = "0.2.104"
|
||||
version = "0.2.105"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7"
|
||||
checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc"
|
||||
dependencies = [
|
||||
"bumpalo",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.108",
|
||||
"wasm-bindgen-backend",
|
||||
"syn 2.0.110",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-shared"
|
||||
version = "0.2.104"
|
||||
version = "0.2.105"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1"
|
||||
checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
@@ -1680,9 +1661,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "web-sys"
|
||||
version = "0.3.81"
|
||||
version = "0.3.82"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120"
|
||||
checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1"
|
||||
dependencies = [
|
||||
"js-sys",
|
||||
"wasm-bindgen",
|
||||
@@ -1942,9 +1923,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "writeable"
|
||||
version = "0.6.1"
|
||||
version = "0.6.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
|
||||
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
|
||||
|
||||
[[package]]
|
||||
name = "x11-clipboard"
|
||||
@@ -1979,17 +1960,16 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "xml-rs"
|
||||
version = "0.8.27"
|
||||
version = "0.8.28"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7"
|
||||
checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f"
|
||||
|
||||
[[package]]
|
||||
name = "yoke"
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
|
||||
checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"stable_deref_trait",
|
||||
"yoke-derive",
|
||||
"zerofrom",
|
||||
@@ -1997,13 +1977,13 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "yoke-derive"
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
|
||||
checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.108",
|
||||
"syn 2.0.110",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
@@ -2024,7 +2004,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.108",
|
||||
"syn 2.0.110",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
@@ -2036,9 +2016,9 @@ checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
|
||||
|
||||
[[package]]
|
||||
name = "zerotrie"
|
||||
version = "0.2.2"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
|
||||
checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
|
||||
dependencies = [
|
||||
"displaydoc",
|
||||
"yoke",
|
||||
@@ -2047,9 +2027,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "zerovec"
|
||||
version = "0.11.4"
|
||||
version = "0.11.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
|
||||
checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
|
||||
dependencies = [
|
||||
"yoke",
|
||||
"zerofrom",
|
||||
@@ -2058,11 +2038,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "zerovec-derive"
|
||||
version = "0.11.1"
|
||||
version = "0.11.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
|
||||
checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.108",
|
||||
"syn 2.0.110",
|
||||
]
|
||||
@@ -90,6 +90,10 @@ enum Command {
|
||||
language: String,
|
||||
section: Option<String>,
|
||||
},
|
||||
RemoveLinebreaks {
|
||||
section: String,
|
||||
key: String,
|
||||
},
|
||||
}
|
||||
|
||||
fn copy_missing_lines(
|
||||
@@ -216,6 +220,14 @@ fn remove_key(target_ini: &mut IniFile, section: &str, key: &str) -> io::Result<
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn remove_linebreaks(target_ini: &mut IniFile, section: &str, key: &str) -> io::Result<()> {
|
||||
if let Some(old_section) = target_ini.get_section_mut(section) {
|
||||
old_section.remove_linebreaks(key);
|
||||
} else {
|
||||
println!("No section {section}");
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
fn add_new_key(target_ini: &mut IniFile, section: &str, key: &str, value: &str) -> io::Result<()> {
|
||||
if let Some(section) = target_ini.get_section_mut(section) {
|
||||
section.insert_line_if_missing(&format!("{key} = {value}"));
|
||||
@@ -796,6 +808,12 @@ fn execute_command(cmd: Command, ai: Option<&ChatGPT>, dry_run: bool, verbose: b
|
||||
} => {
|
||||
remove_key(&mut target_ini, section, key).unwrap();
|
||||
}
|
||||
Command::RemoveLinebreaks {
|
||||
ref section,
|
||||
ref key,
|
||||
} => {
|
||||
remove_linebreaks(&mut target_ini, section, key).unwrap();
|
||||
}
|
||||
Command::ImportSingle {
|
||||
filename: _,
|
||||
ref section,
|
||||
@@ -906,6 +924,12 @@ fn execute_command(cmd: Command, ai: Option<&ChatGPT>, dry_run: bool, verbose: b
|
||||
} => {
|
||||
remove_key(&mut reference_ini, section, key).unwrap();
|
||||
}
|
||||
Command::RemoveLinebreaks {
|
||||
ref section,
|
||||
ref key,
|
||||
} => {
|
||||
remove_linebreaks(&mut reference_ini, section, key).unwrap();
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,21 @@ impl Section {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn remove_linebreaks(&mut self, key: &str) {
|
||||
for line in self.lines.iter_mut() {
|
||||
let prefix = if let Some(pos) = line.find(" =") {
|
||||
&line[0..pos]
|
||||
} else {
|
||||
continue;
|
||||
};
|
||||
if !prefix.trim().eq(key) {
|
||||
continue;
|
||||
}
|
||||
// Escaped linebreaks.
|
||||
*line = line.replace("\\n", " ");
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_line(&self, key: &str) -> Option<String> {
|
||||
for line in self.lines.iter() {
|
||||
let prefix = if let Some(pos) = line.find(" =") {
|
||||
|
||||
+6
-6
@@ -59,22 +59,22 @@ void ChatMenu::CreateSubviews(const Bounds &screenBounds) {
|
||||
switch (g_Config.iChatScreenPosition) {
|
||||
// the chat screen size is still static 280x240 need a dynamic size based on device resolution
|
||||
case 0:
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, new AnchorLayoutParams(width, WRAP_CONTENT, 280, NONE, NONE, 240, true));
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, new AnchorLayoutParams(width, WRAP_CONTENT, 280, NONE, NONE, 240, Centering::Both));
|
||||
break;
|
||||
case 1:
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, new AnchorLayoutParams(width, WRAP_CONTENT, screenBounds.centerX(), NONE, NONE, 240, true));
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, new AnchorLayoutParams(width, WRAP_CONTENT, screenBounds.centerX(), NONE, NONE, 240, Centering::Both));
|
||||
break;
|
||||
case 2:
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, new AnchorLayoutParams(width, WRAP_CONTENT, NONE, NONE, 280, 240, true));
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, new AnchorLayoutParams(width, WRAP_CONTENT, NONE, NONE, 280, 240, Centering::Both));
|
||||
break;
|
||||
case 3:
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, new AnchorLayoutParams(width, WRAP_CONTENT, 280, 240, NONE, NONE, true));
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, new AnchorLayoutParams(width, WRAP_CONTENT, 280, 240, NONE, NONE, Centering::Both));
|
||||
break;
|
||||
case 4:
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, new AnchorLayoutParams(width, WRAP_CONTENT, screenBounds.centerX(), 240, NONE, NONE, true));
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, new AnchorLayoutParams(width, WRAP_CONTENT, screenBounds.centerX(), 240, NONE, NONE, Centering::Both));
|
||||
break;
|
||||
case 5:
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, new AnchorLayoutParams(width, WRAP_CONTENT, NONE, 240, 280, NONE, true));
|
||||
box_ = new LinearLayout(ORIENT_VERTICAL, new AnchorLayoutParams(width, WRAP_CONTENT, NONE, 240, 280, NONE, Centering::Both));
|
||||
break;
|
||||
default:
|
||||
box_ = nullptr;
|
||||
|
||||
@@ -900,7 +900,7 @@ void VisualMappingScreen::CreateViews() {
|
||||
bounds.w -= leftColumnWidth + 10.0f;
|
||||
|
||||
AnchorLayout *rightColumn = new AnchorLayout(new LinearLayoutParams(bounds.w, FILL_PARENT, 1.0f));
|
||||
psp_ = rightColumn->Add(new MockPSP(new AnchorLayoutParams(bounds.centerX(), bounds.centerY(), NONE, NONE, true)));
|
||||
psp_ = rightColumn->Add(new MockPSP(new AnchorLayoutParams(bounds.centerX(), bounds.centerY(), NONE, NONE, Centering::Both)));
|
||||
psp_->ButtonClick.Handle(this, &VisualMappingScreen::OnMapButton);
|
||||
|
||||
root_->Add(leftColumn);
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
|
||||
#include "Common/UI/View.h"
|
||||
#include "Common/UI/UIScreen.h"
|
||||
#include "Common/UI/PopupScreens.h"
|
||||
#include "Common/Data/Text/I18n.h"
|
||||
|
||||
#include "Core/ControlMapper.h"
|
||||
@@ -64,7 +65,7 @@ private:
|
||||
bool categoryToggles_[10]{};
|
||||
};
|
||||
|
||||
class KeyMappingNewKeyDialog : public PopupScreen {
|
||||
class KeyMappingNewKeyDialog : public UI::PopupScreen {
|
||||
public:
|
||||
explicit KeyMappingNewKeyDialog(int btn, bool replace, std::function<void(KeyMap::MultiInputMapping)> callback, I18NCat i18n)
|
||||
: PopupScreen(T(i18n, "Map Key"), "Cancel", ""), pspBtn_(btn), callback_(callback) {}
|
||||
@@ -97,7 +98,7 @@ private:
|
||||
double delayUntil_ = 0.0f;
|
||||
};
|
||||
|
||||
class KeyMappingNewMouseKeyDialog : public PopupScreen {
|
||||
class KeyMappingNewMouseKeyDialog : public UI::PopupScreen {
|
||||
public:
|
||||
KeyMappingNewMouseKeyDialog(int btn, bool replace, std::function<void(KeyMap::MultiInputMapping)> callback, I18NCat i18n)
|
||||
: PopupScreen(T(i18n, "Map Mouse"), "", ""), callback_(callback) {}
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "Common/UI/View.h"
|
||||
#include "Common/UI/ViewGroup.h"
|
||||
#include "Common/UI/ScrollView.h"
|
||||
#include "Common/UI/PopupScreens.h"
|
||||
|
||||
#include "Common/Data/Text/I18n.h"
|
||||
#include "Common/Data/Color/RGBAUtil.h"
|
||||
@@ -32,7 +33,7 @@
|
||||
|
||||
#include "UI/CustomButtonMappingScreen.h"
|
||||
|
||||
class ButtonShapeScreen : public PopupScreen {
|
||||
class ButtonShapeScreen : public UI::PopupScreen {
|
||||
public:
|
||||
ButtonShapeScreen(std::string_view title, int *setting) : PopupScreen(title), setting_(setting) {}
|
||||
|
||||
@@ -61,7 +62,7 @@ private:
|
||||
int *setting_;
|
||||
};
|
||||
|
||||
class ButtonIconScreen : public PopupScreen {
|
||||
class ButtonIconScreen : public UI::PopupScreen {
|
||||
public:
|
||||
ButtonIconScreen(std::string_view title, int *setting) : PopupScreen(title), setting_(setting) {}
|
||||
|
||||
@@ -93,7 +94,7 @@ private:
|
||||
class ButtonPreview : public UI::View {
|
||||
public:
|
||||
ButtonPreview(ImageID bgImg, ImageID img, float rotationIcon, bool flipShape, float rotationShape, int x, int y)
|
||||
: View(new UI::AnchorLayoutParams(x, y, UI::NONE, UI::NONE, true)), bgImg_(bgImg), img_(img), rotI_(rotationIcon),
|
||||
: View(new UI::AnchorLayoutParams(x, y, UI::NONE, UI::NONE, UI::Centering::Both)), bgImg_(bgImg), img_(img), rotI_(rotationIcon),
|
||||
flipS_(flipShape), rotS_(rotationShape), x_(x), y_(y) {}
|
||||
|
||||
void Draw(UIContext &dc) override {
|
||||
|
||||
+2
-2
@@ -29,7 +29,7 @@
|
||||
#include "UI/PopupScreens.h"
|
||||
#include "GPU/Common/ShaderCommon.h"
|
||||
|
||||
class DevMenuScreen : public PopupScreen {
|
||||
class DevMenuScreen : public UI::PopupScreen {
|
||||
public:
|
||||
DevMenuScreen(const Path &gamePath, I18NCat cat) : PopupScreen(T(cat, "Dev Tools")), gamePath_(gamePath) {}
|
||||
|
||||
@@ -100,7 +100,7 @@ private:
|
||||
void OnCompleted(DialogResult result) override;
|
||||
};
|
||||
|
||||
class GPIGPOScreen : public PopupScreen {
|
||||
class GPIGPOScreen : public UI::PopupScreen {
|
||||
public:
|
||||
GPIGPOScreen(std::string_view title) : PopupScreen(title, "OK") {}
|
||||
const char *tag() const override { return "GPIGPO"; }
|
||||
|
||||
@@ -218,7 +218,7 @@ void DisplayLayoutScreen::CreateViews() {
|
||||
|
||||
LinearLayout *leftColumn;
|
||||
if (!portrait) {
|
||||
ScrollView *leftScrollView = new ScrollView(ORIENT_VERTICAL, new AnchorLayoutParams(420.0f, FILL_PARENT, 0.f, 0.f, NONE, 0.f, false));
|
||||
ScrollView *leftScrollView = new ScrollView(ORIENT_VERTICAL, new AnchorLayoutParams(420.0f, FILL_PARENT, 0.f, 0.f, NONE, 0.f));
|
||||
leftColumn = new LinearLayout(ORIENT_VERTICAL);
|
||||
leftColumn->padding.SetAll(8.0f);
|
||||
leftScrollView->Add(leftColumn);
|
||||
@@ -226,7 +226,7 @@ void DisplayLayoutScreen::CreateViews() {
|
||||
root_->Add(leftScrollView);
|
||||
}
|
||||
|
||||
ScrollView *rightScrollView = new ScrollView(ORIENT_VERTICAL, new AnchorLayoutParams(300.0f, FILL_PARENT, NONE, 0.f, 0.f, 0.f, false));
|
||||
ScrollView *rightScrollView = new ScrollView(ORIENT_VERTICAL, new AnchorLayoutParams(300.0f, FILL_PARENT, NONE, 0.f, 0.f, 0.f));
|
||||
LinearLayout *rightColumn = new LinearLayout(ORIENT_VERTICAL);
|
||||
rightColumn->padding.SetAll(8.0f);
|
||||
rightScrollView->Add(rightColumn);
|
||||
@@ -239,7 +239,7 @@ void DisplayLayoutScreen::CreateViews() {
|
||||
rightColumn->Add(bottomControls);
|
||||
leftColumn = rightColumn;
|
||||
} else {
|
||||
bottomControls = new LinearLayout(ORIENT_HORIZONTAL, new AnchorLayoutParams(NONE, NONE, NONE, 10.0f, false));
|
||||
bottomControls = new LinearLayout(ORIENT_HORIZONTAL, new AnchorLayoutParams(NONE, NONE, NONE, 10.0f));
|
||||
root_->Add(bottomControls);
|
||||
}
|
||||
|
||||
|
||||
+15
-14
@@ -1002,9 +1002,10 @@ void EmuScreen::ProcessVKey(VirtKey virtKey) {
|
||||
std::string confirmExitMessage = GetConfirmExitMessage();
|
||||
if (!confirmExitMessage.empty()) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
auto mm = GetI18NCategory(I18NCat::MAINMENU);
|
||||
confirmExitMessage += '\n';
|
||||
confirmExitMessage += di->T("Are you sure you want to exit?");
|
||||
screenManager()->push(new PromptScreen(gamePath_, confirmExitMessage, di->T("Yes"), di->T("No"), [=](bool result) {
|
||||
screenManager()->push(new UI::MessagePopupScreen(mm->T("Exit"), confirmExitMessage, di->T("Yes"), di->T("No"), [=](bool result) {
|
||||
if (result) {
|
||||
System_ExitApp();
|
||||
}
|
||||
@@ -1226,15 +1227,15 @@ protected:
|
||||
static UI::AnchorLayoutParams *AnchorInCorner(const Bounds &bounds, int corner, float xOffset, float yOffset) {
|
||||
using namespace UI;
|
||||
switch ((ScreenEdgePosition)g_Config.iChatButtonPosition) {
|
||||
case ScreenEdgePosition::BOTTOM_LEFT: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, xOffset, NONE, NONE, yOffset, true);
|
||||
case ScreenEdgePosition::BOTTOM_CENTER: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, bounds.centerX(), NONE, NONE, yOffset, true);
|
||||
case ScreenEdgePosition::BOTTOM_RIGHT: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, NONE, NONE, xOffset, yOffset, true);
|
||||
case ScreenEdgePosition::TOP_LEFT: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, xOffset, yOffset, NONE, NONE, true);
|
||||
case ScreenEdgePosition::TOP_CENTER: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, bounds.centerX(), yOffset, NONE, NONE, true);
|
||||
case ScreenEdgePosition::TOP_RIGHT: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, NONE, yOffset, xOffset, NONE, true);
|
||||
case ScreenEdgePosition::CENTER_LEFT: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, xOffset, bounds.centerY(), NONE, NONE, true);
|
||||
case ScreenEdgePosition::CENTER_RIGHT: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, NONE, bounds.centerY(), xOffset, NONE, true);
|
||||
default: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, xOffset, NONE, NONE, yOffset, true);
|
||||
case ScreenEdgePosition::BOTTOM_LEFT: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, xOffset, NONE, NONE, yOffset, Centering::Both);
|
||||
case ScreenEdgePosition::BOTTOM_CENTER: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, bounds.centerX(), NONE, NONE, yOffset, Centering::Both);
|
||||
case ScreenEdgePosition::BOTTOM_RIGHT: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, NONE, NONE, xOffset, yOffset, Centering::Both);
|
||||
case ScreenEdgePosition::TOP_LEFT: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, xOffset, yOffset, NONE, NONE, Centering::Both);
|
||||
case ScreenEdgePosition::TOP_CENTER: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, bounds.centerX(), yOffset, NONE, NONE, Centering::Both);
|
||||
case ScreenEdgePosition::TOP_RIGHT: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, NONE, yOffset, xOffset, NONE, Centering::Both);
|
||||
case ScreenEdgePosition::CENTER_LEFT: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, xOffset, bounds.centerY(), NONE, NONE, Centering::Both);
|
||||
case ScreenEdgePosition::CENTER_RIGHT: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, NONE, bounds.centerY(), xOffset, NONE, Centering::Both);
|
||||
default: return new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, xOffset, NONE, NONE, yOffset, Centering::Both);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1260,7 +1261,7 @@ void EmuScreen::CreateViews() {
|
||||
root_->Add(new Button(dev->T("DevMenu")))->OnClick.Handle(this, &EmuScreen::OnDevTools);
|
||||
}
|
||||
|
||||
LinearLayout *buttons = new LinearLayout(Orientation::ORIENT_HORIZONTAL, new AnchorLayoutParams(bounds.centerX(), NONE, NONE, 60, true));
|
||||
LinearLayout *buttons = new LinearLayout(Orientation::ORIENT_HORIZONTAL, new AnchorLayoutParams(bounds.centerX(), NONE, NONE, 60, Centering::Both));
|
||||
buttons->SetSpacing(20.0f);
|
||||
root_->Add(buttons);
|
||||
|
||||
@@ -1288,7 +1289,7 @@ void EmuScreen::CreateViews() {
|
||||
});
|
||||
backButton_->SetVisibility(V_GONE);
|
||||
|
||||
cardboardDisableButton_ = root_->Add(new Button(sc->T("Cardboard VR OFF"), new AnchorLayoutParams(bounds.centerX(), NONE, NONE, 30, true)));
|
||||
cardboardDisableButton_ = root_->Add(new Button(sc->T("Cardboard VR OFF"), new AnchorLayoutParams(bounds.centerX(), NONE, NONE, 30, Centering::Both)));
|
||||
DeviceOrientation orientation = GetDeviceOrientation();
|
||||
cardboardDisableButton_->OnClick.Add([deviceOrientation](UI::EventParams &) {
|
||||
DisplayLayoutConfig &config = g_Config.GetDisplayLayoutConfig(deviceOrientation);
|
||||
@@ -1311,7 +1312,7 @@ void EmuScreen::CreateViews() {
|
||||
chatMenu_->SetVisibility(UI::V_GONE);
|
||||
}
|
||||
|
||||
saveStatePreview_ = new AsyncImageFileView(Path(), IS_FIXED, new AnchorLayoutParams(bounds.centerX(), 100, NONE, NONE, true));
|
||||
saveStatePreview_ = new AsyncImageFileView(Path(), IS_FIXED, new AnchorLayoutParams(bounds.centerX(), 100, NONE, NONE, Centering::Both));
|
||||
saveStatePreview_->SetFixedSize(160, 90);
|
||||
saveStatePreview_->SetColor(0x90FFFFFF);
|
||||
saveStatePreview_->SetVisibility(V_GONE);
|
||||
@@ -1327,7 +1328,7 @@ void EmuScreen::CreateViews() {
|
||||
ImageID("I_TRIANGLE"),
|
||||
};
|
||||
|
||||
Spinner *loadingSpinner = root_->Add(new Spinner(symbols, ARRAY_SIZE(symbols), new AnchorLayoutParams(NONE, NONE, 45, 45, true)));
|
||||
Spinner *loadingSpinner = root_->Add(new Spinner(symbols, ARRAY_SIZE(symbols), new AnchorLayoutParams(NONE, NONE, 45, 45, Centering::Both)));
|
||||
loadingSpinner_ = loadingSpinner;
|
||||
|
||||
loadingBG->SetTag("LoadingBG");
|
||||
|
||||
@@ -301,7 +301,7 @@ void GPUDriverTestScreen::CreateViews() {
|
||||
AnchorLayout *anchor = new AnchorLayout();
|
||||
root_ = anchor;
|
||||
|
||||
tabHolder_ = new TabHolder(ORIENT_HORIZONTAL, 30.0f, TabHolderFlags::Default, nullptr, new AnchorLayoutParams(FILL_PARENT, FILL_PARENT, false));
|
||||
tabHolder_ = new TabHolder(ORIENT_HORIZONTAL, 30.0f, TabHolderFlags::Default, nullptr, new AnchorLayoutParams(FILL_PARENT, FILL_PARENT, Centering::None));
|
||||
anchor->Add(tabHolder_);
|
||||
tabHolder_->AddTab("Discard", ImageID::invalid(), new LinearLayout(ORIENT_VERTICAL));
|
||||
tabHolder_->AddTab("Shader", ImageID::invalid(), new LinearLayout(ORIENT_VERTICAL));
|
||||
|
||||
+16
-14
@@ -23,7 +23,7 @@
|
||||
#include "Common/UI/Context.h"
|
||||
#include "Common/UI/View.h"
|
||||
#include "Common/UI/ViewGroup.h"
|
||||
|
||||
#include "Common/UI/PopupScreens.h"
|
||||
#include "Common/Data/Text/I18n.h"
|
||||
#include "Common/Data/Text/Parsers.h"
|
||||
#include "Common/Data/Encoding/Utf8.h"
|
||||
@@ -394,17 +394,18 @@ void GameScreen::OnDeleteConfig(UI::EventParams &e) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
const bool trashAvailable = System_GetPropertyBool(SYSPROP_HAS_TRASH_BIN);
|
||||
screenManager()->push(
|
||||
new PromptScreen(gamePath_, di->T("DeleteConfirmGameConfig", "Do you really want to delete the settings for this game?"), trashAvailable ? di->T("Move to trash") : di->T("Delete"), di->T("Cancel"),
|
||||
[this](bool result) {
|
||||
if (result) {
|
||||
std::shared_ptr<GameInfo> info = g_gameInfoCache->GetInfo(nullptr, gamePath_, GameInfoFlags::PARAM_SFO);
|
||||
if (!info->Ready(GameInfoFlags::PARAM_SFO)) {
|
||||
return;
|
||||
}
|
||||
g_Config.DeleteGameConfig(info->id);
|
||||
info->hasConfig = false;
|
||||
RecreateViews();
|
||||
new UI::MessagePopupScreen(di->T("Delete"), di->T("DeleteConfirmGameConfig", "Do you really want to delete the settings for this game?"),
|
||||
trashAvailable ? di->T("Move to trash") : di->T("Delete"), di->T("Cancel"), [this](bool result) {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
std::shared_ptr<GameInfo> info = g_gameInfoCache->GetInfo(nullptr, gamePath_, GameInfoFlags::PARAM_SFO);
|
||||
if (!info->Ready(GameInfoFlags::PARAM_SFO)) {
|
||||
return;
|
||||
}
|
||||
g_Config.DeleteGameConfig(info->id);
|
||||
info->hasConfig = false;
|
||||
RecreateViews();
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -483,7 +484,7 @@ void GameScreen::OnDeleteSaveData(UI::EventParams &e) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
Path gamePath = gamePath_;
|
||||
screenManager()->push(
|
||||
new PromptScreen(gamePath_, di->T("DeleteConfirmAll", "Do you really want to delete all\nyour save data for this game?"), trashAvailable ? di->T("Move to trash") : di->T("Delete"), di->T("Cancel"),
|
||||
new UI::MessagePopupScreen(di->T("Delete"), di->T("DeleteConfirmAll", "Do you really want to delete all\nyour save data for this game?"), trashAvailable ? di->T("Move to trash") : di->T("Delete"), di->T("Cancel"),
|
||||
[gamePath](bool yes) {
|
||||
if (yes) {
|
||||
std::shared_ptr<GameInfo> info = g_gameInfoCache->GetInfo(NULL, gamePath, GameInfoFlags::PARAM_SFO);
|
||||
@@ -501,6 +502,7 @@ void GameScreen::OnDeleteGame(UI::EventParams &e) {
|
||||
std::shared_ptr<GameInfo> info = g_gameInfoCache->GetInfo(NULL, gamePath_, GameInfoFlags::PARAM_SFO);
|
||||
if (info->Ready(GameInfoFlags::PARAM_SFO)) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
auto ga = GetI18NCategory(I18NCat::GAME);
|
||||
std::string prompt;
|
||||
prompt = di->T("DeleteConfirmGame", "Do you really want to delete this game\nfrom your device? You can't undo this.");
|
||||
prompt += "\n\n" + gamePath_.ToVisualString(g_Config.memStickDirectory.c_str());
|
||||
@@ -508,7 +510,7 @@ void GameScreen::OnDeleteGame(UI::EventParams &e) {
|
||||
Path gamePath = gamePath_;
|
||||
ScreenManager *sm = screenManager();
|
||||
screenManager()->push(
|
||||
new PromptScreen(gamePath_, prompt, trashAvailable ? di->T("Move to trash") : di->T("Delete"), di->T("Cancel"),
|
||||
new UI::MessagePopupScreen(ga->T("Delete Game"), prompt, trashAvailable ? di->T("Move to trash") : di->T("Delete"), di->T("Cancel"),
|
||||
[sm, gamePath](bool yes) {
|
||||
if (yes) {
|
||||
std::shared_ptr<GameInfo> info = g_gameInfoCache->GetInfo(NULL, gamePath, GameInfoFlags::PARAM_SFO);
|
||||
@@ -526,7 +528,7 @@ void GameScreen::OnRemoveFromRecent(UI::EventParams &e) {
|
||||
screenManager()->switchScreen(new MainScreen());
|
||||
}
|
||||
|
||||
class SetBackgroundPopupScreen : public PopupScreen {
|
||||
class SetBackgroundPopupScreen : public UI::PopupScreen {
|
||||
public:
|
||||
SetBackgroundPopupScreen(std::string_view title, const Path &gamePath)
|
||||
: PopupScreen(title), gamePath_(gamePath) {
|
||||
|
||||
+24
-28
@@ -1709,17 +1709,23 @@ void TriggerRestart(const char *why, bool editThenRestore, const Path &gamePath)
|
||||
System_RestartApp(param);
|
||||
}
|
||||
|
||||
void GameSettingsScreen::TriggerRestartOrDo(std::function<void()> callback) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
screenManager()->push(new UI::MessagePopupScreen(di->T("Restart"), di->T("Changing this setting requires PPSSPP to restart."), di->T("Restart"), di->T("Cancel"), [=](bool yes) {
|
||||
if (yes) {
|
||||
TriggerRestart("GameSettingsScreen::RenderingBackendYes", editThenRestore_, gamePath_);
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
void GameSettingsScreen::OnRenderingBackend(UI::EventParams &e) {
|
||||
// It only makes sense to show the restart prompt if the backend was actually changed.
|
||||
if (g_Config.iGPUBackend != (int)GetGPUBackend()) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
screenManager()->push(new PromptScreen(gamePath_, di->T("Changing this setting requires PPSSPP to restart."), di->T("Restart"), di->T("Cancel"), [=](bool yes) {
|
||||
if (yes) {
|
||||
TriggerRestart("GameSettingsScreen::RenderingBackendYes", editThenRestore_, gamePath_);
|
||||
} else {
|
||||
g_Config.iGPUBackend = (int)GetGPUBackend();
|
||||
}
|
||||
}));
|
||||
TriggerRestartOrDo([]() {
|
||||
g_Config.iGPUBackend = (int)GetGPUBackend();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1728,32 +1734,22 @@ void GameSettingsScreen::OnRenderingDevice(UI::EventParams &e) {
|
||||
std::string *deviceNameSetting = GPUDeviceNameSetting();
|
||||
if (deviceNameSetting && *deviceNameSetting != GetGPUBackendDevice()) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
screenManager()->push(new PromptScreen(gamePath_, di->T("Changing this setting requires PPSSPP to restart."), di->T("Restart"), di->T("Cancel"), [=](bool yes) {
|
||||
// If the user ends up deciding not to restart, set the config back to the current backend
|
||||
// so it doesn't get switched by accident.
|
||||
if (yes) {
|
||||
TriggerRestart("GameSettingsScreen::RenderingDeviceYes", editThenRestore_, gamePath_);
|
||||
} else {
|
||||
std::string *deviceNameSetting = GPUDeviceNameSetting();
|
||||
if (deviceNameSetting)
|
||||
*deviceNameSetting = GetGPUBackendDevice();
|
||||
// Needed to redraw the setting.
|
||||
RecreateViews();
|
||||
}
|
||||
}));
|
||||
TriggerRestartOrDo([this]() {
|
||||
std::string *deviceNameSetting = GPUDeviceNameSetting();
|
||||
if (deviceNameSetting)
|
||||
*deviceNameSetting = GetGPUBackendDevice();
|
||||
// Needed to redraw the setting.
|
||||
RecreateViews();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void GameSettingsScreen::OnInflightFramesChoice(UI::EventParams &e) {
|
||||
if (g_Config.iInflightFrames != prevInflightFrames_) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
screenManager()->push(new PromptScreen(gamePath_, di->T("Changing this setting requires PPSSPP to restart."), di->T("Restart"), di->T("Cancel"), [=](bool yes) {
|
||||
if (yes) {
|
||||
TriggerRestart("GameSettingsScreen::InflightFramesYes", editThenRestore_, gamePath_);
|
||||
} else {
|
||||
g_Config.iInflightFrames = prevInflightFrames_;
|
||||
}
|
||||
}));
|
||||
TriggerRestartOrDo([this]() {
|
||||
g_Config.iInflightFrames = prevInflightFrames_;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -106,6 +106,8 @@ private:
|
||||
|
||||
void OnAdhocGuides(UI::EventParams &e);
|
||||
|
||||
void TriggerRestartOrDo(std::function<void()> callback);
|
||||
|
||||
// Temporaries to convert setting types, cache enabled, etc.
|
||||
int iAlternateSpeedPercent1_ = 0;
|
||||
int iAlternateSpeedPercent2_ = 0;
|
||||
@@ -122,10 +124,10 @@ private:
|
||||
std::string pendingMemstickFolder_;
|
||||
};
|
||||
|
||||
class HostnameSelectScreen : public PopupScreen {
|
||||
class HostnameSelectScreen : public UI::PopupScreen {
|
||||
public:
|
||||
HostnameSelectScreen(std::string *value, std::vector<std::string> *listItems, std::string_view title)
|
||||
: PopupScreen(title, "OK", "Cancel"), listItems_(listItems), value_(value) {
|
||||
: UI::PopupScreen(title, "OK", "Cancel"), listItems_(listItems), value_(value) {
|
||||
resolver_ = std::thread([](HostnameSelectScreen *thiz) {
|
||||
thiz->ResolverThread();
|
||||
}, this);
|
||||
@@ -194,7 +196,7 @@ protected:
|
||||
void CreateGestureTab(UI::LinearLayout *parent);
|
||||
};
|
||||
|
||||
class RestoreSettingsScreen : public PopupScreen {
|
||||
class RestoreSettingsScreen : public UI::PopupScreen {
|
||||
public:
|
||||
RestoreSettingsScreen(std::string_view title);
|
||||
void CreatePopupContents(UI::ViewGroup *parent) override;
|
||||
|
||||
+2
-2
@@ -888,7 +888,7 @@ UI::ViewGroup *CreatePadLayout(const TouchControlConfig &config, float xres, flo
|
||||
float y;
|
||||
};
|
||||
auto buttonLayoutParams = [=](const ConfigTouchPos &touch, ButtonOffset off = { 0, 0 }) {
|
||||
return new AnchorLayoutParams(touch.x * xres + off.x, touch.y * yres + off.y, NONE, NONE, true);
|
||||
return new AnchorLayoutParams(touch.x * xres + off.x, touch.y * yres + off.y, NONE, NONE, Centering::Both);
|
||||
};
|
||||
|
||||
// Space between the PSP buttons (traingle, circle, square and cross)
|
||||
@@ -937,7 +937,7 @@ UI::ViewGroup *CreatePadLayout(const TouchControlConfig &config, float xres, flo
|
||||
};
|
||||
|
||||
if (showPauseButton) {
|
||||
root->Add(new BoolButton(pause, "Pause button", roundImage, ImageID("I_ROUND"), ImageID("I_ARROW"), 1.0f, new AnchorLayoutParams(halfW, 20, NONE, NONE, true)))->SetAngle(90);
|
||||
root->Add(new BoolButton(pause, "Pause button", roundImage, ImageID("I_ROUND"), ImageID("I_ARROW"), 1.0f, new AnchorLayoutParams(halfW, 20, NONE, NONE, Centering::Both)))->SetAngle(90);
|
||||
}
|
||||
|
||||
// touchActionButtonCenter.show will always be true, since that's the default.
|
||||
|
||||
+2
-2
@@ -15,9 +15,9 @@ void IAPScreen::CreateViews() {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
auto mm = GetI18NCategory(I18NCat::MAINMENU);
|
||||
|
||||
const bool vertical = GetDeviceOrientation() == DeviceOrientation::Portrait;
|
||||
const bool portrait = GetDeviceOrientation() == DeviceOrientation::Portrait;
|
||||
|
||||
root_ = new LinearLayout(vertical ? ORIENT_VERTICAL : ORIENT_HORIZONTAL, new LayoutParams(FILL_PARENT, FILL_PARENT));
|
||||
root_ = new LinearLayout(portrait ? ORIENT_VERTICAL : ORIENT_HORIZONTAL, new LayoutParams(FILL_PARENT, FILL_PARENT));
|
||||
|
||||
const bool bought = System_GetPropertyBool(SYSPROP_APP_GOLD);
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "ppsspp_config.h"
|
||||
|
||||
#include "UI/BaseScreens.h"
|
||||
#include "UI/SimpleDialogScreen.h"
|
||||
|
||||
class IAPScreen : public UIBaseDialogScreen {
|
||||
public:
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
#include "Common/UI/UIScreen.h"
|
||||
#include "Common/UI/PopupScreens.h"
|
||||
#include "UI/BaseScreens.h"
|
||||
#include "UI/TabbedDialogScreen.h"
|
||||
|
||||
@@ -57,7 +58,7 @@ private:
|
||||
UI::TextView *globalStats_ = nullptr;
|
||||
};
|
||||
|
||||
class AddressPromptScreen : public PopupScreen {
|
||||
class AddressPromptScreen : public UI::PopupScreen {
|
||||
public:
|
||||
AddressPromptScreen(std::string_view title) : PopupScreen(title, "OK", "Cancel") {}
|
||||
|
||||
|
||||
+16
-13
@@ -1135,11 +1135,11 @@ UI::ViewGroup *MainScreen::CreateLogoView(bool portrait, UI::LayoutParams *layou
|
||||
using namespace UI;
|
||||
AnchorLayout *logos = new AnchorLayout(layoutParams);
|
||||
if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
|
||||
logos->Add(new ImageView(ImageID("I_ICON_GOLD"), "", IS_DEFAULT, new AnchorLayoutParams(64, 64, 0, 0, NONE, NONE, false)));
|
||||
logos->Add(new ImageView(ImageID("I_ICON_GOLD"), "", IS_DEFAULT, new AnchorLayoutParams(64, 64, 0, 0, NONE, NONE)));
|
||||
} else {
|
||||
logos->Add(new ImageView(ImageID("I_ICON"), "", IS_DEFAULT, new AnchorLayoutParams(64, 64, 0, 0, NONE, NONE, false)));
|
||||
logos->Add(new ImageView(ImageID("I_ICON"), "", IS_DEFAULT, new AnchorLayoutParams(64, 64, 0, 0, NONE, NONE)));
|
||||
}
|
||||
logos->Add(new ImageView(ImageID("I_LOGO"), "PPSSPP", IS_DEFAULT, new AnchorLayoutParams(180, 64, 68, 2, NONE, NONE, false)));
|
||||
logos->Add(new ImageView(ImageID("I_LOGO"), "PPSSPP", IS_DEFAULT, new AnchorLayoutParams(180, 64, 68, 2, NONE, NONE)));
|
||||
|
||||
std::string versionString = PPSSPP_GIT_VERSION;
|
||||
// Strip the 'v' from the displayed version, and shorten the commit hash.
|
||||
@@ -1170,24 +1170,24 @@ UI::ViewGroup *MainScreen::CreateLogoView(bool portrait, UI::LayoutParams *layou
|
||||
return logos;
|
||||
}
|
||||
|
||||
void MainScreen::CreateMainButtons(UI::ViewGroup *parent, bool vertical) {
|
||||
void MainScreen::CreateMainButtons(UI::ViewGroup *parent, bool portrait) {
|
||||
using namespace UI;
|
||||
auto mm = GetI18NCategory(I18NCat::MAINMENU);
|
||||
if (vertical) {
|
||||
if (portrait) {
|
||||
parent->Add(new Spacer(1.0f, new LinearLayoutParams(1.0f)));
|
||||
}
|
||||
if (System_GetPropertyBool(SYSPROP_HAS_FILE_BROWSER)) {
|
||||
parent->Add(vertical ? new Choice(ImageID("I_FOLDER_OPEN"), vertical ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("Load", "Load...")))->OnClick.Handle(this, &MainScreen::OnLoadFile);
|
||||
parent->Add(portrait ? new Choice(ImageID("I_FOLDER_OPEN"), portrait ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("Load", "Load...")))->OnClick.Handle(this, &MainScreen::OnLoadFile);
|
||||
}
|
||||
parent->Add(vertical ? new Choice(ImageID("I_GEAR"), vertical ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("Game Settings", "Settings")))->OnClick.Handle(this, &MainScreen::OnGameSettings);
|
||||
parent->Add(vertical ? new Choice(ImageID("I_INFO"), vertical ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("About PPSSPP")))->OnClick.Handle(this, &MainScreen::OnCredits);
|
||||
parent->Add(portrait ? new Choice(ImageID("I_GEAR"), portrait ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("Game Settings", "Settings")))->OnClick.Handle(this, &MainScreen::OnGameSettings);
|
||||
parent->Add(portrait ? new Choice(ImageID("I_INFO"), portrait ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("About PPSSPP")))->OnClick.Handle(this, &MainScreen::OnCredits);
|
||||
|
||||
if (!vertical) {
|
||||
if (!portrait) {
|
||||
parent->Add(new Choice(mm->T("www.ppsspp.org")))->OnClick.Handle(this, &MainScreen::OnPPSSPPOrg);
|
||||
}
|
||||
|
||||
if (!System_GetPropertyBool(SYSPROP_APP_GOLD) && (System_GetPropertyInt(SYSPROP_DEVICE_TYPE) != DEVICE_TYPE_VR)) {
|
||||
Choice *gold = parent->Add(vertical ? new Choice(ImageID("I_ICON_GOLD"), vertical ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("Buy PPSSPP Gold")));
|
||||
Choice *gold = parent->Add(portrait ? new Choice(ImageID("I_ICON_GOLD"), portrait ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("Buy PPSSPP Gold")));
|
||||
gold->OnClick.Add([this](UI::EventParams &) {
|
||||
LaunchBuyGold(this->screenManager());
|
||||
});
|
||||
@@ -1196,14 +1196,17 @@ void MainScreen::CreateMainButtons(UI::ViewGroup *parent, bool vertical) {
|
||||
gold->SetShine(true);
|
||||
}
|
||||
|
||||
if (!vertical) {
|
||||
if (!portrait) {
|
||||
parent->Add(new Spacer(25.0));
|
||||
}
|
||||
|
||||
#if !PPSSPP_PLATFORM(IOS_APP_STORE) && !PPSSPP_PLATFORM(ANDROID)
|
||||
// Officially, iOS apps should not have exit buttons. Remove it to maximize app store review chances.
|
||||
// Additionally, the Exit button creates problems on Android.
|
||||
parent->Add(new Choice(mm->T("Exit"), vertical ? new LinearLayoutParams() : nullptr))->OnClick.Handle(this, &MainScreen::OnExit);
|
||||
// Also we remove it in the vertical layout on all platforms, just no space.
|
||||
if (!portrait) {
|
||||
parent->Add(new Choice(mm->T("Exit"), portrait ? new LinearLayoutParams() : nullptr))->OnClick.Handle(this, &MainScreen::OnExit);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1325,7 +1328,7 @@ void MainScreen::CreateViews() {
|
||||
#if !defined(MOBILE_DEVICE)
|
||||
auto gr = GetI18NCategory(I18NCat::GRAPHICS);
|
||||
ImageID icon(g_Config.UseFullScreen() ? "I_RESTORE" : "I_FULLSCREEN");
|
||||
fullscreenButton_ = logo->Add(new Button(gr->T("FullScreen", "Full Screen"), icon, new AnchorLayoutParams(48, 48, NONE, 0, 0, NONE, false)));
|
||||
fullscreenButton_ = logo->Add(new Button(gr->T("FullScreen", "Full Screen"), icon, new AnchorLayoutParams(48, 48, NONE, 0, 0, NONE, Centering::None)));
|
||||
fullscreenButton_->SetIgnoreText(true);
|
||||
fullscreenButton_->OnClick.Handle(this, &MainScreen::OnFullScreenToggle);
|
||||
#endif
|
||||
|
||||
+2
-1
@@ -24,6 +24,7 @@
|
||||
#include "Common/UI/UIScreen.h"
|
||||
#include "Common/UI/ViewGroup.h"
|
||||
#include "Common/UI/TabHolder.h"
|
||||
#include "Common/UI/PopupScreens.h"
|
||||
#include "UI/BaseScreens.h"
|
||||
#include "Common/File/PathBrowser.h"
|
||||
|
||||
@@ -193,7 +194,7 @@ private:
|
||||
void OnGameSettings(UI::EventParams &e);
|
||||
};
|
||||
|
||||
class GridSettingsPopupScreen : public PopupScreen {
|
||||
class GridSettingsPopupScreen : public UI::PopupScreen {
|
||||
public:
|
||||
GridSettingsPopupScreen(std::string_view label) : PopupScreen(label) {}
|
||||
void CreatePopupContents(UI::ViewGroup *parent) override;
|
||||
|
||||
+2
-2
@@ -83,9 +83,9 @@ void SettingInfoMessage::Show(std::string_view text, const UI::View *refView) {
|
||||
const UI::AnchorLayoutParams *lp = GetLayoutParams()->As<UI::AnchorLayoutParams>();
|
||||
if (lp) {
|
||||
if (cutOffY_ != -1.0f && b.y >= cutOffY_) {
|
||||
ReplaceLayoutParams(new UI::AnchorLayoutParams(lp->width, lp->height, lp->left, 80.0f, lp->right, lp->bottom, lp->center));
|
||||
ReplaceLayoutParams(new UI::AnchorLayoutParams(lp->width, lp->height, lp->left, 80.0f, lp->right, lp->bottom, lp->centering));
|
||||
} else {
|
||||
ReplaceLayoutParams(new UI::AnchorLayoutParams(lp->width, lp->height, lp->left, g_display.dp_yres - 80.0f - 40.0f, lp->right, lp->bottom, lp->center));
|
||||
ReplaceLayoutParams(new UI::AnchorLayoutParams(lp->width, lp->height, lp->left, g_display.dp_yres - 80.0f - 40.0f, lp->right, lp->bottom, lp->centering));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+23
-22
@@ -23,6 +23,7 @@
|
||||
#include "Common/UI/ViewGroup.h"
|
||||
#include "Common/UI/Context.h"
|
||||
#include "Common/UI/UIScreen.h"
|
||||
#include "Common/UI/PopupScreens.h"
|
||||
#include "Common/GPU/thin3d.h"
|
||||
|
||||
#include "Common/Data/Text/I18n.h"
|
||||
@@ -32,6 +33,7 @@
|
||||
#include "Common/System/Request.h"
|
||||
#include "Common/VR/PPSSPPVR.h"
|
||||
#include "Common/UI/AsyncImageFileView.h"
|
||||
#include "Common/UI/PopupScreens.h"
|
||||
|
||||
#include "Core/KeyMap.h"
|
||||
#include "Core/Reporting.h"
|
||||
@@ -72,7 +74,7 @@ static void AfterSaveStateAction(SaveState::Status status, std::string_view mess
|
||||
}
|
||||
}
|
||||
|
||||
class ScreenshotViewScreen : public PopupScreen {
|
||||
class ScreenshotViewScreen : public UI::PopupScreen {
|
||||
public:
|
||||
ScreenshotViewScreen(const Path &filename, std::string title, int slot, Path gamePath)
|
||||
: PopupScreen(title), filename_(filename), slot_(slot), gamePath_(gamePath), title_(title) {} // PopupScreen will translate Back on its own
|
||||
@@ -168,13 +170,13 @@ void ScreenshotViewScreen::OnDeleteState(UI::EventParams &e) {
|
||||
|
||||
std::shared_ptr<GameInfo> info = g_gameInfoCache->GetInfo(NULL, gamePath_, GameInfoFlags::PARAM_SFO);
|
||||
|
||||
std::string message(di->T("DeleteConfirmSaveState"));
|
||||
message += "\n\n" + info->GetTitle() + " (" + info->id + ")";
|
||||
std::string_view title = di->T("Delete");
|
||||
std::string message = std::string(di->T("DeleteConfirmSaveState")) + "\n\n" + info->GetTitle() + " (" + info->id + ")";
|
||||
message += "\n\n" + title_;
|
||||
|
||||
// TODO: Also show the screenshot on the confirmation screen?
|
||||
|
||||
screenManager()->push(new PromptScreen(gamePath_, message, di->T("Delete"), di->T("Cancel"), [=](bool result) {
|
||||
screenManager()->push(new UI::MessagePopupScreen(title, message, di->T("Delete"), di->T("Cancel"), [=](bool result) {
|
||||
if (result) {
|
||||
SaveState::DeleteSlot(gamePath_, slot_);
|
||||
TriggerFinish(DR_CANCEL);
|
||||
@@ -604,7 +606,7 @@ void GamePauseScreen::CreateViews() {
|
||||
std::string confirmMessage = GetConfirmExitMessage();
|
||||
if (!confirmMessage.empty()) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
screenManager()->push(new PromptScreen(gamePath_, confirmMessage, di->T("Reset"), di->T("Cancel"), [=](bool result) {
|
||||
screenManager()->push(new UI::MessagePopupScreen(di->T("Reset"), confirmMessage, di->T("Reset"), di->T("Cancel"), [=](bool result) {
|
||||
if (result) {
|
||||
System_PostUIMessage(UIMessage::REQUEST_GAME_RESET);
|
||||
}
|
||||
@@ -705,9 +707,8 @@ void GamePauseScreen::OnExit(UI::EventParams &e) {
|
||||
|
||||
if (!confirmExitMessage.empty()) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
confirmExitMessage += '\n';
|
||||
confirmExitMessage += di->T("Are you sure you want to exit?");
|
||||
screenManager()->push(new PromptScreen(gamePath_, confirmExitMessage, di->T("Yes"), di->T("No"), [=](bool result) {
|
||||
std::string_view title = di->T("Are you sure you want to exit?");
|
||||
screenManager()->push(new UI::MessagePopupScreen(title, confirmExitMessage, di->T("Exit"), di->T("Cancel"), [=](bool result) {
|
||||
if (result) {
|
||||
if (g_Config.bPauseMenuExitsEmulator) {
|
||||
System_ExitApp();
|
||||
@@ -748,18 +749,6 @@ void GamePauseScreen::OnLastSaveUndo(UI::EventParams &e) {
|
||||
RecreateViews();
|
||||
}
|
||||
|
||||
void GamePauseScreen::CallbackDeleteConfig(bool yes) {
|
||||
if (yes) {
|
||||
std::shared_ptr<GameInfo> info = g_gameInfoCache->GetInfo(NULL, gamePath_, GameInfoFlags::PARAM_SFO);
|
||||
if (info->Ready(GameInfoFlags::PARAM_SFO)) {
|
||||
g_Config.UnloadGameConfig();
|
||||
g_Config.DeleteGameConfig(info->id);
|
||||
info->hasConfig = false;
|
||||
screenManager()->RecreateAllViews();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GamePauseScreen::OnCreateConfig(UI::EventParams &e) {
|
||||
std::shared_ptr<GameInfo> info = g_gameInfoCache->GetInfo(NULL, gamePath_, GameInfoFlags::PARAM_SFO);
|
||||
if (info->Ready(GameInfoFlags::PARAM_SFO)) {
|
||||
@@ -776,7 +765,19 @@ void GamePauseScreen::OnCreateConfig(UI::EventParams &e) {
|
||||
|
||||
void GamePauseScreen::OnDeleteConfig(UI::EventParams &e) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
const bool trashAvailable = System_GetPropertyBool(SYSPROP_HAS_TRASH_BIN);
|
||||
screenManager()->push(
|
||||
new PromptScreen(gamePath_, di->T("DeleteConfirmGameConfig", "Do you really want to delete the settings for this game?"), di->T("Delete"), di->T("Cancel"),
|
||||
std::bind(&GamePauseScreen::CallbackDeleteConfig, this, std::placeholders::_1)));
|
||||
new UI::MessagePopupScreen(di->T("Delete"), di->T("DeleteConfirmGameConfig", "Do you really want to delete the settings for this game?"),
|
||||
trashAvailable ? di->T("Move to trash") : di->T("Delete"), di->T("Cancel"), [this](bool yes) {
|
||||
if (!yes) {
|
||||
return;
|
||||
}
|
||||
std::shared_ptr<GameInfo> info = g_gameInfoCache->GetInfo(NULL, gamePath_, GameInfoFlags::PARAM_SFO);
|
||||
if (info->Ready(GameInfoFlags::PARAM_SFO)) {
|
||||
g_Config.UnloadGameConfig();
|
||||
g_Config.DeleteGameConfig(info->id);
|
||||
info->hasConfig = false;
|
||||
screenManager()->RecreateAllViews();
|
||||
}
|
||||
}));
|
||||
}
|
||||
@@ -39,7 +39,6 @@ public:
|
||||
protected:
|
||||
void CreateViews() override;
|
||||
void update() override;
|
||||
void CallbackDeleteConfig(bool yes);
|
||||
UI::Margins RootMargins() const override;
|
||||
|
||||
private:
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "Common/System/Request.h"
|
||||
#include "Common/UI/Context.h"
|
||||
#include "Common/UI/View.h"
|
||||
#include "Common/UI/PopupScreens.h"
|
||||
#include "Common/UI/ViewGroup.h"
|
||||
#include "Common/UI/AsyncImageFileView.h"
|
||||
#include "UI/SavedataScreen.h"
|
||||
@@ -130,7 +131,7 @@ SavedataView::SavedataView(UIContext &dc, GameInfo *ginfo, IdentifiedFileType ty
|
||||
}
|
||||
}
|
||||
|
||||
class SavedataPopupScreen : public PopupScreen {
|
||||
class SavedataPopupScreen : public UI::PopupScreen {
|
||||
public:
|
||||
SavedataPopupScreen(Path gamePath, Path savePath, std::string_view title) : PopupScreen(StripSpaces(title)), savePath_(savePath), gamePath_(gamePath) { }
|
||||
|
||||
@@ -168,15 +169,15 @@ public:
|
||||
buttonRow->SetSpacing(0);
|
||||
Margins buttonMargins(5, 5, 5, 13); // not sure why we need more at the bottom to make it look right
|
||||
|
||||
buttonRow->Add(new Button(di->T("Back"), new LinearLayoutParams(1.0f, buttonMargins)))->OnClick.Handle<UIScreen>(this, &UIScreen::OnBack);
|
||||
buttonRow->Add(new Button(di->T("Delete"), new LinearLayoutParams(1.0f, buttonMargins)))->OnClick.Add([this](UI::EventParams &e) {
|
||||
buttonRow->Add(new Choice(di->T("Back"), ImageID("I_NAVIGATE_BACK"), new LinearLayoutParams(1.0f, buttonMargins)))->OnClick.Handle<UIScreen>(this, &UIScreen::OnBack);
|
||||
buttonRow->Add(new Choice(di->T("Delete"), ImageID("I_TRASHCAN"), new LinearLayoutParams(1.0f, buttonMargins)))->OnClick.Add([this](UI::EventParams &e) {
|
||||
auto di = GetI18NCategory(I18NCat::DIALOG);
|
||||
std::shared_ptr<GameInfo> ginfo = g_gameInfoCache->GetInfo(nullptr, savePath_, GameInfoFlags::PARAM_SFO);
|
||||
|
||||
const bool trashAvailable = System_GetPropertyBool(SYSPROP_HAS_TRASH_BIN);
|
||||
|
||||
std::string_view confirmMessage = di->T("Are you sure you want to delete the file?");
|
||||
screenManager()->push(new PromptScreen(gamePath_, confirmMessage, trashAvailable ? di->T("Move to trash") : di->T("Delete"), di->T("Cancel"), [=](bool result) {
|
||||
screenManager()->push(new MessagePopupScreen(di->T("Delete"), confirmMessage, trashAvailable ? di->T("Move to trash") : di->T("Delete"), di->T("Cancel"), [=](bool result) {
|
||||
if (result) {
|
||||
ginfo->Delete();
|
||||
TriggerFinish(DR_NO);
|
||||
@@ -184,7 +185,7 @@ public:
|
||||
}));
|
||||
});
|
||||
if (System_GetPropertyBool(SYSPROP_CAN_SHOW_FILE)) {
|
||||
buttonRow->Add(new Button(di->T("Show in folder"), new LinearLayoutParams(1.0f, buttonMargins)))->OnClick.Add([this](UI::EventParams &e) {
|
||||
buttonRow->Add(new Choice(di->T("Show in folder"), ImageID("I_FOLDER"), new LinearLayoutParams(1.0f, buttonMargins)))->OnClick.Add([this](UI::EventParams &e) {
|
||||
System_ShowFileInFolder(savePath_);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ void UITabbedBaseDialogScreen::CreateViews() {
|
||||
if (flags_ & TabDialogFlags::VerticalShowIcons) {
|
||||
tabHolderFlags |= TabHolderFlags::VerticalShowIcons;
|
||||
}
|
||||
tabHolder_ = new TabHolder(ORIENT_VERTICAL, 300, tabHolderFlags, filterNotice_, new AnchorLayoutParams(10, 0, 10, 0, false));
|
||||
tabHolder_ = new TabHolder(ORIENT_VERTICAL, 300, tabHolderFlags, filterNotice_, new AnchorLayoutParams(10, 0, 10, 0));
|
||||
CreateExtraButtons(tabHolder_->Container(), 10);
|
||||
tabHolder_->AddBack(this);
|
||||
root_->Add(tabHolder_);
|
||||
|
||||
@@ -44,7 +44,7 @@ void TiltAnalogSettingsScreen::CreateCalibrationView(UI::ViewGroup *parent, UI::
|
||||
switch (g_Config.iTiltInputType) {
|
||||
case TILT_DPAD:
|
||||
{
|
||||
parent->Add(new PSPDpad(ImageID("I_DIR_LINE"), "D-pad", ImageID("I_DIR_LINE"), ImageID("I_ARROW"), 1.5f, 1.3f, new AnchorLayoutParams(NONE, NONE, NONE, NONE, true)));
|
||||
parent->Add(new PSPDpad(ImageID("I_DIR_LINE"), "D-pad", ImageID("I_DIR_LINE"), ImageID("I_ARROW"), 1.5f, 1.3f, new AnchorLayoutParams(NONE, NONE, NONE, NONE, Centering::Both)));
|
||||
break;
|
||||
}
|
||||
case TILT_ACTION_BUTTON:
|
||||
@@ -52,10 +52,10 @@ void TiltAnalogSettingsScreen::CreateCalibrationView(UI::ViewGroup *parent, UI::
|
||||
AnchorLayout *rightSide = new AnchorLayout(layoutParams);
|
||||
parent->Add(rightSide);
|
||||
|
||||
PSPButton *circle = new PSPButton(CTRL_CIRCLE, "Circle button", ImageID("I_ROUND_LINE"), ImageID("I_ROUND"), ImageID("I_CIRCLE"), 1.5f, new AnchorLayoutParams(NONE, NONE, 100.0f, NONE, true));
|
||||
PSPButton *cross = new PSPButton(CTRL_CROSS, "Cross button", ImageID("I_ROUND_LINE"), ImageID("I_ROUND"), ImageID("I_CROSS"), 1.5f, new AnchorLayoutParams(NONE, NONE, NONE, 100.0f, true));
|
||||
PSPButton *triangle = new PSPButton(CTRL_TRIANGLE, "Triangle button", ImageID("I_ROUND_LINE"), ImageID("I_ROUND"), ImageID("I_TRIANGLE"), 1.5f, new AnchorLayoutParams(NONE, 100.0f, NONE, NONE, true));
|
||||
PSPButton *square = new PSPButton(CTRL_SQUARE, "Square button", ImageID("I_ROUND_LINE"), ImageID("I_ROUND"), ImageID("I_SQUARE"), 1.5f, new AnchorLayoutParams(100.0f, NONE, NONE, NONE, true));
|
||||
PSPButton *circle = new PSPButton(CTRL_CIRCLE, "Circle button", ImageID("I_ROUND_LINE"), ImageID("I_ROUND"), ImageID("I_CIRCLE"), 1.5f, new AnchorLayoutParams(NONE, NONE, 100.0f, NONE, Centering::Both));
|
||||
PSPButton *cross = new PSPButton(CTRL_CROSS, "Cross button", ImageID("I_ROUND_LINE"), ImageID("I_ROUND"), ImageID("I_CROSS"), 1.5f, new AnchorLayoutParams(NONE, NONE, NONE, 100.0f, Centering::Both));
|
||||
PSPButton *triangle = new PSPButton(CTRL_TRIANGLE, "Triangle button", ImageID("I_ROUND_LINE"), ImageID("I_ROUND"), ImageID("I_TRIANGLE"), 1.5f, new AnchorLayoutParams(NONE, 100.0f, NONE, NONE, Centering::Both));
|
||||
PSPButton *square = new PSPButton(CTRL_SQUARE, "Square button", ImageID("I_ROUND_LINE"), ImageID("I_ROUND"), ImageID("I_SQUARE"), 1.5f, new AnchorLayoutParams(100.0f, NONE, NONE, NONE, Centering::Both));
|
||||
rightSide->Add(circle);
|
||||
rightSide->Add(cross);
|
||||
rightSide->Add(triangle);
|
||||
@@ -67,8 +67,8 @@ void TiltAnalogSettingsScreen::CreateCalibrationView(UI::ViewGroup *parent, UI::
|
||||
AnchorLayout *rightSide = new AnchorLayout(layoutParams);
|
||||
parent->Add(rightSide);
|
||||
|
||||
PSPButton *lTrigger = new PSPButton(CTRL_LTRIGGER, "Left shoulder button", ImageID("I_SHOULDER_LINE"), ImageID("I_SHOULDER"), ImageID("I_L"), 1.5f, new AnchorLayoutParams(100.0f, NONE, NONE, NONE, true));
|
||||
PSPButton *rTrigger = new PSPButton(CTRL_RTRIGGER, "Right shoulder button", ImageID("I_SHOULDER_LINE"), ImageID("I_SHOULDER"), ImageID("I_R"), 1.5f, new AnchorLayoutParams(NONE, NONE, 100.0f, NONE, true));
|
||||
PSPButton *lTrigger = new PSPButton(CTRL_LTRIGGER, "Left shoulder button", ImageID("I_SHOULDER_LINE"), ImageID("I_SHOULDER"), ImageID("I_L"), 1.5f, new AnchorLayoutParams(100.0f, NONE, NONE, NONE, Centering::Both));
|
||||
PSPButton *rTrigger = new PSPButton(CTRL_RTRIGGER, "Right shoulder button", ImageID("I_SHOULDER_LINE"), ImageID("I_SHOULDER"), ImageID("I_R"), 1.5f, new AnchorLayoutParams(NONE, NONE, 100.0f, NONE, Centering::Both));
|
||||
rTrigger->FlipImageH(true);
|
||||
rightSide->Add(lTrigger);
|
||||
rightSide->Add(rTrigger);
|
||||
|
||||
@@ -44,7 +44,7 @@ static u32 GetButtonColor() {
|
||||
class DragDropButton : public MultiTouchButton {
|
||||
public:
|
||||
DragDropButton(ConfigTouchPos &pos, const char *key, ImageID bgImg, ImageID img, const Bounds &screenBounds)
|
||||
: MultiTouchButton(key, bgImg, bgImg, img, pos.scale, new UI::AnchorLayoutParams(pos.x * screenBounds.w, pos.y * screenBounds.h, UI::NONE, UI::NONE, true)),
|
||||
: MultiTouchButton(key, bgImg, bgImg, img, pos.scale, new UI::AnchorLayoutParams(pos.x * screenBounds.w, pos.y * screenBounds.h, UI::NONE, UI::NONE, UI::Centering::Both)),
|
||||
x_(pos.x), y_(pos.y), theScale_(pos.scale), screenBounds_(screenBounds) {
|
||||
scale_ = theScale_;
|
||||
}
|
||||
@@ -412,7 +412,7 @@ bool ControlLayoutView::Touch(const TouchInput &touch) {
|
||||
}
|
||||
|
||||
newPos = ClampTo(newPos, validRange);
|
||||
pickedControl_->ReplaceLayoutParams(new AnchorLayoutParams(newPos.x, newPos.y, NONE, NONE, true));
|
||||
pickedControl_->ReplaceLayoutParams(new AnchorLayoutParams(newPos.x, newPos.y, NONE, NONE, Centering::Both));
|
||||
} else if (mode_ == 1) {
|
||||
// Resize. Vertical = scaling, horizontal = spacing;
|
||||
// Up should be bigger so let's negate in that direction
|
||||
|
||||
@@ -155,7 +155,7 @@ void RightAnalogMappingScreen::CreateViews() {
|
||||
root_ = new AnchorLayout(new LayoutParams(FILL_PARENT, FILL_PARENT));
|
||||
Choice *back = new Choice(di->T("Back"), ImageID("I_NAVIGATE_BACK"), new AnchorLayoutParams(leftColumnWidth - 10, WRAP_CONTENT, 10, NONE, NONE, 10));
|
||||
root_->Add(back)->OnClick.Handle<UIScreen>(this, &UIScreen::OnBack);
|
||||
TabHolder *tabHolder = new TabHolder(ORIENT_VERTICAL, leftColumnWidth, TabHolderFlags::Default, nullptr, new AnchorLayoutParams(10, 0, 10, 0, false));
|
||||
TabHolder *tabHolder = new TabHolder(ORIENT_VERTICAL, leftColumnWidth, TabHolderFlags::Default, nullptr, new AnchorLayoutParams(10, 0, 10, 0, Centering::None));
|
||||
root_->Add(tabHolder);
|
||||
ScrollView *rightPanel = new ScrollView(ORIENT_VERTICAL);
|
||||
tabHolder->AddTab(co->T("Binds"), ImageID::invalid(), rightPanel);
|
||||
|
||||
@@ -575,8 +575,6 @@ bool ReadDualSenseInput(HANDLE handle, HIDControllerState *state) {
|
||||
buttons &= ~0xF;
|
||||
buttons |= DecodeHatSwitch(report.buttons[0] & 0xF);
|
||||
|
||||
INFO_LOG(Log::sceCtrl, "DualSense accel: %0.2f %0.2f %0.2f", state->accelerometer[0], state->accelerometer[1], state->accelerometer[2]);
|
||||
|
||||
state->buttons = buttons;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -447,6 +447,8 @@ bool System_GetPropertyBool(SystemProperty prop) {
|
||||
#endif
|
||||
case SYSPROP_HAS_ACCELEROMETER:
|
||||
return g_InputManager.AnyAccelerometer();
|
||||
case SYSPROP_USE_IAP:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -408,9 +408,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = مسح
|
||||
Delete all = مسح الكل
|
||||
Delete completed = المسح إكتمل.
|
||||
DeleteConfirm = بيانات الحفظ هذه سوف تمسح.\nهل أنت متأكد من الإكمال?
|
||||
DeleteConfirmAll = هل تريد حقاً مسح كل \nملفات الحفظ لهذه اللعبة?
|
||||
DeleteConfirmGame = هل تود حقاً مسح هذه اللعبة \nfمن جهازك? لا يمكن الرجوع عن هذا.
|
||||
DeleteConfirm = بيانات الحفظ هذه سوف تمسح. هل أنت متأكد من الإكمال?
|
||||
DeleteConfirmAll = هل تريد حقاً مسح كل ملفات الحفظ لهذه اللعبة?
|
||||
DeleteConfirmGame = هل تود حقاً مسح هذه اللعبة fمن جهازك? لا يمكن الرجوع عن هذا.
|
||||
DeleteConfirmGameConfig = هل تود حقاً مسح الإعدادات لهذه اللعبة?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = غير قادر علي مسح البيانات.
|
||||
|
||||
@@ -404,9 +404,9 @@ Corrupted Data = Korlanmış verilən
|
||||
Delete = Sil
|
||||
Delete all = Hamısını sil
|
||||
Delete completed = Siliniş tamamlandı
|
||||
DeleteConfirm = Bu verilənlər silinəcək.\nDəvam etmək istəyisinizmi?
|
||||
DeleteConfirmAll = Bu oyun üçün bütün qorunma veriləninizi\nsilmək istəyirsinizmi?
|
||||
DeleteConfirmGame = Bu oyunu qurğunuzdan silmək istədiyinizdən\nəminsiz? Bunun qayıdışı yoxdur.
|
||||
DeleteConfirm = Bu verilənlər silinəcək. Dəvam etmək istəyisinizmi?
|
||||
DeleteConfirmAll = Bu oyun üçün bütün qorunma veriləninizi silmək istəyirsinizmi?
|
||||
DeleteConfirmGame = Bu oyunu qurğunuzdan silmək istədiyinizdən əminsiz? Bunun qayıdışı yoxdur.
|
||||
DeleteConfirmGameConfig = Bu oyun üçün quruluşları silmək doğrudan istəyirsiniz?
|
||||
DeleteConfirmSaveState = Bu qoruma durumunu ömürlük silmək istədiyinizdən əminsiz?
|
||||
DeleteFailed = Verilən silinişi uğursuz oldu.
|
||||
|
||||
@@ -400,7 +400,7 @@ Corrupted Data = Corrupted data
|
||||
Delete = Delete
|
||||
Delete all = Delete all
|
||||
Delete completed = Delete completed.
|
||||
DeleteConfirm = This save data will be deleted.\nAre you sure you want to continue?
|
||||
DeleteConfirm = This save data will be deleted. Are you sure you want to continue?
|
||||
DeleteConfirmAll = Do you really want to delete all your save data for this game?
|
||||
DeleteConfirmGame = Do you really want to delete this game from your device? You can't undo this.
|
||||
DeleteConfirmGameConfig = Do you really want to delete the settings for this game?
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Повредени данни
|
||||
Delete = Изтрий
|
||||
Delete all = Изтрий всички
|
||||
Delete completed = Изтриването завършето.
|
||||
DeleteConfirm = Този запис ще бъде изтрит.\nСигурни ли сте, че искате да продължите?
|
||||
DeleteConfirmAll = Наистина ли искате да изтриете\nвсички записани данни за тази игра?
|
||||
DeleteConfirmGame = Наистина ли искате да изтриете тази игра\nот устройството Ви? Не може да върнете това действие.
|
||||
DeleteConfirm = Този запис ще бъде изтрит. Сигурни ли сте, че искате да продължите?
|
||||
DeleteConfirmAll = Наистина ли искате да изтриете всички записани данни за тази игра?
|
||||
DeleteConfirmGame = Наистина ли искате да изтриете тази игра от устройството Ви? Не може да върнете това действие.
|
||||
DeleteConfirmGameConfig = Do you really want to delete the settings for this game?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Unable to delete data.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Dades corruptes
|
||||
Delete = Eliminar
|
||||
Delete all = Eliminar tot
|
||||
Delete completed = Esborrat completat
|
||||
DeleteConfirm = Aquesta partida serà esborrada.\nVols perdre el progrés guardat?
|
||||
DeleteConfirm = Aquesta partida serà esborrada. Vols perdre el progrés guardat?
|
||||
DeleteConfirmAll = Estàs segur que vols esborrar totes les dades de guardat d'aquest joc?
|
||||
DeleteConfirmGame = Estàs segur que vols esborrar aquest joc?\nAquesta operació no es pot desfer.
|
||||
DeleteConfirmGame = Estàs segur que vols esborrar aquest joc? Aquesta operació no es pot desfer.
|
||||
DeleteConfirmGameConfig = Estàs segur que vols esborrar la configuración d'aquest joc?.
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Les dades no s'han pogut borrar.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = Smazat
|
||||
Delete all = Smazat vše
|
||||
Delete completed = Mazání dokončeno.
|
||||
DeleteConfirm = Tato uložená data budou smazána.\nOpravdu chcete pokračovat?
|
||||
DeleteConfirmAll = Opravdu chcete smazat všechna\nvaše uložená data pro tuto hru?
|
||||
DeleteConfirmGame = Opravdu chcete tuto hru smazat\nze svého zařízení? Toto nelze vrátit zpět.
|
||||
DeleteConfirm = Tato uložená data budou smazána. Opravdu chcete pokračovat?
|
||||
DeleteConfirmAll = Opravdu chcete smazat všechna vaše uložená data pro tuto hru?
|
||||
DeleteConfirmGame = Opravdu chcete tuto hru smazat ze svého zařízení? Toto nelze vrátit zpět.
|
||||
DeleteConfirmGameConfig = Opravdu chcete smazat nastavení této hry?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Nelze smazat data.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = Slet
|
||||
Delete all = Slet alt
|
||||
Delete completed = Slettet.
|
||||
DeleteConfirm = Alt gemt data vil blive slettet.\nEr du sikker på at du vil fortsætte?
|
||||
DeleteConfirmAll = Vil du virkelig slette alle\nspil-status for dette spil?
|
||||
DeleteConfirmGame = Vil du virkelig slette dette spil\nfra din enhed? Du kan ikke fortryde.
|
||||
DeleteConfirm = Alt gemt data vil blive slettet. Er du sikker på at du vil fortsætte?
|
||||
DeleteConfirmAll = Vil du virkelig slette alle spil-status for dette spil?
|
||||
DeleteConfirmGame = Vil du virkelig slette dette spil fra din enhed? Du kan ikke fortryde.
|
||||
DeleteConfirmGameConfig = Vil du virkelig slette opsætningen for dette spil?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Ikke muligt at slette data.
|
||||
|
||||
@@ -393,7 +393,7 @@ Corrupted Data = Beschädigte Daten
|
||||
Delete = Löschen
|
||||
Delete all = Alle löschen
|
||||
Delete completed = Löschen abgeschlossen
|
||||
DeleteConfirm = Diese Speicherdaten werden gelöscht.\nWillst du wirklich fortfahren?
|
||||
DeleteConfirm = Diese Speicherdaten werden gelöscht. Willst du wirklich fortfahren?
|
||||
DeleteConfirmAll = Willst du wirklich alle deine Speicherdaten für dieses Spiel löschen?
|
||||
DeleteConfirmGame = Willst du dieses Spiel wirklich von deinem Gerät löschen? Dies lässt sich nicht rückgängig machen.
|
||||
DeleteConfirmGameConfig = Willst du die Einstellungen für dieses Spiel wirklich löschen?
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = Hapusi
|
||||
Delete all = Delete all
|
||||
Delete completed = Terhapusmi.
|
||||
DeleteConfirm = Ala dihapusmi te' data.\nYake bangmo?
|
||||
DeleteConfirmAll = Dihapus nasang tongammi te'e\nyake bangmo?
|
||||
DeleteConfirmGame = Dihapus tongammi te' paningoan?\n Tihapus tongammi dau mane.
|
||||
DeleteConfirm = Ala dihapusmi te' data. Yake bangmo?
|
||||
DeleteConfirmAll = Dihapus nasang tongammi te'e yake bangmo?
|
||||
DeleteConfirmGame = Dihapus tongammi te' paningoan? Tihapus tongammi dau mane.
|
||||
DeleteConfirmGameConfig = Do you really want to delete the settings for this game?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Unable to delete data.
|
||||
|
||||
@@ -424,7 +424,7 @@ Corrupted Data = Corrupted data
|
||||
Delete = Delete
|
||||
Delete all = Delete all
|
||||
Delete completed = Delete completed.
|
||||
DeleteConfirm = This save data will be deleted.\nAre you sure you want to continue?
|
||||
DeleteConfirm = This save data will be deleted. Are you sure you want to continue?
|
||||
DeleteConfirmAll = Do you really want to delete all your save data for this game?
|
||||
DeleteConfirmGame = Do you really want to delete this game from your device? You can't undo this.
|
||||
DeleteConfirmGameConfig = Do you really want to delete the settings for this game?
|
||||
|
||||
@@ -400,10 +400,10 @@ Corrupted Data = Datos dañados
|
||||
Delete = Borrar
|
||||
Delete all = Borrar todos
|
||||
Delete completed = Borrado terminado.
|
||||
DeleteConfirm = Estos archivos son borrados.\n¿Estás seguro/a?
|
||||
DeleteConfirmAll = ADVERTENCIA:\nTodos los archivos de guardado serán borrados.\n¿Estás seguro/a?
|
||||
DeleteConfirmGame = ADVERTENCIA:\nEste juego será borrado para siempre y no puedes deshacerlo.\n¿Estás seguro/a?
|
||||
DeleteConfirmGameConfig = ADVERTENCIA:\nLos archivos de preferencias de este juego serán borrados.\n¿Estás seguro/a?
|
||||
DeleteConfirm = Estos archivos son borrados. ¿Estás seguro/a?
|
||||
DeleteConfirmAll = ADVERTENCIA: Todos los archivos de guardado serán borrados. ¿Estás seguro/a?
|
||||
DeleteConfirmGame = ADVERTENCIA: Este juego será borrado para siempre y no puedes deshacerlo. ¿Estás seguro/a?
|
||||
DeleteConfirmGameConfig = ADVERTENCIA: Los archivos de preferencias de este juego serán borrados. ¿Estás seguro/a?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Los archivos no se pudieron borrar.
|
||||
Deleting = Borrando\nPor favor espere...
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = دادهها خراب شده
|
||||
Delete = حذف
|
||||
Delete all = حذف همه
|
||||
Delete completed = .حذف شد
|
||||
DeleteConfirm = این دادهٔ ذخیره شده حذف خواهد شد.\nآیا از حذف آن مطمئن هستید؟
|
||||
DeleteConfirmAll = آیا شما می خواهید که همه ی\nدادههای ذخیره این بازی را حذف نمایید؟
|
||||
DeleteConfirmGame = آیا شما می خواهید این بازی را\n.از دستگاه خود حذف کنید؟ نمی توانید آن را برگردانید
|
||||
DeleteConfirm = این دادهٔ ذخیره شده حذف خواهد شد. آیا از حذف آن مطمئن هستید؟
|
||||
DeleteConfirmAll = آیا شما می خواهید که همه ی دادههای ذخیره این بازی را حذف نمایید؟
|
||||
DeleteConfirmGame = آیا شما می خواهید این بازی را .از دستگاه خود حذف کنید؟ نمی توانید آن را برگردانید
|
||||
DeleteConfirmGameConfig = آیا واقعا میخواهید تنظیمات این بازی را حذف کنید؟
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Unable to delete data.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Vioittuneet tiedot
|
||||
Delete = Poista
|
||||
Delete all = Poista kaikki
|
||||
Delete completed = Poisto onnistui.
|
||||
DeleteConfirm = Tämä tallennus poistetaan.\nHaluatko varmasti jatkaa?
|
||||
DeleteConfirmAll = Haluatko varmasti poistaa kaikki\ntämän pelin tallennustiedot?
|
||||
DeleteConfirmGame = Haluatko varmasti poistaa tämän pelin\nlaitteeltasi? Tätä ei voi perua.
|
||||
DeleteConfirm = Tämä tallennus poistetaan. Haluatko varmasti jatkaa?
|
||||
DeleteConfirmAll = Haluatko varmasti poistaa kaikki tämän pelin tallennustiedot?
|
||||
DeleteConfirmGame = Haluatko varmasti poistaa tämän pelin laitteeltasi? Tätä ei voi perua.
|
||||
DeleteConfirmGameConfig = Haluatko varmasti poistaa tämän pelin asetukset?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Tietojen poistaminen epäonnistui.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Données corrompues
|
||||
Delete = Supprimer
|
||||
Delete all = Tout supprimer
|
||||
Delete completed = Suppression terminée.
|
||||
DeleteConfirm = Cette sauvegarde va être supprimée.\nÊtes-vous sûr de vouloir continuer ?
|
||||
DeleteConfirmAll = Voulez-vous vraiment supprimer toutes les\nsauvegardes de ce jeu ?\nCette action est définitive.
|
||||
DeleteConfirmGame = Voulez-vous vraiment supprimer ce jeu de votre système ?\nCette action est définitive.
|
||||
DeleteConfirm = Cette sauvegarde va être supprimée. Êtes-vous sûr de vouloir continuer ?
|
||||
DeleteConfirmAll = Voulez-vous vraiment supprimer toutes les sauvegardes de ce jeu ? Cette action est définitive.
|
||||
DeleteConfirmGame = Voulez-vous vraiment supprimer ce jeu de votre système ? Cette action est définitive.
|
||||
DeleteConfirmGameConfig = Voulez-vous vraiment supprimer les paramètres pour ce jeu ?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Suppression impossible.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = Borrar
|
||||
Delete all = Borrar todo
|
||||
Delete completed = Borrado completado.
|
||||
DeleteConfirm = Este arquivo de datos borrarase.\nSeguro que queres borralo?
|
||||
DeleteConfirmAll = Seguro que queres borrar todos\nos datos de gardado de este xogo?
|
||||
DeleteConfirmGame = Seguro que queres borrar este xogo?\nEsta operación non se pode desfacer.
|
||||
DeleteConfirm = Este arquivo de datos borrarase. Seguro que queres borralo?
|
||||
DeleteConfirmAll = Seguro que queres borrar todos os datos de gardado de este xogo?
|
||||
DeleteConfirmGame = Seguro que queres borrar este xogo? Esta operación non se pode desfacer.
|
||||
DeleteConfirmGameConfig = Seguro que queres borrar a configuración deste xogo?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Os datos non se puideron borrar.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = ΔΙΑΓΡΑΦΗ
|
||||
Delete all = ΔΙΑΓΡΑΦΗ ΟΛΩΝ
|
||||
Delete completed = ΔΙΑΓΡΑΦΗ ΟΛΟΚΛΗΡΩΘΗΚΕ
|
||||
DeleteConfirm = ΤΑ ΔΕΔΟΜΕΝΑ ΘΑ ΔΙΑΦΡΑΦΟΥΝ.\nΕΙΣΤΕ ΣΙΓΟΥΡΟΙ;
|
||||
DeleteConfirmAll = ΘΕΛΕΤΕ ΝΑ ΔΙΑΦΡΑΨΕΤΕ ΟΛΑ\nΤΑ ΔΕΔΟΜΕΝΑ ΓΙ' ΑΥΤΟ ΤΟ ΠΑΙΧΝΙΔΙ;
|
||||
DeleteConfirmGame = ΘΕΛΕΤΕ ΝΑ ΔΙΑΓΡΑΨΕΤΕ ΑΥΤΟ ΤΟ ΠΑΙΧΝΙΔΙ ΑΠΟ \nΤΗΝ ΣΥΣΚΕΥΗ ΣΑΣ; ΔΕΝ ΜΠΟΡΕΙΤΕ ΝΑ ΑΝΑΙΡΕΣΕΤΕ ΤΗΝ ΕΠΙΛΟΓΗ ΣΑΣ.
|
||||
DeleteConfirm = ΤΑ ΔΕΔΟΜΕΝΑ ΘΑ ΔΙΑΦΡΑΦΟΥΝ. ΕΙΣΤΕ ΣΙΓΟΥΡΟΙ;
|
||||
DeleteConfirmAll = ΘΕΛΕΤΕ ΝΑ ΔΙΑΦΡΑΨΕΤΕ ΟΛΑ ΤΑ ΔΕΔΟΜΕΝΑ ΓΙ' ΑΥΤΟ ΤΟ ΠΑΙΧΝΙΔΙ;
|
||||
DeleteConfirmGame = ΘΕΛΕΤΕ ΝΑ ΔΙΑΓΡΑΨΕΤΕ ΑΥΤΟ ΤΟ ΠΑΙΧΝΙΔΙ ΑΠΟ ΤΗΝ ΣΥΣΚΕΥΗ ΣΑΣ; ΔΕΝ ΜΠΟΡΕΙΤΕ ΝΑ ΑΝΑΙΡΕΣΕΤΕ ΤΗΝ ΕΠΙΛΟΓΗ ΣΑΣ.
|
||||
DeleteConfirmGameConfig = Είστε σίγουροι ότι θέλετε να διαγράψετε τις ρυθμίσεις για αυτό το παιχνίδι;
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = ΑΔΥΝΑΜΙΑ ΔΙΑΓΡΑΦΗΣ ΔΕΔΟΜΕΝΩΝ.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = Izbriši
|
||||
Delete all = Izbriši sve
|
||||
Delete completed = Brisanje dovršeno.
|
||||
DeleteConfirm = Ova data će biti izbrisana.\nŽeliš li nastaviti?
|
||||
DeleteConfirmAll = Želis li izbrisati svu\nsvoju save datu za ovu igru?
|
||||
DeleteConfirmGame = Želiš li izbrisati igru\nsa svog uređaja? Ovo ne možeš poništit.
|
||||
DeleteConfirm = Ova data će biti izbrisana. Želiš li nastaviti?
|
||||
DeleteConfirmAll = Želis li izbrisati svu svoju save datu za ovu igru?
|
||||
DeleteConfirmGame = Želiš li izbrisati igru sa svog uređaja? Ovo ne možeš poništit.
|
||||
DeleteConfirmGameConfig = Želiš li izbrisati postavke za ovu igru?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Nije moguće izbrisati datu.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Sérült adat
|
||||
Delete = Töröl
|
||||
Delete all = Mindet töröl
|
||||
Delete completed = Törölve.
|
||||
DeleteConfirm = Ez a mentés törlődni fog.\nBiztosan akarod folytatni?
|
||||
DeleteConfirmAll = Biztosan törölni akarod az összes\nmentésedet ehhez a játékhoz?
|
||||
DeleteConfirmGame = Biztosan törölni akarod ezt a játékot?\nNem lehet visszavonni.
|
||||
DeleteConfirm = Ez a mentés törlődni fog. Biztosan akarod folytatni?
|
||||
DeleteConfirmAll = Biztosan törölni akarod az összes mentésedet ehhez a játékhoz?
|
||||
DeleteConfirmGame = Biztosan törölni akarod ezt a játékot? Nem lehet visszavonni.
|
||||
DeleteConfirmGameConfig = Biztosan törölni akarod a játék beállításait?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Törlés sikertelen.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Data rusak
|
||||
Delete = Hapus
|
||||
Delete all = Hapus semua
|
||||
Delete completed = Selesai menghapus.
|
||||
DeleteConfirm = Simpanan ini akan dihapus.\nAnda yakin ingin melanjutkan?
|
||||
DeleteConfirmAll = Apakah Anda ingin menghapus semua\ndata simpanan untuk permainan ini?
|
||||
DeleteConfirmGame = Apakah Anda benar-benar ingin menghapus\npermainan ini dari perangkat? Aksi ini bersifat permanen.
|
||||
DeleteConfirm = Simpanan ini akan dihapus. Anda yakin ingin melanjutkan?
|
||||
DeleteConfirmAll = Apakah Anda ingin menghapus semua data simpanan untuk permainan ini?
|
||||
DeleteConfirmGame = Apakah Anda benar-benar ingin menghapus permainan ini dari perangkat? Aksi ini bersifat permanen.
|
||||
DeleteConfirmGameConfig = Apakah Anda benar-benar ingin menghapus pengaturan untuk permainan ini?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Tidak dapat menghapus data.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Dati corrotti
|
||||
Delete = Elimina
|
||||
Delete all = Elimina tutto
|
||||
Delete completed = Eliminazione completata.
|
||||
DeleteConfirm = Questo salvataggio sarà eliminato.\nSi è sicuri di voler continuare?
|
||||
DeleteConfirmAll = Vuoi veramente eliminare tutti\ni salvataggi di questo gioco?
|
||||
DeleteConfirmGame = Vuoi veramente eliminare questo gioco\ndal tuo dispositivo? Questa azione non si può annullare.
|
||||
DeleteConfirm = Questo salvataggio sarà eliminato. Si è sicuri di voler continuare?
|
||||
DeleteConfirmAll = Vuoi veramente eliminare tutti i salvataggi di questo gioco?
|
||||
DeleteConfirmGame = Vuoi veramente eliminare questo gioco dal tuo dispositivo? Questa azione non si può annullare.
|
||||
DeleteConfirmGameConfig = Vuoi veramente cancellare le impostazioni per questo gioco?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Impossibile cancellare i dati.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = 破損したデータ
|
||||
Delete = 削除
|
||||
Delete all = 全て削除
|
||||
Delete completed = 削除が完了しました。
|
||||
DeleteConfirm = データを削除します。\n本当に続けますか?
|
||||
DeleteConfirm = データを削除します。 本当に続けますか?
|
||||
DeleteConfirmAll = 本当にこのゲームのセーブデータを削除しますか?
|
||||
DeleteConfirmGame = 本当にこのゲームを削除しますか?\nデータを元に戻すことはできません。
|
||||
DeleteConfirmGame = 本当にこのゲームを削除しますか? データを元に戻すことはできません。
|
||||
DeleteConfirmGameConfig = 本当にこのゲームの設定を削除しますか?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = データを削除できませんでした。
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = Mbusek
|
||||
Delete all = Mbusek Kabeh
|
||||
Delete completed = Mbusek rampung.
|
||||
DeleteConfirm = Data iki arep di busek.\nTetep lanjutkake?
|
||||
DeleteConfirmAll = Njenengan yakin arep mbusek\nkabeh data penyimpenan dolanan iki?
|
||||
DeleteConfirmGame = Yakin arep mbusek dolanan iki\nsaka perangkat njenengan? Tindakan iki ora bisa di batalkake.
|
||||
DeleteConfirm = Data iki arep di busek. Tetep lanjutkake?
|
||||
DeleteConfirmAll = Njenengan yakin arep mbusek kabeh data penyimpenan dolanan iki?
|
||||
DeleteConfirmGame = Yakin arep mbusek dolanan iki saka perangkat njenengan? Tindakan iki ora bisa di batalkake.
|
||||
DeleteConfirmGameConfig = Yakin arep mbusek setelan kanggo dolanan iki?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = ora dapat mbusek data.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = 손상된 데이터
|
||||
Delete = 삭제
|
||||
Delete all = 모두 삭제
|
||||
Delete completed = 삭제가 완료되었습니다.
|
||||
DeleteConfirm = 이 저장 데이터는 삭제됩니다.\n계속할까요?
|
||||
DeleteConfirmAll = 이 게임에 대한 모든 저장 데이터를\n삭제할까요?
|
||||
DeleteConfirmGame = 이 게임을 정말로 장치에서\n삭제할까요? 이 작업은 취소할 수 없습니다.
|
||||
DeleteConfirm = 이 저장 데이터는 삭제됩니다. 계속할까요?
|
||||
DeleteConfirmAll = 이 게임에 대한 모든 저장 데이터를 삭제할까요?
|
||||
DeleteConfirmGame = 이 게임을 정말로 장치에서 삭제할까요? 이 작업은 취소할 수 없습니다.
|
||||
DeleteConfirmGameConfig = 이 게임의 설정을 삭제할까요?
|
||||
DeleteConfirmSaveState = 이 저장 상태를 영구적으로 삭제할까요?
|
||||
DeleteFailed = 데이터를 삭제할 수 없습니다.
|
||||
|
||||
@@ -414,9 +414,9 @@ Corrupted Data = زانیاریەکە تێکچووە
|
||||
Delete = سڕینەوە
|
||||
Delete all = سڕینەوەی هەمووی
|
||||
Delete completed = سڕینەوەکە سەرکەووتوو بوو
|
||||
DeleteConfirm = زانیارە خەخن کراوە دەسڕدرێتەوە.\nئایا تۆ دڵنیایت لە بەردەوام بوون؟
|
||||
DeleteConfirmAll = ئایە تۆ دڵنیایت لە\nسڕینەوەی هەموو زانیاریە خەزنکروەکان بۆ ئەم یاریە؟?
|
||||
DeleteConfirmGame = ئایا تۆ دڵنیایت کە\nئەم یاریە بسڕیتەوە لە ئامێرەکەت؟ ئەم کارە گەڕانەوەی نییە
|
||||
DeleteConfirm = زانیارە خەخن کراوە دەسڕدرێتەوە. ئایا تۆ دڵنیایت لە بەردەوام بوون؟
|
||||
DeleteConfirmAll = ئایە تۆ دڵنیایت لە سڕینەوەی هەموو زانیاریە خەزنکروەکان بۆ ئەم یاریە؟?
|
||||
DeleteConfirmGame = ئایا تۆ دڵنیایت کە ئەم یاریە بسڕیتەوە لە ئامێرەکەت؟ ئەم کارە گەڕانەوەی نییە
|
||||
DeleteConfirmGameConfig = ئایا تۆ دڵنیایت لە سڕینەوەی سێتینگەکانت بۆ ئەم یاریە؟
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = نەتوانرا زانیاریەکان بسڕدرێنەوە.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = ລຶບ
|
||||
Delete all = ລຶບທັງໝົດ
|
||||
Delete completed = ລຶບຂໍ້ມູນສຳເລັດ
|
||||
DeleteConfirm = ເຊບນີ້ຈະຖືກລຶບ\nເຈົ້າຕ້ອງການຈະດຳເນີນການຕໍ່ຫຼືບໍ່?
|
||||
DeleteConfirmAll = ເຈົ້າຕ້ອງການທີ່ຈະລຶບເຊບທັງໝົດ\nຂອງເຈົ້າສຳລັບເກມນີ້
|
||||
DeleteConfirmGame = ເຈົ້າຕ້ອງການທີ່ຈະລຶບເກມທັງໝົດ\nຈາກອຸປະກອນຂອງເຈົ້າຫຼືບໍ່? ເຈົ້າຈະບໍ່ສາມາດຍົກເລີກໄດ້
|
||||
DeleteConfirm = ເຊບນີ້ຈະຖືກລຶບ ເຈົ້າຕ້ອງການຈະດຳເນີນການຕໍ່ຫຼືບໍ່?
|
||||
DeleteConfirmAll = ເຈົ້າຕ້ອງການທີ່ຈະລຶບເຊບທັງໝົດ ຂອງເຈົ້າສຳລັບເກມນີ້
|
||||
DeleteConfirmGame = ເຈົ້າຕ້ອງການທີ່ຈະລຶບເກມທັງໝົດ ຈາກອຸປະກອນຂອງເຈົ້າຫຼືບໍ່? ເຈົ້າຈະບໍ່ສາມາດຍົກເລີກໄດ້
|
||||
DeleteConfirmGameConfig = ເຈົ້າຕ້ອງການທີ່ຈະລຶບການຕັ້ງຄ່າສຳລັບເກມນີ້ຫຼືບໍ່?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = ບໍ່ສາມາດລຶບຂໍ້ມູນ.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = Ištrinti
|
||||
Delete all = Ištrinti viską
|
||||
Delete completed = Ištrinimas baigtas.
|
||||
DeleteConfirm = This save data will be deleted.\nAre you sure you want to continue?
|
||||
DeleteConfirmAll = Ar norite tikrai ištrinti visus\njūsų išsaugojimo duomenis šitam žaidimui?
|
||||
DeleteConfirmGame = Ar norite tikrai ištrinti šitą žaidimą\niš jūsų įrenginio? Jūs negalite atstatyti šitos komandos.
|
||||
DeleteConfirm = This save data will be deleted. Are you sure you want to continue?
|
||||
DeleteConfirmAll = Ar norite tikrai ištrinti visus jūsų išsaugojimo duomenis šitam žaidimui?
|
||||
DeleteConfirmGame = Ar norite tikrai ištrinti šitą žaidimą iš jūsų įrenginio? Jūs negalite atstatyti šitos komandos.
|
||||
DeleteConfirmGameConfig = Ar tikrai norite ištrinti šiuos nustatymus iš šito žaidimo?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Neįmanoma ištrinti duomenų.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = Padam
|
||||
Delete all = Padam semua
|
||||
Delete completed = Pemadaman selesai.
|
||||
DeleteConfirm = Data disimpan ini akan dipadam.\nAnda pasti hendak teruskan?
|
||||
DeleteConfirmAll = Anda yakin ingin menghapus\nsemua data penyimpanan permainan ini?
|
||||
DeleteConfirmGame = Anda pasti memadam permainan ini\ndari peranti? Anda tak dapat kembalikan ini.
|
||||
DeleteConfirm = Data disimpan ini akan dipadam. Anda pasti hendak teruskan?
|
||||
DeleteConfirmAll = Anda yakin ingin menghapus semua data penyimpanan permainan ini?
|
||||
DeleteConfirmGame = Anda pasti memadam permainan ini dari peranti? Anda tak dapat kembalikan ini.
|
||||
DeleteConfirmGameConfig = Do you really want to delete the settings for this game?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Pemadaman data gagal.
|
||||
|
||||
@@ -400,10 +400,10 @@ Corrupted Data = Corrupted data
|
||||
Delete = Wissen
|
||||
Delete all = Alles wissen
|
||||
Delete completed = Het verwijderen is voltooid.
|
||||
DeleteConfirm = De opgeslagen data worden verwijderd.\nWeet u zeker dat u wilt doorgaan?
|
||||
DeleteConfirmAll = Weet u zeker dat u alle opgeslagen data voor deze\ngame wilt verwijderen?
|
||||
DeleteConfirmGame = Weet u zeker dat u deze game van uw apparaat wilt\nverwijderen? Dit kan niet ongedaan gemaakt worden.
|
||||
DeleteConfirmGameConfig = Weet u zeker dat u de instellingen voor deze game\nwilt verwijderen?
|
||||
DeleteConfirm = De opgeslagen data worden verwijderd. Weet u zeker dat u wilt doorgaan?
|
||||
DeleteConfirmAll = Weet u zeker dat u alle opgeslagen data voor deze game wilt verwijderen?
|
||||
DeleteConfirmGame = Weet u zeker dat u deze game van uw apparaat wilt verwijderen? Dit kan niet ongedaan gemaakt worden.
|
||||
DeleteConfirmGameConfig = Weet u zeker dat u de instellingen voor deze game wilt verwijderen?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Kan de data niet verwijderen.
|
||||
Deleting = Bezig met verwijderen...\nEen ogenblik geduld.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = Slett
|
||||
Delete all = Delete all
|
||||
Delete completed = Slettet!!.
|
||||
DeleteConfirm = Slett markert fil.\nEr du sikker på at du vil dette?
|
||||
DeleteConfirmAll = Do you really want to delete all\nyour save data for this game?
|
||||
DeleteConfirmGame = Do you really want to delete this game\nfrom your device? You can't undo this.
|
||||
DeleteConfirm = Slett markert fil. Er du sikker på at du vil dette?
|
||||
DeleteConfirmAll = Do you really want to delete all your save data for this game?
|
||||
DeleteConfirmGame = Do you really want to delete this game from your device? You can't undo this.
|
||||
DeleteConfirmGameConfig = Do you really want to delete the settings for this game?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Unable to delete data.
|
||||
|
||||
@@ -399,9 +399,9 @@ Corrupted Data = Uszkodzone dane
|
||||
Delete = Usuń
|
||||
Delete all = Usuń wszystko
|
||||
Delete completed = Usuwanie zakończone.
|
||||
DeleteConfirm = Dane zapisu zostaną usunięte.\nCzy na pewno chcesz kontynuować?
|
||||
DeleteConfirmAll = Czy na pewno chcesz usunąć wszystkie\ndane zapisu tej gry?
|
||||
DeleteConfirmGame = Czy na pewno chcesz usunąć tę grę\nze swojego urządzenia? Nie można tego cofnąć.
|
||||
DeleteConfirm = Dane zapisu zostaną usunięte. Czy na pewno chcesz kontynuować?
|
||||
DeleteConfirmAll = Czy na pewno chcesz usunąć wszystkie dane zapisu tej gry?
|
||||
DeleteConfirmGame = Czy na pewno chcesz usunąć tę grę ze swojego urządzenia? Nie można tego cofnąć.
|
||||
DeleteConfirmGameConfig = Czy na pewno chcesz usunąć ustawienia dla tej gry?
|
||||
DeleteFailed = Nie można usunąć danych.
|
||||
Deleting = Usuwanie\nProszę czekać...
|
||||
|
||||
@@ -423,9 +423,9 @@ Corrupted Data = Dados corrompidos
|
||||
Delete = Apagar
|
||||
Delete all = Apagar tudo
|
||||
Delete completed = Exclusão completada.
|
||||
DeleteConfirm = Este dado do save será apagado.\nVocê tem certeza que você quer continuar?
|
||||
DeleteConfirmAll = Você realmente quer apagar todos\nos seus dados salvos deste jogo?
|
||||
DeleteConfirmGame = Você realmente quer apagar este jogo\ndo seu dispositivo? Você não pode desfazer isto.
|
||||
DeleteConfirm = Este dado do save será apagado. Você tem certeza que você quer continuar?
|
||||
DeleteConfirmAll = Você realmente quer apagar todos os seus dados salvos deste jogo?
|
||||
DeleteConfirmGame = Você realmente quer apagar este jogo do seu dispositivo? Você não pode desfazer isto.
|
||||
DeleteConfirmGameConfig = Você realmente quer apagar as configurações deste jogo?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Incapaz de apagar os dados.
|
||||
|
||||
@@ -424,9 +424,9 @@ Corrupted Data = Dados Corrompidos
|
||||
Delete = Eliminar
|
||||
Delete all = Eliminar tudo
|
||||
Delete completed = Eliminação completa.
|
||||
DeleteConfirm = Estes dados do salvamento serão eliminados.\nTens a certeza que queres continuar?
|
||||
DeleteConfirmAll = Queres realmente eliminar todos\nos teus dados salvos deste jogo?
|
||||
DeleteConfirmGame = Queres realmente eliminar este jogo\ndo teu dispositivo? Não poderás desfazer isto.
|
||||
DeleteConfirm = Estes dados do salvamento serão eliminados. Tens a certeza que queres continuar?
|
||||
DeleteConfirmAll = Queres realmente eliminar todos os teus dados salvos deste jogo?
|
||||
DeleteConfirmGame = Queres realmente eliminar este jogo do teu dispositivo? Não poderás desfazer isto.
|
||||
DeleteConfirmGameConfig = Queres realmente eliminar as definições deste jogo?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Não foi possível eliminar os dados.
|
||||
|
||||
@@ -401,9 +401,9 @@ Corrupted Data = Corrupted data
|
||||
Delete = Șterge
|
||||
Delete all = Șterge tot
|
||||
Delete completed = Ștergere completă
|
||||
DeleteConfirm = Salvarea curentă va fi ștearsă.\nConfirmați?
|
||||
DeleteConfirmAll = Chiar vrei să-ți ștergi\ndatele salvate pt. acest joc?
|
||||
DeleteConfirmGame = Chiar vrei să ștergi acest joc\nde pe aparatul tău? Nu este cale de întoarcere.
|
||||
DeleteConfirm = Salvarea curentă va fi ștearsă. Confirmați?
|
||||
DeleteConfirmAll = Chiar vrei să-ți ștergi datele salvate pt. acest joc?
|
||||
DeleteConfirmGame = Chiar vrei să ștergi acest joc de pe aparatul tău? Nu este cale de întoarcere.
|
||||
DeleteConfirmGameConfig = Chiar vrei să ștergi setările pt. acest joc?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Nu s-au putut șterge datele.
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = Данные повреждены
|
||||
Delete = Удалить
|
||||
Delete all = Удалить всё
|
||||
Delete completed = Удаление завершено
|
||||
DeleteConfirm = Эти данные будут удалены.\nХотите продолжить?
|
||||
DeleteConfirm = Эти данные будут удалены. Хотите продолжить?
|
||||
DeleteConfirmAll = Вы уверены, что хотите удалить сохранения для данной игры?
|
||||
DeleteConfirmGame = Вы уверены, что хотите безвозвратно удалить\nданную игру с вашего устройства?
|
||||
DeleteConfirmGame = Вы уверены, что хотите безвозвратно удалить данную игру с вашего устройства?
|
||||
DeleteConfirmGameConfig = Вы уверены, что хотите удалить настройки данной игры?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Не удалось удалить данные.
|
||||
|
||||
@@ -401,9 +401,9 @@ Corrupted Data = Korrupt data
|
||||
Delete = Radera
|
||||
Delete all = Radera allt
|
||||
Delete completed = Borttaget.
|
||||
DeleteConfirm = All sparad data tas bort.\nÄr du säker på att du vill göra detta?
|
||||
DeleteConfirmAll = Vill du verkligen ta bort all\nsparad data för spelet?
|
||||
DeleteConfirmGame = Vill du verkligen ta bort det här spelet\nfrån din enhet? Detta kan inte ångras.
|
||||
DeleteConfirm = All sparad data tas bort. Är du säker på att du vill göra detta?
|
||||
DeleteConfirmAll = Vill du verkligen ta bort all sparad data för spelet?
|
||||
DeleteConfirmGame = Vill du verkligen ta bort det här spelet från din enhet? Detta kan inte ångras.
|
||||
DeleteConfirmGameConfig = Vill du verkligen ta bort inställningarna för det här spelet?
|
||||
DeleteConfirmSaveState = Är du säker på att du vill radera detta sparade tillstånd permanent?
|
||||
DeleteFailed = Misslyckades med att ta bort data.
|
||||
|
||||
@@ -401,9 +401,9 @@ Corrupted Data = Corrupted ang data
|
||||
Delete = Burahin
|
||||
Delete all = Burahin Lahat
|
||||
Delete completed = Burado na.
|
||||
DeleteConfirm = Ang save data na ito ay mabubura.\nGusto mo bang ituloy?
|
||||
DeleteConfirmAll = Gusto mo bang burahin\nang save data ng larong ito?
|
||||
DeleteConfirmGame = Gusto mo bang burahin ang larong ito\nsa iyong device? Wala ng undo ito.
|
||||
DeleteConfirm = Ang save data na ito ay mabubura. Gusto mo bang ituloy?
|
||||
DeleteConfirmAll = Gusto mo bang burahin ang save data ng larong ito?
|
||||
DeleteConfirmGame = Gusto mo bang burahin ang larong ito sa iyong device? Wala ng undo ito.
|
||||
DeleteConfirmGameConfig = Sigurado ka bang burahin ang settings ng larong ito?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Hindi mabura ang datos.
|
||||
|
||||
@@ -416,9 +416,9 @@ Corrupted Data = ข้อมูลเสียหาย
|
||||
Delete = ลบ
|
||||
Delete all = ลบทั้งหมด
|
||||
Delete completed = ลบข้อมูลสำเร็จ
|
||||
DeleteConfirm = ข้อมูลเซฟนี้จะถูกลบ\nคุณต้องการที่จะดำเนินการต่อหรือไม่?
|
||||
DeleteConfirmAll = ข้อมูลเซฟของเกมนี้ทั้งหมดจะถูกลบ\nคุณต้องการที่จะดำเนินการต่อหรือไม่?
|
||||
DeleteConfirmGame = คุณต้องการลบเกมทั้งหมดที่อยู่ในอุปกรณ์ของคุณหรือไม่?\nหากกดตกลงแล้วจะไม่สามารถยกเลิกได้
|
||||
DeleteConfirm = ข้อมูลเซฟนี้จะถูกลบ คุณต้องการที่จะดำเนินการต่อหรือไม่?
|
||||
DeleteConfirmAll = ข้อมูลเซฟของเกมนี้ทั้งหมดจะถูกลบ คุณต้องการที่จะดำเนินการต่อหรือไม่?
|
||||
DeleteConfirmGame = คุณต้องการลบเกมทั้งหมดที่อยู่ในอุปกรณ์ของคุณหรือไม่? หากกดตกลงแล้วจะไม่สามารถยกเลิกได้
|
||||
DeleteConfirmGameConfig = คุณแน่ใจนะว่าต้องการลบการตั้งค่าเฉพาะของเกมนี้?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = ไม่สามารถลบข้อมูลนี้ได้
|
||||
|
||||
@@ -402,9 +402,9 @@ Corrupted Data = Bozuk veri
|
||||
Delete = Sil
|
||||
Delete all = Tümünü sil
|
||||
Delete completed = Silme işlemi tamamlandı.
|
||||
DeleteConfirm = Bu kayıt silinecek.\nDevam etmek istiyor musunuz?
|
||||
DeleteConfirm = Bu kayıt silinecek. Devam etmek istiyor musunuz?
|
||||
DeleteConfirmAll = Bu oyun için bütün kayıtları silmek istediğine emin misin?
|
||||
DeleteConfirmGame = Bu oyunu cihazından silmek istediğine emin misin?\nBunu geri alamazsın.
|
||||
DeleteConfirmGame = Bu oyunu cihazından silmek istediğine emin misin? Bunu geri alamazsın.
|
||||
DeleteConfirmGameConfig = Bu oyun için ayarları silmek istediğine emin misin?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Veri silinemedi.
|
||||
|
||||
@@ -400,10 +400,10 @@ Corrupted Data = Пошкоджені дані
|
||||
Delete = Видалити
|
||||
Delete all = Видалити все
|
||||
Delete completed = Видалення завершено
|
||||
DeleteConfirm = Ці дані будуть видалені.\nХочете продовжити?
|
||||
DeleteConfirmAll = Всі збереження гри будуть видалені.\nВи впевнені, що хочете продовжити?
|
||||
DeleteConfirmGame = Ця гра буде повністю видалена.\nВи впевнені, що хочете продовжити?
|
||||
DeleteConfirmGameConfig = Параметри налаштування для цієї гри будуть видалені.\nВи впевнені, що хочете продовжити?
|
||||
DeleteConfirm = Ці дані будуть видалені. Хочете продовжити?
|
||||
DeleteConfirmAll = Всі збереження гри будуть видалені. Ви впевнені, що хочете продовжити?
|
||||
DeleteConfirmGame = Ця гра буде повністю видалена. Ви впевнені, що хочете продовжити?
|
||||
DeleteConfirmGameConfig = Параметри налаштування для цієї гри будуть видалені. Ви впевнені, що хочете продовжити?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Неможливо видалити дані.
|
||||
Deleting = Видалення\nБудь ласка, зачекайте...
|
||||
|
||||
@@ -400,10 +400,10 @@ Corrupted Data = Corrupted data
|
||||
Delete = Xóa
|
||||
Delete all = Xóa tất cả
|
||||
Delete completed = Đã xóa xong.
|
||||
DeleteConfirm = File save này sẽ bị xóa.\nBạn có muốn tiếp tục?
|
||||
DeleteConfirmAll = Bạn có muốn xóa tất cả\ndữ liệu save của trò này??
|
||||
DeleteConfirmGame = Bạn có muốn xóa trò này\nkhỏi thiết bị của bạn?
|
||||
DeleteConfirmGameConfig = Bạn có muốn xóa thiết lập\nđối với game này?
|
||||
DeleteConfirm = File save này sẽ bị xóa. Bạn có muốn tiếp tục?
|
||||
DeleteConfirmAll = Bạn có muốn xóa tất cả dữ liệu save của trò này??
|
||||
DeleteConfirmGame = Bạn có muốn xóa trò này khỏi thiết bị của bạn?
|
||||
DeleteConfirmGameConfig = Bạn có muốn xóa thiết lập đối với game này?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = Không thể xóa dữ liệu này.
|
||||
Deleting = Đang xóa\nXin đợi...
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = 数据损坏
|
||||
Delete = 删除
|
||||
Delete all = 清除
|
||||
Delete completed = 已删除。
|
||||
DeleteConfirm = 存档将被删除。\n您确定要继续吗?
|
||||
DeleteConfirmAll = 将删除此游戏的所有存档。\n您确定要这样做吗?
|
||||
DeleteConfirmGame = 将删除此游戏的文件,且不能复原。\n您确定要这样做吗?
|
||||
DeleteConfirm = 存档将被删除。 您确定要继续吗?
|
||||
DeleteConfirmAll = 将删除此游戏的所有存档。 您确定要这样做吗?
|
||||
DeleteConfirmGame = 将删除此游戏的文件,且不能复原。 您确定要这样做吗?
|
||||
DeleteConfirmGameConfig = 您确定要删除此游戏的设置吗?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = 无法删除存档。
|
||||
|
||||
@@ -400,9 +400,9 @@ Corrupted Data = 已損毀的資料
|
||||
Delete = 刪除
|
||||
Delete all = 全部刪除
|
||||
Delete completed = 刪除完成
|
||||
DeleteConfirm = 這個存檔的資料將被刪除\n仍要繼續嗎?
|
||||
DeleteConfirmAll = 您確定要刪除\n這個遊戲的全部存檔資料嗎?
|
||||
DeleteConfirmGame = 您確定要從您的裝置上刪除這個遊戲嗎?\n您無法復原此動作。
|
||||
DeleteConfirm = 這個存檔的資料將被刪除 仍要繼續嗎?
|
||||
DeleteConfirmAll = 您確定要刪除 這個遊戲的全部存檔資料嗎?
|
||||
DeleteConfirmGame = 您確定要從您的裝置上刪除這個遊戲嗎? 您無法復原此動作。
|
||||
DeleteConfirmGameConfig = 您確定要刪除這個遊戲的全部設定嗎?
|
||||
DeleteConfirmSaveState = Are you sure you want to permanently delete this save state?
|
||||
DeleteFailed = 無法刪除資料
|
||||
|
||||
Reference in new issue
Block a user