82 changes: 82 additions & 0 deletions src/gui/qgsmessagelogviewer.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/***************************************************************************
qgsmessagelogviewer.cpp - description
-------------------
begin : October 2011
copyright : (C) 2011 by Juergen E. Fischer
email : jef at norbit dot de
***************************************************************************/

/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/

#include "qgsmessagelogviewer.h"
#include "qgsmessagelog.h"
#include "qgslogger.h"

#include <QSettings>
#include <QTableWidget>
#include <QDateTime>

static QgsMessageLogViewer *gmInstance = 0;

QgsMessageLogViewer::QgsMessageLogViewer( QWidget *parent, Qt::WFlags fl )
: QDialog( parent, fl )
{
setupUi( this );
gmInstance = this;
QgsMessageLog::setLogger( logger );
}

QgsMessageLogViewer::~QgsMessageLogViewer()
{
QgsMessageLog::setLogger( 0 );
}

void QgsMessageLogViewer::logger( QString message, QString tag, int level )
{
if( !gmInstance )
return;

gmInstance->logMessage( message, tag, level );
}

void QgsMessageLogViewer::logMessage( QString message, QString tag, int level )
{
if( tag.isNull() )
tag = tr( "General" );

int i;
for( i=0; i<tabWidget->count() && tabWidget->tabText(i) != tag; i++ )
;

QTableWidget *w;
if( i<tabWidget->count() )
{
w = qobject_cast<QTableWidget *>( tabWidget->widget(i) );
}
else
{
w = new QTableWidget( 0, 3, this );
w->setHorizontalHeaderLabels( QStringList() << tr( "Timestamp" ) << tr( "Message" ) << "Level" );
tabWidget->addTab( w, tag );
}

int n = w->rowCount();

QgsDebugMsg( QString( "%1: %2[%3] %4" ).arg( n ).arg( QDateTime::currentDateTime().toString( Qt::ISODate ) ).arg( level ).arg( level ) );

w->setRowCount( n+1 );
QTableWidgetItem *item = new QTableWidgetItem( QDateTime::currentDateTime().toString( Qt::ISODate ) );
w->setItem( n, 0, item );
w->setItem( n, 1, new QTableWidgetItem( message ) );
w->setItem( n, 2, new QTableWidgetItem( level ) );
w->scrollToItem( item );

w->resizeColumnsToContents();
}
42 changes: 42 additions & 0 deletions src/gui/qgsmessagelogviewer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/***************************************************************************
qgsmessagelogviewer.h - description
-------------------
begin : October 2011
copyright : (C) 2011 by Juergen E. Fischer
email : jef at norbit dot de
***************************************************************************/

/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSMESSAGELOGVIEWER_H
#define QGSMESSAGELOGVIEWER_H

#include <ui_qgsmessagelogviewer.h>
#include <qgisgui.h>
#include "qgsmessagelog.h"

#include <QString>

/** \ingroup gui
* A generic message for displaying QGIS log messages.
* \note added in 1.8
*/
class GUI_EXPORT QgsMessageLogViewer: public QDialog, public QgsMessageLog, private Ui::QgsMessageLogViewer
{
Q_OBJECT
public:
QgsMessageLogViewer( QWidget *parent = 0, Qt::WFlags fl = QgisGui::ModalDialogFlags );
~QgsMessageLogViewer();

void logMessage( QString message, QString tag = QString::null, int level = 0 );

static void logger( QString message, QString tag, int level );
};

#endif
137 changes: 76 additions & 61 deletions src/providers/postgres/qgspostgresprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include <qgsfield.h>
#include <qgsgeometry.h>
#include <qgsmessageoutput.h>
#include <qgsmessagelog.h>
#include <qgsrectangle.h>
#include <qgscoordinatereferencesystem.h>
#include "qgsvectorlayerimport.h"
Expand Down Expand Up @@ -142,7 +143,7 @@ QgsVectorLayerImport::ImportError QgsPostgresProvider::createEmptyLayer(
Conn *conn = Conn::connectDb( dsUri.connectionInfo(), false );
if ( conn == NULL )
{
QgsDebugMsg( "Connection to database failed. Import of layer aborted." );
QgsMessageLog::logMessage( tr( "Connection to database failed. Import of layer aborted." ), tr( "PostgreSQL" ) );
if ( errorMessage )
*errorMessage = QObject::tr( "Connection to database failed" );
return QgsVectorLayerImport::ErrConnectionFailed;
Expand Down Expand Up @@ -320,7 +321,7 @@ QgsVectorLayerImport::ImportError QgsPostgresProvider::createEmptyLayer(
}
catch ( PGException &e )
{
QgsDebugMsg( "creation of data source " + schemaTableName + " failed. " + e.errorMessage() );
QgsMessageLog::logMessage( tr( "creation of data source %1 failed.\nError: %2" ).arg( schemaTableName ).arg( e.errorMessage() ), tr( "PostgreSQL" ) );
if ( errorMessage )
*errorMessage = QObject::tr( "Creation of data source %1 failed: \n%2" )
.arg( schemaTableName )
Expand All @@ -339,10 +340,9 @@ QgsVectorLayerImport::ImportError QgsPostgresProvider::createEmptyLayer(
QgsPostgresProvider *provider = new QgsPostgresProvider( dsUri.uri() );
if ( !provider->isValid() )
{
QgsDebugMsg( "The layer " + schemaTableName + " just created is not valid or not supported by the provider." );
QgsMessageLog::logMessage( tr( "The layer %1 just created is not valid or not supported by the provider." ).arg( schemaTableName ), tr( "PostgreSQL" ) );
if ( errorMessage )
*errorMessage = QObject::tr( "Loading of the layer %1 failed" )
.arg( schemaTableName );
*errorMessage = QObject::tr( "Loading of the layer %1 failed" ).arg( schemaTableName );

delete provider;
return QgsVectorLayerImport::ErrInvalidLayer;
Expand Down Expand Up @@ -377,10 +377,9 @@ QgsVectorLayerImport::ImportError QgsPostgresProvider::createEmptyLayer(

if ( !convertField( fld ) )
{
QgsDebugMsg( "error creating field " + fld.name() + ": unsupported type" );
QgsMessageLog::logMessage( tr( "error creating field %1: unsupported type" ).arg( fld.name() ), tr( "PostgreSQL" ) );
if ( errorMessage )
*errorMessage = QObject::tr( "Unsupported type for field %1" )
.arg( fld.name() );
*errorMessage = QObject::tr( "Unsupported type for field %1" ).arg( fld.name() );

delete provider;
return QgsVectorLayerImport::ErrAttributeTypeUnsupported;
Expand All @@ -401,7 +400,7 @@ QgsVectorLayerImport::ImportError QgsPostgresProvider::createEmptyLayer(

if ( !provider->addAttributes( flist ) )
{
QgsDebugMsg( "error creating fields " );
QgsMessageLog::logMessage( tr( "error creating fields" ), tr( "PostgreSQL" ) );
if ( errorMessage )
*errorMessage = QObject::tr( "Creation of fields failed" );

Expand Down Expand Up @@ -501,7 +500,7 @@ QgsPostgresProvider::QgsPostgresProvider( QString const & uri )
featuresCounted = 0;
valid = false;

QgsDebugMsg( "Invalid Postgres layer" );
QgsMessageLog::logMessage( tr( "invalid PostgreSQL layer" ), tr( "PostgreSQL" ) );
disconnectDb();
return;
}
Expand Down Expand Up @@ -619,7 +618,7 @@ QgsPostgresProvider::Conn *QgsPostgresProvider::Conn::connectDb( const QString &
if ( PQstatus( pd ) != CONNECTION_OK )
{
::PQfinish( pd );
QgsDebugMsg( "Connection to database failed" );
QgsMessageLog::logMessage( tr( "Connection to database failed" ), tr( "PostgreSQL" ) );
return NULL;
}

Expand All @@ -634,11 +633,11 @@ QgsPostgresProvider::Conn *QgsPostgresProvider::Conn::connectDb( const QString &
}
else if ( errcode == -1 )
{
QgsDebugMsg( "error in setting encoding" );
QgsMessageLog::logMessage( tr( "error in setting encoding" ), tr( "PostgreSQL" ) );
}
else
{
QgsDebugMsg( "undefined return value from encoding setting" );
QgsMessageLog::logMessage( tr( "undefined return value from encoding setting" ), tr( "PostgreSQL" ) );
}

QgsDebugMsg( "Connection to the database was successful" );
Expand Down Expand Up @@ -747,7 +746,7 @@ QStringList QgsPostgresProvider::pkCandidates( QString schemaName, QString viewN
}
else
{
QgsDebugMsg( QString( "SQL:%1\nresult:%2\nerror:%3\n" ).arg( sql ).arg( PQresultStatus( colRes ) ).arg( PQresultErrorMessage( colRes ) ) );
QgsMessageLog::logMessage( tr( "SQL:%1\nresult:%2\nerror:%3\n" ).arg( sql ).arg( PQresultStatus( colRes ) ).arg( PQresultErrorMessage( colRes ) ), tr( "PostgreSQL" ) );
}

PQclear( colRes );
Expand Down Expand Up @@ -1042,7 +1041,7 @@ bool QgsPostgresProvider::supportedLayers( QVector<QgsPostgresLayerProperty> &la
// Get the list of supported tables
if ( !getTableInfo( searchGeometryColumnsOnly, searchPublicOnly, allowGeometrylessTables ) )
{
QgsDebugMsg( "Unable to get list of spatially enabled tables from the database" );
QgsMessageLog::logMessage( tr( "Unable to get list of spatially enabled tables from the database" ), tr( "PostgreSQL" ) );
return false;
}

Expand Down Expand Up @@ -1252,7 +1251,7 @@ bool QgsPostgresProvider::getFeature( PGresult *queryResult, int row, bool fetch
else
{
feature.setGeometryAndOwnership( 0, 0 );
QgsDebugMsg( "Couldn't get the feature geometry in binary form" );
QgsMessageLog::logMessage( tr( "Couldn't get the feature geometry in binary form" ), tr( "PostgreSQL" ) );
}

col = 2;
Expand Down Expand Up @@ -1366,13 +1365,13 @@ bool QgsPostgresProvider::nextFeature( QgsFeature& feature )
feature.setValid( false );
if ( !valid )
{
QgsDebugMsg( "Read attempt on an invalid postgresql data source" );
QgsMessageLog::logMessage( tr( "Read attempt on an invalid postgresql data source" ), tr( "PostgreSQL" ) );
return false;
}

if ( !mFetching )
{
QgsDebugMsg( "nextFeature() without select()" );
QgsMessageLog::logMessage( tr( "nextFeature() without select()" ), tr( "PostgreSQL" ) );
return false;
}

Expand All @@ -1383,7 +1382,7 @@ bool QgsPostgresProvider::nextFeature( QgsFeature& feature )
QString fetch = QString( "fetch forward %1 from %2" ).arg( mFeatureQueueSize ).arg( cursorName );
if ( connectionRO->PQsendQuery( fetch ) == 0 ) // fetch features asynchronously
{
QgsLogger::warning( "PQsendQuery failed" );
QgsMessageLog::logMessage( tr( "fetching from cursor %1 failed\nDatabase error: %2" ).arg( cursorName ).arg( QString::fromUtf8( PQerrorMessage( pgConnection() ) ) ), tr( "PostgreSQL" ) );
}

Result queryResult;
Expand Down Expand Up @@ -1490,13 +1489,13 @@ bool QgsPostgresProvider::featureAtId( QgsFeatureId featureId, QgsFeature& featu
int rows = PQntuples( queryResult );
if ( rows == 0 )
{
QgsDebugMsg( QString( "feature %1 not found" ).arg( featureId ) );
QgsMessageLog::logMessage( tr( "feature %1 not found" ).arg( featureId ), tr( "PostgreSQL" ) );
connectionRO->closeCursor( cursorName );
return false;
}
else if ( rows != 1 )
{
QgsDebugMsg( QString( "found %1 features instead of just one." ).arg( rows ) );
QgsMessageLog::logMessage( tr( "found %1 features instead of just one." ).arg( rows ), tr( "PostgreSQL" ) );
}

bool gotit = getFeature( queryResult, 0, fetchGeometry, feature, fetchAttributes );
Expand Down Expand Up @@ -1704,19 +1703,28 @@ bool QgsPostgresProvider::loadFields()
{
fieldType = QVariant::Double;

QRegExp re( "numeric\\((\\d+),(\\d+)\\)" );
if ( re.exactMatch( formattedFieldType ) )
if ( formattedFieldType == "numeric" )
{
fieldSize = re.cap( 1 ).toInt();
fieldPrec = re.cap( 2 ).toInt();
fieldSize = -1;
fieldPrec = -1;
}
else
{
QgsDebugMsg( QString( "unexpected formatted field type '%1' for field %2" )
.arg( formattedFieldType )
.arg( fieldName ) );
fieldSize = -1;
fieldPrec = -1;
QRegExp re( "numeric\\((\\d+),(\\d+)\\)" );
if ( re.exactMatch( formattedFieldType ) )
{
fieldSize = re.cap( 1 ).toInt();
fieldPrec = re.cap( 2 ).toInt();
}
else if ( formattedFieldType != "numeric" )
{
QgsMessageLog::logMessage( tr( "unexpected formatted field type '%1' for field %2" )
.arg( formattedFieldType )
.arg( fieldName ),
tr( "PostgreSQL" ) );
fieldSize = -1;
fieldPrec = -1;
}
}
}
else if ( fieldTypeName == "text" ||
Expand All @@ -1743,9 +1751,9 @@ bool QgsPostgresProvider::loadFields()
}
else
{
QgsDebugMsg( QString( "unexpected formatted field type '%1' for field %2" )
.arg( formattedFieldType )
.arg( fieldName ) );
QgsMessageLog::logMessage( tr( "unexpected formatted field type '%1' for field %2" )
.arg( formattedFieldType )
.arg( fieldName ) );
fieldSize = -1;
fieldPrec = -1;
}
Expand Down Expand Up @@ -1921,8 +1929,7 @@ bool QgsPostgresProvider::hasSufficientPermsAndCapabilities()
if ( !mQuery.startsWith( "(select", Qt::CaseInsensitive ) &&
!mQuery.endsWith( ")" ) )
{
QgsDebugMsg( "The custom query is not a select query." );
//TODO show a message by showMessageBox()
QgsMessageLog::logMessage( tr( "The custom query is not a select query." ), tr( "PostgreSQL" ) );
return false;
}

Expand Down Expand Up @@ -2108,7 +2115,7 @@ QString QgsPostgresProvider::getPrimaryKey()
}
else
{
QgsDebugMsg( "Unexpected relation type of '" + type + "'." );
QgsMessageLog::logMessage( tr( "Unexpected relation type of '%1'." ).arg( type ), tr( "PostgreSQL" ) );
}
}
else // have some unique indices on the table. Now choose one...
Expand Down Expand Up @@ -2321,9 +2328,8 @@ QString QgsPostgresProvider::chooseViewColumn( const tableCols &cols )
}
else
{
QgsDebugMsg( "Relation " + schemaName + "." + tableName +
" doesn't exist in the pg_class table."
"This shouldn't happen and is odd." );
QgsMessageLog::logMessage( tr( "Relation %1.%2 doesn't exist in the pg_class table. This shouldn't happen and is odd." )
.arg( schemaName ).arg( tableName ) );
continue;
}

Expand Down Expand Up @@ -3010,7 +3016,7 @@ QString QgsPostgresProvider::Conn::postgisVersion()
Result result = PQexec( "select postgis_version()" );
if ( PQntuples( result ) != 1 )
{
QgsDebugMsg( "Retrieval of postgis version failed" );
QgsMessageLog::logMessage( tr( "Retrieval of postgis version failed" ), tr( "PostgreSQL" ) );
return QString::null;
}

Expand All @@ -3024,7 +3030,7 @@ QString QgsPostgresProvider::Conn::postgisVersion()
QStringList postgisVersionParts = postgisParts[0].split( ".", QString::SkipEmptyParts );
if ( postgisVersionParts.size() < 2 )
{
QgsDebugMsg( "Could not parse postgis version" );
QgsMessageLog::logMessage( tr( "Could not parse postgis version string '%1'" ).arg( postgisVersionInfo ), tr( "PostgreSQL" ) );
return QString::null;
}

Expand Down Expand Up @@ -3836,7 +3842,7 @@ QgsRectangle QgsPostgresProvider::extent()
}
else
{
QgsDebugMsg( "extents query failed" );
QgsMessageLog::logMessage( tr( "extents query failed: %1" ).arg( ext ), tr( "PostgreSQL" ) );
}

QgsDebugMsg( "Set extents to: " + layerExtent.toString() );
Expand Down Expand Up @@ -3883,7 +3889,7 @@ bool QgsPostgresProvider::deduceEndian()
}
else
{
QgsDebugMsg( "no oid found" );
QgsMessageLog::logMessage( tr( "no oid found" ), tr( "PostgreSQL" ) );
return false;
}
}
Expand Down Expand Up @@ -4145,7 +4151,7 @@ bool QgsPostgresProvider::getGeometryDetails()
}
else
{
QgsDebugMsg( "Failed to get geometry details for Postgres layer." );
QgsMessageLog::logMessage( tr( "Failed to get geometry details for PostGIS column %1.%2." ).arg( tableName ).arg( geometryColumn ), tr( "PostgreSQL" ) );
}

return valid;
Expand All @@ -4172,24 +4178,20 @@ PGresult *QgsPostgresProvider::Conn::PQexec( QString query )
QgsDebugMsgLevel( QString( "Executing SQL: %1" ).arg( query ), 3 );
PGresult *res = ::PQexec( conn, query.toUtf8() );

#ifdef QGISDEBUG
if ( res )
{
int errorStatus = PQresultStatus( res );
if ( errorStatus != PGRES_COMMAND_OK && errorStatus != PGRES_TUPLES_OK )
{
QString err = QString( "Errornous query: %1 returned %2 [%3]" )
.arg( query )
.arg( errorStatus )
.arg( PQresultErrorMessage( res ) );
QgsDebugMsgLevel( err, 3 );
QgsMessageLog::logMessage( tr( "Errornous query: %1 returned %2 [%3]" )
.arg( query ).arg( errorStatus ).arg( PQresultErrorMessage( res ) ),
tr( "PostgreSQL" ) );
}
}
else
{
QgsDebugMsgLevel( QString( "Query failed: %1" ).arg( query ), 3 );
QgsMessageLog::logMessage( tr( "Query failed: %1\nError: %2" ).arg( query ), tr( "PostgreSQL" ) );
}
#endif

return res;
}
Expand Down Expand Up @@ -4224,18 +4226,19 @@ bool QgsPostgresProvider::Conn::PQexecNR( QString query, bool retry )
Result res = ::PQexec( conn, query.toUtf8() );
if ( !res )
{
QgsDebugMsgLevel( QString( "Query: %1 returned no result buffer" ).arg( query ), 3 );
QgsMessageLog::logMessage( tr( "Query: %1 returned no result buffer" ).arg( query ), tr( "PostgreSQL" ) );
return false;
}

ExecStatusType errorStatus = PQresultStatus( res );
if ( errorStatus == PGRES_COMMAND_OK )
return true;

QgsLogger::warning( QString( "Query: %1 returned %2 [%3]" )
.arg( query )
.arg( errorStatus )
.arg( QString::fromUtf8( PQresultErrorMessage( res ) ) ) );
QgsMessageLog::logMessage( tr( "Query: %1 returned %2 [%3]" )
.arg( query )
.arg( errorStatus )
.arg( QString::fromUtf8( PQresultErrorMessage( res ) ) ),
tr( "PostgreSQL" ) );

if ( openCursors )
{
Expand All @@ -4255,17 +4258,29 @@ bool QgsPostgresProvider::Conn::PQexecNR( QString query, bool retry )
}
else if ( retry )
{
QgsDebugMsg( "connection bad - resetting" );
QgsMessageLog::logMessage( tr( "resetting bad connection." ), tr( "PostgreSQL" ) );
::PQreset( conn );
if ( PQstatus( conn ) == CONNECTION_OK )
{
QgsDebugMsg( "reconnected - retrying" );
return PQexecNR( query, false );
if ( PQexecNR( query, false ) )
{
QgsMessageLog::logMessage( tr( "retry after reset succeeded." ), tr( "PostgreSQL" ) );
return true;
}
else
{
QgsMessageLog::logMessage( tr( "retry after reset failed again." ), tr( "PostgreSQL" ) );
return false;
}
}
else
{
QgsMessageLog::logMessage( tr( "connection still bad after reset." ), tr( "PostgreSQL" ) );
}
}
else
{
QgsDebugMsg( "connection bad - giving up" );
QgsMessageLog::logMessage( tr( "bad connection, not retrying." ), tr( "PostgreSQL" ) );
}

return false;
Expand Down
21 changes: 11 additions & 10 deletions src/providers/wms/qgswmsprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include "qgscoordinatereferencesystem.h"
#include "qgsnetworkaccessmanager.h"
#include <qgsmessageoutput.h>
#include <qgsmessagelog.h>

#include <QNetworkRequest>
#include <QNetworkReply>
Expand Down Expand Up @@ -298,7 +299,7 @@ void QgsWmsProvider::addLayers( QStringList const &layers,

if ( layers.size() != styles.size() )
{
QgsDebugMsg( "number of layers and styles don't match" );
QgsMessageLog::logMessage( tr( "number of layers and styles don't match" ), tr( "WMS" ) );
valid = false;
return;
}
Expand Down Expand Up @@ -717,15 +718,15 @@ void QgsWmsProvider::readBlock( int bandNo, QgsRectangle const & viewExtent, in

if ( ! image ) // should not happen
{
QgsDebugMsg( "image is NULL" );
QgsMessageLog::logMessage( tr( "image is NULL" ), tr( "WMS" ) );
return;
}
QgsDebugMsg( QString( "image height = %1 bytesPerLine = %2" ).arg( image->height() ) . arg( image->bytesPerLine() ) ) ;
int myExpectedSize = pixelWidth * pixelHeight * 4;
int myImageSize = image->height() * image->bytesPerLine();
if ( myExpectedSize != myImageSize ) // should not happen
{
QgsDebugMsg( "unexpected image size" );
QgsMessageLog::logMessage( tr( "unexpected image size" ), tr( "WMS" ) );
return;
}

Expand Down Expand Up @@ -1059,7 +1060,7 @@ void QgsWmsProvider::capabilitiesReplyFinished()
{
mErrorFormat = "text/plain";
mError = tr( "Download of capabilities failed: %1" ).arg( mCapabilitiesReply->errorString() );
QgsDebugMsg( "error: " + mError );
QgsMessageLog::logMessage( mError, tr( "WMS" ) );
httpcapabilitiesresponse.clear();
}

Expand Down Expand Up @@ -2204,7 +2205,7 @@ void QgsWmsProvider::parseServiceException( QDomElement const & e )

// TODO = e.attribute("locator");

QgsDebugMsg( "composed error message '" + mError + "'." );
QgsMessageLog::logMessage( tr( "composed error message '%1'." ).arg( mError ), tr( "WMS" ) );
QgsDebugMsg( "exiting." );
}

Expand Down Expand Up @@ -2281,13 +2282,13 @@ bool QgsWmsProvider::calculateExtent()
return true;
}

QgsDebugMsg( QString( "mismatch layers=%1, styles=%2 and crs=%3." )
.arg( tilesetsSupported[i].layers.join( "," ) )
.arg( tilesetsSupported[i].styles.join( "," ) )
.arg( tilesetsSupported[i].crs ) );
QgsMessageLog::logMessage( tr( "mismatch layers=%1, styles=%2 and crs=%3." )
.arg( tilesetsSupported[i].layers.join( "," ) )
.arg( tilesetsSupported[i].styles.join( "," ) )
.arg( tilesetsSupported[i].crs ), tr( "WMS" ) );
}

QgsDebugMsg( "no extent for layer" );
QgsMessageLog::logMessage( tr( "no extent for layer" ), tr( "WMS" ) );
return false;
}

Expand Down
38 changes: 38 additions & 0 deletions src/ui/qgsmessagelogviewer.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsMessageLogViewer</class>
<widget class="QDialog" name="QgsMessageLogViewer">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>623</width>
<height>255</height>
</rect>
</property>
<property name="windowTitle">
<string>QGIS Log</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QGridLayout">
<property name="margin">
<number>9</number>
</property>
<property name="spacing">
<number>6</number>
</property>
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>-1</number>
</property>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>