diff options
author | José Ávila <linux@javila.net> | 2005-06-02 16:10:34 +0000 |
---|---|---|
committer | José Ávila <linux@javila.net> | 2005-06-02 16:10:34 +0000 |
commit | e0da83ae7336be5da0ea11b30827782b8e8660d7 (patch) | |
tree | 568c1c4b0acf289d1e762a5f0379c6918b8960ca /src/gui/help.cpp | |
parent | 108efd1050c8510e6dec69b40f7c0539d7a36682 (diff) | |
download | mana-e0da83ae7336be5da0ea11b30827782b8e8660d7.tar.gz mana-e0da83ae7336be5da0ea11b30827782b8e8660d7.tar.bz2 mana-e0da83ae7336be5da0ea11b30827782b8e8660d7.tar.xz mana-e0da83ae7336be5da0ea11b30827782b8e8660d7.zip |
In game help system files
Diffstat (limited to 'src/gui/help.cpp')
-rw-r--r-- | src/gui/help.cpp | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/gui/help.cpp b/src/gui/help.cpp new file mode 100644 index 00000000..5b652f99 --- /dev/null +++ b/src/gui/help.cpp @@ -0,0 +1,131 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ + +#include "help.h" +#include "../main.h" +#include <fstream> + +HelpWindow::HelpWindow(): + Window("Help") +{ + setContentSize(455, 350); + setResizeable(true); + + textBox = new TextBox(); + textBox->setEditable(false); + scrollArea = new ScrollArea(textBox); + okButton = new Button("Close"); + + scrollArea->setDimension(gcn::Rectangle( + 5, 5, 445, 335 - okButton->getHeight())); + okButton->setPosition( + 450 - okButton->getWidth(), + 345 - okButton->getHeight()); + + okButton->setEventId("close"); + okButton->addActionListener(this); + + add(scrollArea); + add(okButton); + + //setLocationRelativeTo(getParent()); + textBox->requestFocus(); + + std::string defHelp = "index"; + loadHelp(defHelp); +} + +HelpWindow::~HelpWindow() +{ + delete okButton; + delete textBox; + delete scrollArea; + links.clear(); + +} + +void HelpWindow::action(const std::string& eventId) +{ + scheduleDelete(); +} + +void HelpWindow::mousePress(int mx, int my, int button) +{ + int x1 = scrollArea->getX() + 10; + int y1 = scrollArea->getY() + 15; + int x2 = x1 + scrollArea->getWidth() - 25; + int y2 = y1 + scrollArea->getHeight(); + if (button == gcn::MouseInput::LEFT) { + if ((mx >= x1) && (my >= y1) && (mx <= x2) && (my <= y2)) + { + for (unsigned int i = 0; i < links.size(); i++) + { + int y1 = links[i].yPos * textBox->getFont()->getHeight() + 5 - + scrollArea->getVerticalScrollAmount(); + int y2 = y1 + textBox->getFont()->getHeight(); + if ((my > y1) && (my < y2)) { + std::string tmp = links[i].file; + loadHelp(tmp); + } + } + } + } +} + +void HelpWindow::loadHelp(std::string& helpFile) { + helpFile = TMW_DATADIR "data/help/" + helpFile + ".txt"; + + std::ifstream fin; + fin.open(helpFile.c_str()); + if (fin.fail()) + { + logger->log("Couldn't load help file: %s", helpFile.c_str()); + return; + } + + links.clear(); + textBox->setText(""); + + while (!fin.eof()) + { + std::string line = ""; + getline(fin, line); + + // Check for links + if (line.substr(0, 1) == "@") + { + int idx = line.find("->"); + HELP_LINK hlink; + hlink.yPos = textBox->getNumberOfRows() + 1; + hlink.file = line.substr(1, idx - 1); + links.push_back(hlink); + + line = " " + line.erase(0, idx); + } + + textBox->addRow(line); + } + scrollArea->setVerticalScrollAmount(0); + + fin.close(); +} |