summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/widgets/itemlinkhandler.cpp12
-rw-r--r--src/gui/windows/questswindow.cpp19
-rw-r--r--src/gui/windows/questswindow.h3
3 files changed, 32 insertions, 2 deletions
diff --git a/src/gui/widgets/itemlinkhandler.cpp b/src/gui/widgets/itemlinkhandler.cpp
index 983129a3f..b2e4a89c9 100644
--- a/src/gui/widgets/itemlinkhandler.cpp
+++ b/src/gui/widgets/itemlinkhandler.cpp
@@ -34,6 +34,7 @@
#include "gui/windows/confirmdialog.h"
#include "gui/windows/helpwindow.h"
+#include "gui/windows/questswindow.h"
#include "input/inputmanager.h"
@@ -178,11 +179,14 @@ void ItemLinkHandler::handleSearchLink(const std::string &link)
void ItemLinkHandler::handleLink(const std::string &link,
MouseEvent *const event)
{
+ if (link.empty())
+ return;
+
if (strStartWith(link, "http://") || strStartWith(link, "https://"))
{
handleHttpLink(link, event);
}
- else if (!link.empty() && link[0] == '?')
+ else if (link[0] == '?')
{
handleSearchLink(link);
}
@@ -203,10 +207,14 @@ void ItemLinkHandler::handleLink(const std::string &link,
if (helpWindow)
helpWindow->loadHelpSimple("news");
}
- if (link == "copyright")
+ else if (link == "copyright")
{
inputManager.executeAction(InputAction::WINDOW_ABOUT);
}
+ else if (link[0] == 'q')
+ {
+ questsWindow->selectQuest(atoi(link.substr(1).c_str()));
+ }
else
{
handleItemLink(link);
diff --git a/src/gui/windows/questswindow.cpp b/src/gui/windows/questswindow.cpp
index ab204d1f8..5ffb2fc2f 100644
--- a/src/gui/windows/questswindow.cpp
+++ b/src/gui/windows/questswindow.cpp
@@ -142,6 +142,7 @@ QuestsWindow::~QuestsWindow()
delete2(mItemLinkHandler);
mQuestLinks.clear();
+ mQuestReverseLinks.clear();
if (mCompleteIcon)
{
mCompleteIcon->decRef();
@@ -183,6 +184,7 @@ void QuestsWindow::rebuild(const bool playSound)
{
mQuestsModel->clear();
mQuestLinks.clear();
+ mQuestReverseLinks.clear();
StringVect &names = mQuestsModel->getNames();
std::vector<Image*> &images = mQuestsModel->getImages();
std::vector<QuestItem*> complete;
@@ -234,6 +236,7 @@ void QuestsWindow::rebuild(const bool playSound)
}
quest->completeFlag = 1;
mQuestLinks.push_back(quest);
+ mQuestReverseLinks[quest->var] = k;
names.push_back(quest->name);
if (mCompleteIcon)
{
@@ -257,6 +260,7 @@ void QuestsWindow::rebuild(const bool playSound)
}
quest->completeFlag = 0;
mQuestLinks.push_back(quest);
+ mQuestReverseLinks[quest->var] = k;
names.push_back(quest->name);
if (mIncompleteIcon)
{
@@ -460,3 +464,18 @@ void QuestsWindow::addEffect(Being *const being)
being->addSpecialEffect(effect->effectId);
}
}
+
+void QuestsWindow::selectQuest(const int varId)
+{
+ std::map<int, int>::const_iterator it = mQuestReverseLinks.find(varId);
+ if (it == mQuestReverseLinks.end())
+ return;
+ if (mVisible == Visible_false)
+ setVisible(Visible_true);
+ const int listPos = (*it).second;
+ if (listPos < 0)
+ return;
+ showQuest(mQuestLinks[listPos]);
+ mQuestsListBox->setSelected(listPos);
+ requestMoveToTop();
+}
diff --git a/src/gui/windows/questswindow.h b/src/gui/windows/questswindow.h
index dd3464fae..f4f00f429 100644
--- a/src/gui/windows/questswindow.h
+++ b/src/gui/windows/questswindow.h
@@ -76,6 +76,8 @@ class QuestsWindow final : public Window,
void addEffect(Being *const being);
+ void selectQuest(const int varId);
+
private:
QuestsModel *mQuestsModel A_NONNULLPOINTER;
ExtendedListBox *mQuestsListBox A_NONNULLPOINTER;
@@ -94,6 +96,7 @@ class QuestsWindow final : public Window,
// npc effects for current map and values: npc, effect
NpcQuestEffectMap mNpcEffects;
std::vector<QuestItem*> mQuestLinks;
+ std::map<int, int> mQuestReverseLinks;
int mNewQuestEffectId;
int mCompleteQuestEffectId;
const Map *mMap;