Krita Source Code Documentation
Loading...
Searching...
No Matches
LogDockerDock Class Reference

#include <LogDockerDock.h>

+ Inheritance diagram for LogDockerDock:

Public Member Functions

 LogDockerDock ()
 
QString observerName () override
 
void setCanvas (KoCanvasBase *canvas) override
 
void setViewManager (KisViewManager *kisview) override
 
void unsetCanvas () override
 
- Public Member Functions inherited from KisMainwindowObserver
 KisMainwindowObserver ()
 
 ~KisMainwindowObserver () override
 
- Public Member Functions inherited from KoCanvasObserverBase
 KoCanvasObserverBase ()
 
KoCanvasBaseobservedCanvas () const
 
void setObservedCanvas (KoCanvasBase *canvas)
 
void unsetObservedCanvas ()
 
virtual ~KoCanvasObserverBase ()
 

Private Slots

void changeTheme ()
 
void clearLog ()
 
void insertMessage (QtMsgType type, const QString &msg)
 
void saveLog ()
 
void settings ()
 
void toggleLogging (bool toggle)
 

Private Member Functions

void applyCategories ()
 

Static Private Attributes

static QTextCharFormat s_critical
 
static QTextCharFormat s_debug
 
static QTextCharFormat s_fatal
 
static QTextCharFormat s_info
 
static QTextCharFormat s_warning
 

Additional Inherited Members

Detailed Description

Definition at line 16 of file LogDockerDock.h.

Constructor & Destructor Documentation

◆ LogDockerDock()

LogDockerDock::LogDockerDock ( )

Definition at line 161 of file LogDockerDock.cpp.

162 : QDockWidget(i18n("Log Viewer"))
163{
164 QWidget *page = new QWidget(this);
165 setupUi(page);
166 setWidget(page);
167
168 bnToggle->setIcon(koIcon("view-list-text-16"));
169 connect(bnToggle, SIGNAL(clicked(bool)), SLOT(toggleLogging(bool)));
170 bnToggle->setChecked(KisConfig(true).readEntry<bool>("logviewer_enabled", false));
171 toggleLogging(KisConfig(true).readEntry<bool>("logviewer_enabled", false));
172
173 bnClear->setIcon(koIcon("edit-clear-16"));
174 connect(bnClear, SIGNAL(clicked(bool)), SLOT(clearLog()));
175
176 bnSave->setIcon(koIcon("document-save-16"));
177 connect(bnSave, SIGNAL(clicked(bool)), SLOT(saveLog()));
178
179 bnSettings->setIcon(koIcon("configure-thicker"));
180 connect(bnSettings, SIGNAL(clicked(bool)), SLOT(settings()));
181
182 connect(s_messageHandlerObject, SIGNAL(sigDeliverMessage(QtMsgType,QString)), this, SLOT(insertMessage(QtMsgType,QString)), Qt::AutoConnection);
183
184 changeTheme();
185}
void insertMessage(QtMsgType type, const QString &msg)
void toggleLogging(bool toggle)
#define koIcon(name)
Use these macros for icons without any issues.
Definition kis_icon.h:25

References changeTheme(), clearLog(), insertMessage(), koIcon, saveLog(), settings(), and toggleLogging().

Member Function Documentation

◆ applyCategories()

void LogDockerDock::applyCategories ( )
private

Definition at line 357 of file LogDockerDock.cpp.

358{
359 QStringList filters;
360 KConfigGroup cfg( KSharedConfig::openConfig(), "LogDocker");
361
362 filters << cfgToString("krita.general", cfg.readEntry("krita_41000", false));
363 filters << cfgToString("krita.lib.resources", cfg.readEntry("resources_30009", false));
364 filters << cfgToString("krita.core", cfg.readEntry("image_41001", false));
365 filters << cfgToString("krita.registry", cfg.readEntry("registry_41002", false));
366
367 filters << cfgToString("krita.tools", cfg.readEntry("tools_41003", false));
368 filters << cfgToString("krita.lib.flake", cfg.readEntry("tools_41003", false));
369
370 filters << cfgToString("krita.tiles", cfg.readEntry("tiles_41004", false));
371 filters << cfgToString("krita.filters", cfg.readEntry("filters_41005", false));
372
373 filters << cfgToString("krita.plugins", cfg.readEntry("plugins_41006", false));
374 filters << cfgToString("krita.lib.plugin", cfg.readEntry("plugins_41006", false));
375
376 filters << cfgToString("krita.ui", cfg.readEntry("ui_41007", false));
377 filters << cfgToString("krita.widgets", cfg.readEntry("ui_41007", false));
378 filters << cfgToString("krita.widgetutils", cfg.readEntry("ui_41007", false));
379
380 filters << cfgToString("krita.file", cfg.readEntry("file_41008", false));
381 filters << cfgToString("krita.lib.store", cfg.readEntry("file_41008", false));
382 filters << cfgToString("krita.lib.odf", cfg.readEntry("file_41008", false));
383
384 filters << cfgToString("krita.math", cfg.readEntry("math_41009", false));
385 filters << cfgToString("krita.grender", cfg.readEntry("render_41010", false));
386 filters << cfgToString("krita.scripting", cfg.readEntry("script_41011", false));
387 filters << cfgToString("krita.input", cfg.readEntry("input_41012", false));
388 filters << cfgToString("krita.action", cfg.readEntry("action_41013", false));
389 filters << cfgToString("krita.tablet", cfg.readEntry("tablet_41014", false));
390 filters << cfgToString("krita.opengl", cfg.readEntry("opengl_41015", false));
391 filters << cfgToString("krita.metadata", cfg.readEntry("metadata_41016", false));
392
393 filters << cfgToString("krita.lib.pigment", cfg.readEntry("pigment", false));
394
395 QLoggingCategory::setFilterRules(filters.join("\n"));
396}
QString cfgToString(const char *category, bool cfg)

References cfgToString().

◆ changeTheme

void LogDockerDock::changeTheme ( )
privateslot

Definition at line 427 of file LogDockerDock.cpp.

428{
429 clearLog();
430 QColor background = qApp->palette().window().color();
431 if (background.value() > 100) {
432 s_debug.setForeground(Qt::black);
433 s_info.setForeground(Qt::darkGreen);
434 s_warning.setForeground(Qt::darkYellow);
435 s_critical.setForeground(Qt::darkRed);
436 s_fatal.setForeground(Qt::darkRed);
437 }
438 else {
439 s_debug.setForeground(Qt::white);
440 s_info.setForeground(Qt::green);
441 s_warning.setForeground(Qt::yellow);
442 s_critical.setForeground(Qt::red);
443 s_fatal.setForeground(Qt::red);
444 }
445 s_fatal.setFontWeight(QFont::Bold);
446}
static QTextCharFormat s_critical
static QTextCharFormat s_info
static QTextCharFormat s_debug
static QTextCharFormat s_warning
static QTextCharFormat s_fatal

References clearLog(), s_critical, s_debug, s_fatal, s_info, and s_warning.

◆ clearLog

void LogDockerDock::clearLog ( )
privateslot

Definition at line 210 of file LogDockerDock.cpp.

211{
212 txtLogViewer->document()->clear();
213}

◆ insertMessage

void LogDockerDock::insertMessage ( QtMsgType type,
const QString & msg )
privateslot

Definition at line 398 of file LogDockerDock.cpp.

399{
400 QTextDocument *doc = txtLogViewer->document();
401 QTextCursor cursor(doc);
402 cursor.movePosition(QTextCursor::End, QTextCursor::MoveAnchor);
403 cursor.beginEditBlock();
404
405 switch (type) {
406 case QtDebugMsg:
407 cursor.insertText(msg + "\n", s_debug);
408 break;
409 case QtInfoMsg:
410 cursor.insertText(msg + "\n", s_info);
411 break;
412 case QtWarningMsg:
413 cursor.insertText(msg + "\n", s_warning);
414 break;
415 case QtCriticalMsg:
416 cursor.insertText(msg + "\n", s_critical);
417 break;
418 case QtFatalMsg:
419 cursor.insertText(msg + "\n", s_fatal);
420 break;
421 }
422
423 cursor.endEditBlock();
424 txtLogViewer->verticalScrollBar()->setValue(txtLogViewer->verticalScrollBar()->maximum());
425}

References s_critical, s_debug, s_fatal, s_info, and s_warning.

◆ observerName()

QString LogDockerDock::observerName ( )
inlineoverridevirtual

Reimplemented from KoCanvasObserverBase.

Definition at line 20 of file LogDockerDock.h.

20{ return "LogDockerDock"; }

◆ saveLog

void LogDockerDock::saveLog ( )
privateslot

Definition at line 215 of file LogDockerDock.cpp.

216{
217 KoFileDialog fileDialog(this, KoFileDialog::SaveFile, "logfile");
218 fileDialog.setDefaultDir(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/" + QString("krita_%1.log").arg(QDateTime::currentDateTime().toString("yyyy-MM-ddThh")));
219 QString filename = fileDialog.filename();
220 if (!filename.isEmpty()) {
221 QFile f(filename);
222 if (f.open(QFile::WriteOnly)) {
223 f.write(txtLogViewer->document()->toPlainText().toUtf8());
224 f.close();
225 } else {
226 QMessageBox::warning(this, i18nc("@title:window", "Krita"),
227 i18n("Could not save %1.\nReason: %2.", f.fileName(), f.errorString()));
228 }
229 }
230}
QString toString(const QString &value)

References KoFileDialog::filename(), KoFileDialog::SaveFile, and KoFileDialog::setDefaultDir().

◆ setCanvas()

void LogDockerDock::setCanvas ( KoCanvasBase * canvas)
overridevirtual

re-implement this method in your canvas observer. It will be called whenever a canvas becomes active. Note that you are responsible for not connecting more than one time to the signals of a canvas or any of the QObjects you can access through the canvas.

Implements KoCanvasObserverBase.

Definition at line 187 of file LogDockerDock.cpp.

188{
189 setEnabled(true);
190}

◆ settings

void LogDockerDock::settings ( )
privateslot

Definition at line 232 of file LogDockerDock.cpp.

233{
234 KoDialog dlg(this);
235 dlg.setButtons(KoDialog::Ok | KoDialog::Cancel);
236 dlg.setCaption(i18n("Log Settings"));
237 QWidget *page = new QWidget(&dlg);
238 dlg.setMainWidget(page);
239 QVBoxLayout *layout = new QVBoxLayout(page);
240
241 KConfigGroup cfg( KSharedConfig::openConfig(), "LogDocker");
242
243 QCheckBox *chkKrita = new QCheckBox(i18n("General"), page);
244 chkKrita->setChecked(cfg.readEntry("krita_41000", false));
245 layout->addWidget(chkKrita);
246
247 QCheckBox *chkResources = new QCheckBox(i18n("Resource Management"), page);
248 chkResources->setChecked(cfg.readEntry("resources_30009", false));
249 layout->addWidget(chkResources);
250
251 QCheckBox *chkImage = new QCheckBox(i18n("Image Core"), page);
252 chkImage->setChecked(cfg.readEntry("image_41001", false));
253 layout->addWidget(chkImage);
254
255 QCheckBox *chkRegistry = new QCheckBox(i18n("Registries"), page);
256 chkRegistry->setChecked(cfg.readEntry("registry_41002", false));
257 layout->addWidget(chkRegistry);
258
259 QCheckBox *chkTools = new QCheckBox(i18n("Tools"), page);
260 chkTools->setChecked(cfg.readEntry("tools_41003", false));
261 layout->addWidget(chkTools);
262
263 QCheckBox *chkTiles = new QCheckBox(i18n("Tile Engine"), page);
264 chkTiles->setChecked(cfg.readEntry("tiles_41004", false));
265 layout->addWidget(chkTiles);
266
267 QCheckBox *chkFilters = new QCheckBox(i18nc("Filter as an effect", "Filters"), page);
268 chkFilters->setChecked(cfg.readEntry("filters_41005", false));
269 layout->addWidget(chkFilters);
270
271 QCheckBox *chkPlugins = new QCheckBox(i18n("Plugin Management"), page);
272 chkPlugins->setChecked(cfg.readEntry("plugins_41006", false));
273 layout->addWidget(chkPlugins);
274
275 QCheckBox *chkUi = new QCheckBox(i18n("User Interface"), page);
276 chkUi->setChecked(cfg.readEntry("ui_41007", false));
277 layout->addWidget(chkUi);
278
279 QCheckBox *chkFile = new QCheckBox(i18n("File loading and saving"), page);
280 chkFile->setChecked(cfg.readEntry("file_41008", false));
281 layout->addWidget(chkFile);
282
283 QCheckBox *chkMath = new QCheckBox(i18n("Mathematics and calculations"), page);
284 chkMath->setChecked(cfg.readEntry("math_41009", false));
285 layout->addWidget(chkMath);
286
287 QCheckBox *chkRender = new QCheckBox(i18n("Image Rendering"), page);
288 chkRender->setChecked(cfg.readEntry("render_41010", false));
289 layout->addWidget(chkRender);
290
291 QCheckBox *chkScript = new QCheckBox(i18n("Scripting"), page);
292 chkScript->setChecked(cfg.readEntry("script_41011", false));
293 layout->addWidget(chkScript);
294
295 QCheckBox *chkInput = new QCheckBox(i18n("Input handling"), page);
296 chkInput->setChecked(cfg.readEntry("input_41012", false));
297 layout->addWidget(chkInput);
298
299 QCheckBox *chkAction = new QCheckBox(i18n("Actions"), page);
300 chkAction->setChecked(cfg.readEntry("action_41013", false));
301 layout->addWidget(chkAction);
302
303 QCheckBox *chkTablet = new QCheckBox(i18n("Tablet Handling"), page);
304 chkTablet->setChecked(cfg.readEntry("tablet_41014", false));
305 layout->addWidget(chkTablet);
306
307 QCheckBox *chkOpenGL = new QCheckBox(i18n("GPU Canvas"), page);
308 chkOpenGL->setChecked(cfg.readEntry("opengl_41015", false));
309 layout->addWidget(chkOpenGL);
310
311 QCheckBox *chkMetaData = new QCheckBox(i18n("Metadata"), page);
312 chkMetaData->setChecked(cfg.readEntry("metadata_41016", false));
313 layout->addWidget(chkMetaData);
314
315 QCheckBox *chkPigment = new QCheckBox(i18n("Color Management"), page);
316 chkPigment->setChecked(cfg.readEntry("pigment", false));
317 layout->addWidget(chkPigment);
318
319
320 if (dlg.exec()) {
321 // Apply the new settings
322 cfg.writeEntry("resources_30009", chkResources->isChecked());
323 cfg.writeEntry("krita_41000", chkKrita->isChecked());
324 cfg.writeEntry("image_41001", chkImage->isChecked());
325 cfg.writeEntry("registry_41002", chkRegistry->isChecked());
326 cfg.writeEntry("tools_41003", chkTools->isChecked());
327 cfg.writeEntry("tiles_41004", chkTiles->isChecked());
328 cfg.writeEntry("filters_41005", chkFilters->isChecked());
329 cfg.writeEntry("plugins_41006", chkPlugins->isChecked());
330 cfg.writeEntry("ui_41007", chkUi->isChecked());
331 cfg.writeEntry("file_41008", chkFile->isChecked());
332 cfg.writeEntry("math_41009", chkMath->isChecked());
333 cfg.writeEntry("render_41010", chkRender->isChecked());
334 cfg.writeEntry("script_41011", chkScript->isChecked());
335 cfg.writeEntry("input_41012", chkInput->isChecked());
336 cfg.writeEntry("action_41013", chkAction->isChecked());
337 cfg.writeEntry("tablet_41014", chkTablet->isChecked());
338 cfg.writeEntry("opengl_41015", chkOpenGL->isChecked());
339 cfg.writeEntry("metadata_41016", chkMetaData->isChecked());
340 cfg.writeEntry("pigment", chkPigment->isChecked());
341
342 if (bnToggle->isChecked()) {
344 }
345 }
346
347}
A dialog base class with standard buttons and predefined layouts.
Definition KoDialog.h:116
@ Ok
Show Ok button. (this button accept()s the dialog; result set to QDialog::Accepted)
Definition KoDialog.h:127
@ Cancel
Show Cancel-button. (this button reject()s the dialog; result set to QDialog::Rejected)
Definition KoDialog.h:130

References applyCategories(), KoDialog::Cancel, KoDialog::Ok, KoDialog::setButtons(), KoDialog::setCaption(), and KoDialog::setMainWidget().

◆ setViewManager()

void LogDockerDock::setViewManager ( KisViewManager * kisview)
overridevirtual

Implements KisMainwindowObserver.

Definition at line 192 of file LogDockerDock.cpp.

193{
194 connect(kisview->mainWindow(), SIGNAL(themeChanged()), SLOT(changeTheme()));
195}
KisMainWindow * mainWindow() const

References changeTheme(), and KisViewManager::mainWindow().

◆ toggleLogging

void LogDockerDock::toggleLogging ( bool toggle)
privateslot

Definition at line 197 of file LogDockerDock.cpp.

198{
199 KisConfig(false).writeEntry<bool>("logviewer_enabled", toggle);
200
201 if (toggle) {
203 } else {
204 QLoggingCategory::setFilterRules(QString());
205 }
206
207 s_messageHandlerObject->setLoggingEnabled(toggle);
208}
void writeEntry(const QString &name, const T &value)
Definition kis_config.h:825

References applyCategories(), and KisConfig::writeEntry().

◆ unsetCanvas()

void LogDockerDock::unsetCanvas ( )
inlineoverridevirtual

Re-implement to notify the observer that its canvas is no longer among the living. The daisies, it is pushing up. This means you don't have to disconnect, it's dead.

The old canvas should be deleted already, so if you stored a pointer to it, don't touch!

Note that currently there is a bug where in certain specific circumstances unsetCanvas can be called when it shouldn't, see for example KWStatisticsDocker for a workaround for this problem.

Implements KoCanvasObserverBase.

Definition at line 22 of file LogDockerDock.h.

22{}

Member Data Documentation

◆ s_critical

QTextCharFormat LogDockerDock::s_critical
staticprivate

Definition at line 41 of file LogDockerDock.h.

◆ s_debug

QTextCharFormat LogDockerDock::s_debug
staticprivate

Definition at line 38 of file LogDockerDock.h.

◆ s_fatal

QTextCharFormat LogDockerDock::s_fatal
staticprivate

Definition at line 42 of file LogDockerDock.h.

◆ s_info

QTextCharFormat LogDockerDock::s_info
staticprivate

Definition at line 39 of file LogDockerDock.h.

◆ s_warning

QTextCharFormat LogDockerDock::s_warning
staticprivate

Definition at line 40 of file LogDockerDock.h.


The documentation for this class was generated from the following files: