]> ruin.nu Git - hbs.git/blob - bs/fleetview.cpp
d40cfc53018bff1c4205e202e24b486e04a9d03b
[hbs.git] / bs / fleetview.cpp
1 /***************************************************************************
2                           fleetview.cpp  -  description
3                              -------------------
4     begin                : Sun Mar 10 2002
5     copyright            : (C) 2002 by Michael Andreen
6     email                : whale@linux.nu
7  ***************************************************************************/
8
9 /***************************************************************************
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the GNU General Public License as published by  *
13  *   the Free Software Foundation; either version 2 of the License, or     *
14  *   (at your option) any later version.                                   *
15  *                                                                         *
16  ***************************************************************************/
17
18 #include "fleetview.h"
19
20 #include "ui/roidseditview.h"
21 #include "ui/resourceview.h"
22 #include "planet.h"
23
24 #include <qvalidator.h>
25
26 #include <iostream>
27 #include <map>
28
29 using namespace std;
30
31 FleetView::FleetView(const Fleet* fleet, bool friendly, QWidget *parent, const char *name ) : QWidget(parent,name)
32 {
33         m_Modified = false;
34         const Planet* planet = 0;
35         if((planet = dynamic_cast<const Planet*>(fleet)))
36         {
37                         m_Fleet = new Planet(*planet);
38                         m_bHome = true;
39         }
40         else
41         {
42                 m_Fleet = new Fleet(*fleet);
43                 m_bHome = false;
44         }
45         
46         m_bFriendly = friendly;
47
48         //m_ChangesMapper = new QSignalMapper(this);
49
50         
51         findNames();
52         int rows = m_Names.size() / 3 + m_Names.size() % 3;
53         m_MainLayout = new QVBoxLayout(this,2);
54         m_MainLayout->addSpacing(2);
55         m_UnitsLayout = new QGridLayout(m_MainLayout, rows, 6);
56         buildUnitTable();
57         //QSpacerItem* space = new QSpacerItem(1, 1);
58         fillTable();
59
60         m_MainLayout->addStretch(10);
61
62         if (m_bHome)
63         {
64                 m_RoidsEditView = new RoidsEditView(this);
65                 m_MainLayout->addWidget(m_RoidsEditView);
66         }
67         m_ResourceView = new ResourceView(this);
68         m_MainLayout->addWidget(m_ResourceView);
69
70 }
71
72 FleetView::~FleetView(){
73 }
74
75 /////////////////////////////////////////////////////////////////////
76 //
77 void FleetView::viewFleet(const Fleet* fleet, bool friendly)
78 {
79         if (m_Fleet->race() != fleet->race())
80         {
81                 findNames();
82         }
83         delete m_Fleet;
84         if(m_bHome)
85         {
86                 m_Fleet = new Planet(*dynamic_cast<const Planet*>(fleet));
87         }
88         else
89         {
90                 m_Fleet = new Fleet(*fleet);
91         }
92         fillTable();
93 }
94
95 /////////////////////////////////////////////////////////////////////
96 //
97 void FleetView::findNames()
98 {
99         m_Names.clear();
100
101         const UnitList& units = Fleet::Units(); 
102         vector<int> races = m_Fleet->RacesAllowed();
103
104         for (UnitList::const_iterator i = units.begin(); i != units.end(); ++i)
105         {
106                 for (vector<int>::iterator j = races.begin(); j != races.end(); ++j)
107                 {
108                         if ((*j) == i->second.race())
109                         {
110                                 m_Names.push_back(i->first.c_str());
111                                 break;
112                         }
113                 }
114         }
115 }
116
117 /////////////////////////////////////////////////////////////////////
118 //
119 void FleetView::buildUnitTable()
120 {
121         int rows = 0;
122         QIntValidator* val = new QIntValidator(this);
123         val->setBottom(0);
124
125         for (vector<QString>::iterator i = m_Names.begin(); i != m_Names.end(); ++rows)
126         {
127                 for ( int cols = 0; i != m_Names.end() && cols < 3; ++i, ++cols)
128                 {
129                         m_UnitsLabel[(*i)] = new QLabel((*i), this);
130                         m_UnitsLayout->addWidget(m_UnitsLabel[(*i)], rows, cols*3);
131
132                         m_UnitsEdit[(*i)] = new QLineEdit(this,(*i));
133       m_UnitsEdit[(*i)]->setValidator(val);
134                         m_UnitsLayout->addWidget(m_UnitsEdit[(*i)], rows, cols*3+1);
135
136                         m_UnitsLostSurvivedView[(*i)] = new QLineEdit(this);
137                         m_UnitsLostSurvivedView[(*i)]->setFocusPolicy(QWidget::NoFocus);
138                         m_UnitsLostSurvivedView[(*i)]->setReadOnly(true);
139                         m_UnitsLayout->addWidget(m_UnitsLostSurvivedView[(*i)], rows, cols*3+2);
140
141                         connect(m_UnitsEdit[(*i)], SIGNAL(textChanged(const QString&)),this, SLOT(unitsChanged(const QString&)));
142                 }
143         }
144
145 }
146
147 /////////////////////////////////////////////////////////////////////
148 //
149 const Fleet* FleetView::fleet()
150 {
151         return m_Fleet;
152 }
153
154 /////////////////////////////////////////////////////////////////////
155 //
156 bool FleetView::isHome()
157 {
158         return m_bHome;
159 }
160
161 /////////////////////////////////////////////////////////////////////
162 //
163 bool FleetView::isFriendly()
164 {
165         return m_bFriendly;
166 }
167
168 /////////////////////////////////////////////////////////////////////
169 //
170 void FleetView::unitsChanged(const QString& number)
171 {
172         m_Fleet->setFleet(sender()->name(), number.toInt());
173         m_Modified = true;
174         emit fleetChanged(m_Fleet);
175 }
176
177 /////////////////////////////////////////////////////////////////////
178 //
179 bool FleetView::isModified()
180 {
181         return m_Modified;
182 }
183
184 /////////////////////////////////////////////////////////////////////
185 //
186 void FleetView::fillTable()
187 {
188         for(vector<QString>::iterator i = m_Names.begin(); i != m_Names.end(); ++i)
189         {
190                 m_UnitsEdit[(*i)]->setText(QString("%1").arg(m_Fleet->fleet(i->latin1(), 0)));
191         }
192 }
193
194