signalbar.cpp revision 1f69aa52ea2e0a73ac502565df8c666ee49cab6a
11f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt/*
21f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * wpa_gui - SignalBar class
31f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * Copyright (c) 2011, Kel Modderman <kel@otaku42.de>
41f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt *
51f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * This program is free software; you can redistribute it and/or modify
61f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * it under the terms of the GNU General Public License version 2 as
71f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * published by the Free Software Foundation.
81f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt *
91f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD
101f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * license.
111f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt *
121f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * See README and COPYING for more details.
131f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt */
141f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
151f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#include <cstdio>
161f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#include <qapplication.h>
171f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
181f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#include "signalbar.h"
191f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
201f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
211f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry ShmidtSignalBar::SignalBar(QObject *parent)
221f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	: QStyledItemDelegate(parent)
231f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{
241f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt}
251f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
261f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
271f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry ShmidtSignalBar::~SignalBar()
281f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{
291f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt}
301f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
311f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
321f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtvoid SignalBar::paint(QPainter *painter,
331f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		      const QStyleOptionViewItem &option,
341f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		      const QModelIndex &index) const
351f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{
361f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	QStyleOptionProgressBar opts;
371f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	int signal;
381f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
391f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	if (index.column() != 3) {
401f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		QStyledItemDelegate::paint(painter, option, index);
411f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		return;
421f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	}
431f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
441f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	if (index.data().toInt() > 0)
451f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		signal = 0 - (256 - index.data().toInt());
461f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	else
471f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		signal = index.data().toInt();
481f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
491f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	opts.minimum = -95;
501f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	opts.maximum = -35;
511f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	if (signal < opts.minimum)
521f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		opts.progress = opts.minimum;
531f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	else if (signal > opts.maximum)
541f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		opts.progress = opts.maximum;
551f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	else
561f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		opts.progress = signal;
571f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
581f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	opts.text = QString::number(signal) + " dBm";
591f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	opts.textVisible = true;
601f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	opts.rect = option.rect;
611f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
621f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	QApplication::style()->drawControl(QStyle::CE_ProgressBar,
631f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt					   &opts, painter);
641f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt}
65