aboutsummaryrefslogtreecommitdiff
path: root/gui/unknown-game-dialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/unknown-game-dialog.cpp')
-rw-r--r--gui/unknown-game-dialog.cpp71
1 files changed, 35 insertions, 36 deletions
diff --git a/gui/unknown-game-dialog.cpp b/gui/unknown-game-dialog.cpp
index d96791742e..0aa8cc5750 100644
--- a/gui/unknown-game-dialog.cpp
+++ b/gui/unknown-game-dialog.cpp
@@ -38,14 +38,21 @@ enum {
kCopyToClipboard = 'cpcl',
kOpenBugtrackerURL = 'ourl',
kClose = 'clse',
+ kAddAnyway = 'adda',
kScrollContainerReflow = 'SCRf'
};
-UnknownGameDialog::UnknownGameDialog(const DetectionResults &detectionResults) :
+UnknownGameDialog::UnknownGameDialog(const DetectedGame &detectedGame) :
Dialog(30, 20, 260, 124),
- _detectionResults(detectionResults) {
+ _detectedGame(detectedGame) {
// For now place the buttons with a default place and size. They will be resized and moved when rebuild() is called.
- _closeButton = new ButtonWidget(this, 0, 0, 0, 0, _("Close"), 0, kClose);
+ _closeButton = new ButtonWidget(this, 0, 0, 0, 0, detectedGame.canBeAdded ? _("Cancel") : _("Close"), 0, kClose);
+
+ if (detectedGame.canBeAdded) {
+ _addAnywayButton = new ButtonWidget(this, 0, 0, 0, 0, _("Add anyway"), 0, kAddAnyway);
+ } else {
+ _addAnywayButton = nullptr;
+ }
//Check if we have clipboard functionality
if (g_system->hasFeature(OSystem::kFeatureClipboardSupport)) {
@@ -76,6 +83,8 @@ void UnknownGameDialog::reflowLayout() {
}
void UnknownGameDialog::rebuild() {
+ // TODO: Use a theme layout dialog definition
+
// First remove the old text widgets
for (uint i = 0; i < _textWidgets.size() ; i++) {
_textContainer->removeWidget(_textWidgets[i]);
@@ -91,7 +100,7 @@ void UnknownGameDialog::rebuild() {
int buttonHeight = g_gui.xmlEval()->getVar("Globals.Button.Height", 0);
int buttonWidth = g_gui.xmlEval()->getVar("Globals.Button.Width", 0);
- Common::String reportTranslated = _detectionResults.generateUnknownGameReport(true);
+ Common::String reportTranslated = generateUnknownGameReport(_detectedGame, true, true);
// Check if we have clipboard functionality and expand the reportTranslated message if needed...
if (g_system->hasFeature(OSystem::kFeatureClipboardSupport)) {
@@ -116,7 +125,9 @@ void UnknownGameDialog::rebuild() {
_h = MIN(screenH - 20, lineCount * kLineHeight + kLineHeight + buttonHeight + 24);
int closeButtonWidth = MAX(buttonWidth, g_gui.getFont().getStringWidth(_closeButton->getLabel()) + 10);
- int copyToClipboardButtonWidth = 0, openBugtrackerURLButtonWidth = 0, totalButtonWidth = closeButtonWidth;
+ int copyToClipboardButtonWidth = 0, openBugtrackerURLButtonWidth = 0, addAnywayButtonWidth = 0;
+ int totalButtonWidth = closeButtonWidth;
+
if (_copyToClipboardButton) {
copyToClipboardButtonWidth = MAX(buttonWidth, g_gui.getFont().getStringWidth(_copyToClipboardButton->getLabel()) + 10);
totalButtonWidth += copyToClipboardButtonWidth + 10;
@@ -125,6 +136,10 @@ void UnknownGameDialog::rebuild() {
openBugtrackerURLButtonWidth = MAX(buttonWidth, g_gui.getFont().getStringWidth(_openBugTrackerUrlButton->getLabel()) + 10);
totalButtonWidth += openBugtrackerURLButtonWidth + 10;
}
+ if (_addAnywayButton) {
+ addAnywayButtonWidth = MAX(buttonWidth, g_gui.getFont().getStringWidth(_addAnywayButton->getLabel()) + 10);
+ totalButtonWidth += addAnywayButtonWidth + 10;
+ }
_w = MAX(MAX(maxlineWidth, 0) + 16 + scrollbarWidth, totalButtonWidth) + 20;
@@ -133,7 +148,12 @@ void UnknownGameDialog::rebuild() {
_y = (g_system->getOverlayHeight() - _h) / 2;
// Now move the buttons and text container to their proper place
- int buttonPos = _w - closeButtonWidth - 10;
+ int buttonPos = _w - 10;
+ if (_addAnywayButton) {
+ buttonPos -= addAnywayButtonWidth + 5;
+ _addAnywayButton->resize(buttonPos, _h - buttonHeight - 8, addAnywayButtonWidth, buttonHeight);
+ }
+ buttonPos -= closeButtonWidth + 5;
_closeButton->resize(buttonPos, _h - buttonHeight - 8, closeButtonWidth, buttonHeight);
if (_copyToClipboardButton) {
buttonPos -= copyToClipboardButtonWidth + 5;
@@ -156,7 +176,7 @@ void UnknownGameDialog::rebuild() {
}
}
-Common::String UnknownGameDialog::encodeUrlString(const Common::String& string) {
+Common::String UnknownGameDialog::encodeUrlString(const Common::String &string) {
Common::String encoded;
for (uint i = 0 ; i < string.size() ; ++i) {
char c = string[i];
@@ -170,34 +190,10 @@ Common::String UnknownGameDialog::encodeUrlString(const Common::String& string)
}
Common::String UnknownGameDialog::generateBugtrackerURL() {
- Common::String report = _detectionResults.generateUnknownGameReport(false);
- // Remove the filesystem path from the bugtracker report.
- // The path is on the first line between single quotes. We strip everything except the last level.
- int path_start = -1, path_size = 0;
- for (uint i = 0 ; i < report.size() ; ++i) {
- char c = report[i];
- if (c == '\'') {
- if (path_start == -1)
- path_start = i + 1;
- else
- break;
- } else if (path_start != -1 && (c == '/' || c == '\\')) {
- path_size = 1 + i - path_start;
- } else if (c == '\n') {
- path_size = 0;
- break;
- }
- }
- if (path_size > 0)
- report.erase(path_start, path_size);
+ Common::String report = generateUnknownGameReport(_detectedGame, false, false);
report = encodeUrlString(report);
- // Pass engine name if there is only one.
- Common::String engineName = "unknown";
- Common::StringArray engines = _detectionResults.getUnknownGameEngines();
- if (engines.size() == 1)
- engineName = engines.front();
- engineName = encodeUrlString(engineName);
+ Common::String engineName = encodeUrlString(_detectedGame.engineName);
return Common::String::format(
"https://www.scummvm.org/unknowngame?"
@@ -210,8 +206,7 @@ Common::String UnknownGameDialog::generateBugtrackerURL() {
void UnknownGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
switch(cmd) {
case kCopyToClipboard: {
- // TODO: Remove the filesystem path from the report
- Common::String report = _detectionResults.generateUnknownGameReport(false);
+ Common::String report = generateUnknownGameReport(_detectedGame, false, false);
if (g_system->setTextInClipboard(report)) {
g_system->displayMessageOnOSD(
@@ -222,8 +217,12 @@ void UnknownGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32
break;
}
case kClose:
+ // The user cancelled adding the game
+ setResult(-1);
+ close();
+ break;
+ case kAddAnyway:
// When the detection entry comes from the fallback detector, the game can be added / launched anyways.
- // TODO: Add a button to cancel adding the game. And make it clear that launching the game may not work properly.
close();
break;
case kOpenBugtrackerURL: