|
|
|
/*
|
|
|
|
* Copyright (C) 2004 Robert Hogan <robert at roberthogan dot net>
|
|
|
|
*/
|
|
|
|
#include <config.h>
|
|
|
|
|
|
|
|
|
|
|
|
#include "activityviewer.h"
|
|
|
|
#include "dbviewer.h"
|
|
|
|
#include "klamav.h"
|
|
|
|
#include "klamavconfig.h"
|
|
|
|
#include "collectiondb.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include <tdelocale.h>
|
|
|
|
#include <kiconloader.h>
|
|
|
|
#include <tdemenubar.h>
|
|
|
|
#include <kstatusbar.h>
|
|
|
|
#include <kkeydialog.h>
|
|
|
|
#include <tdeio/netaccess.h>
|
|
|
|
#include <tdefiledialog.h>
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include <tdelistviewsearchline.h>
|
|
|
|
#include <tdetoolbarbutton.h> //ctor
|
|
|
|
|
|
|
|
|
|
|
|
#include <kbuttonbox.h>
|
|
|
|
#include <kurlrequester.h>
|
|
|
|
#include <kurlcompletion.h>
|
|
|
|
#include <kcombobox.h>
|
|
|
|
#include <tqlayout.h>
|
|
|
|
#include <tdemessagebox.h>
|
|
|
|
#include <kstandarddirs.h>
|
|
|
|
#include <tqtoolbutton.h>
|
|
|
|
|
|
|
|
const char *log_type[] = {
|
|
|
|
"All Types",
|
|
|
|
"Launch",
|
|
|
|
"Shutdown",
|
|
|
|
"Manual Scan",
|
|
|
|
"Error Found",
|
|
|
|
"Virus Found",
|
|
|
|
"Auto-Scan",
|
|
|
|
"Updates",
|
|
|
|
"Quarantine",
|
|
|
|
0
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *log_days[] = {
|
|
|
|
"Last 1 Day",
|
|
|
|
"Last 2 Days",
|
|
|
|
"Last 7 Days",
|
|
|
|
"Last 14 Days",
|
|
|
|
"Last 31 Days",
|
|
|
|
"Last 62 Days",
|
|
|
|
"Last 365 Days",
|
|
|
|
0
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
Activityviewer::Activityviewer(TQWidget *parent, const char *name)
|
|
|
|
: TQWidget(parent, name)
|
|
|
|
{
|
|
|
|
|
|
|
|
//Create GUI
|
|
|
|
|
|
|
|
TQVBoxLayout *vbox = new TQVBoxLayout(this, KDialog::marginHint(),
|
|
|
|
KDialog::spacingHint(), "vbox");
|
|
|
|
|
|
|
|
TQWidget* privateLayoutWidget2 = new TQWidget( this, "dblayout" );
|
|
|
|
|
|
|
|
TQGridLayout *layout = new TQGridLayout(privateLayoutWidget2, 2, 6, 10, 4);
|
|
|
|
|
|
|
|
TQLabel *combo_label = new TQLabel(i18n("Display Event Type:"), privateLayoutWidget2);
|
|
|
|
//combo_label->setFixedSize(combo_label->sizeHint());
|
|
|
|
layout->addWidget(combo_label,0,0);
|
|
|
|
combo_label->adjustSize();
|
|
|
|
|
|
|
|
check_combo = new TQComboBox(false, privateLayoutWidget2);
|
|
|
|
check_combo->insertStrList(log_type);
|
|
|
|
check_combo->adjustSize();
|
|
|
|
//check_combo->setFixedSize(check_combo->size());
|
|
|
|
layout->addWidget(check_combo,0,1);
|
|
|
|
|
|
|
|
TQLabel *days_label = new TQLabel(i18n(" from the "), privateLayoutWidget2);
|
|
|
|
//combo_label->setFixedSize(combo_label->sizeHint());
|
|
|
|
layout->addWidget(days_label,0,2);
|
|
|
|
days_label->adjustSize();
|
|
|
|
|
|
|
|
days_combo = new TQComboBox(false, privateLayoutWidget2);
|
|
|
|
days_combo->insertStrList(log_days);
|
|
|
|
days_combo->adjustSize();
|
|
|
|
//check_combo->setFixedSize(check_combo->size());
|
|
|
|
layout->addWidget(days_combo,0,3);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TQToolButton* options = new TQToolButton( privateLayoutWidget2,"play" );
|
|
|
|
options->setIconSet( SmallIconSet( "configure" ) );
|
|
|
|
options->setTextLabel("Options");
|
|
|
|
options->setTextPosition(TQToolButton::Right);
|
|
|
|
options->setUsesTextLabel(true);
|
|
|
|
options->adjustSize();
|
|
|
|
layout->addWidget(options,0,6);
|
|
|
|
|
|
|
|
vbox->addWidget(privateLayoutWidget2);
|
|
|
|
connect( options, SIGNAL(clicked()), SLOT(slotOptions()) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TQGroupBox *group2 = new TQGroupBox(i18n("Activity"), this);
|
|
|
|
vbox->addWidget(group2);
|
|
|
|
|
|
|
|
TQGridLayout *layout2 = new TQGridLayout( group2, 1, 1, KDialog::spacingHint(), KDialog::spacingHint(), "layout2");
|
|
|
|
layout2->addRowSpacing(0, group2->fontMetrics().height());
|
|
|
|
layout2->addRowSpacing(1, group2->fontMetrics().height());
|
|
|
|
//layout2->setColStretch(0, 1);
|
|
|
|
//layout2->setColStretch(1, 1);
|
|
|
|
|
|
|
|
TQWidget *hlp2 = new TQWidget( group2 );
|
|
|
|
layout2->addMultiCellWidget(hlp2, 1,1, 0,0);
|
|
|
|
TQVBoxLayout *dir_layout2 = new TQVBoxLayout(hlp2, KDialog::spacingHint() );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TDEToolBarButton *button;
|
|
|
|
TDEToolBar* searchToolBar = new TDEToolBar( hlp2 );
|
|
|
|
searchToolBar->setMovingEnabled(false);
|
|
|
|
searchToolBar->setFlat(true);
|
|
|
|
searchToolBar->setIconSize( 16 );
|
|
|
|
searchToolBar->setEnableContextMenu( false );
|
|
|
|
|
|
|
|
button = new TDEToolBarButton( "locationbar_erase", 0, searchToolBar );
|
|
|
|
/*TQLabel *filter_label =*/ new TQLabel( i18n("Search:") + " ", searchToolBar );
|
|
|
|
|
|
|
|
|
|
|
|
currentbox = new TDEListView(hlp2);
|
|
|
|
currentbox->setShowSortIndicator(true);
|
|
|
|
|
|
|
|
TQFontMetrics rb_fm(currentbox->fontMetrics());
|
|
|
|
//currentbox->setMinimumSize(rb_fm.width("0")*55,
|
|
|
|
// rb_fm.lineSpacing()*15);
|
|
|
|
////kdDebug() << ((currentbox->width())/3) << endl;
|
|
|
|
currentbox->addColumn( "Date",0);
|
|
|
|
currentbox->addColumn( "Type",0);
|
|
|
|
currentbox->addColumn( "Event",0);
|
|
|
|
currentbox->addColumn( "File",0);
|
|
|
|
currentbox->setResizeMode(TQListView::AllColumns);
|
|
|
|
currentbox->setSelectionMode( TQListView::Extended );
|
|
|
|
currentbox->setAllColumnsShowFocus(true);
|
|
|
|
|
|
|
|
// qmenu = new TQPopupMenu( currentbox );
|
|
|
|
|
|
|
|
// connect(currentbox, SIGNAL( contextMenuRequested( TQListViewItem *, const TQPoint& , int ) ),
|
|
|
|
// this, SLOT( slotRMB( TQListViewItem *, const TQPoint &, int ) ) );
|
|
|
|
|
|
|
|
kLineEdit1 = new TDEListViewSearchLine( (TQWidget *)searchToolBar, currentbox,"klinedit1");
|
|
|
|
/* TQValueList<int> columns;
|
|
|
|
columns.append(0);
|
|
|
|
columns.append(1);
|
|
|
|
columns.append(2);*/
|
|
|
|
/* kLineEdit1->setSearchColumns();*/
|
|
|
|
//kLineEdit1->setMaxLength(2);
|
|
|
|
connect(button, SIGNAL( clicked() ),
|
|
|
|
kLineEdit1, SLOT(clear()) );
|
|
|
|
connect(check_combo, SIGNAL( activated(const TQString &) ),
|
|
|
|
this, SLOT(allActivityOfType(const TQString &) ));
|
|
|
|
connect(days_combo, SIGNAL( activated(const TQString &) ),
|
|
|
|
this, SLOT(allActivityOfDate(const TQString &) ));
|
|
|
|
|
|
|
|
|
|
|
|
searchToolBar->setStretchableWidget( kLineEdit1 );
|
|
|
|
|
|
|
|
dir_layout2->addWidget( searchToolBar,0,0);
|
|
|
|
|
|
|
|
dir_layout2->addWidget(currentbox,1,0);
|
|
|
|
|
|
|
|
//layout->addMultiCellWidget(currentbox);
|
|
|
|
|
|
|
|
CollectionDB::instance()->expireActivity( TQString("%1").arg(KlamavConfig::expireDays()) );
|
|
|
|
|
|
|
|
allActivityOfDate(days_combo->currentText());
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void Activityviewer::populateActivity()
|
|
|
|
{
|
|
|
|
|
|
|
|
currentbox->clear();
|
|
|
|
|
|
|
|
if (!(activity.isEmpty())){
|
|
|
|
|
|
|
|
int i=0;
|
|
|
|
TQString eventdate;
|
|
|
|
TQString eventtype;
|
|
|
|
TQString event;
|
|
|
|
TQString file;
|
|
|
|
for (TQStringList::Iterator it = activity.begin(); it != activity.end(); it++ ){
|
|
|
|
////kdDebug() << *it << endl;
|
|
|
|
if (i==0){
|
|
|
|
eventdate = *it;
|
|
|
|
i++;
|
|
|
|
}else if (i==1){
|
|
|
|
eventtype = *it;
|
|
|
|
i++;
|
|
|
|
}else if (i==2){
|
|
|
|
event = *it;
|
|
|
|
i++;
|
|
|
|
}else if (i==3){
|
|
|
|
file = *it;
|
|
|
|
i=0;
|
|
|
|
new EventListItem( currentbox, eventdate, eventtype,event, file);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Activityviewer::allActivity()
|
|
|
|
{
|
|
|
|
|
|
|
|
activity = CollectionDB::instance()->allActivity();
|
|
|
|
|
|
|
|
populateActivity();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Activityviewer::allActivityOfType(const TQString &type)
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
TQString days = days_combo->currentText().remove("Last ").remove(" Days").remove(" Day");
|
|
|
|
|
|
|
|
activity = CollectionDB::instance()->allActivityOfType(type,days);
|
|
|
|
|
|
|
|
populateActivity();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Activityviewer::allActivityOfDate(const TQString &days)
|
|
|
|
{
|
|
|
|
TQString stripdays = days;
|
|
|
|
stripdays = stripdays.remove("Last ").remove(" Days").remove(" Day");
|
|
|
|
TQString type = check_combo->currentText();
|
|
|
|
|
|
|
|
activity = CollectionDB::instance()->allActivityOfType(type,stripdays);
|
|
|
|
|
|
|
|
populateActivity();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Activityviewer::insertItem(const TQString &date, const TQString &type, const TQString &event, const TQString &file)
|
|
|
|
{
|
|
|
|
|
|
|
|
if ((check_combo->currentText() == type) || (check_combo->currentText() == "All Types"))
|
|
|
|
new EventListItem( currentbox, date, type, event, file);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void Activityviewer::slotOptions(){
|
|
|
|
|
|
|
|
|
|
|
|
tdemain->slotConfigKlamav( "Event Logging" );
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Activityviewer::~Activityviewer()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
EventListItem::EventListItem( TDEListView *parent, TQString label1, TQString label2 , TQString label3, TQString label4)
|
|
|
|
: TDEListViewItem( parent, label1, label2 , label3, label4 )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
EventListItem::~EventListItem()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// paint ze peons
|
|
|
|
void EventListItem::paintCell ( TQPainter * p, const TQColorGroup & cg, int column, int width, int align )
|
|
|
|
{
|
|
|
|
TQColorGroup cg2(cg);
|
|
|
|
|
|
|
|
|
|
|
|
if (( this->text(1).contains( "Virus")) || ( this->text(1).contains( "Error")))
|
|
|
|
cg2.setColor(TQColorGroup::Text, TQt::red);
|
|
|
|
else if ( this->text(1) == "Updates")
|
|
|
|
cg2.setColor(TQColorGroup::Text, TQt::blue);
|
|
|
|
else if ( this->text(1) == "Quarantine")
|
|
|
|
cg2.setColor(TQColorGroup::Text, TQt::green);
|
|
|
|
|
|
|
|
TDEListViewItem::paintCell( p, cg2, column, width, align );
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "activityviewer.moc"
|