1 // Copyright (C) 2010 Jaakko Kyro <jkyro@korjaussarja.net>
2 // This file is licenced under GPL, see COPYING
3 // for full licence information
6 #include "eveaccount.h"
7 #include "evesettingsdialog.h"
8 #include "eveskilltraining.h"
11 //#include <QNetworkConfigurationManager>
18 Widget::Widget(QWidget *parent)
20 m_settings(new EveSettingsDialog(this)),
22 //m_net(new QNetworkConfigurationManager(this)),
23 m_skills(new SkillTree(this)),
24 m_model(new EveModel),
25 m_timer(new QTimer(this)),
26 m_updateTimer(new QTimer(this))
28 setAlignment(Qt::AlignCenter);
29 setAttribute(Qt::WA_TranslucentBackground);
30 setGeometry(0,0,150,180);
31 //connect(m_net,SIGNAL(onlineStateChanged(bool)),this,SLOT(onlineStateChanged(bool)));
32 connect(m_skills,SIGNAL(skillsLoaded()),this,SLOT(update()));
33 m_skills->loadSkills();
34 m_model->loadSettings();
35 m_settings->setModel(m_model);
36 EveCharacter *c = m_model->selectedCharacter();
40 m_timer->setSingleShot(true);
41 connect(m_timer,SIGNAL(timeout()),this,SLOT(loadTraining()));
42 m_updateTimer->setSingleShot(true);
43 connect(m_updateTimer,SIGNAL(timeout()),this,SLOT(update()));
52 QSize Widget::sizeHint() const
54 return 2 * QLabel::sizeHint();
57 void Widget::paintEvent(QPaintEvent *event)
60 QColor bgColor(0, 0, 0, 128);
63 p.drawRoundedRect(rect(), 25, 25);
65 QFont dFont(p.font());
66 dFont.setPixelSize(15);
68 EveCharacter *character = m_model->selectedCharacter();
69 if (character != NULL) {
70 QPoint iconLoc((150-64)/2,(150-64)/2);
71 if (character->characterIcon) {
72 p.drawPixmap(iconLoc,*(character->characterIcon));
74 QRect nameLoc(0,10,150,20);
76 p.drawText(nameLoc,Qt::AlignCenter,character->name);
77 if (m_training && m_training->training) {
78 int timeLeft = m_training->currentTime.secsTo(m_training->lastTraining().endTime);
79 qDebug() << "Time left:" << timeLeft;
80 if (timeLeft < 60*60*24) {
81 // Queue not full -> yellow text
83 QColor penColor(254,241,53);
87 QRect skillTitle(0,100,150,50);
88 p.drawText(skillTitle,Qt::AlignCenter|Qt::TextWordWrap,
89 QString("%1 %2").arg(m_skills->skillName(m_training->firstTraining().typeId))
90 .arg(m_training->firstTraining().level));
91 QRect skillLoc(0,145,150,20);
92 p.drawText(skillLoc,Qt::AlignCenter,m_training->firstTraining().endTime.toString(Qt::SystemLocaleShortDate));
95 QRect skillTitle(0,110,150,50);
97 p.drawText(skillTitle,Qt::AlignCenter|Qt::TextWordWrap,
98 "No skill in training");
104 QLabel::paintEvent(event);
107 void Widget::showSettingsDialog()
110 int result = m_settings->exec();
111 if (result == QDialog::Accepted) {
113 m_model->setSelected(m_settings->selectedCharacter());
114 EveCharacter *character = m_model->selectedCharacter();
115 if (character != NULL) {
116 qDebug() << "Got character " << character->name;
117 connect(character,SIGNAL(imageLoaded()),this,SLOT(skillReady()));
118 character->fetchImage();
125 void Widget::loadTraining()
127 EveCharacter *character = m_model->selectedCharacter();
128 if (character != NULL) {
130 qDebug() << "Fetch skills";
131 if (m_training == NULL) {
132 m_training = new EveSkillTraining(this);
133 connect(m_training,SIGNAL(finished()),this,SLOT(trainingLoaded()));
135 m_training->setAccount(m_settings->model().data());
136 m_training->setCharacter(character);
138 m_training->fetchInfo();
142 void Widget::skillReady()
145 m_training->fetchInfo();
146 m_model->saveSettings();
149 void Widget::onlineStateChanged(bool online)
151 qDebug() << "Online status changed, reloading info";
153 m_training->fetchInfo();
157 void Widget::trainingLoaded()
159 qDebug() << "Training loaded";
160 if (m_training != NULL && m_training->training) {
161 QDateTime limit = (m_training->cachedUntil > m_training->lastTraining().endTime) ?
162 m_training->cachedUntil : m_training->lastTraining().endTime;
164 qDebug() << "Next refresh:" << limit.toString(Qt::SystemLocaleShortDate);
165 int interval = 1000 * (m_training->currentTime.secsTo(limit) + 15);
166 //qDebug() << "Timer interval" << interval;
167 if (m_timer->isActive()) {
171 m_timer->setInterval( interval );
173 if (m_updateTimer->isActive())
174 m_updateTimer->stop();
176 QDateTime nextUpdate = m_training->lastTraining().endTime;
178 nextUpdate.addSecs(-1*60*60*24);
179 if (nextUpdate > m_training->currentTime) {
180 m_updateTimer->setInterval(1000 * (m_training->currentTime.secsTo(nextUpdate) + 15));
181 m_updateTimer->start();