summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIra Rice <irarice@gmail.com>2009-03-10 08:11:48 -0600
committerIra Rice <irarice@gmail.com>2009-03-10 08:11:48 -0600
commit443a10db52e909c4c2a33543795ec8837547e973 (patch)
treefc8fff5e1dbd5e171974919186f6356ffce7b6ff
parent03507766fa4ee07491b7ee702093669de6222c9c (diff)
downloadmana-client-443a10db52e909c4c2a33543795ec8837547e973.tar.gz
mana-client-443a10db52e909c4c2a33543795ec8837547e973.tar.bz2
mana-client-443a10db52e909c4c2a33543795ec8837547e973.tar.xz
mana-client-443a10db52e909c4c2a33543795ec8837547e973.zip
Made it so that when windows load previous states, they are never
smaller than the minimum width and height (a check that should have been enforced in the first place), as well as modified the NPC list and text dialogs to remember where they were when they were moved or resized last. Signed-off-by: Ira Rice <irarice@gmail.com>
-rw-r--r--src/gui/npc_text.cpp11
-rw-r--r--src/gui/npc_text.h13
-rw-r--r--src/gui/npclistdialog.cpp6
-rw-r--r--src/gui/npclistdialog.h3
-rw-r--r--src/gui/window.cpp41
-rw-r--r--src/gui/window.h6
-rw-r--r--src/net/npchandler.cpp3
7 files changed, 61 insertions, 22 deletions
diff --git a/src/gui/npc_text.cpp b/src/gui/npc_text.cpp
index ec8a4b6e..58aa0c5e 100644
--- a/src/gui/npc_text.cpp
+++ b/src/gui/npc_text.cpp
@@ -35,10 +35,10 @@
#include "../utils/gettext.h"
NpcTextDialog::NpcTextDialog(Network *network):
- Window(_("NPC")), mNetwork(network)
+ Window("NPC"), mNetwork(network)
{
+ setWindowName(_("NPC"));
setResizable(true);
- setCloseButton(true);
setMinWidth(200);
setMinHeight(150);
@@ -89,6 +89,7 @@ void NpcTextDialog::action(const gcn::ActionEvent &event)
{
clearText();
setVisible(false);
+ saveWindowState();
if (current_npc)
nextDialog();
@@ -118,3 +119,9 @@ void NpcTextDialog::widgetResized(const gcn::Event &event)
setText(mText);
}
+void NpcTextDialog::requestFocus()
+{
+ loadWindowState();
+ setVisible(true);
+}
+
diff --git a/src/gui/npc_text.h b/src/gui/npc_text.h
index 615902db..f01e3602 100644
--- a/src/gui/npc_text.h
+++ b/src/gui/npc_text.h
@@ -74,11 +74,24 @@ class NpcTextDialog : public Window, public gcn::ActionListener
*/
void addText(const std::string &string);
+ /**
+ * Notifies the server that the client has performed a next action.
+ */
void nextDialog(int npcID = current_npc);
+ /**
+ * Notifies the server that the client has performed a close action.
+ */
void closeDialog(int npcID = current_npc);
/**
+ * Initializes window width to the last known setting. Since the dialog
+ * doesn't need any extra focus outside of what it's given in the Game
+ * class, this is all it does for now.
+ */
+ void requestFocus();
+
+ /**
* Called when resizing the window.
*
* @param event The calling event
diff --git a/src/gui/npclistdialog.cpp b/src/gui/npclistdialog.cpp
index c639411d..f049cba7 100644
--- a/src/gui/npclistdialog.cpp
+++ b/src/gui/npclistdialog.cpp
@@ -37,8 +37,9 @@
#include "../utils/gettext.h"
NpcListDialog::NpcListDialog(Network *network):
- Window(_("NPC")), mNetwork(network)
+ Window("NPC"), mNetwork(network)
{
+ setWindowName(_("NPC"));
setResizable(true);
setMinWidth(200);
@@ -114,6 +115,7 @@ void NpcListDialog::action(const gcn::ActionEvent &event)
if (choice)
{
setVisible(false);
+ saveWindowState();
reset();
MessageOut outMsg(mNetwork);
@@ -129,4 +131,6 @@ void NpcListDialog::requestFocus()
{
mItemList->requestFocus();
mItemList->setSelected(0);
+ loadWindowState();
+ setVisible(true);
}
diff --git a/src/gui/npclistdialog.h b/src/gui/npclistdialog.h
index 0a0e9813..e3cf375b 100644
--- a/src/gui/npclistdialog.h
+++ b/src/gui/npclistdialog.h
@@ -76,7 +76,8 @@ class NpcListDialog : public Window, public gcn::ActionListener,
void reset();
/**
- * Requests the listbox to take focus for input.
+ * Requests the listbox to take focus for input and sets window width
+ * to the last known setting.
*/
void requestFocus();
diff --git a/src/gui/window.cpp b/src/gui/window.cpp
index 2b422f86..8faf63a0 100644
--- a/src/gui/window.cpp
+++ b/src/gui/window.cpp
@@ -118,21 +118,8 @@ Window::Window(const std::string& caption, bool modal, Window *parent, const std
Window::~Window()
{
logger->log("Window::~Window(\"%s\")", getCaption().c_str());
- const std::string &name = mWindowName;
- // Saving X, Y and Width and Height for resizables in the config
- if (!name.empty())
- {
- config.setValue(name + "WinX", getX());
- config.setValue(name + "WinY", getY());
- config.setValue(name + "Visible", isVisible());
-
- if (mGrip)
- {
- config.setValue(name + "WinWidth", getWidth());
- config.setValue(name + "WinHeight", getHeight());
- }
- }
+ saveWindowState();
delete mLayout;
@@ -478,8 +465,13 @@ void Window::loadWindowState()
if (mGrip)
{
- setSize((int) config.getValue(name + "WinWidth", mDefaultWidth),
- (int) config.getValue(name + "WinHeight", mDefaultHeight));
+ const int width = (int) config.getValue(name + "WinWidth",
+ mDefaultWidth);
+ const int height = (int) config.getValue(name + "WinHeight",
+ mDefaultHeight);
+
+ setSize(width < getMinWidth() ? getMinWidth() : width,
+ height < getMinHeight() ? getMinHeight() : height);
}
else
{
@@ -487,6 +479,23 @@ void Window::loadWindowState()
}
}
+void Window::saveWindowState()
+{
+ // Saving X, Y and Width and Height for resizables in the config
+ if (!mWindowName.empty())
+ {
+ config.setValue(mWindowName + "WinX", getX());
+ config.setValue(mWindowName + "WinY", getY());
+ config.setValue(mWindowName + "Visible", isVisible());
+
+ if (mGrip)
+ {
+ config.setValue(mWindowName + "WinWidth", getWidth());
+ config.setValue(mWindowName + "WinHeight", getHeight());
+ }
+ }
+}
+
void Window::setDefaultSize(int defaultX, int defaultY,
int defaultWidth, int defaultHeight)
{
diff --git a/src/gui/window.h b/src/gui/window.h
index 3a92ac17..bf15dedb 100644
--- a/src/gui/window.h
+++ b/src/gui/window.h
@@ -234,6 +234,12 @@ class Window : public gcn::Window, gcn::WidgetListener
void loadWindowState();
/**
+ * Saves the window state so that when the window is reloaded, it'll
+ * maintain its previous state and location.
+ */
+ void saveWindowState();
+
+ /**
* Set the default win pos and size.
* (which can be different of the actual ones.)
*/
diff --git a/src/net/npchandler.cpp b/src/net/npchandler.cpp
index 41af4467..60a77af1 100644
--- a/src/net/npchandler.cpp
+++ b/src/net/npchandler.cpp
@@ -60,7 +60,6 @@ void NPCHandler::handleMessage(MessageIn *msg)
current_npc = msg->readInt32();
player_node->setAction(LocalPlayer::STAND);
npcListDialog->parseItems(msg->readString(msg->getLength() - 8));
- npcListDialog->setVisible(true);
npcListDialog->requestFocus();
break;
@@ -69,7 +68,7 @@ void NPCHandler::handleMessage(MessageIn *msg)
current_npc = msg->readInt32();
player_node->setAction(LocalPlayer::STAND);
npcTextDialog->addText(msg->readString(msg->getLength() - 8));
- npcTextDialog->setVisible(true);
+ npcTextDialog->requestFocus();
break;
case SMSG_NPC_CLOSE: