All pastes #951784 Raw Edit

Untitled

public cpp v1 · immutable
·published 2008-03-21 17:32 UTC
rendered paste body
#include <QPainter>#include <QGraphicsProxyWidget>#include <QGraphicsLinearLayout>#include <QGraphicsWidget>#include <plasma/theme.h>#include <plasma/dataengine.h>#include <marble/MarbleWidget.h>#include <kdebug.h>#include "plasmamap.h"WorldClock::WorldClock(QObject *parent, const QVariantList &args)    : Plasma::Applet(parent, args){    setDrawStandardBackground(true);    resize(QSize(400, 200));    m_proxy = new QGraphicsProxyWidget( );    m_map = new MarbleWidget(  );    m_proxy->setWidget( m_map );    m_map->setProjection( Equirectangular );    m_map->setGeometry( 0, 0, 400, 200 );    m_map->show();    m_proxy->show();    m_layout = new QGraphicsLinearLayout();    m_layout->addItem( m_proxy );    m_widget = new QGraphicsWidget(this);    m_widget->setLayout( m_layout );    m_widget->show();}WorldClock::~WorldClock(){    delete m_proxy;}void WorldClock::connectToEngine(){    Plasma::DataEngine* timeEngine = dataEngine("time");    timeEngine->connectSource("Local", this, 6000, Plasma::AlignToMinute);}void WorldClock::init(){}/*void WorldClock::setHovered( bool state ){    m_isHovered = state;    update();}void WorldClock::hoverMoveEvent( QGraphicsSceneHoverEvent * event ){    if(m_lastRender.isNull()) {        Applet::hoverMoveEvent( event );        return;    }    m_isHovered = true;    kDebug() << "hoverMoveEvent";    m_hoverPoint = event->pos().toPoint();    m_cityLocation = QPoint(0,0);    QString previous = m_currentCity->name();    m_currentCity = m_cityList->getNearestCity(m_contentsRect.width(), m_contentsRect.height(),                                               m_lastGmtPosition, m_hoverPoint.x(),                                               m_hoverPoint.y(), m_cityLocation);    Applet::hoverMoveEvent( event );    if( previous != m_currentCity->name() )        update();    //QTimer::singleShot( 3000, this, SLOT( setHovered( false ) ) );}void WorldClock::hoverEnterEvent(QGraphicsSceneHoverEvent *event){    if(m_lastRender.isNull()) {        Applet::hoverEnterEvent(event);        return;    }    m_isHovered = true;    kDebug() << "hoverenterevent";    m_hoverPoint = event->pos().toPoint();    m_cityLocation = QPoint(0,0);    QString previous = m_currentCity->name();    m_currentCity = m_cityList->getNearestCity(m_contentsRect.width(), m_contentsRect.height(),                                               m_lastGmtPosition, m_hoverPoint.x(),                                               m_hoverPoint.y(), m_cityLocation);    Applet::hoverEnterEvent(event);    if( previous != m_currentCity->name() )        update();    //QTimer::singleShot( 3000, this, SLOT( setHovered( false ) ) );}void WorldClock::hoverLeaveEvent(QGraphicsSceneHoverEvent *event){    if(m_lastRender.isNull()) {        Applet::hoverLeaveEvent(event);        return;    }    m_isHovered = false;    kDebug() << "hoverleaveevent";    m_hoverPoint = QPoint(0,0);    Applet::hoverLeaveEvent(event);    update();}*/void WorldClock::dataUpdated(const QString &name, const Plasma::DataEngine::Data &data){    /*    m_time = data["Time"].toTime();    if ( m_nextRenderTime <= m_time ) {        m_nextRenderTime = m_time.addSecs( 10 * 60 );        calculatePixmap();    } */    update();}/*//much of this is based on the mapwidget codevoid WorldClock::calculatePixmap(){    time_t local = time(NULL);    struct tm *curtime = gmtime(&local);    int sec = curtime->tm_hour*60*60 + curtime->tm_min*60 + curtime->tm_sec;    int gmt_position = m_contentsRect.width() * sec / 86400;    m_lastGmtPosition = gmt_position;    kDebug() << "loading theme 'daynight' width=" << m_contentsRect.width()             << " height=" << m_contentsRect.height();    MapLoader::load(static_cast<unsigned int>(m_contentsRect.width()),                    "daynight", static_cast<unsigned int>(m_contentsRect.height()));    QPixmap map = darkMap();    QPixmap clean = lightMap();    kDebug() << "m_contentsRect = " << m_contentsRect.size();    kDebug() << "QPixmap map = " << map.size();    kDebug() << "QPixmap clean = " << clean.size();    QPainter mp(&map);    clean.setAlphaChannel(darkMask(map.width(), map.height()));    mp.drawPixmap(0,0, clean);    if (m_lastRender.isNull() ) {        m_lastRender = QPixmap( m_contentsRect.size() );    }    QPainter p(&m_lastRender);    int greenwich = map.width()/2;    if (gmt_position >= greenwich) {        p.drawPixmap(gmt_position-greenwich, 0, map);        p.drawPixmap(0, 0, map, map.width()-gmt_position+greenwich, 0, gmt_position-greenwich, -1);    } else {        p.drawPixmap(0,0, map, greenwich-gmt_position, 0, map.width()+gmt_position-greenwich, -1);        p.drawPixmap(map.width()+gmt_position-greenwich, 0, map, 0, 0, greenwich-gmt_position, -1);    }    kDebug() << "made new rendering at " << QTime::currentTime() ;    return;} */void WorldClock::paintInterface(QPainter *p, const QStyleOptionGraphicsItem *option,                                const QRect &contentsRect){/*    //Something like this to keep a constant shape ??    if( ( contentsRect.width() / contentsRect.height() ) != 0.5 ) {        if( ( contentsRect.width() / contentsRect.height() ) > 0.5 ) {            contentsRect.setHeight( ( contentsRect.width() / 2 ) );        } else {            contentsRect.setWidth( ( contentsRect.height() / 2 ) );        }    } */ /*    kDebug() << "updating..";    p->setRenderHint(QPainter::SmoothPixmapTransform);    p->setRenderHint(QPainter::Antialiasing);    if ( m_map->size() != contentsRect.size() ) {        m_map->setGeometry( 0, 0, contentsRect.width(), contentsRect.height() );    } *//*    QTime time = QTime::currentTime();    p->setPen(Qt::white);    p->drawText( 0,0, "last painted at " + time.toString("hh:mm:ss.zzz") );*/}//originally MapWidget::cityTime(const QString &city)/* This needs to be replaced with something else, * because I think that it's not platform-independent * at all. I don't know what the best  way to fix the * problem is though. */ /*QString WorldClock::cityTime(const QString &city){    QString result = i18n(city.toLatin1()); // Time zone translation    int pos = result.indexOf('/');    if (pos >= 0)        result = result.mid(pos+1);    result.replace(QRegExp("_"), " ");    result.append(": ");    char *initial_TZ = getenv("TZ");    setenv("TZ", city.toLatin1(), 1);    tzset();    time_t t = time(NULL);    QDateTime dt;    dt.setTime_t(t);    result.append(QString("%1, %2").arg( KGlobal::locale()->formatTime(dt.time(), true)                  ).arg( KGlobal::locale()->formatDate(dt.date(), KLocale::ShortDate)) );    if (initial_TZ != 0)        setenv("TZ", initial_TZ, 1);    else        unsetenv("TZ");    tzset();    return result;}*/#include "plasmamap.moc"