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 362 of file LogDockerDock.cpp.

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

References cfgToString().

◆ changeTheme

void LogDockerDock::changeTheme ( )
privateslot

Definition at line 433 of file LogDockerDock.cpp.

434{
435 clearLog();
436 QColor background = qApp->palette().window().color();
437 if (background.value() > 100) {
438 s_debug.setForeground(Qt::black);
439 s_info.setForeground(Qt::darkGreen);
440 s_warning.setForeground(Qt::darkYellow);
441 s_critical.setForeground(Qt::darkRed);
442 s_fatal.setForeground(Qt::darkRed);
443 }
444 else {
445 s_debug.setForeground(Qt::white);
446 s_info.setForeground(Qt::green);
447 s_warning.setForeground(Qt::yellow);
448 s_critical.setForeground(Qt::red);
449 s_fatal.setForeground(Qt::red);
450 }
451 s_fatal.setFontWeight(QFont::Bold);
452}
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 404 of file LogDockerDock.cpp.

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

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 *chkPerformance = new QCheckBox(i18n("Performance"), page);
316 chkPerformance->setChecked(cfg.readEntry("performance_41021", false));
317 layout->addWidget(chkPerformance);
318
319 QCheckBox *chkPigment = new QCheckBox(i18n("Color Management"), page);
320 chkPigment->setChecked(cfg.readEntry("pigment", false));
321 layout->addWidget(chkPigment);
322
323
324 if (dlg.exec()) {
325 // Apply the new settings
326 cfg.writeEntry("resources_30009", chkResources->isChecked());
327 cfg.writeEntry("krita_41000", chkKrita->isChecked());
328 cfg.writeEntry("image_41001", chkImage->isChecked());
329 cfg.writeEntry("registry_41002", chkRegistry->isChecked());
330 cfg.writeEntry("tools_41003", chkTools->isChecked());
331 cfg.writeEntry("tiles_41004", chkTiles->isChecked());
332 cfg.writeEntry("filters_41005", chkFilters->isChecked());
333 cfg.writeEntry("plugins_41006", chkPlugins->isChecked());
334 cfg.writeEntry("ui_41007", chkUi->isChecked());
335 cfg.writeEntry("file_41008", chkFile->isChecked());
336 cfg.writeEntry("math_41009", chkMath->isChecked());
337 cfg.writeEntry("render_41010", chkRender->isChecked());
338 cfg.writeEntry("script_41011", chkScript->isChecked());
339 cfg.writeEntry("input_41012", chkInput->isChecked());
340 cfg.writeEntry("action_41013", chkAction->isChecked());
341 cfg.writeEntry("tablet_41014", chkTablet->isChecked());
342 cfg.writeEntry("opengl_41015", chkOpenGL->isChecked());
343 cfg.writeEntry("metadata_41016", chkMetaData->isChecked());
344 cfg.writeEntry("performance_41021", chkPerformance->isChecked());
345 cfg.writeEntry("pigment", chkPigment->isChecked());
346
347 if (bnToggle->isChecked()) {
349 }
350 }
351
352}
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:887

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: