[Orxonox-commit 4163] r8834 - in code/branches/output/src/libraries: core/command util/output
landauf at orxonox.net
landauf at orxonox.net
Fri Aug 12 00:27:36 CEST 2011
Author: landauf
Date: 2011-08-12 00:26:40 +0200 (Fri, 12 Aug 2011)
New Revision: 8834
Modified:
code/branches/output/src/libraries/core/command/Shell.cc
code/branches/output/src/libraries/util/output/BaseWriter.cc
code/branches/output/src/libraries/util/output/BaseWriter.h
code/branches/output/src/libraries/util/output/OutputListener.cc
code/branches/output/src/libraries/util/output/OutputListener.h
Log:
added flag to disable automatic registration of output listeners. avoids crash during creation of a Shell if some verbose context (object_list?) is activated.
different handling of sub-contexts whose main-context is also explicitly registered (even though that's not the intended way to use)
Modified: code/branches/output/src/libraries/core/command/Shell.cc
===================================================================
--- code/branches/output/src/libraries/core/command/Shell.cc 2011-08-11 21:20:39 UTC (rev 8833)
+++ code/branches/output/src/libraries/core/command/Shell.cc 2011-08-11 22:26:40 UTC (rev 8834)
@@ -38,6 +38,7 @@
#include "util/Math.h"
#include "util/StringUtils.h"
#include "util/SubString.h"
+#include "util/output/OutputManager.h"
#include "util/output/MemoryWriter.h"
#include "core/CoreIncludes.h"
#include "core/ConfigFileManager.h"
@@ -70,12 +71,14 @@
@param bScrollable If true, the user is allowed to scroll through the output-lines
*/
Shell::Shell(const std::string& consoleName, bool bScrollable)
- : BaseWriter(consoleName)
+ : BaseWriter(consoleName, false)
, inputBuffer_(new InputBuffer())
, bScrollable_(bScrollable)
{
RegisterRootObject(Shell);
+ OutputManager::getInstance().registerListener(this);
+
this->scrollPosition_ = 0;
this->maxHistoryLength_ = 100;
this->historyPosition_ = 0;
@@ -103,6 +106,8 @@
Shell::~Shell()
{
this->inputBuffer_->destroy();
+
+ OutputManager::getInstance().unregisterListener(this);
}
/**
Modified: code/branches/output/src/libraries/util/output/BaseWriter.cc
===================================================================
--- code/branches/output/src/libraries/util/output/BaseWriter.cc 2011-08-11 21:20:39 UTC (rev 8833)
+++ code/branches/output/src/libraries/util/output/BaseWriter.cc 2011-08-11 22:26:40 UTC (rev 8834)
@@ -32,7 +32,7 @@
namespace orxonox
{
- BaseWriter::BaseWriter(const std::string& name)
+ BaseWriter::BaseWriter(const std::string& name, bool bRegister) : OutputListener(bRegister)
{
this->name_ = name;
@@ -41,6 +41,7 @@
this->configurableAdditionalContexts_.push_back("example");
this->subcontextsCheckMask_ = context::none;
+ this->subcontextsNoCheckMask_ = context::none;
this->changedConfigurableLevel();
this->changedConfigurableAdditionalContextsLevel();
@@ -53,7 +54,9 @@
void BaseWriter::output(OutputLevel level, const OutputContextContainer& context, const std::vector<std::string>& lines)
{
- if (((this->subcontextsCheckMask_ & context.mask) == 0) || (this->subcontexts_.find(context.sub_id) != this->subcontexts_.end()))
+ if (((this->subcontextsCheckMask_ & context.mask) == 0) ||
+ (this->subcontextsNoCheckMask_ & context.mask) ||
+ (this->subcontexts_.find(context.sub_id) != this->subcontexts_.end()))
{
const std::string& prefix = OutputManager::getInstance().getDefaultPrefix(level, context);
std::string blanks(prefix.length(), ' ');
@@ -89,9 +92,9 @@
{
OutputContextMask context_mask = context::none;
this->subcontextsCheckMask_ = context::none;
+ this->subcontextsNoCheckMask_ = context::none;
this->subcontexts_.clear();
- this->subcontexts_.insert(context::no_subcontext);
for (size_t i = 0; i < this->configurableAdditionalContexts_.size(); ++i)
{
@@ -116,6 +119,10 @@
this->subcontexts_.insert(container.sub_id);
this->subcontextsCheckMask_ |= container.mask;
}
+ else
+ {
+ this->subcontextsNoCheckMask_ |= container.mask;
+ }
}
this->setAdditionalContextsMask(context_mask);
Modified: code/branches/output/src/libraries/util/output/BaseWriter.h
===================================================================
--- code/branches/output/src/libraries/util/output/BaseWriter.h 2011-08-11 21:20:39 UTC (rev 8833)
+++ code/branches/output/src/libraries/util/output/BaseWriter.h 2011-08-11 22:26:40 UTC (rev 8834)
@@ -41,7 +41,7 @@
class _UtilExport BaseWriter : public OutputListener
{
public:
- BaseWriter(const std::string& name);
+ BaseWriter(const std::string& name, bool bRegister = true);
virtual ~BaseWriter();
void setLevelMax(OutputLevel max);
@@ -84,6 +84,7 @@
std::string name_;
OutputContextMask subcontextsCheckMask_;
+ OutputContextMask subcontextsNoCheckMask_;
std::set<OutputContextSubID> subcontexts_;
};
}
Modified: code/branches/output/src/libraries/util/output/OutputListener.cc
===================================================================
--- code/branches/output/src/libraries/util/output/OutputListener.cc 2011-08-11 21:20:39 UTC (rev 8833)
+++ code/branches/output/src/libraries/util/output/OutputListener.cc 2011-08-11 22:26:40 UTC (rev 8834)
@@ -32,13 +32,14 @@
namespace orxonox
{
- OutputListener::OutputListener()
+ OutputListener::OutputListener(bool bRegister)
{
this->levelMask_ = level::none;
this->additionalContextsLevelMask_ = level::none;
this->additionalContextsMask_ = context::none;
- OutputManager::getInstance().registerListener(this);
+ if (bRegister)
+ OutputManager::getInstance().registerListener(this);
}
OutputListener::~OutputListener()
Modified: code/branches/output/src/libraries/util/output/OutputListener.h
===================================================================
--- code/branches/output/src/libraries/util/output/OutputListener.h 2011-08-11 21:20:39 UTC (rev 8833)
+++ code/branches/output/src/libraries/util/output/OutputListener.h 2011-08-11 22:26:40 UTC (rev 8834)
@@ -40,7 +40,7 @@
class _UtilExport OutputListener
{
public:
- OutputListener();
+ OutputListener(bool bRegister = true);
virtual ~OutputListener();
void setLevelMax(OutputLevel max);
More information about the Orxonox-commit
mailing list