C++程序  |  65行  |  1.33 KB

/*
 * wpa_gui - SignalBar class
 * Copyright (c) 2011, Kel Modderman <kel@otaku42.de>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * Alternatively, this software may be distributed under the terms of BSD
 * license.
 *
 * See README and COPYING for more details.
 */

#include <cstdio>
#include <qapplication.h>

#include "signalbar.h"


SignalBar::SignalBar(QObject *parent)
	: QStyledItemDelegate(parent)
{
}


SignalBar::~SignalBar()
{
}


void SignalBar::paint(QPainter *painter,
		      const QStyleOptionViewItem &option,
		      const QModelIndex &index) const
{
	QStyleOptionProgressBar opts;
	int signal;

	if (index.column() != 3) {
		QStyledItemDelegate::paint(painter, option, index);
		return;
	}

	if (index.data().toInt() > 0)
		signal = 0 - (256 - index.data().toInt());
	else
		signal = index.data().toInt();

	opts.minimum = -95;
	opts.maximum = -35;
	if (signal < opts.minimum)
		opts.progress = opts.minimum;
	else if (signal > opts.maximum)
		opts.progress = opts.maximum;
	else
		opts.progress = signal;

	opts.text = QString::number(signal) + " dBm";
	opts.textVisible = true;
	opts.rect = option.rect;

	QApplication::style()->drawControl(QStyle::CE_ProgressBar,
					   &opts, painter);
}