--- /dev/null
+#include <QPainter>
+#include "BorderedBarWidget.h"
+
+BorderedBarWidget::BorderedBarWidget( QWidget *aParent ) :
+ QWidget( aParent ){
+ iCenterLabel = new QLabel(this);
+ iCenterLabel->setAlignment( Qt::AlignCenter );
+ iLeftLabel = new QLabel(this);
+ iLeftLabel->setAlignment( Qt::AlignLeading | Qt::AlignVCenter);
+ iRightLabel = new QLabel(this);
+ iRightLabel->setAlignment( Qt::AlignTrailing | Qt::AlignVCenter);
+}
+
+BorderedBarWidget::~BorderedBarWidget() {
+ delete iCenterLabel;
+ delete iLeftLabel;
+ delete iRightLabel;
+}
+
+QColor BorderedBarWidget::backgroundColor()
+{
+ return iPalette.color( QPalette::Window );;
+}
+
+QColor BorderedBarWidget::faceColor()
+{
+ return iPalette.color( QPalette::WindowText );;
+}
+
+int BorderedBarWidget::borderWidth()
+{
+ return iBorderWidth;
+}
+
+QString BorderedBarWidget::text( TextPosition aPos )
+{
+ if ( aPos == CenterAlign )
+ return iCenterLabel->text();
+ else if ( aPos == LeftAlign )
+ return iLeftLabel->text();
+ else if ( aPos == RightAlign )
+ return iRightLabel->text();
+ return "";
+}
+
+void BorderedBarWidget::setBackgroundColor( QColor aColor )
+{
+ iPalette.setColor( QPalette::Window, aColor );
+ iCenterLabel->setPalette( iPalette );
+ iLeftLabel->setPalette( iPalette );
+ iRightLabel->setPalette( iPalette );
+}
+
+void BorderedBarWidget::setFaceColor( QColor aColor )
+{
+ iPalette.setColor( QPalette::WindowText, aColor );
+ iCenterLabel->setPalette( iPalette );
+ iLeftLabel->setPalette( iPalette );
+ iRightLabel->setPalette( iPalette );
+}
+
+void BorderedBarWidget::setBorderWidth( int aWidth )
+{
+ iBorderWidth = aWidth;
+ iRightLabel->setMargin( 2*iBorderWidth );
+ iLeftLabel->setMargin( 2*iBorderWidth );
+}
+
+void BorderedBarWidget::setText( QString aText, TextPosition aPos )
+{
+ if ( aPos == CenterAlign )
+ iCenterLabel->setText( aText );
+ else if ( aPos == LeftAlign )
+ iLeftLabel->setText( aText );
+ else if ( aPos == RightAlign )
+ iRightLabel->setText( aText );
+}
+
+void BorderedBarWidget::setPixmap( QPixmap aPixmap, TextPosition aPos )
+{
+ if ( aPos == CenterAlign )
+ iCenterLabel->setPixmap( aPixmap );
+ else if ( aPos == LeftAlign )
+ iLeftLabel->setPixmap( aPixmap );
+ else if ( aPos == RightAlign )
+ iRightLabel->setPixmap( aPixmap );
+}
+
+void BorderedBarWidget::paintEvent(QPaintEvent *)
+{
+ drawBorder();
+ iCenterLabel->setGeometry( rect() );
+ iLeftLabel->setGeometry( rect() );
+ iRightLabel->setGeometry( rect() );
+}
+
+void BorderedBarWidget::drawCorner( QPainter &aPainter, QPoint &aCenter )
+{
+ QRadialGradient radialGrad(QPointF(aCenter), iBorderWidth);
+ radialGrad.setColorAt(0, iPalette.color( QPalette::WindowText));
+ radialGrad.setColorAt(1, iPalette.color( QPalette::Window));
+ aPainter.setBrush(radialGrad);
+ aPainter.drawEllipse(QPoint(aCenter), iBorderWidth, iBorderWidth);
+}
+
+void BorderedBarWidget::drawSide( QPainter &aPainter, QPoint aStartPoint, QPoint aEndPoint )
+{
+ QPoint d = aEndPoint - aStartPoint;
+ QPoint gradEnd = aStartPoint;
+ if ( abs( d.x() ) < abs( d.y() ) )
+ gradEnd.setX( aEndPoint.x()+1 );
+ else
+ gradEnd.setY( aEndPoint.y()+1 );
+
+ QLinearGradient linearGradTop(aStartPoint, gradEnd);
+ linearGradTop.setColorAt(0, iPalette.color( QPalette::Window));
+ linearGradTop.setColorAt(1, iPalette.color( QPalette::WindowText));
+ aPainter.setBrush(linearGradTop);
+ aPainter.drawRect( QRect(aStartPoint,aEndPoint) );
+}
+
+void BorderedBarWidget::drawBorder()
+{
+ QPainter painter(this);
+ painter.setPen(Qt::NoPen);
+ painter.setRenderHint(QPainter::Antialiasing, true);
+
+ /*top left corner*/
+ QPoint center(iBorderWidth,iBorderWidth);
+ drawCorner( painter, center );
+
+ /*top right corner*/
+ center.setX( this->rect().right()-iBorderWidth );
+ center.setY( iBorderWidth );
+ drawCorner( painter, center );
+
+ /*bottom left corner*/
+ center.setX( iBorderWidth );
+ center.setY( this->rect().bottom()-iBorderWidth );
+ drawCorner( painter, center );
+
+ /*bottom right corner*/
+ center.setX( this->rect().right()-iBorderWidth );
+ center.setY( this->rect().bottom()-iBorderWidth );
+ drawCorner( painter, center );
+
+ /*top*/
+ drawSide( painter, QPoint(iBorderWidth,0), QPoint(this->rect().right()-(iBorderWidth+1),(iBorderWidth-1)) );
+
+ /*right*/
+ drawSide( painter, QPoint(this->rect().right(),this->rect().bottom()-iBorderWidth), QPoint(this->rect().right()-(iBorderWidth+1),iBorderWidth-1) );
+
+ /*bottom*/
+ drawSide( painter, QPoint(this->rect().right()-iBorderWidth, this->rect().bottom()), QPoint((iBorderWidth-1),this->rect().bottom()-(iBorderWidth+1)) );
+
+ /*left*/
+ drawSide( painter, QPoint(0,iBorderWidth), QPoint((iBorderWidth-1), this->rect().bottom()-(iBorderWidth+1)) );
+
+ /*inside*/
+ QBrush brush( iPalette.color( QPalette::Window ) );
+ painter.setBrush(brush);
+ QRect inside(iBorderWidth,iBorderWidth,this->rect().right()-2*iBorderWidth,this->rect().bottom()-2*iBorderWidth);
+ painter.drawRoundRect(inside,iBorderWidth,iBorderWidth);
+
+}