1 /***************************************************************************
2 fleetview.cpp - description
4 begin : Sun Mar 10 2002
5 copyright : (C) 2002 by Michael Andreen
7 ***************************************************************************/
9 /***************************************************************************
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. *
16 ***************************************************************************/
18 #include "fleetview.h"
20 #include "ui/roidseditview.h"
21 #include "ui/resourceview.h"
24 #include <qvalidator.h>
31 FleetView::FleetView(const Fleet* fleet, bool friendly, QWidget *parent, const char *name ) : QWidget(parent,name)
38 const Planet* planet = 0;
39 if((planet = dynamic_cast<const Planet*>(fleet)))
41 m_Fleet = new Planet(*planet);
46 m_Fleet = new Fleet(*fleet);
50 m_Fleet->printFleet();
51 m_bFriendly = friendly;
53 //m_ChangesMapper = new QSignalMapper(this);
57 int rows = m_Names.size() / 3 + m_Names.size() % 3;
58 m_MainLayout = new QVBoxLayout(this,2);
59 m_MainLayout->addSpacing(2);
60 m_UnitsLayout = new QGridLayout(m_MainLayout, rows, 6);
62 //QSpacerItem* space = new QSpacerItem(1, 1);
65 m_MainLayout->addStretch(10);
69 m_RoidsEditView = new RoidsEditView(this);
70 m_MainLayout->addWidget(m_RoidsEditView);
71 connect(m_RoidsEditView, SIGNAL(changed(const QString&, int)), SLOT(slotRoidsChanged(const QString&, int)));
73 m_ResourceView = new ResourceView(this);
74 m_MainLayout->addWidget(m_ResourceView);
78 FleetView::~FleetView(){
81 /////////////////////////////////////////////////////////////////////
83 void FleetView::viewFleet(const Fleet* fleet, bool friendly)
85 if (m_Fleet->race() != fleet->race())
92 m_Fleet = new Planet(*dynamic_cast<const Planet*>(fleet));
96 m_Fleet = new Fleet(*fleet);
98 //m_Fleet->printFleet();
102 /////////////////////////////////////////////////////////////////////
104 void FleetView::findNames()
108 const UnitList& units = Fleet::Units();
109 vector<int> races = m_Fleet->RacesAllowed();
111 for (UnitList::const_iterator i = units.begin(); i != units.end(); ++i)
113 for (vector<int>::iterator j = races.begin(); j != races.end(); ++j)
115 if ((*j) == i->second.race())
117 m_Names.push_back(i->first.c_str());
124 /////////////////////////////////////////////////////////////////////
126 void FleetView::buildUnitTable()
129 QIntValidator* val = new QIntValidator(this);
132 for (vector<QString>::iterator i = m_Names.begin(); i != m_Names.end(); ++rows)
134 for ( int cols = 0; i != m_Names.end() && cols < 3; ++i, ++cols)
136 m_UnitsLabel[(*i)] = new QLabel((*i), this);
137 m_UnitsLayout->addWidget(m_UnitsLabel[(*i)], rows, cols*3);
139 m_UnitsEdit[(*i)] = new QLineEdit(this,(*i));
140 m_UnitsEdit[(*i)]->setValidator(val);
141 m_UnitsLayout->addWidget(m_UnitsEdit[(*i)], rows, cols*3+1);
143 m_UnitsLostSurvivedView[(*i)] = new QLineEdit(this);
144 m_UnitsLostSurvivedView[(*i)]->setFocusPolicy(QWidget::NoFocus);
145 m_UnitsLostSurvivedView[(*i)]->setReadOnly(true);
146 m_UnitsLayout->addWidget(m_UnitsLostSurvivedView[(*i)], rows, cols*3+2);
148 connect(m_UnitsEdit[(*i)], SIGNAL(textChanged(const QString&)),this, SLOT(unitsChanged(const QString&)));
154 /////////////////////////////////////////////////////////////////////
156 const Fleet* FleetView::fleet()
161 /////////////////////////////////////////////////////////////////////
163 bool FleetView::isHome()
168 /////////////////////////////////////////////////////////////////////
170 bool FleetView::isFriendly()
175 /////////////////////////////////////////////////////////////////////
177 void FleetView::unitsChanged(const QString& number)
179 m_Fleet->setFleet(sender()->name(), number.toInt());
181 emit fleetChanged(m_Fleet);
184 /////////////////////////////////////////////////////////////////////
186 bool FleetView::isModified()
191 /////////////////////////////////////////////////////////////////////
193 void FleetView::fillTable()
195 for(vector<QString>::iterator i = m_Names.begin(); i != m_Names.end(); ++i)
197 m_UnitsEdit[(*i)]->setText(QString("%1").arg(m_Fleet->fleet(i->latin1(), 0)));
200 if ((pl = dynamic_cast<Planet*>(m_Fleet)) && m_bHome)
202 m_RoidsEditView->setValue(tr("score"),pl->planetScore());
203 m_RoidsEditView->setValue(tr("metal"),pl->roids(tr("metal").latin1()));
204 m_RoidsEditView->setValue(tr("crystal"),pl->roids(tr("crystal").latin1()));
205 m_RoidsEditView->setValue(tr("eonium"),pl->roids(tr("eonium").latin1()));
206 m_RoidsEditView->setValue(tr("uninit"),pl->roids(tr("uninit").latin1()));
211 /////////////////////////////////////////////////////////////////////
213 void FleetView::slotRoidsChanged(const QString& type, int value)
216 if ((pl = dynamic_cast<Planet*>(m_Fleet)))
218 if (type == tr("score"))
219 pl->setPlanetScore(value);
222 pl->setRoids(type.latin1(), value);
224 emit fleetChanged(pl);
228 /////////////////////////////////////////////////////////////////////
230 void FleetView::slotViewTickRange(int min = -1, int max = -1)
239 for(vector<QString>::iterator i = m_Names.begin(); i != m_Names.end(); ++i)
242 if (m_iResultMode == 1) //Blocked
244 show = m_Fleet->blockedFleet(i->latin1(), m_iMaxTick);
246 else if (m_iResultMode == 2) //Survived
248 show = m_Fleet->fleet(i->latin1(), m_iMaxTick);
252 before = m_Fleet->fleet(i->latin1(), m_iMinTick);
253 after = m_Fleet->fleet(i->latin1(), m_iMaxTick);
254 show = after - before;
256 m_UnitsLostSurvivedView[(*i)]->setText(QString("%1").arg( show ));
263 before = m_Fleet->resource(tr("metal").latin1(),m_iMinTick);
264 after = m_Fleet->resource(tr("metal").latin1(),m_iMaxTick);
265 lost = after - before;
267 m_ResourceView->setLines(tr("metal"),lost);
269 before = m_Fleet->resource(tr("crystal").latin1(),m_iMinTick);
270 after = m_Fleet->resource(tr("crystal").latin1(),m_iMaxTick);
271 lost = after - before;
273 m_ResourceView->setLines(tr("crystal"),lost);
275 before = m_Fleet->resource(tr("eonium").latin1(),m_iMinTick);
276 after = m_Fleet->resource(tr("eonium").latin1(),m_iMaxTick);
277 lost = after - before;
279 m_ResourceView->setLines(tr("eonium"),lost);
281 before = m_Fleet->resource(tr("uninit").latin1(),m_iMinTick);
282 after = m_Fleet->resource(tr("uninit").latin1(),m_iMaxTick);
283 lost = after - before;
284 m_ResourceView->setLines(tr("uninit"),lost);
286 before = m_Fleet->score(m_iMinTick);
287 after = m_Fleet->score(m_iMaxTick);
288 lost = after - before;
289 m_ResourceView->setLines(tr("score"),after);
290 m_ResourceView->setLines(tr("lost"),lost);
291 float cost = (before - after) / float(init) / 1000;
292 m_ResourceView->setLines(tr("cost"),cost);
297 if ((pl = dynamic_cast<Planet*>(m_Fleet)))
300 before = pl->roids(tr("metal").latin1(),m_iMinTick);
301 after = pl->roids(tr("metal").latin1(),m_iMaxTick);
302 lost = after - before;
303 m_RoidsEditView->slotSetLost(tr("metal"),lost);
305 before = pl->roids(tr("crystal").latin1(),m_iMinTick);
306 after = pl->roids(tr("crystal").latin1(),m_iMaxTick);
307 lost = after - before;
308 m_RoidsEditView->slotSetLost(tr("crystal"),lost);
310 before = pl->roids(tr("eonium").latin1(),m_iMinTick);
311 after = pl->roids(tr("eonium").latin1(),m_iMaxTick);
312 lost = after - before;
313 m_RoidsEditView->slotSetLost(tr("eonium"),lost);
315 before = pl->roids(tr("uninit").latin1(),m_iMinTick);
316 after = pl->roids(tr("uninit").latin1(),m_iMaxTick);
317 lost = after - before;
318 m_RoidsEditView->slotSetLost(tr("uninit"),lost);
320 before = pl->planetScore(m_iMinTick);
321 after = pl->planetScore(m_iMaxTick);
322 lost = after - before;
323 m_RoidsEditView->slotSetLost(tr("scorelost"),lost);
325 m_RoidsEditView->slotSetLost(tr("capping"),pl->capping(m_iMaxTick));
330 //////////////////////////////////////////////////////////////////////////
332 void FleetView::slotSetResultMode(int i)