diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/buttonbox.cpp | 43 | ||||
-rw-r--r-- | src/gui/buttonbox.h | 69 | ||||
-rw-r--r-- | src/gui/chat.cpp | 6 | ||||
-rw-r--r-- | src/gui/recorder.cpp | 116 | ||||
-rw-r--r-- | src/gui/recorder.h | 88 |
5 files changed, 207 insertions, 115 deletions
diff --git a/src/gui/buttonbox.cpp b/src/gui/buttonbox.cpp deleted file mode 100644 index d29f3c58..00000000 --- a/src/gui/buttonbox.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 - */ - -#include "button.h" -#include "buttonbox.h" - -ButtonBox::ButtonBox(const std::string &title, const std::string &buttonTxt, - ButtonBoxListener *listener) : - Window(title), - mListener(listener) -{ - Button *button = new Button(buttonTxt, "activate", this); - setContentSize(button->getWidth() + 10, - button->getHeight() + 10); - button->setPosition(5, 5); - add(button); -} - -void ButtonBox::action(const gcn::ActionEvent &event) -{ - if (event.getId() == "activate") - { - mListener->buttonBoxRespond(); - } -} diff --git a/src/gui/buttonbox.h b/src/gui/buttonbox.h deleted file mode 100644 index 6d0e46b6..00000000 --- a/src/gui/buttonbox.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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 - */ - -#ifndef BUTTONBOX_H -#define BUTTONBOX_H - -#include <string> - -#include <guichan/actionlistener.hpp> - -#include "window.h" - -#include "../guichanfwd.h" - -class ButtonBoxListener -{ - public: - - /* - * function that ButtonBox calls when the button has been pressed - */ - virtual void buttonBoxRespond() = 0; -}; - -class ButtonBox : public Window, public gcn::ActionListener -{ - public: - - /* - * Constructor - * - * @param title is the text that appears at the top of the box - * @param buttonTxt is the text that appears on the button - * @param listener points to the class that should respond to the - * button press - */ - ButtonBox(const std::string &title, const std::string &buttonTxt, - ButtonBoxListener *listener); - - /* - * called when the button is pressed - * - * @param event is the event that is generated - */ - void action(const gcn::ActionEvent &event); - - private: - - ButtonBoxListener *mListener; -}; -#endif diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp index 1a3cb2a4..068fad08 100644 --- a/src/gui/chat.cpp +++ b/src/gui/chat.cpp @@ -28,6 +28,7 @@ #include "chat.h" #include "chatinput.h" #include "itemlinkhandler.h" +#include "recorder.h" #include "scrollarea.h" #include "sdlinput.h" #include "windowcontainer.h" @@ -40,7 +41,6 @@ #include "../game.h" #include "../localplayer.h" #include "../party.h" -#include "../recorder.h" #include "../net/messageout.h" #include "../net/protocol.h" @@ -477,7 +477,7 @@ void ChatWindow::chatSend(const std::string &nick, std::string msg) else if (command == "whisper" || command == "msg" || command == "w") whisper(nick, msg); else if (command == "record") - mRecorder->respond(msg); + mRecorder->changeStatus(msg); else if (command == "toggle") { if (msg == "") @@ -850,7 +850,7 @@ void ChatWindow::help(const std::string & msg1, const std::string & msg2) } else if (msg1 == "record") { - mRecorder->help(msg2); + mRecorder->help2(); } else if (msg1 == "toggle") { diff --git a/src/gui/recorder.cpp b/src/gui/recorder.cpp new file mode 100644 index 00000000..da67875b --- /dev/null +++ b/src/gui/recorder.cpp @@ -0,0 +1,116 @@ +/* + * 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 + */ + +#include <physfs.h> + +#include "button.h" +#include "chat.h" +#include "recorder.h" + +#include "../utils/trim.h" + +Recorder::Recorder(ChatWindow *chat, const std::string &title, + const std::string &buttonTxt) : + Window(title) +{ + mChat = chat; + Button *button = new Button(buttonTxt, "activate", this); + setContentSize(button->getWidth() + 10, button->getHeight() + 10); + button->setPosition(5, 5); + add(button); +} + +void Recorder::record(const std::string &msg) +{ + if (mStream.is_open()) + { + mStream << msg << std::endl; + } +} + +void Recorder::changeStatus(const std::string &msg) +{ + std::string msgCopy = msg; + trim(msgCopy); + + if (msgCopy == "") + { + if (mStream.is_open()) + { + mStream.close(); + setVisible(false); + + /* + * Message should go after mStream is closed so that it isn't + * recorded. + */ + mChat->chatLog("Finishing recording.", BY_SERVER); + } + else + { + mChat->chatLog("Not currently recording.", BY_SERVER); + } + } + else if (mStream.is_open()) + { + mChat->chatLog("Already recording.", BY_SERVER); + } + else + { + /* + * Message should go before mStream is opened so that it isn't + * recorded. + */ + mChat->chatLog("Starting to record...", BY_SERVER); + std::string file = std::string(PHYSFS_getUserDir()) + "/.aethyra/" + msgCopy; + + mStream.open(file.c_str(), std::ios_base::trunc); + + if (mStream.is_open()) + setVisible(true); + else + mChat->chatLog("Failed to start recording.", BY_SERVER); + } +} + +void Recorder::help() const +{ + mChat->chatLog("/record <filename>: Start recording the chat.", BY_SERVER); +} + +void Recorder::help2() const +{ + mChat->chatLog("Command: /record <filename>", BY_SERVER); + mChat->chatLog("This command starts recording the chat log to the file " + "<filename>.", BY_SERVER); + mChat->chatLog("Command: /record", BY_SERVER); + mChat->chatLog("This command finishes a recording session.", BY_SERVER); +} + +void Recorder::action(const gcn::ActionEvent &event) +{ + if (event.getId() == "activate") + changeStatus(""); +} + +Recorder::~Recorder() +{ +} diff --git a/src/gui/recorder.h b/src/gui/recorder.h new file mode 100644 index 00000000..6f917c25 --- /dev/null +++ b/src/gui/recorder.h @@ -0,0 +1,88 @@ +/* + * Aethyra + * Copyright (C) 2008 Aethyra Development Team + * + * This file is part of Aethyra. + * + * This program 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. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef RECORD_H +#define RECORD_H + +#include <fstream> +#include <string> + +#include <guichan/actionlistener.hpp> + +#include "window.h" + +#include "../guichanfwd.h" + +#include "../utils/gettext.h" + +class ChatWindow; + +class Recorder : public Window, public gcn::ActionListener +{ + public: + Recorder(ChatWindow *chat, const std::string &title = _("Recording..."), + const std::string &buttonTxt = _("Stop recording")); + + virtual ~Recorder(); + + /* + * Outputs the message to the recorder file + * + * @param msg the line to write to the recorded file. + */ + void record(const std::string &msg); + + /* + * Outputs the message to the recorder file + * + * @param msg the line to write to the recorded file. + */ + void changeStatus(const std::string &msg); + + /* + * Displays a help message on how to use this class in the chat window. + */ + void help() const; + + /* + * Displays an extended help message on how to use this class in the + * chat window. + */ + void help2() const; + + /* + * Whether or not the recorder is in use. + */ + bool isRecording() {return (bool) mStream.is_open();} + + /* + * called when the button is pressed + * + * @param event is the event that is generated + */ + void action(const gcn::ActionEvent &event); + + private: + ChatWindow *mChat; + + std::ofstream mStream; +}; +#endif |