Merge branch 'master' of github.com:FreeCAD/FreeCAD

This commit is contained in:
Yorik van Havre 2015-08-13 15:55:43 -03:00
commit 617088284c
4 changed files with 126 additions and 4 deletions

View File

@ -42,9 +42,6 @@ using namespace Base;
char format[4024]; // global buffer
const unsigned int format_len = 4024;
//**************************************************************************
// Construction destruction
@ -171,6 +168,9 @@ bool ConsoleSingleton::IsMsgTypeEnabled(const char* sObs, FreeCAD_ConsoleMsgType
*/
void ConsoleSingleton::Message( const char *pMsg, ... )
{
char format[4024];
const unsigned int format_len = 4024;
va_list namelessVars;
va_start(namelessVars, pMsg); // Get the "..." vars
vsnprintf(format, format_len, pMsg, namelessVars);
@ -195,6 +195,9 @@ void ConsoleSingleton::Message( const char *pMsg, ... )
*/
void ConsoleSingleton::Warning( const char *pMsg, ... )
{
char format[4024];
const unsigned int format_len = 4024;
va_list namelessVars;
va_start(namelessVars, pMsg); // Get the "..." vars
vsnprintf(format, format_len, pMsg, namelessVars);
@ -219,6 +222,9 @@ void ConsoleSingleton::Warning( const char *pMsg, ... )
*/
void ConsoleSingleton::Error( const char *pMsg, ... )
{
char format[4024];
const unsigned int format_len = 4024;
va_list namelessVars;
va_start(namelessVars, pMsg); // Get the "..." vars
vsnprintf(format, format_len, pMsg, namelessVars);
@ -246,6 +252,9 @@ void ConsoleSingleton::Error( const char *pMsg, ... )
void ConsoleSingleton::Log( const char *pMsg, ... )
{
char format[4024];
const unsigned int format_len = 4024;
if (!_bVerbose)
{
va_list namelessVars;

View File

@ -33,6 +33,8 @@
# include <QMdiSubWindow>
# include <QWaitCondition>
# include <QTranslator>
# include <QRunnable>
# include <QThreadPool>
#endif
#include <Base/Console.h>
@ -638,6 +640,110 @@ bool CmdTestMDI3::isActive(void)
return getMainWindow()->activeWindow();
}
DEF_STD_CMD(CmdTestConsoleOutput);
CmdTestConsoleOutput::CmdTestConsoleOutput()
: Command("Std_TestConsoleOutput")
{
sGroup = QT_TR_NOOP("Standard-Test");
sMenuText = QT_TR_NOOP("Test console output");
sToolTipText= QT_TR_NOOP("Test console output");
sStatusTip = QT_TR_NOOP("Test console output");
}
namespace Gui {
class TestConsoleObserver : public Base::ConsoleObserver
{
QMutex mutex;
public:
int matchMsg, matchWrn, matchErr, matchLog;
TestConsoleObserver() : matchMsg(0), matchWrn(0), matchErr(0), matchLog(0)
{
}
virtual void Warning(const char * msg)
{
mutex.lock();
matchWrn += strcmp(msg, "Write a warning to the console output.\n");
mutex.unlock();
}
virtual void Message(const char * msg)
{
mutex.lock();
matchMsg += strcmp(msg, "Write a message to the console output.\n");
mutex.unlock();
}
virtual void Error(const char * msg)
{
mutex.lock();
matchErr += strcmp(msg, "Write an error to the console output.\n");
mutex.unlock();
}
virtual void Log(const char * msg)
{
mutex.lock();
matchLog += strcmp(msg, "Write a log to the console output.\n");
mutex.unlock();
}
};
class ConsoleMessageTask : public QRunnable
{
public:
void run()
{
for (int i=0; i<10; i++)
Base::Console().Message("Write a message to the console output.\n");
}
};
class ConsoleWarningTask : public QRunnable
{
public:
void run()
{
for (int i=0; i<10; i++)
Base::Console().Warning("Write a warning to the console output.\n");
}
};
class ConsoleErrorTask : public QRunnable
{
public:
void run()
{
for (int i=0; i<10; i++)
Base::Console().Error("Write an error to the console output.\n");
}
};
class ConsoleLogTask : public QRunnable
{
public:
void run()
{
for (int i=0; i<10; i++)
Base::Console().Log("Write a log to the console output.\n");
}
};
}
void CmdTestConsoleOutput::activated(int iMsg)
{
TestConsoleObserver obs;
Base::Console().AttachObserver(&obs);
QThreadPool::globalInstance()->start(new ConsoleMessageTask);
QThreadPool::globalInstance()->start(new ConsoleWarningTask);
QThreadPool::globalInstance()->start(new ConsoleErrorTask);
QThreadPool::globalInstance()->start(new ConsoleLogTask);
QThreadPool::globalInstance()->waitForDone();
Base::Console().DetachObserver(&obs);
if (obs.matchMsg > 0 || obs.matchWrn > 0 || obs.matchErr > 0 || obs.matchLog > 0) {
Base::Console().Error("Race condition in Console class\n");
}
}
namespace Gui {
@ -661,6 +767,7 @@ void CreateTestCommands(void)
rcCmdMgr.addCommand(new CmdTestMDI1());
rcCmdMgr.addCommand(new CmdTestMDI2());
rcCmdMgr.addCommand(new CmdTestMDI3());
rcCmdMgr.addCommand(new CmdTestConsoleOutput());
}
} // namespace Gui

View File

@ -37,12 +37,14 @@
#include <QProcess>
#include <qrect.h>
#include <qregexp.h>
#include <qrunnable.h>
#include <QSet>
#include <QSignalMapper>
#include <QTemporaryFile>
#include <qtextcodec.h>
#include <qtextstream.h>
#include <qthread.h>
#include <qthreadpool.h>
#include <qtimer.h>
#include <qtranslator.h>
#include <QUrl>
@ -122,7 +124,7 @@
#include <QStylePainter>
#include <QSyntaxHighlighter>
#include <qtabbar.h>
#include <QTableView>
#include <QTableView>
#include <qtabwidget.h>
#include <QTextBrowser>
#include <QTextDocument>

View File

@ -86,6 +86,10 @@ class TestWorkbench ( Workbench ):
list = ["Std_TestProgress1", "Std_TestProgress2", "Std_TestProgress3", "Std_TestProgress4", "Std_TestProgress5"]
self.appendMenu(menu,list)
menu = ["Test &Commands","Console"]
list = ["Std_TestConsoleOutput"]
self.appendMenu(menu,list)
menu = ["Test &Commands","MDI"]
list = ["Std_MDITest1", "Std_MDITest2", "Std_MDITest3"]
self.appendMenu(menu,list)