+/***************************************************************************
+ fleetview.cpp - description
+ -------------------
+ begin : Sun Mar 10 2002
+ copyright : (C) 2002 by Michael Andreen
+ email : whale@linux.nu
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "fleetview.h"
+
+#include "ui/roidseditview.h"
+#include "ui/resourceview.h"
+#include "planet.h"
+
+#include <qvalidator.h>
+
+#include <iostream>
+#include <map>
+
+using namespace std;
+
+FleetView::FleetView(const Fleet* fleet, bool friendly, QWidget *parent, const char *name ) : QWidget(parent,name)
+{
+ m_Modified = false;
+ const Planet* planet = 0;
+ if((planet = dynamic_cast<const Planet*>(fleet)))
+ {
+ m_Fleet = new Planet(*planet);
+ m_bHome = true;
+ }
+ else
+ {
+ m_Fleet = new Fleet(*fleet);
+ m_bHome = false;
+ }
+
+ m_bFriendly = friendly;
+
+ //m_ChangesMapper = new QSignalMapper(this);
+
+
+ findNames();
+ int rows = m_Names.size() / 3 + m_Names.size() % 3;
+ m_MainLayout = new QVBoxLayout(this,2);
+ m_MainLayout->addSpacing(2);
+ m_UnitsLayout = new QGridLayout(m_MainLayout, rows, 6);
+ buildUnitTable();
+ //QSpacerItem* space = new QSpacerItem(1, 1);
+ fillTable();
+
+ m_MainLayout->addStretch(10);
+
+ if (m_bHome)
+ {
+ m_RoidsEditView = new RoidsEditView(this);
+ m_MainLayout->addWidget(m_RoidsEditView);
+ }
+ m_ResourceView = new ResourceView(this);
+ m_MainLayout->addWidget(m_ResourceView);
+
+}
+
+FleetView::~FleetView(){
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+void FleetView::viewFleet(const Fleet* fleet, bool friendly)
+{
+ if (m_Fleet->race() != fleet->race())
+ {
+ findNames();
+ }
+ delete m_Fleet;
+ if(m_bHome)
+ {
+ m_Fleet = new Planet(*dynamic_cast<const Planet*>(fleet));
+ }
+ else
+ {
+ m_Fleet = new Fleet(*fleet);
+ }
+ fillTable();
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+void FleetView::findNames()
+{
+ m_Names.clear();
+
+ const UnitList& units = Fleet::Units();
+ vector<int> races = m_Fleet->RacesAllowed();
+
+ for (UnitList::const_iterator i = units.begin(); i != units.end(); ++i)
+ {
+ for (vector<int>::iterator j = races.begin(); j != races.end(); ++j)
+ {
+ if ((*j) == i->second.race())
+ {
+ m_Names.push_back(i->first.c_str());
+ break;
+ }
+ }
+ }
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+void FleetView::buildUnitTable()
+{
+ int rows = 0;
+ QIntValidator* val = new QIntValidator(this);
+ val->setBottom(0);
+
+ for (vector<QString>::iterator i = m_Names.begin(); i != m_Names.end(); ++rows)
+ {
+ for ( int cols = 0; i != m_Names.end() && cols < 3; ++i, ++cols)
+ {
+ m_UnitsLabel[(*i)] = new QLabel((*i), this);
+ m_UnitsLayout->addWidget(m_UnitsLabel[(*i)], rows, cols*3);
+
+ m_UnitsEdit[(*i)] = new QLineEdit(this,(*i));
+ m_UnitsEdit[(*i)]->setValidator(val);
+ m_UnitsLayout->addWidget(m_UnitsEdit[(*i)], rows, cols*3+1);
+
+ m_UnitsLostSurvivedView[(*i)] = new QLineEdit(this);
+ m_UnitsLostSurvivedView[(*i)]->setFocusPolicy(QWidget::NoFocus);
+ m_UnitsLostSurvivedView[(*i)]->setReadOnly(true);
+ m_UnitsLayout->addWidget(m_UnitsLostSurvivedView[(*i)], rows, cols*3+2);
+
+ connect(m_UnitsEdit[(*i)], SIGNAL(textChanged(const QString&)),this, SLOT(unitsChanged(const QString&)));
+ }
+ }
+
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+const Fleet* FleetView::fleet()
+{
+ return m_Fleet;
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+bool FleetView::isHome()
+{
+ return m_bHome;
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+bool FleetView::isFriendly()
+{
+ return m_bFriendly;
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+void FleetView::unitsChanged(const QString& number)
+{
+ m_Fleet->setFleet(sender()->name(), number.toInt());
+ m_Modified = true;
+ emit fleetChanged(m_Fleet);
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+bool FleetView::isModified()
+{
+ return m_Modified;
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+void FleetView::fillTable()
+{
+ for(vector<QString>::iterator i = m_Names.begin(); i != m_Names.end(); ++i)
+ {
+ m_UnitsEdit[(*i)]->setText(QString("%1").arg(m_Fleet->fleet(i->latin1(), 0)));
+ }
+}
+
+