diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/modules/logview/logviewmdiwindow.cpp | 157 | ||||
| -rw-r--r-- | src/modules/logview/logviewmdiwindow.h | 15 |
2 files changed, 95 insertions, 77 deletions
diff --git a/src/modules/logview/logviewmdiwindow.cpp b/src/modules/logview/logviewmdiwindow.cpp index 29ad77473..c2a407148 100644 --- a/src/modules/logview/logviewmdiwindow.cpp +++ b/src/modules/logview/logviewmdiwindow.cpp @@ -46,7 +46,6 @@ #include <QHeaderView> #include <QLayout> #include <QPushButton> -#include <QProgressDialog> #include <QTextCodec> #include <QDateTimeEdit> #include <QLineEdit> @@ -56,6 +55,7 @@ #include <QByteArray> #include <QMessageBox> #include <QSplitter> +#include <QProgressBar> #ifdef COMPILE_ZLIB_SUPPORT #include <zlib.h> @@ -75,7 +75,15 @@ KviLogViewMDIWindow::KviLogViewMDIWindow(KviModuleExtensionDescriptor * d,KviFra m_pSplitter->setObjectName("main_splitter"); m_pSplitter->setChildrenCollapsible(false); - m_pTabWidget = new QTabWidget(m_pSplitter); + m_pLeftLayout = new KviTalVBox(m_pSplitter); + m_pTabWidget = new QTabWidget(m_pLeftLayout); + m_pBottomLayout = new KviTalHBox(m_pLeftLayout); + m_pProgressBar = new QProgressBar(m_pBottomLayout); + + m_pCancelButton = new QPushButton(m_pBottomLayout); + m_pCancelButton->setText(__tr2qs_ctx("Cancel","logview")); + connect(m_pCancelButton,SIGNAL(clicked()),this,SLOT(abortFilter())); + m_pBottomLayout->setVisible(false); m_pIndexTab = new KviTalVBox(m_pTabWidget); m_pTabWidget->addTab(m_pIndexTab,__tr2qs_ctx("Index","logview")); @@ -163,6 +171,10 @@ KviLogViewMDIWindow::KviLogViewMDIWindow(KviModuleExtensionDescriptor * d,KviFra g_pApp->getLocalKvircDirectory(m_szLogDirectory,KviApp::Log); KviQString::ensureLastCharIs(m_szLogDirectory,'/'); // Does this work on Windows? + m_pTimer = new QTimer(this); + m_pTimer->setSingleShot(true); + m_pTimer->setInterval(0); + connect(m_pTimer, SIGNAL(timeout()), this, SLOT(filterNext())); //avoid to execute the long time-consuming procedure of log indexing here: //we could still be inside the context of the "Browse log files" QAction QTimer::singleShot( 0, this, SLOT(cacheFileList()) ); @@ -223,96 +235,89 @@ void KviLogViewMDIWindow::setupItemList() { m_pFilterButton->setEnabled(false); m_pListView->clear(); - KviLogFile *pFile; - KviLogListViewItem *pLastCategory=0; - KviLogListViewItemFolder *pLastGroupItem=0; - QString szLastGroup; - QString szCurGroup; - const bool bShowChannel=m_pShowChannelsCheck->isChecked(); - const bool bShowQuery=m_pShowQueryesCheck->isChecked(); - const bool bShowConsole=m_pShowConsolesCheck->isChecked(); - const bool bShowOther=m_pShowOtherCheck->isChecked(); - const bool bShowDccChat=m_pShowDccChatCheck->isChecked(); - const bool filterFromDate=m_pEnableFromFilter->isChecked(); - const bool filterToDate=m_pEnableToFilter->isChecked(); + m_bAborted=false; + m_pBottomLayout->setVisible(true); + m_pProgressBar->setRange(0, m_logList.count()); - const QString nameFilterText = m_pFileNameMask->text(); - const bool enableNameFilter = !nameFilterText.isEmpty(); + m_pLastCategory=0; + m_pLastGroupItem=0; + m_logList.first(); + m_pTimer->start(); //singleshot +} - const QString contentFilterText = m_pContentsMask->text(); - const bool enableContentFilter = !contentFilterText.isEmpty(); +void KviLogViewMDIWindow::abortFilter() +{ + m_bAborted=true; +} - QDate fromDate = m_pFromDateEdit->date(); - QDate toDate = m_pToDateEdit->date(); +void KviLogViewMDIWindow::filterNext() +{ + KviLogFile * pFile=m_logList.current(); + QString szCurGroup; - QString textBuffer; - QProgressDialog progress( __tr2qs_ctx("Filtering files...","logview"), - __tr2qs_ctx("Abort filtering","logview"), 0, m_logList.count(), - this); - progress.setObjectName("progress"); + if(pFile->type()==KviLogFile::Channel && !m_pShowChannelsCheck->isChecked()) + goto filter_next; + if(pFile->type()==KviLogFile::Console && !m_pShowConsolesCheck->isChecked()) + goto filter_next; + if(pFile->type()==KviLogFile::DccChat && !m_pShowDccChatCheck->isChecked()) + goto filter_next; + if(pFile->type()==KviLogFile::Other && !m_pShowOtherCheck->isChecked()) + goto filter_next; + if(pFile->type()==KviLogFile::Query && !m_pShowQueryesCheck->isChecked()) + goto filter_next; - int i=0; - for(pFile=m_logList.first();pFile;pFile=m_logList.next()) - { - progress.setValue( i ); - i++; - g_pApp->processEvents(); + if(m_pEnableFromFilter->isChecked()) + if(pFile->date()>m_pFromDateEdit->date()) + goto filter_next; - if ( progress.wasCanceled() ) - break; + if(m_pEnableToFilter->isChecked()) + if(pFile->date()<m_pToDateEdit->date()) + goto filter_next; - if(pFile->type()==KviLogFile::Channel && !bShowChannel) - continue; - if(pFile->type()==KviLogFile::Console && !bShowConsole) - continue; - if(pFile->type()==KviLogFile::DccChat && !bShowDccChat) - continue; - if(pFile->type()==KviLogFile::Other && !bShowOther) - continue; - if(pFile->type()==KviLogFile::Query && !bShowQuery) - continue; + if(!m_pFileNameMask->text().isEmpty()) + if(!KviQString::matchString(m_pFileNameMask->text(),pFile->name())) + goto filter_next; - if(filterFromDate) - if(pFile->date()>fromDate) - continue; + if(!m_pContentsMask->text().isEmpty()) + { + QString textBuffer; + pFile->getText(textBuffer,m_szLogDirectory); + if(!KviQString::matchString(m_pContentsMask->text(),textBuffer)) + goto filter_next; + } - if(filterToDate) - if(pFile->date()<toDate) - continue; + if(m_pLastCategory) + { + if(m_pLastCategory->m_type!=pFile->type()) + m_pLastCategory = new KviLogListViewItemType(m_pListView,pFile->type()); + } else { + m_pLastCategory = new KviLogListViewItemType(m_pListView,pFile->type()); + } - if(enableNameFilter) - if(!KviQString::matchString(nameFilterText,pFile->name())) - continue; + KviQString::sprintf(szCurGroup, __tr2qs_ctx("%Q on %Q","logview"), &(pFile->name()), &(pFile->network())); - if(enableContentFilter) - { - pFile->getText(textBuffer,m_szLogDirectory); - if(!KviQString::matchString(contentFilterText,textBuffer)) - continue; - } + if(m_szLastGroup!=szCurGroup) + { + m_szLastGroup=szCurGroup; + m_pLastGroupItem=new KviLogListViewItemFolder(m_pLastCategory,m_szLastGroup); + } - if(pLastCategory) - { - if(pLastCategory->m_type!=pFile->type()) - pLastCategory = new KviLogListViewItemType(m_pListView,pFile->type()); - } else { - pLastCategory = new KviLogListViewItemType(m_pListView,pFile->type()); - } + new KviLogListViewLog(m_pLastGroupItem,pFile->type(),pFile); - KviQString::sprintf(szCurGroup,__tr2qs_ctx("%Q on %Q","logview"),&(pFile->name()), - &(pFile->network()) - ); +filter_next: - if(szLastGroup!=szCurGroup) { - szLastGroup=szCurGroup; - pLastGroupItem=new KviLogListViewItemFolder(pLastCategory,szLastGroup); - } - new KviLogListViewLog(pLastGroupItem,pFile->type(),pFile); + pFile = m_logList.next(); + if(pFile && !m_bAborted) + { + m_pProgressBar->setValue(m_pProgressBar->value()+1); + m_pTimer->start(); //singleshot + } else { + m_pBottomLayout->setVisible(false); + m_pListView->sortItems(0, Qt::AscendingOrder); + m_pProgressBar->setValue(0); + m_pFilterButton->setEnabled(true); } - progress.setValue( m_logList.count() ); - m_pListView->sortItems(0, Qt::AscendingOrder); - m_pFilterButton->setEnabled(true); } void KviLogViewMDIWindow::cacheFileList() diff --git a/src/modules/logview/logviewmdiwindow.h b/src/modules/logview/logviewmdiwindow.h index 5ee9fa36c..7cd8ba919 100644 --- a/src/modules/logview/logviewmdiwindow.h +++ b/src/modules/logview/logviewmdiwindow.h @@ -36,11 +36,13 @@ #include <QDateTime> #include <QCheckBox> +class QProgressBar; class QStringList; class QLineEdit; class QDateEdit; class KviLogViewWidget; - +class KviLogListViewItem; +class KviLogListViewItemFolder; class KviLogFile { @@ -117,8 +119,17 @@ protected: QString m_szLogDirectory; QTabWidget * m_pTabWidget; KviTalVBox * m_pIndexTab; + KviTalVBox * m_pLeftLayout; QWidget * m_pSearchTab; QPushButton * m_pFilterButton; + QPushButton * m_pCancelButton; + KviTalHBox * m_pBottomLayout; + QProgressBar * m_pProgressBar; + KviLogListViewItem * m_pLastCategory; + KviLogListViewItemFolder *m_pLastGroupItem; + QString m_szLastGroup; + bool m_bAborted; + QTimer * m_pTimer; protected: QStringList getFileNames(); @@ -134,7 +145,9 @@ protected slots: void itemSelected(QTreeWidgetItem * it, QTreeWidgetItem *); void deleteCurrent(); void applyFilter(); + void abortFilter(); void cacheFileList(); + void filterNext(); }; #endif //_LOGVIEWMDIWINDOW_H_ |
