7302d32f9959fef9f529d316b19af96d36af3907
[evehomescreen] / src / widget.cpp
1 // Copyright (C) 2010 Jaakko Kyro <jkyro@korjaussarja.net>
2 // This file is licenced under GPL, see COPYING
3 // for full licence information
4 #include "widget.h"
5 #include <QPainter>
6 #include "eveaccount.h"
7 #include "evesettingsdialog.h"
8 #include "eveskilltraining.h"
9 #include "skilltree.h"
10 #include <QtDebug>
11 #include <QNetworkConfigurationManager>
12 #include <QSettings>
13
14 QTM_USE_NAMESPACE
15
16 Widget::Widget(QWidget *parent)
17     : QLabel(parent),
18     m_settings(new EveSettingsDialog(this)),
19     m_training(NULL),
20     m_net(new QNetworkConfigurationManager(this)),
21     m_skills(new SkillTree(this)),
22     m_model(new EveModel)
23 {
24     setAlignment(Qt::AlignCenter);
25     setAttribute(Qt::WA_TranslucentBackground);
26     setGeometry(0,0,150,180);
27     connect(m_net,SIGNAL(onlineStateChanged(bool)),this,SLOT(onlineStateChanged(bool)));
28     connect(m_skills,SIGNAL(skillsLoaded()),this,SLOT(update()));
29     m_skills->loadSkills();
30     m_model->loadSettings();
31     m_settings->setModel(m_model);
32     EveCharacter *c = m_model->selectedCharacter();
33     if (c != NULL) {
34         loadTraining();
35     }
36 }
37
38 Widget::~Widget()
39 {
40
41 }
42
43
44 QSize Widget::sizeHint() const
45 {
46     return 2 * QLabel::sizeHint();
47 }
48
49 void Widget::paintEvent(QPaintEvent *event)
50 {
51     QPainter p(this);
52     p.setBrush(QColor(0, 0, 0, 128));
53     p.setPen(Qt::NoPen);
54     p.drawRoundedRect(rect(), 25, 25);
55     p.setPen(Qt::white);
56     QFont dFont(p.font());
57     dFont.setPixelSize(15);
58     p.setFont(dFont);
59     EveCharacter *character = m_model->selectedCharacter();
60     if (character != NULL) {
61         QPoint iconLoc((150-64)/2,(150-64)/2);
62         if (character->characterIcon) {
63             p.drawPixmap(iconLoc,*(character->characterIcon));
64         }
65         QRect nameLoc(0,10,150,20);
66         p.drawText(nameLoc,Qt::AlignCenter,character->name);
67         if (m_training) {
68             QRect skillTitle(0,110,150,50);
69             p.drawText(skillTitle,Qt::AlignCenter|Qt::TextWordWrap,
70                        QString("%1 %2").arg(m_skills->skillName(m_training->typeId))
71                                        .arg(m_training->level));
72             QRect skillLoc(0,155,150,20);
73             p.drawText(skillLoc,Qt::AlignCenter,m_training->endTime.toString(Qt::SystemLocaleShortDate));
74         }
75
76     }
77     p.end();
78
79     QLabel::paintEvent(event);
80 }
81
82 void Widget::showSettingsDialog()
83 {
84
85     int result = m_settings->exec();
86     if (result == QDialog::Accepted) {
87
88         m_model->setSelected(m_settings->selectedCharacter());
89         EveCharacter *character = m_model->selectedCharacter();
90         if (character != NULL) {
91             qDebug() << "Got character " << character->name;
92             connect(character,SIGNAL(imageLoaded()),this,SLOT(skillReady()));
93             character->fetchImage();
94
95             loadTraining();
96         }
97     }
98 }
99
100 void Widget::loadTraining()
101 {
102     EveCharacter *character = m_model->selectedCharacter();
103     if (character != NULL) {
104
105         qDebug() << "Fetch skills";
106         m_training = new EveSkillTraining(this);
107         m_training->setAccount(m_settings->model().data());
108         m_training->setCharacter(character);
109         connect(m_training,SIGNAL(finished()),this,SLOT(update()));
110         m_training->fetchInfo();
111     }
112 }
113
114 void Widget::skillReady()
115 {
116     update();
117     m_training->fetchInfo();
118     m_model->saveSettings();
119 }
120
121 void Widget::onlineStateChanged(bool online)
122 {
123     qDebug() << "Online status changed, reloading info";
124     if (online) {
125         m_training->fetchInfo();
126     }
127 }
128