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 ()
 
KoCanvasBase * observedCanvas () 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 367 of file LogDockerDock.cpp.

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

References cfgToString().

◆ changeTheme

void LogDockerDock::changeTheme ( )
privateslot

Definition at line 439 of file LogDockerDock.cpp.

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

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

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 *chkAction = new QCheckBox(i18n("Actions"), page);
296 chkAction->setChecked(cfg.readEntry("action_41013", false));
297 layout->addWidget(chkAction);
298
299 QCheckBox *chkTablet = new QCheckBox(i18n("Tablet Handling"), page);
300 chkTablet->setChecked(cfg.readEntry("tablet_41014", false));
301 layout->addWidget(chkTablet);
302
303 QCheckBox *chkInputEater = new QCheckBox(i18n("Input Filtering"), page);
304 chkInputEater->setChecked(cfg.readEntry("input_eater_41019", false));
305 layout->addWidget(chkInputEater);
306
307 QCheckBox *chkInputMatcher = new QCheckBox(i18n("Input Matching"), page);
308 chkInputMatcher->setChecked(cfg.readEntry("input_matcher_41020", false));
309 layout->addWidget(chkInputMatcher);
310
311 QCheckBox *chkOpenGL = new QCheckBox(i18n("GPU Canvas"), page);
312 chkOpenGL->setChecked(cfg.readEntry("opengl_41015", false));
313 layout->addWidget(chkOpenGL);
314
315 QCheckBox *chkMetaData = new QCheckBox(i18n("Metadata"), page);
316 chkMetaData->setChecked(cfg.readEntry("metadata_41016", false));
317 layout->addWidget(chkMetaData);
318
319 QCheckBox *chkPerformance = new QCheckBox(i18n("Performance"), page);
320 chkPerformance->setChecked(cfg.readEntry("performance_41021", false));
321 layout->addWidget(chkPerformance);
322
323 QCheckBox *chkPigment = new QCheckBox(i18n("Color Management"), page);
324 chkPigment->setChecked(cfg.readEntry("pigment", false));
325 layout->addWidget(chkPigment);
326
327
328 if (dlg.exec()) {
329 // Apply the new settings
330 cfg.writeEntry("resources_30009", chkResources->isChecked());
331 cfg.writeEntry("krita_41000", chkKrita->isChecked());
332 cfg.writeEntry("image_41001", chkImage->isChecked());
333 cfg.writeEntry("registry_41002", chkRegistry->isChecked());
334 cfg.writeEntry("tools_41003", chkTools->isChecked());
335 cfg.writeEntry("tiles_41004", chkTiles->isChecked());
336 cfg.writeEntry("filters_41005", chkFilters->isChecked());
337 cfg.writeEntry("plugins_41006", chkPlugins->isChecked());
338 cfg.writeEntry("ui_41007", chkUi->isChecked());
339 cfg.writeEntry("file_41008", chkFile->isChecked());
340 cfg.writeEntry("math_41009", chkMath->isChecked());
341 cfg.writeEntry("render_41010", chkRender->isChecked());
342 cfg.writeEntry("script_41011", chkScript->isChecked());
343 cfg.writeEntry("action_41013", chkAction->isChecked());
344 cfg.writeEntry("tablet_41014", chkTablet->isChecked());
345 cfg.writeEntry("input_eater_41019", chkInputEater->isChecked());
346 cfg.writeEntry("input_matcher_41020", chkInputMatcher->isChecked());
347 cfg.writeEntry("opengl_41015", chkOpenGL->isChecked());
348 cfg.writeEntry("metadata_41016", chkMetaData->isChecked());
349 cfg.writeEntry("performance_41021", chkPerformance->isChecked());
350 cfg.writeEntry("pigment", chkPigment->isChecked());
351
352 if (bnToggle->isChecked()) {
354 }
355 }
356
357}
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:892

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: