From: <ip...@us...> - 2007-06-26 17:10:55
|
Revision: 2165 http://hugin.svn.sourceforge.net/hugin/?rev=2165&view=rev Author: ippei Date: 2007-06-26 10:10:54 -0700 (Tue, 26 Jun 2007) Log Message: ----------- appbase implementation; compiles okay. Modified Paths: -------------- hugin/branches/ippei/src/hugin_base/appbase/Command.h hugin/branches/ippei/src/hugin_base/appbase/CommandHistory.h hugin/branches/ippei/src/hugin_base/appbase/DocumentData.h hugin/branches/ippei/src/hugin_base/appbase/ExternalProgram.h hugin/branches/ippei/src/hugin_base/appbase/ExternalProgramSetup.h hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplay.h hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplayOld.h hugin/branches/ippei/src/hugin_base/hugin_utils/utils.h hugin/branches/ippei/src/hugin_base/huginapp/PanoCommand.h Added Paths: ----------- hugin/branches/ippei/src/hugin_base/appbase/ExternalProgram.cpp hugin/branches/ippei/src/hugin_base/appbase/ExternalProgramSetup.cpp hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplay.cpp hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplayOld.cpp hugin/branches/ippei/src/hugin_base/appbase/ProgressReporterOld.cpp hugin/branches/ippei/src/hugin_base/appbase/ProgressReporterOld.h Removed Paths: ------------- hugin/branches/ippei/src/hugin_base/appbase/ProgressReportOld.h Modified: hugin/branches/ippei/src/hugin_base/appbase/Command.h =================================================================== --- hugin/branches/ippei/src/hugin_base/appbase/Command.h 2007-06-26 12:33:39 UTC (rev 2164) +++ hugin/branches/ippei/src/hugin_base/appbase/Command.h 2007-06-26 17:10:54 UTC (rev 2165) @@ -21,12 +21,15 @@ * */ -#ifndef _COMMAND_H -#define _COMMAND_H +#ifndef _APPBASE_COMMAND_H +#define _APPBASE_COMMAND_H #include <string> +namespace AppBase { + + /** Base class for all panorama commands. * * see command pattern. @@ -34,67 +37,79 @@ template <StringType = std::string> class Command { -public: - - // - Command() - : o_successful(false) - {}; - /// - Command(const StringType& commandName) - : m_name(commandName), o_successful(false) - {}; + public: + // + Command() + : m_successful(false) + {}; + + /// + Command(const StringType& commandName) + : m_name(commandName), m_successful(false) + {}; - /// - virtual ~Command() {}; + /// + virtual ~Command() {}; - /** execute the command. [pure virtual] - * - * should save information for undo(). - */ - virtual bool execute() = 0; - - /// - bool wasSuccessful() - { return o_successful;} - - /** undo execute() [pure virtual] - * - * must restore the model to the state before execute(). - * execute() may be called later to redo the undo. - */ - virtual void undo() = 0; - - /** redo execute() [pure virtual] - * - * for special optimisation; the default implementation calls execute(); - */ - virtual void redo() - { execute(); }; - - /// - virtual StringType getName() const - { return m_name; } - - /// - virtual setName(const StringType& newName) - { m_name = newName; } - - /** provides names for mainly debugs etc. - * The default implementation returns some dummy string. - */ - virtual char* getCommandClassNameCstr() const - { return "Command" }; - -protected: - bool o_successful; - -private: + public: + /** execute the command. [pure virtual] + * + * should save information for undo(). + */ + virtual bool execute() = 0; + + /** undo execute() [pure virtual] + * + * must restore the model to the state before execute(). + * execute() may be called later to redo the undo. + */ + virtual void undo() = 0; + + /** redo execute() [pure virtual] + * + * for special optimisation; the default implementation calls execute(); + */ + virtual void redo() + { execute(); }; + + + public: + /// + virtual StringType getName() const + { return m_name; } + + /// + virtual void setName(const StringType& newName) + { m_name = newName; } + + + public: + /** provides names for mainly debugs etc. + * The default implementation returns some dummy string. + */ + virtual char* getCommandClassNameCstr() const + { return "(Command)" }; + + + public: + /// + virtual bool wasSuccessful() + { return m_successful;} + + protected: + /// + virtual void setSuccessful(bool success = true) + { m_successful = success; } + + + private: + bool m_successful; StringType m_name; }; +} //namespace -#endif // _COMMAND_H +#endif // _H Modified: hugin/branches/ippei/src/hugin_base/appbase/CommandHistory.h =================================================================== --- hugin/branches/ippei/src/hugin_base/appbase/CommandHistory.h 2007-06-26 12:33:39 UTC (rev 2164) +++ hugin/branches/ippei/src/hugin_base/appbase/CommandHistory.h 2007-06-26 17:10:54 UTC (rev 2165) @@ -21,11 +21,18 @@ * */ -#ifndef _COMMANDHISTORY_H -#define _COMMANDHISTORY_H +#ifndef _APPBASE_COMMANDHISTORY_H +#define _APPBASE_COMMANDHISTORY_H -class Command; +#include <vector> +#include <string> + +#include <appbase/Command.h> + + +namespace AppBase { + /** A history for Command, provides undo/redo functionality. * * To use this, all modifications to the model have to be done @@ -34,117 +41,121 @@ template <CommandClass = Command<std::string>> class CommandHistory { -public: + + public: - /** ctor. - */ - CommandHistory() - : nextCmd(0) - {}; + /** ctor. + */ + CommandHistory() + : nextCmd(0) + {}; - /** dtor. - */ - virtual ~CommandHistory() - { - std::vector<CommandClass*>::iterator it; - for (it = commands.begin(); it != commands.end(); ++it) { - delete *it; - } - }; + /** dtor. + */ + virtual ~CommandHistory() + { + std::vector<CommandClass*>::iterator it; + for (it = commands.begin(); it != commands.end(); ++it) { + delete *it; + } + }; - /** - * Erases all the undo/redo history. - * Use this when reloading the data, for instance, since this invalidates - * all the commands. - */ - void clear() - { - std::vector<CommandClass*>::iterator it; - for (it = commands.begin(); it != commands.end(); ++it) { - delete *it; - } - commands.clear(); - }; + /** + * Erases all the undo/redo history. + * Use this when reloading the data, for instance, since this invalidates + * all the commands. + */ + void clear() + { + std::vector<CommandClass*>::iterator it; + for (it = commands.begin(); it != commands.end(); ++it) { + delete *it; + } + commands.clear(); + }; - /** - * Adds a command to the history. Call this for each @p command you create. - * Unless you set @p execute to false, this will also execute the command. - * This means, most of the application's code will look like - * \code - * MyCommand * cmd = new MyCommand(...); - * m_historyCommand.addCommand( cmd ); - * \endcode - * - * Ownership of @p command is transfered to CommandHistory - */ - void addCommand(CommandClass* command, bool execute=true) - { - assert(command); + /** + * Adds a command to the history. Call this for each @p command you create. + * Unless you set @p execute to false, this will also execute the command. + * This means, most of the application's code will look like + * \code + * MyCommand * cmd = new MyCommand(...); + * m_historyCommand.addCommand( cmd ); + * \endcode + * + * Ownership of @p command is transfered to CommandHistory + */ + void addCommand(CommandClass* command, bool execute=true) + { + assert(command); + + if (execute) { + // execute command + command->execute(); + } + + if (nextCmd > commands.size()) { + DEBUG_FATAL("Invalid state in Command History: nextCmd:" << nextCmd + << " size:" << commands.size()); + } else if (nextCmd < (commands.size())) { + // case: there were redoable commands, remove them now, the + // current command has invalidated them. + size_t nrDelete = commands.size() - nextCmd; + for (size_t i=0; i < nrDelete; i++) { + delete commands.back(); + commands.pop_back(); + } + } + commands.push_back(command); + nextCmd++; + }; + + /** + * Undoes the last action. + */ + virtual void undo() + { + if (canUndo()) { + // undo the current command + DEBUG_DEBUG("undo: " << commands[nextCmd-1]->getName()); + commands[nextCmd-1]->undo(); + nextCmd--; + } else { + // [TODO] exception + } + }; - if (execute) { - // execute command - command->execute(); - } + /** + * Redoes the last undone action. + */ + virtual void redo() + { + if (canRedo()) { + DEBUG_DEBUG("redo: " << commands[nextCmd]->getName()); + commands[nextCmd]->execute(); + nextCmd++; + } else { + // [TODO] exception + } + }; - if (nextCmd > commands.size()) { - DEBUG_FATAL("Invalid state in Command History: nextCmd:" << nextCmd - << " size:" << commands.size()); - } else if (nextCmd < (commands.size())) { - // case: there were redoable commands, remove them now, the - // current command has invalidated them. - size_t nrDelete = commands.size() - nextCmd; - for (size_t i=0; i < nrDelete; i++) { - delete commands.back(); - commands.pop_back(); - } - } - commands.push_back(command); - nextCmd++; - }; + /// + virtual bool canUndo() + { return nextCmd > 0; }; + + /// + virtual bool canRedo() + { return nextCmd < commands.size(); }; + - /** - * Undoes the last action. - */ - virtual void undo() - { - if (canUndo()) { - // undo the current command - DEBUG_DEBUG("undo: " << commands[nextCmd-1]->getName()); - commands[nextCmd-1]->undo(); - nextCmd--; - } else { - // [TODO] exception - } - }; - - /** - * Redoes the last undone action. - */ - virtual void redo() - { - if (canRedo()) { - DEBUG_DEBUG("redo: " << commands[nextCmd]->getName()); - commands[nextCmd]->execute(); - nextCmd++; - } else { - // [TODO] exception - } - }; - - /// - virtual bool canUndo() - { return nextCmd > 0; }; - - /// - virtual bool canRedo() - { return nextCmd < commands.size(); }; - + private: + // our commands + std::vector<CommandClass*> commands; + size_t nextCmd; -private: - // our commands - std::vector<CommandClass*> commands; - size_t nextCmd; - }; -#endif // _COMMANDHISTORY_H + +} // namespace + +#endif // _H Modified: hugin/branches/ippei/src/hugin_base/appbase/DocumentData.h =================================================================== --- hugin/branches/ippei/src/hugin_base/appbase/DocumentData.h 2007-06-26 12:33:39 UTC (rev 2164) +++ hugin/branches/ippei/src/hugin_base/appbase/DocumentData.h 2007-06-26 17:10:54 UTC (rev 2165) @@ -28,45 +28,55 @@ * */ +#ifndef _APPBASE_DOCUMENTDATA_H +#define _APPBASE_DOCUMENTDATA_H -namespace AppBase { +#include <string> + + +namespace AppBase { /** * */ class DocumentData { - -public: - /// - virtual void DocumentData() =0; - virtual ~DocumentData(); - + + public: + /// + virtual void DocumentData() =0; + virtual ~DocumentData(); + -public: + public: + enum ReadWriteError { SUCCESSFUL=-1, UNKNOWN_ERROR, INCOMPATIBLE_TYPE, INVALID_DATA, PARCER_ERROR }; + + virtual ReadWriteError readData(std::istream dataInput) =0; + virtual ReadWriteError writeData(std::ostream dataOutput) =0; + + virtual ReadWriteError readDataOfType(std::istream dataInput, std::string documentType) =0; + virtual ReadWriteError writeDataToType(std::ostream dataOutput, std::string documentType) =0; - enum ReadWriteError { SUCCESSFUL=-1, UNKNOWN_ERROR, INCOMPATIBLE_TYPE, INVALID_DATA, PARCER_ERROR }; - virtual ReadWriteError readData(std::istream dataInput, std::string documentType = ""); - virtual ReadWriteError writeData(std::ostream dataOutput, std::string documentType = ""); - - virtual ReadWriteError readDataOfType(std::istream dataInput, std::string documentType); - virtual ReadWriteError writeDataToType(std::ostream dataOutput, std::string documentType); - - -public: - virtual bool isDirty() - { return m_dirty; } - virtual void clearDirty(); - { setDirty(false); }; -protected: - virtual void setDirty(bool dirty = true) - { m_dirty = dirty; }; -private: - bool m_dirty; - + public: + virtual bool isDirty() + { return m_dirty; } + + virtual void clearDirty(); + { setDirty(false); }; + + protected: + virtual void setDirty(bool dirty = true) + { m_dirty = dirty; }; + + + private: + bool m_dirty; + }; -}; \ No newline at end of file +}; //namespace + +#endif //_H \ No newline at end of file Added: hugin/branches/ippei/src/hugin_base/appbase/ExternalProgram.cpp =================================================================== --- hugin/branches/ippei/src/hugin_base/appbase/ExternalProgram.cpp (rev 0) +++ hugin/branches/ippei/src/hugin_base/appbase/ExternalProgram.cpp 2007-06-26 17:10:54 UTC (rev 2165) @@ -0,0 +1,52 @@ +// -*- c-basic-offset: 4 -*- +/** @file +* +* @author Ippei UKAI <ipp...@ma...> +* +* $Id: $ +* +* This 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 (at your option) any later version. +* +* This software 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 software; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA. +* +* Hereby the author, Ippei UKAI, grant the license of this particular file to +* be relaxed to the GNU Lesser General Public License as published by the Free +* Software Foundation; either version 2 of the License, or (at your option) +* any later version. Please note however that when the file is linked to or +* compiled with other files in this library, the GNU General Public License as +* mentioned above is likely to restrict the terms of use further. +* +*/ + + +#include <hugin_utils/utils.h> + +#include "ExternalProgram.h" + + +namespace AppBase { + +/// +std::string ExternalProgram::quoteArgument(std::string argument) +{ + return hugin_utils::quoteString(argument); +} + +/// +std::string ExternalProgram::quoteFilename(std::string filename) +{ + return hugin_utils::quoteFilename(filename); +} + + +} //namespace Modified: hugin/branches/ippei/src/hugin_base/appbase/ExternalProgram.h =================================================================== --- hugin/branches/ippei/src/hugin_base/appbase/ExternalProgram.h 2007-06-26 12:33:39 UTC (rev 2164) +++ hugin/branches/ippei/src/hugin_base/appbase/ExternalProgram.h 2007-06-26 17:10:54 UTC (rev 2165) @@ -28,117 +28,123 @@ * */ +#ifndef _APPBASE_EXTERNALPROGRAM_H +#define _APPBASE_EXTERNALPROGRAM_H +#include <string> + + namespace AppBase { - /** * */ class ExternalProgram { - - typedef std::string String; -protected: - /// - ExternalProgram() : o_exitCode(-1) {}; -public: - /// - virtual ~ExternalProgram(); + typedef std::string String; + + public: + /// + ExternalProgram() : o_exitCode(-1) {}; - // -- accessors -- + /// + virtual ~ExternalProgram(); + + + // -- accessors -- + + public: + /// + virtual void setCommand(String command) + { o_command = command; }; + + /// + virtual String getCommand() + { return o_command; }; + + /// + virtual void setArguments(String arguments) + { o_arguments = arguments; }; + + /// + virtual String getArguments() + { return o_arguments; }; + + + // -- argument utilities -- + + public: + /// + virtual void addArgument(String argument) + { o_arguments.append(argument + " "); }; + + /// + virtual void addArgumentSafely(String argument) + { addArgument(quoteArgument(argument)); }; + + /// + virtual void addFilenameSafely(String filename) + { addArgument(quoteFilename(filename)); }; + + /// + virtual void setCommandSafely(String command) + { setCommand(quoteFilename(command)); }; + + protected: + /// + virtual String quoteArgument(String argument); + + /// + virtual String quoteFilename(String filename); + + + // -- executing -- + + public: + /// + virtual int getExitCode() + { return o_exitCode; }; + + /// + virtual void setExitCode(int exitCode) + { o_exitCode = exitCode; }; + + + // -- variables -- + + private: + String o_command; + String o_arguments; + int o_exitCode; -public: - /// - virtual void setCommand(String command) - { o_command = command; }; - - /// - virtual String getCommand() - { return o_command; }; - - /// - virtual void setArguments(String arguments) - { o_arguments = arguments; }; - - /// - virtual String getArguments() - { return o_arguments; }; - - - // -- argument utilities -- - -public: - /// - virtual void addArgument(String argument) - { o_arguments.append(argument + " "); }; - - /// - virtual void addArgumentSafely(String argument) - { addArgument(quoteArgument(argument)); }; - - /// - virtual void addFilenameSafely(String filename) - { addArgument(quoteFilename(argument)); }; - - /// - virtual void setCommandSafely(String command) - { setCommand(quoteFilename(argument)); }; - -protected: - /// - virtual String quoteArgument(String argument) - { return utils::quoteString(argument) }; - - /// - virtual String quoteFilename(String filename) - { return utils::quoteFilename(argument) }; - - - // -- executing -- - -public: - /// - virtual int getExitCode() - { return o_exitCode; }; - - /// - virtual void setExitCode(int exitCode) - { o_exitCode = exitCode; }; - - - // -- variables -- - -private: - String o_command; - Strint o_arguments; - int o_exitCode; - }; + /** * */ class ExternalProgramExecutor { - -public: - /// - virtual void ExternalProgramExecutor() =0; - /// - virtual ~ExternalProgramExecutor(); - - /// - enum ExecutionResult {INTERRUPTED = -1, NORMAL = 0, ERROR = 1}; - - /// - virtual ExecutionResult executeProgram(ExternalProgram* program) =0; - + + public: + /// + virtual ~ExternalProgramExecutor() {}; + + + public: + /// + enum ExecutionResult {INTERRUPTED = -1, NORMAL = 0, ERROR = 1}; + + /// + virtual ExecutionResult executeProgram(ExternalProgram* program) =0; + }; -} \ No newline at end of file +} //namespace + +#endif //_H \ No newline at end of file Added: hugin/branches/ippei/src/hugin_base/appbase/ExternalProgramSetup.cpp =================================================================== --- hugin/branches/ippei/src/hugin_base/appbase/ExternalProgramSetup.cpp (rev 0) +++ hugin/branches/ippei/src/hugin_base/appbase/ExternalProgramSetup.cpp 2007-06-26 17:10:54 UTC (rev 2165) @@ -0,0 +1,72 @@ +// -*- c-basic-offset: 4 -*- +/** @file +* +* @author Ippei UKAI <ipp...@ma...> +* +* $Id: $ +* +* This 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 (at your option) any later version. +* +* This software 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 software; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA. +* +* Hereby the author, Ippei UKAI, grant the license of this particular file to +* be relaxed to the GNU Lesser General Public License as published by the Free +* Software Foundation; either version 2 of the License, or (at your option) +* any later version. Please note however that when the file is linked to or +* compiled with other files in this library, the GNU General Public License as +* mentioned above is likely to restrict the terms of use further. +* +*/ + +#include <hugin_utils/utils.h> + +#include "ExternalProgramSetup.h" + + +namespace AppBase { + +/// +bool ExternalProgramSetup::setupExternalProgram(ExternalProgram* externalProgram) +{ + if(externalProgram == NULL) { + + return false; + + } else { + + externalProgram->setCommandSafely(getCommand()); + externalProgram->addArgumentSafely(parseArgumentsFromTemplate(getArgumentTemplate())); + + return true; //let's hope so + } +} + + +/// +ExternalProgramSetup::String ExternalProgramSetup::parseArgumentsFromTemplate(const ExternalProgramSetup::String& argumentTemplate) +{ + String result = String(argumentTemplate); + StringList keywords = getAvailableStringKeywords(); + + for(StringList::iterator keyword = keywords.begin(); keyword != keywords.end(); keyword++) + { + hugin_utils::replaceAll(result, + getStringKeywordPrefix() + *keyword + getStringKeywordSuffix(), + getStringForKeyword(*keyword) ); + } + + return result; +} + + +} //namespace Modified: hugin/branches/ippei/src/hugin_base/appbase/ExternalProgramSetup.h =================================================================== --- hugin/branches/ippei/src/hugin_base/appbase/ExternalProgramSetup.h 2007-06-26 12:33:39 UTC (rev 2164) +++ hugin/branches/ippei/src/hugin_base/appbase/ExternalProgramSetup.h 2007-06-26 17:10:54 UTC (rev 2165) @@ -28,74 +28,102 @@ * */ +#ifndef _APPBASE_EXTERNALPROGRAMSETUP_H +#define _APPBASE_EXTERNALPROGRAMSETUP_H +#include <vector> +#include <string> -namespace Appbase { - +#include <appbase/ExternalProgram.h> + +namespace AppBase { + +/// class ExternalProgramSetup { - - typedef std::string String; - typedef std::vector<std::string> StringList; - -public: - /// - virtual String defaultCommand() const - { return ""; }; - - /// - virtual String defaultArgumentTemplate() const - { return ""; }; - - /// - virtual useCommand(const String& command) - { o_command = command; }; - - /// - virtual useArgumentTemplate(const String& argumentTemplate) - { o_argumentTemplate = argumentTemplate; }; - -public: - /// - ExternalProgramSetup(); - { - useCommand(defaultCommand()); - useArgumentTemplate(defaultArgumentTemplate()); - }; - - /// - virtual ~ExternalProgramSetup(); - + typedef std::string String; + typedef std::vector<std::string> StringList; + -public: - /// - virtual StringList getAvailableStringKeywords() const; - - /// - virtual String getStringKeywordPrefix() { return "{"; }; - - /// - virtual String getStringKeywordSuffix() { return "}"; }; + public: + /// + ExternalProgramSetup() {}; - -public: - /// - virtual setupExternalProgram(ExternalProgram* externalProgram); - -protected: - /// - virtual String parseArgumentsFromTemplate(const String& argumentTemplate); - - /// - virtual String getStringForKeyword(String keyword); - - -protected: + /// + virtual ~ExternalProgramSetup() {}; - String o_command; - String o_argumentTemplate; + + public: + /// + virtual String defaultCommand() const =0; + + /// + virtual String defaultArgumentTemplate() const =0; + + /// + virtual void setCommand(const String& command) + { + m_command = command; + m_defaultCommand = false; + }; + + /// + virtual String getCommand() const + { + return (m_defaultCommand)? defaultCommand() : m_command; + }; + + /// + virtual void setArgumentTemplate(const String& argumentTemplate) + { + m_argumentTemplate = argumentTemplate; + m_defaultArg = false; + }; + + /// + virtual String getArgumentTemplate() const + { + return (m_defaultArg)? defaultArgumentTemplate() : m_argumentTemplate; + }; + + + public: + /// + virtual StringList getAvailableStringKeywords() const =0; + + /// + virtual String getStringKeywordPrefix() + { return "{"; }; + + /// + virtual String getStringKeywordSuffix() + { return "}"; }; + + + public: + /// + virtual bool setupExternalProgram(ExternalProgram* externalProgram); //[TODO] + + protected: + /// + virtual String parseArgumentsFromTemplate(const String& argumentTemplate); //[TODO] + + /// + virtual String getStringForKeyword(String keyword) =0; + + + private: + String m_command; + String m_argumentTemplate; + bool m_defaultCommand; + bool m_defaultArg; -} \ No newline at end of file +}; + + +} //namespace + +#endif //_H \ No newline at end of file Added: hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplay.cpp =================================================================== --- hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplay.cpp (rev 0) +++ hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplay.cpp 2007-06-26 17:10:54 UTC (rev 2165) @@ -0,0 +1,203 @@ +// -*- c-basic-offset: 4 -*- +/** @file ProgressDisplay.h +* +* @author Ippei UKAI <ipp...@ma...> +* +* $Id: $ +* +* !! based on ProgressDisplay in utils.h 1952 +* +* This 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 (at your option) any later version. +* +* This software 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU General Public +* License along with this software; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +*/ + +#include <cmath> + +#include "ProgressDisplay.h" + + +namespace AppBase { + + + +ProgressDisplay::ProgressSubtask::ProgressSubtask(const std::string& message, + const double& maxProgress, + const double& progressForParentTask, + const bool& propagatesProgress) + : message(message), + maxProgress(maxProgress), + progressForParentTask(progressForParentTask), + propagatesProgress(propagatesProgress), + progress(0.0) +{ + +} + + + + + +ProgressDisplay::ProgressDisplay() + : o_newSubtaskProgress(0) +{ + +} + +void ProgressDisplay::startSubtaskWithTask(const ProgressSubtask& newSubtask) +{ + o_subtasks.push_back(newSubtask); + subtaskStarted(); + updateProgressDisplay(); +} + +void ProgressDisplay::setParentProgressOfNewSubtasks(double subtaskTotalProgress, bool propagatesProgress) +{ + if(subtaskTotalProgress < 0) + return; + + o_newSubtaskProgress = subtaskTotalProgress; + o_newSubtaskPropagates = propagatesProgress; +}; + +/// +void ProgressDisplay::startSubtask(const std::string& message, + const double& maxProgress, + const double& progressForParentTask, + const bool& propagatesProgress) +{ + ProgressSubtask newSubtask = ProgressSubtask(message, maxProgress, progressForParentTask, propagatesProgress); + + startSubtaskWithTask(newSubtask); +}; + +/// +void ProgressDisplay::startSubtask(const std::string& message, + const double& maxProgress) +{ + if(o_newSubtaskProgress > 0) + startSubtask(message, maxProgress, o_newSubtaskProgress, o_newSubtaskPropagates); + else + startSubtask(message, maxProgress, 0, false); +}; + +/// +void ProgressDisplay::startSubtask(const double& maxProgress) +{ + startSubtask("", maxProgress); +}; + +/// +void ProgressDisplay::setSubtaskMessage(const std::string& message) + { getCurrentSubtask().message = message; } + +/// +std::string ProgressDisplay::getSubtaskMessage() const +{ + return getCurrentSubtask().message; +} + +/// +double ProgressDisplay::getSubtaskMaxProgress() const +{ + assert(!noSubtasksAvailable()); //[TODO] make it nicer:) + return getCurrentSubtask().maxProgress; +} + +/// +double ProgressDisplay::getSubtaskProgress() const +{ + assert(!noSubtasksAvailable()); //[TODO] make it nicer:) + return getCurrentSubtask().progress; +} + +/// +void ProgressDisplay::updateSubtaskProgress(const double& newValue) +{ + if(noSubtasksAvailable()) + { + //[TODO] debug + return; + } + + if(getCurrentSubtask().progress > newValue) + { + //[TODO] debug + return; + } + + getCurrentSubtask().progress = std::max(newValue, getSubtaskMaxProgress()); + updateProgressDisplay(); +} + +/// +void ProgressDisplay::increaseSubtaskProgressBy(const double& deltaValue) +{ + updateSubtaskProgress(getSubtaskProgress() + deltaValue); +} + +/// +void ProgressDisplay::finishSubtask() +{ + subtaskFinished(); + + if (!o_subtasks.back().measuresProgress() && o_subtasks.size()>1) { + o_subtasks[o_subtasks.size()-2].progress += o_subtasks[o_subtasks.size()-1].progressForParentTask; + } + + o_subtasks.pop_back(); + updateProgressDisplay(); +} + +/// +bool ProgressDisplay::wasCanceled() + { return false; } + + +/// +void ProgressDisplay::propagateProgress(const double& newProgress) +{ + std::vector<ProgressSubtask>::reverse_iterator itr = o_subtasks.rbegin(); + + double diffFromPrev = newProgress - itr->progress; + + if(diffFromPrev <= 0) + return; + + do { + + itr->progress += diffFromPrev; + + if(!itr->propagatesProgress) + return; + + // scale previous change for higher level + diffFromPrev *= itr->progressForParentTask / itr->maxProgress; + + itr++; + + } while(itr != o_subtasks.rend()); +} + +/// +ProgressDisplay::ProgressSubtask& ProgressDisplay::getCurrentSubtask() const + { return (ProgressSubtask& )o_subtasks.back(); } + +/// +bool ProgressDisplay::noSubtasksAvailable() const + { return o_subtasks.empty(); } + + +}; //namespace + \ No newline at end of file Modified: hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplay.h =================================================================== --- hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplay.h 2007-06-26 12:33:39 UTC (rev 2164) +++ hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplay.h 2007-06-26 17:10:54 UTC (rev 2165) @@ -23,6 +23,13 @@ * */ +#ifndef _APPBASE_PROGRESSDISPLAY_H +#define _APPBASE_PROGRESSDISPLAY_H + +#include <string> +#include <vector> + + namespace AppBase { /** @@ -38,22 +45,16 @@ /** * */ - struct ProgressTask + struct ProgressSubtask { /// - ProgressTask() { }; + ProgressSubtask() { } /// - ProgressTask(const std::string& message, - const double& maxProgress, - const double& progressForParentTask, - const bool& propagatesProgress) - : message(message), - maxProgress(maxProgress), - progressForParentTask(progressForParentTask), - propagatesProgress(propagatesProgress), - progress(0.0) - { }; + ProgressSubtask(const std::string& message, + const double& maxProgress, + const double& progressForParentTask, + const bool& propagatesProgress); /// std::string message; @@ -67,7 +68,7 @@ bool propagatesProgress; /// - bool measuresProgress() + inline bool measuresProgress() { return maxProgress == 0; }; }; @@ -76,127 +77,59 @@ protected: /// - virtual ProgressDisplay() - : o_newSubtaskProgress(0) - {}; + ProgressDisplay(); public: /// - virtual ~ProgressDisplay(); + virtual ~ProgressDisplay() {}; // -- task interface -- protected: /// - void startSubtaskWithTask(const ProgressTask& newSubtask) - { - subtasks.push_back(newSubtask); - subtaskStarted(); - updateProgressDisplay(); - } + void startSubtaskWithTask(const ProgressSubtask& newSubtask); public: /// - void setParentProgressOfNewSubtasks(double subtaskTotalProgress, bool propagatesProgress = false) - { - if(subtaskTotalProgress < 0) - return; - - o_newSubtaskProgress = subtaskTotalProgress; - o_newSubtaskPropagates = propagatesProgress; - }; + void setParentProgressOfNewSubtasks(double subtaskTotalProgress, bool propagatesProgress = false); /// void startSubtask(const std::string& message, const double& maxProgress, const double& progressForParentTask, - const bool& propagatesProgress = false) - { - ProgressTask newSubtask = ProgressTask(message, maxProgress, progressForParentTask, propagatesProgress); - - startSubtaskWithTask(newSubtask); - }; + const bool& propagatesProgress = false); /// void startSubtask(const std::string& message, - const double& maxProgress = 0) - { - if(o_newSubtaskProgress > 0) - startSubtask(message, maxProgress, o_newSubtaskProgress, o_newSubtaskPropagates); - else - startSubtask(message, maxProgress, 0, false); - }; + const double& maxProgress = 0); /// - void startSubtask(const double& maxProgress) - { - startSubtask("", maxProgress); - }; + void startSubtask(const double& maxProgress); /// - virtual void setSubtaskMessage(const std::string& message) - { getCurrentSubtask().message = message; }; + virtual void setSubtaskMessage(const std::string& message); /// - virtual std::string getSubtaskMessage() const - { return getCurrentSubtask().message; }; + virtual std::string getSubtaskMessage() const; /// - double getSubtaskMaxProgress() const - { - assert(!noSubtasksAvailable()); //[TODO] make it nicer:) - return getCurrentSubtask().maxProgress; - }; + double getSubtaskMaxProgress() const; /// - double getSubtaskProgress() const - { - assert(!noSubtasksAvailable()); //[TODO] make it nicer:) - return getCurrentSubtask().progress; - }; + double getSubtaskProgress() const; /// - void updateSubtaskProgress(const double& newValue) - { - if(noSubtasksAvailable()) - { - //[TODO] debug - return; - } - - if(getCurrentSubtask().progress > newValue) - { - //[TODO] debug - return; - } - - getCurrentSubtask().progress = max(newValue, getSubtaskMaxProgress()); - updateProgressDisplay(); - } + void updateSubtaskProgress(const double& newValue); /// - void increaseSubtaskProgressBy(const double& deltaValue) - { - updateSubtaskProgress(getSubtaskProgress() + deltaValue); - } + void increaseSubtaskProgressBy(const double& deltaValue); /// - void finishSubtask() - { - subtaskFinished(); - - if (!tasks.back().measureProgress && tasks.size()>1) { - tasks[tasks.size()-2].progress += tasks[tasks.size()-2].subStepProgress; - } - - tasks.pop_back(); - updateProgressDisplay(); - }; + void finishSubtask(); /// - virtual bool wasCanceled() - { return false; }; + virtual bool wasCanceled(); // -- callback interface -- @@ -223,44 +156,20 @@ protected: /// - void propagateProgress(const double& newProgress) - { - std::vector<ProgressTask>::reverse_iterator itr = tasks.rbegin(); - - double diffFromPrev = newProgress - itr->progress; - - if(diffFromPrev <= 0) - return; - - do { - - itr->progress += diffFromPrev; - - if(!itr->propagatesProgress) - return; - - // scale previous change for higher level - diffFromPrev *= itr->progressForParentTask / itr->maxProgress; - - itr++; - - } while(itr != tasks.rend()); - } + void propagateProgress(const double& newProgress); /// - ProgressTask& getCurrentSubtask() const - { return o_subtasks.back(); }; + ProgressSubtask& getCurrentSubtask() const; /// - bool noSubtasksAvailable() const - { return o_subtasks.empty(); }; + bool noSubtasksAvailable() const; // -- accessable variables -- protected: /// - std::vector<ProgressTask> o_subtasks; + std::vector<ProgressSubtask> o_subtasks; /// double o_newSubtaskProgress; @@ -269,6 +178,8 @@ }; +// [TODO] Stream version to be written + /** a progress display to print stuff to stdout (doesn't work properly on the * windows console. */ @@ -286,48 +197,9 @@ // virtual ~StreamMultiProgressDisplay() {}; // // /** update the display */ -// virtual void updateProgressDisplay() -// { -// int lines = m_printedLines; -// // step back the line printed before. -// if (lines !=0) { -// m_stream << "\033[" << m_printedLines << "A" -// << "\r"; -// } -// m_printedLines = 0; -// // build the message: -// for (std::vector<ProgressTask>::iterator it = tasks.begin(); -// it != tasks.end(); ++it) -// { -// m_printedLines++; -// char tmp[81]; -// tmp[80]=0; -// if (it->measureProgress) { -// snprintf(tmp,80,"%15s : %-50s : %3.0f %%", -// it->getShortMessage().c_str(), -// it->getMessage().c_str(), -// 100 * it->getProgress()); -// } else if (! it->measureProgress && it+1 == tasks.end()) { -// m_whizzCount = (++m_whizzCount) % (int)m_whizz.size(); -// snprintf(tmp,80,"%20s: %-50s : %c ", -// it->getShortMessage().c_str(), -// it->getMessage().c_str(), -// m_whizz[m_whizzCount]); -// } else { -// snprintf(tmp,80,"%20s: %-50s : - ", -// it->getShortMessage().c_str(), -// it->getMessage().c_str()); -// } -// -// m_stream << tmp << std::endl; -// } -// // print empty lines.. -// while (m_printedLines < lines) { -// m_stream << " " << std::endl; -// m_printedLines++; -// } -// } +// virtual void updateProgressDisplay(); // +// //protected: // std::ostream & m_stream; // int m_printedLines; @@ -338,4 +210,5 @@ }; //namespace - \ No newline at end of file + +#endif // _H \ No newline at end of file Added: hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplayOld.cpp =================================================================== --- hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplayOld.cpp (rev 0) +++ hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplayOld.cpp 2007-06-26 17:10:54 UTC (rev 2165) @@ -0,0 +1,222 @@ +// -*- c-basic-offset: 4 -*- +/** @file ProgressDisplayOld.h + * + * @author Pablo d'Angelo <pab...@we...> + * + * $Id: utils.h 1952 2007-04-15 20:57:55Z dangelo $ + * + * This 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 (at your option) any later version. + * + * This software 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "ProgressDisplayOld.h" + +namespace AppBase { + + +ProgressTask::ProgressTask(std::string shortMessage, std::string message, + double subStepProgress, double progress) + : shortMessage(shortMessage), message(message), + measureProgress(true), progress(progress), + subStepProgress(subStepProgress), last_displayed_progress(-1) +{ + +} + +ProgressTask::ProgressTask(std::string shortMessage, std::string message) + : shortMessage(shortMessage), message(message), + measureProgress(false), + progress(0), subStepProgress(0), + last_displayed_progress(-1) +{ + +} + + + + +MultiProgressDisplay::MultiProgressDisplay(double minPrintStep) +: m_minProgressStep(minPrintStep) +{ + +} + +void MultiProgressDisplay::pushTask(const ProgressTask & task) +{ + tasks.push_back(task); + taskAdded(); + updateProgressDisplay(); +} + + +/** remove a task from the progress display */ +void MultiProgressDisplay::popTask() +{ + taskRemove(); + if (!tasks.back().measureProgress && tasks.size()>1) { + tasks[tasks.size()-2].progress += tasks[tasks.size()-2].subStepProgress; + } + tasks.pop_back(); + updateProgressDisplay(); +} + + +/** change the message text of the current task */ +void MultiProgressDisplay::setShortMessage(const std::string & msg) +{ + tasks.back().shortMessage = msg; + updateProgressDisplay(); +} + + +/** change the message text of the current task */ +void MultiProgressDisplay::setMessage(const std::string & msg) +{ + tasks.back().message = msg; + updateProgressDisplay(); +} + +/** set progress (affects this task and all tasks above it) */ +void MultiProgressDisplay::setProgress(double progress) +{ + propagateProgress(progress); + double displayStep = tasks.back().progress - tasks.back().last_displayed_progress; + if (displayStep > m_minProgressStep) + { + updateProgressDisplay(); + tasks.back().last_displayed_progress = tasks.back().progress; + } +} + +/** increase progress by a substep. */ +void MultiProgressDisplay::increase() +{ + // substep progress. + setProgress(tasks.back().progress + tasks.back().subStepProgress); +} + + +void MultiProgressDisplay::propagateProgress(double progress) +{ + std::vector<ProgressTask>::reverse_iterator it = tasks.rbegin(); + double diff = progress - it->progress; + it->progress = progress; + it++; + while (it != tasks.rend()) { + // scale previous change + diff *= it->subStepProgress; + // propagate to next level + it->progress += diff; + ++it; + } +} + + + + +/// +MultiProgressDisplayAdaptor::MultiProgressDisplayAdaptor(ProgressDisplay& myProgressDisplay) + : MultiProgressDisplay(0.0), o_progressDisplay(myProgressDisplay) +{}; + +/// +MultiProgressDisplay* MultiProgressDisplayAdaptor::newMultiProgressDisplay(ProgressDisplay* myProgressDisplay) +{ + if(myProgressDisplay != NULL) + return new MultiProgressDisplayAdaptor(*myProgressDisplay); + else + return new DummyMultiProgressDispaly(); +} + + +/// +void MultiProgressDisplayAdaptor::taskAdded() +{ + o_progressDisplay.setParentProgressOfNewSubtasks(tasks.back().subStepProgress, true); + o_progressDisplay.startSubtask(1.0); +}; + +/// +void MultiProgressDisplayAdaptor::taskRemove() +{ + o_progressDisplay.finishSubtask(); +}; + +/// +void MultiProgressDisplayAdaptor::updateProgressDisplay() +{ + o_progressDisplay.setSubtaskMessage(tasks.back().getMessage()); + o_progressDisplay.updateSubtaskProgress(tasks.back().getProgress()); +} + + + + + +StreamMultiProgressDisplay::StreamMultiProgressDisplay(std::ostream& o, double minPrintStep) + : MultiProgressDisplay(minPrintStep), + m_stream(o), m_printedLines(0), + m_whizz("-\\|/"), m_whizzCount(0) +{ + +} + + +void StreamMultiProgressDisplay::updateProgressDisplay() +{ + int lines = m_printedLines; + // step back the line printed before. + if (lines !=0) { + m_stream << "\033[" << m_printedLines << "A" + << "\r"; + } + m_printedLines = 0; + // build the message: + for (std::vector<ProgressTask>::iterator it = tasks.begin(); + it != tasks.end(); ++it) + { + m_printedLines++; + char tmp[81]; + tmp[80]=0; + if (it->measureProgress) { + snprintf(tmp,80,"%15s : %-50s : %3.0f %%", + it->getShortMessage().c_str(), + it->getMessage().c_str(), + 100 * it->getProgress()); + } else if (! it->measureProgress && it+1 == tasks.end()) { + m_whizzCount = (++m_whizzCount) % (int)m_whizz.size(); + snprintf(tmp,80,"%20s: %-50s : %c ", + it->getShortMessage().c_str(), + it->getMessage().c_str(), + m_whizz[m_whizzCount]); + } else { + snprintf(tmp,80,"%20s: %-50s : - ", + it->getShortMessage().c_str(), + it->getMessage().c_str()); + } + + m_stream << tmp << std::endl; + } + // print empty lines.. + while (m_printedLines < lines) { + m_stream << " " << std::endl; + m_printedLines++; + } +} + + + +} //namespace + Modified: hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplayOld.h =================================================================== --- hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplayOld.h 2007-06-26 12:33:39 UTC (rev 2164) +++ hugin/branches/ippei/src/hugin_base/appbase/ProgressDisplayOld.h 2007-06-26 17:10:54 UTC (rev 2165) @@ -5,6 +5,8 @@ * * $Id: utils.h 1952 2007-04-15 20:57:55Z dangelo $ * + * !!from utils.h 1952 + * * This 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 @@ -21,71 +23,57 @@ * */ -#ifndef POGRESSDISPLAYOLD_H -#define POGRESSDISPLAYOLD_H +#ifndef _APPBASE_POGRESSDISPLAYOLD_H +#define _APPBASE_POGRESSDISPLAYOLD_H #include <string> #include <vector> +#include <iostream> +#include <appbase/ProgressDisplay.h> + namespace AppBase { - - /** desribes a subprogess task */ + /** desribes a subprogess task + * A progress task describes one operation + * + * it consists of a one or two word heading, \p shortMessage + * and a longer description, \p message. + * + * Progress can be set directly, or with substeps, \p subStepProgress + * + * nSteps * subStepProgress = 100%. + * The progress is also increased by a subStep, if a lower operation + * completes. + */ struct ProgressTask { - /** A progress task describes one operation - * - * it consists of a one or two word heading, \p shortMessage - * and a longer description, \p message. - * - * Progress can be set directly, or with substeps, \p subStepProgress - * - * nSteps * subStepProgress = 100%. - * The progress is also increased by a subStep, if a lower operation - * completes. - */ + /// ProgressTask(std::string shortMessage, std::string message, - double subStepProgress, double progress=0) - : shortMessage(shortMessage), message(message), - measureProgress(true), progress(progress), - subStepProgress(subStepProgress), last_displayed_progress(-1) - { }; + double subStepProgress, double progress=0); - // create a progress task without a progress percentage - // display - ProgressTask(std::string shortMessage, std::string message) - : shortMessage(shortMessage), message(message), - measureProgress(false), - progress(0), subStepProgress(0), - last_displayed_progress(-1) - { }; + /// create a progress task without a progress percentage display + ProgressTask(std::string shortMessage, std::string message); - - const std::string & getShortMessage() - { - return shortMessage; - } - - const std::string & getMessage() - { - return message; - } - - double getProgress() - { - return progress; - } - std::string shortMessage; std::string message; - bool measureProgress; - double progress; double subStepProgress; + double progress; + double last_displayed_progress; + bool measureProgress; + inline const std::string& getShortMessage() + { return shortMessage; } + + inline const std::string& getMessage() + { return message; } + + inline double getProgress() + { return progress; } }; @@ -117,58 +105,25 @@ * the current progress by subTaskIncr * */ - void pushTask(const ProgressTask & task) - { - tasks.push_back(task); - taskAdded(); - updateProgressDisplay(); - }; - + void pushTask(const ProgressTask & task); + /** remove a task from the progress display */ - void popTask() - { - taskRemove(); - if (!tasks.back().measureProgress && tasks.size()>1) { - tasks[tasks.size()-2].progress += tasks[tasks.size()-2].subStepProgress; - } - tasks.pop_back(); - updateProgressDisplay(); - } + void popTask(); /** change the message text of the current task */ - void setShortMessage(const std::string & msg) - { - tasks.back().shortMessage = msg; - updateProgressDisplay(); - } + void setShortMessage(const std::string & msg); /** change the message text of the current task */ - void setMessage(const std::string & msg) - { - tasks.back().message = msg; - updateProgressDisplay(); - } + void setMessage(const std::string & msg); /** set progress (affects this task and all tasks above it) */ - void setProgress(double progress) - { - propagateProgress(progress); - double displayStep = tasks.back().progress - tasks.back().last_displayed_progress; - if (displayStep > m_minProgressStep) - { - updateProgressDisplay(); - tasks.back().last_displayed_progress = tasks.back().progress; - } - } + void setProgress(double progress); /** increase progress by a substep. */ - void increase() - { - // substep progress. - setProgress(tasks.back().progress + tasks.back().subStepProgress); - } + void increase(); - + + protected: /** template method, to update the display * * should be provided by subclasses. @@ -185,22 +140,8 @@ protected: - /** propagate progress to next level */ - void propagateProgress(double progress) - { - std::vector<ProgressTask>::reverse_iterator it = tasks.rbegin(); - double diff = progress - it->progress; - it->progress = progress; - it++; - while (it != tasks.rend()) { - // scale previous change - diff *= it->subStepProgress; - // propagate to next level - it->progress += diff; - ++it; - } - } + void propagateProgress(double progress); std::vector<ProgressTask> tasks; double m_minProgressStep; @@ -213,7 +154,7 @@ */ class DummyMultiProgressDispaly : public MultiProgressDisplay { - void pushTask(const vigra_ext::ProgressTask & task) {}; + void pushTask(const ProgressTask & task) {}; void popTask() {}; void setShortMessage(const std::string & msg) {}; void setMessage(const std::string & msg) {}; @@ -229,59 +170,64 @@ /** * */ - class MultiProgressDisplayAdaptor : MultiProgressDisplay + class MultiProgressDisplayAdaptor : public MultiProgressDisplay { public: /// - ProgressDisplayAdaptor(ProgressDisplay& myProgressDisplay) - : MultiProgressDisplay(0.0), o_progressDisplay(myProgressDisplay) - {}; + MultiProgressDisplayAdaptor(ProgressDisplay& myProgressDisplay); /// - virtual ~ProgressDisplayAdaptor() {}; + virtual ~MultiProgressDisplayAdaptor() {}; /// - static ProgressReporter newMultiProgressDisplay(ProgressDisplay* myProgressDisplay) - { - if(myProgressDisplay != NULL) - return new ProgressDisplayAdaptor(*myProgressDisplay, maxProgress); - else - return new DummyMultiProgressDispaly(maxProgress); - } + static MultiProgressDisplay* newMultiProgressDisplay(ProgressDisplay* myProgressDisplay); - - public: + protected: /// - void taskAdded() - { - o_progressDisplay.setParentProgressOfNewSubtasks(tasks.back().subStepProgress, true); - o_progressDisplay.startSubtask(1.0); - }; + void taskAdded(); /// - void taskRemove() - { - o_progressDisplay.finishSubtask(); - }; + void taskRemove(); /// - void updateProgressDisplay() - { - o_progressDisplay.setSubtaskMessage(tasks.back().getMessage()); - o_progressDisplay.updateSubtaskProgress(tasks.back().getProgress()); - }; + void updateProgressDisplay(); protected: - ProgressDisplay& o_progressDisplay; }; + /** a progress display to print stuff to stdout (doesn't work properly on the + * windows console. + */ + class StreamMultiProgressDisplay : public MultiProgressDisplay + { + public: + /// + StreamMultiProgressDisplay(std::ostream& o, double minPrintStep=0.02); + + /// + virtual ~StreamMultiProgressDisplay() {}; + + + protected: + /** update the display */ + virtual void updateProgressDisplay(); + + + protected: + std::ostream & m_stream; + int m_printedLines; + std::string m_whizz; + int m_whizzCount; + }; + + } // namespace -#endif // POGRESSDISPLAYOLD_H +#endif // _H Deleted: hugin/branches/ippei/src/hugin_base/appbase/ProgressReportOld.h =================================================================== --- hugin/branches/ippei/src/hugin_base/appbase/ProgressReportOld.h 2007-06-26 12:33:39 UTC (rev 2164) +++ hugin/branches/ippei/src/hugin_base/appbase/ProgressReportOld.h 2007-06-26 17:10:54 UTC (rev 2165) @@ -1,121 +0,0 @@ -// -*- c-basic-offset: 4 -*- -/** @file ProgressDisplayOld.h - * - * @author Pablo d'Angelo <pab...@we...> - * - * $Id: utils.h 1952 2007-04-15 20:57:55Z dangelo $ - * - * This 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 (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warrant... [truncated message content] |