2020-09-16 00:35:12 +01:00
/*
SPDX - FileCopyrightText : 2009 - 2010 Volker Lanz < vl @ fidra . de >
SPDX - FileCopyrightText : 2014 - 2020 Andrius Š tikonas < andrius @ stikonas . eu >
SPDX - License - Identifier : GPL - 3.0 - or - later
*/
2009-04-22 13:41:30 +01:00
# include "gui/treelog.h"
# include "gui/partitionmanagerwidget.h"
2017-09-14 20:42:43 +01:00
# include "util/guihelpers.h"
2017-06-05 00:28:22 +01:00
# include "config.h"
2009-04-22 13:41:30 +01:00
2016-01-12 00:12:49 +00:00
# include <util/globallog.h>
2009-04-22 13:41:30 +01:00
2014-05-18 21:41:48 +01:00
# include <QDateTime>
2014-05-13 14:47:35 +01:00
# include <QDebug>
2010-03-07 19:02:02 +00:00
# include <QFile>
2014-05-18 21:41:48 +01:00
# include <QFileDialog>
# include <QTemporaryFile>
# include <QTextStream>
2009-04-22 13:41:30 +01:00
# include <QTreeWidget>
2010-03-07 19:02:02 +00:00
# include <QTreeWidgetItem>
2014-05-18 21:41:48 +01:00
# include <KIO/CopyJob>
# include <KJobUiDelegate>
# include <KLocalizedString>
# include <KMessageBox>
2010-03-07 19:02:02 +00:00
2009-04-22 13:41:30 +01:00
/** Creates a new TreeLog instance.
2015-07-13 15:17:41 +01:00
@ param parent the parent widget
2009-04-22 13:41:30 +01:00
*/
TreeLog : : TreeLog ( QWidget * parent ) :
2015-07-13 15:17:41 +01:00
QWidget ( parent ) ,
Ui : : TreeLogBase ( )
2009-04-22 13:41:30 +01:00
{
2015-07-13 15:17:41 +01:00
setupUi ( this ) ;
2010-03-07 19:02:02 +00:00
2015-07-13 15:17:41 +01:00
treeLog ( ) . header ( ) - > setContextMenuPolicy ( Qt : : CustomContextMenu ) ;
2016-05-18 22:23:59 +01:00
connect ( treeLog ( ) . header ( ) , & QHeaderView : : customContextMenuRequested , this , & TreeLog : : onHeaderContextMenu ) ;
2010-03-07 19:02:02 +00:00
}
TreeLog : : ~ TreeLog ( )
{
2015-07-13 15:17:41 +01:00
saveConfig ( ) ;
2010-03-07 19:02:02 +00:00
}
void TreeLog : : init ( )
{
2015-07-13 15:17:41 +01:00
loadConfig ( ) ;
2010-03-07 19:02:02 +00:00
}
void TreeLog : : loadConfig ( )
{
2015-07-13 15:17:41 +01:00
QList < int > colWidths = Config : : treeLogColumnWidths ( ) ;
QList < int > colPositions = Config : : treeLogColumnPositions ( ) ;
QList < int > colVisible = Config : : treeLogColumnVisible ( ) ;
QHeaderView * header = treeLog ( ) . header ( ) ;
for ( int i = 0 ; i < treeLog ( ) . columnCount ( ) ; i + + ) {
if ( colPositions [ 0 ] ! = - 1 & & colPositions . size ( ) > i )
header - > moveSection ( header - > visualIndex ( i ) , colPositions [ i ] ) ;
if ( colVisible [ 0 ] ! = - 1 & & colVisible . size ( ) > i )
treeLog ( ) . setColumnHidden ( i , colVisible [ i ] = = 0 ) ;
if ( colWidths [ 0 ] ! = - 1 & & colWidths . size ( ) > i )
treeLog ( ) . setColumnWidth ( i , colWidths [ i ] ) ;
}
2010-03-07 19:02:02 +00:00
}
void TreeLog : : saveConfig ( ) const
{
2015-07-13 15:17:41 +01:00
QList < int > colWidths ;
QList < int > colPositions ;
QList < int > colVisible ;
for ( int i = 0 ; i < treeLog ( ) . columnCount ( ) ; i + + ) {
colPositions . append ( treeLog ( ) . header ( ) - > visualIndex ( i ) ) ;
colVisible . append ( treeLog ( ) . isColumnHidden ( i ) ? 0 : 1 ) ;
colWidths . append ( treeLog ( ) . columnWidth ( i ) ) ;
}
Config : : setTreeLogColumnPositions ( colPositions ) ;
Config : : setTreeLogColumnVisible ( colVisible ) ;
Config : : setTreeLogColumnWidths ( colWidths ) ;
Config : : self ( ) - > save ( ) ;
2010-03-07 19:02:02 +00:00
}
void TreeLog : : onHeaderContextMenu ( const QPoint & pos )
{
2015-07-13 15:17:41 +01:00
showColumnsContextMenu ( pos , treeLog ( ) ) ;
2010-03-07 19:02:02 +00:00
}
void TreeLog : : onClearLog ( )
{
2015-07-13 15:17:41 +01:00
while ( QTreeWidgetItem * item = treeLog ( ) . takeTopLevelItem ( 0 ) )
delete item ;
2010-03-07 19:02:02 +00:00
}
void TreeLog : : onSaveLog ( )
{
2015-07-13 15:17:41 +01:00
const QUrl url = QFileDialog : : getSaveFileUrl ( ) ;
2010-03-07 19:02:02 +00:00
2015-07-13 15:17:41 +01:00
if ( ! url . isEmpty ( ) ) {
QTemporaryFile tempFile ;
2010-03-07 19:02:02 +00:00
2015-07-13 15:17:41 +01:00
if ( ! tempFile . open ( ) ) {
2016-07-18 02:21:14 +01:00
KMessageBox : : error ( this , xi18nc ( " @info " , " Could not create temporary output file to save <filename>%1</filename>. " , url . fileName ( ) ) , xi18nc ( " @title:window " , " Error Saving Log File " ) ) ;
2015-07-13 15:17:41 +01:00
return ;
}
2010-03-07 19:02:02 +00:00
2015-07-13 15:17:41 +01:00
QTextStream stream ( & tempFile ) ;
2010-03-07 19:02:02 +00:00
2015-07-13 15:17:41 +01:00
for ( qint32 idx = 0 ; idx < treeLog ( ) . topLevelItemCount ( ) ; idx + + ) {
QTreeWidgetItem * item = treeLog ( ) . topLevelItem ( idx ) ;
stream < < item - > text ( 1 ) < < " : " < < item - > text ( 2 ) < < " \n " ;
}
2010-04-11 15:29:20 +01:00
2015-07-13 15:17:41 +01:00
tempFile . close ( ) ;
2010-04-11 15:29:20 +01:00
2015-07-13 15:17:41 +01:00
KIO : : CopyJob * job = KIO : : move ( QUrl : : fromLocalFile ( tempFile . fileName ( ) ) , url , KIO : : HideProgressInfo ) ;
job - > exec ( ) ;
if ( job - > error ( ) )
2017-04-11 20:49:46 +01:00
job - > uiDelegate ( ) - > showErrorMessage ( ) ;
2015-07-13 15:17:41 +01:00
}
2010-03-07 19:02:02 +00:00
}
2010-01-26 21:12:42 +00:00
void TreeLog : : onNewLogMessage ( Log : : Level logLevel , const QString & s )
2009-04-22 13:41:30 +01:00
{
2015-07-13 15:17:41 +01:00
static const QString icons [ ] = {
QStringLiteral ( " tools-report-bug " ) ,
QStringLiteral ( " dialog-information " ) ,
QStringLiteral ( " dialog-warning " ) ,
QStringLiteral ( " dialog-error " )
} ;
qDebug ( ) < < s ;
2018-04-09 15:14:48 +01:00
if ( static_cast < int > ( logLevel ) > = Config : : minLogLevel ( ) ) {
2015-07-13 15:17:41 +01:00
QTreeWidgetItem * item = new QTreeWidgetItem ( ) ;
2020-09-29 17:54:53 +01:00
item - > setIcon ( 0 , QIcon : : fromTheme ( icons [ static_cast < int > ( logLevel ) ] ) ) ;
2015-07-13 15:17:41 +01:00
item - > setText ( 1 , QDateTime : : currentDateTime ( ) . toString ( QStringLiteral ( " yyyy-MM-dd hh:mm:ss " ) ) ) ;
item - > setText ( 2 , s ) ;
treeLog ( ) . addTopLevelItem ( item ) ;
treeLog ( ) . scrollToBottom ( ) ;
}
2009-04-22 13:41:30 +01:00
}