qskinny/examples/iot-dashboard/TopBar.cpp

74 lines
2.9 KiB
C++

#include "TopBar.h"
#include "PieChartPainted.h"
#include <QskSkin.h>
#include <QskTextLabel.h>
#include <QTime>
TopBarItem::TopBarItem( const QString& name, const QColor& textColor, const QGradient& gradient, int progress, int value, QQuickItem* parent ) : QskLinearBox( Qt::Vertical, parent ),
m_name( name )
{
setAutoLayoutChildren( true );
setAutoAddChildren( true );
setSpacing( 15 );
auto* textLabel = new QskTextLabel( name, this );
textLabel->setFontRole( QskSkin::SmallFont ); // ### style
auto* pieChartAndDisplay = new QskLinearBox( Qt::Horizontal, this );
pieChartAndDisplay->setSpacing( 10 );
/*auto* pieChart =*/ new PieChartPainted( textColor, gradient, progress, value, pieChartAndDisplay );
auto* display = new QskLinearBox( Qt::Vertical, pieChartAndDisplay );
display->setSpacing( 0 );
display->addSpacer( 0, 1 );
auto* displayValue = new QskTextLabel( QString::number( value ), display );
displayValue->setFontRole( QskSkin::MediumFont );
auto* displayUnit = new QskTextLabel( "kwH", display );
displayUnit->setFontRole( QskSkin::SmallFont );
display->addSpacer( 0, 1 );
}
TopBar::TopBar( QQuickItem* parent ) : QskLinearBox( Qt::Horizontal, parent )
{
setAutoLayoutChildren( true );
setAutoAddChildren( true );
setSizePolicy( QskSizePolicy::Preferred, QskSizePolicy::Fixed );
setMargins( {25, 35, 25, 0} );
QStringList itemStrings = { "Living Room", "Bedroom", "Bathroom", "Kitchen" };
QColor textColors[] = {"#ff3122", "#6776ff", "#f99055", "#6776ff"};
QColor gradientColors[] = {"#FF5C00", "#FF3122",
"#6776FF", "#6100FF",
"#FFCE50", "#FF3122",
// "#00ff00", "#ffffff", // ### remove
"#6776FF", "#6100FF"
};
int progressValues[] = {25, 45, 15, 86};
int values[] = {175, 205, 115, 289};
for( int a = 0; a < itemStrings.count(); a++ )
{
QLinearGradient gradient( 0, 0, 30, 0 ); // ### do this properly and dependent on the size
QGradientStop stop1( 0.0, gradientColors[2 * a] );
QGradientStop stop2( 1.0, gradientColors[2 * a + 1] );
gradient.setStops( {stop1, stop2} );
auto* item = new TopBarItem( itemStrings.at( a ), textColors[a], gradient, progressValues[a], values[a], this );
m_entries.append( item );
}
auto* timeControl = new QskLinearBox( Qt::Vertical, this );
timeControl->setMargins( {0, 0, 50, 0} );
auto* timeTitle = new QskTextLabel( "Current time", timeControl ); // ### make bold or so
timeTitle->setFontRole( QskSkin::TinyFont );
auto now = QTime::currentTime();
auto timeString = now.toString();
auto* timeDisplay = new QskTextLabel( timeString, timeControl );
timeDisplay->setFontRole( QskSkin::HugeFont );
timeDisplay->setTextColor( "#6776FF" );
}