18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/*
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_gui - EventHistory class
38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2005-2006, Jouni Malinen <j@w1.fi>
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license.
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details.
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <QHeaderView>
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <QScrollBar>
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "eventhistory.h"
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint EventListModel::rowCount(const QModelIndex &) const
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	return msgList.count();
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint EventListModel::columnCount(const QModelIndex &) const
228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	return 2;
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtQVariant EventListModel::data(const QModelIndex &index, int role) const
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (!index.isValid())
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return QVariant();
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt        if (role == Qt::DisplayRole)
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		if (index.column() == 0) {
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			if (index.row() >= timeList.size())
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				return QVariant();
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			return timeList.at(index.row());
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		} else {
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			if (index.row() >= msgList.size())
398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				return QVariant();
408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			return msgList.at(index.row());
418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		}
428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt        else
438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return QVariant();
448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
478d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtQVariant EventListModel::headerData(int section, Qt::Orientation orientation,
488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				    int role) const
498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (role != Qt::DisplayRole)
518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return QVariant();
528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (orientation == Qt::Horizontal) {
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		switch (section) {
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		case 0:
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			return QString(tr("Timestamp"));
578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		case 1:
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			return QString(tr("Message"));
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		default:
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			return QVariant();
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		}
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	} else
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return QString("%1").arg(section);
648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid EventListModel::addEvent(QString time, QString msg)
688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	beginInsertRows(QModelIndex(), msgList.size(), msgList.size() + 1);
708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	timeList << time;
718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	msgList << msg;
728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	endInsertRows();
738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
767a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry ShmidtEventHistory::EventHistory(QWidget *parent, const char *, bool, Qt::WindowFlags)
778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	: QDialog(parent)
788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	setupUi(this);
808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
837a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	eventListView->setItemsExpandable(false);
847a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	eventListView->setRootIsDecorated(false);
858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	elm = new EventListModel(parent);
868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	eventListView->setModel(elm);
878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
908d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtEventHistory::~EventHistory()
918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	destroy();
938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	delete elm;
948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid EventHistory::languageChange()
988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	retranslateUi(this);
1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid EventHistory::addEvents(WpaMsgList msgs)
1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	WpaMsgList::iterator it;
1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	for (it = msgs.begin(); it != msgs.end(); it++)
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		addEvent(*it);
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid EventHistory::addEvent(WpaMsg msg)
1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	bool scroll = true;
1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (eventListView->verticalScrollBar()->value() <
1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	    eventListView->verticalScrollBar()->maximum())
1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	    	scroll = false;
1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	elm->addEvent(msg.getTimestamp().toString("yyyy-MM-dd hh:mm:ss.zzz"),
1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		      msg.getMsg());
1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (scroll)
1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		eventListView->scrollToBottom();
1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
125