#4 - Address initial step for "Log...
#4 - Address initial step for "Log dock exists but is not hooked up" umbrello/uml.h - Function logToConsole() returns true if environment variable UMBRELLO_LOG_TO_CONSOLE is set to 1 or if the log dock is deactivated within Umbrello. - Function log(const QString&) adds a line to the log window. - Function logDebug(const QString& s) calls uDebug() << s if logToConsole() returns true, else calls log(s) with prefix "D". - Function logInfo(const QString& s) calls qInfo() << s if logToConsole() returns true, else calls log(s) with prefix "I". - Function logWarn(const QString& s) calls uWarning() << s if logToConsole() returns true, else calls log(s) with prefix "W". - Function logDebug(const QString& s) calls uDebug() << s if logToConsole() returns true, else calls log(s) with prefix "E". - Private member m_logToConsole is set true if env variable UMBRELLO_LOG_TO_CONSOLE is 1 or if the log dock is invisible. - Macros logDebug0, logInfo0, logWarn0, logError0 call the corresponding function on UMLApp::app(), passing on their argument. - Macros logDebug1, logInfo1, logWarn1, logError1 takes arguments `s' and `a'. They require `s' to contain a placeholder %1 and they combine `a' into `s' using QString(s).arg(a). - Macros logDebug2, logInfo2, logWarn2, logError2 take 3 arguments s, a, b, expect placeholders %1 and %2, and operate similarly using QString(s).arg(a).arg(b). - Macros logDebug3, logInfo3, logWarn3, logError3 take 4 arguments s, a, b, c and operate similarly using QString(s).arg(a).arg(b).arg(c). - Macros logDebug4, logInfo4, logWarn4, logError4 take 5 arguments s, a, b, c, d and operate similarly using QString(s).arg(a).arg(b).arg(c).arg(d). umbrello/umlappprivate.h - In constructor UMLAppPrivate(UMLApp*) set monospace font on logWindow. umbrello/uml.cpp - In constructor UMLApp(QWidget*) get env var UMBRELLO_LOG_TO_CONSOLE into QString umbrello_logToConsole and set m_logToConsole true if umbrello_logToConsole is "1". umbrello/codegenerators/classifiercodedocument.cpp umbrello/codegenerators/codeaccessormethod.cpp umbrello/codegenerators/codeblockwithcomments.cpp umbrello/codegenerators/codeclassfield.cpp umbrello/codegenerators/codedocument.cpp umbrello/codegenerators/codegenerator.cpp umbrello/codegenerators/codeoperation.cpp umbrello/codegenerators/hierarchicalcodeblock.cpp umbrello/codegenerators/java/javaantcodedocument.cpp umbrello/codegenerators/xml/xmlelementcodeblock.cpp umbrello/codeimport/cppimport.cpp umbrello/codeimport/phpimport.cpp umbrello/diagram_utils.cpp umbrello/dialogs/codeeditor.cpp umbrello/import_argo.cpp umbrello/umldoc.cpp umbrello/umllistview.cpp umbrello/umllistviewitem.cpp umbrello/umlmodel/association.cpp umbrello/umlmodel/attribute.cpp umbrello/umlmodel/classifier.cpp umbrello/umlmodel/component.cpp umbrello/umlmodel/entity.cpp umbrello/umlmodel/enum.cpp umbrello/umlmodel/folder.cpp umbrello/umlmodel/foreignkeyconstraint.cpp umbrello/umlmodel/instance.cpp umbrello/umlmodel/instanceattribute.cpp umbrello/umlmodel/operation.cpp umbrello/umlmodel/package.cpp umbrello/umlmodel/stereotype.cpp umbrello/umlmodel/template.cpp umbrello/umlmodel/umlobject.cpp umbrello/umlmodel/umlrole.cpp umbrello/umlmodel/uniqueconstraint.cpp umbrello/umlscene.cpp umbrello/umlwidgets/associationline.cpp umbrello/umlwidgets/associationwidget.cpp umbrello/umlwidgets/classifierwidget.cpp umbrello/umlwidgets/combinedfragmentwidget.cpp umbrello/umlwidgets/diagramproxywidget.cpp umbrello/umlwidgets/floatingtextwidget.cpp umbrello/umlwidgets/messagewidget.cpp umbrello/umlwidgets/notewidget.cpp umbrello/umlwidgets/objectwidget.cpp umbrello/umlwidgets/pinportbase.cpp umbrello/umlwidgets/signalwidget.cpp umbrello/umlwidgets/statewidget.cpp umbrello/umlwidgets/umlwidget.cpp umbrello/umlwidgets/widgetbase.cpp - Convert uWarning() / uError() stream usages to the new logDebug0 to logError4 macro functions defined in uml.h.