1/*
2 * wpa_gui - EventHistory class
3 * Copyright (c) 2005-2006, Jouni Malinen <j@w1.fi>
4 *
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
7 */
8
9#include <QHeaderView>
10#include <QScrollBar>
11
12#include "eventhistory.h"
13
14
15int EventListModel::rowCount(const QModelIndex &) const
16{
17	return msgList.count();
18}
19
20
21int EventListModel::columnCount(const QModelIndex &) const
22{
23	return 2;
24}
25
26
27QVariant EventListModel::data(const QModelIndex &index, int role) const
28{
29	if (!index.isValid())
30		return QVariant();
31
32        if (role == Qt::DisplayRole)
33		if (index.column() == 0) {
34			if (index.row() >= timeList.size())
35				return QVariant();
36			return timeList.at(index.row());
37		} else {
38			if (index.row() >= msgList.size())
39				return QVariant();
40			return msgList.at(index.row());
41		}
42        else
43		return QVariant();
44}
45
46
47QVariant EventListModel::headerData(int section, Qt::Orientation orientation,
48				    int role) const
49{
50	if (role != Qt::DisplayRole)
51		return QVariant();
52
53	if (orientation == Qt::Horizontal) {
54		switch (section) {
55		case 0:
56			return QString(tr("Timestamp"));
57		case 1:
58			return QString(tr("Message"));
59		default:
60			return QVariant();
61		}
62	} else
63		return QString("%1").arg(section);
64}
65
66
67void EventListModel::addEvent(QString time, QString msg)
68{
69	beginInsertRows(QModelIndex(), msgList.size(), msgList.size() + 1);
70	timeList << time;
71	msgList << msg;
72	endInsertRows();
73}
74
75
76EventHistory::EventHistory(QWidget *parent, const char *, bool, Qt::WindowFlags)
77	: QDialog(parent)
78{
79	setupUi(this);
80
81	connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
82
83	eventListView->setItemsExpandable(false);
84	eventListView->setRootIsDecorated(false);
85	elm = new EventListModel(parent);
86	eventListView->setModel(elm);
87}
88
89
90EventHistory::~EventHistory()
91{
92	destroy();
93	delete elm;
94}
95
96
97void EventHistory::languageChange()
98{
99	retranslateUi(this);
100}
101
102
103void EventHistory::addEvents(WpaMsgList msgs)
104{
105	WpaMsgList::iterator it;
106	for (it = msgs.begin(); it != msgs.end(); it++)
107		addEvent(*it);
108}
109
110
111void EventHistory::addEvent(WpaMsg msg)
112{
113	bool scroll = true;
114
115	if (eventListView->verticalScrollBar()->value() <
116	    eventListView->verticalScrollBar()->maximum())
117	    	scroll = false;
118
119	elm->addEvent(msg.getTimestamp().toString("yyyy-MM-dd hh:mm:ss.zzz"),
120		      msg.getMsg());
121
122	if (scroll)
123		eventListView->scrollToBottom();
124}
125