#include "battlesum.h"
#include "scanview.h"
#include "ui/infoview.h"
-#include "tickview.h"
-#include "ui/fleetviewbase.h"
+//#include "tickview.h"
+#include "fleetview.h"
#include "fleet.h"
+#include "planet.h"
BSView::BSView(QWidget *parent, BSDoc *doc) : QSplitter(parent)
{
/** connect doc with the view*/
- connect(doc, SIGNAL(documentChanged()), this, SLOT(slotDocumentChanged()));
+
+ m_iMaxTick = 0;
+ m_iMinTick = 0;
+ m_iResultMode = 0;
+
+ m_bMoreDocChanges = false;
+ connect(doc, SIGNAL(documentChanged()), this, SLOT(slotDocumentChanged()));
m_doc = doc;
m_NumberView->addColumn("Name");
m_NumberView->addColumn("Number");
m_NumberView->addColumn("ETA");
+ m_NumberView->addColumn("Score");
//addBattle("NO BATTLES");
+
+
+ connect(m_NumberView, SIGNAL(expanded(QListViewItem*)), SLOT(slotItemExpanded(QListViewItem*)));
+ connect(m_NumberView, SIGNAL(collapsed(QListViewItem*)), SLOT(slotItemCollapsed(QListViewItem*)));
+
m_InfoView = new InfoView(m_LeftSplit);
+
+ connect(m_InfoView,SIGNAL(add()),SLOT(slotInfoNew()));
+ connect(m_InfoView,SIGNAL(apply()),SLOT(slotInfoApply()));
+ connect(m_InfoView,SIGNAL(cancel()),SLOT(slotInfoCancel()));
+ connect(m_InfoView,SIGNAL(remove()),SLOT(slotInfoRemove()));
+
+ vector<QString> raceNames;
+ const map<string, vector<int> >& races = Fleet::Races();
+ for(map<string, vector<int> >::const_iterator i = races.begin(); i != races.end(); ++i)
+ {
+ raceNames.push_back(i->first.c_str());
+ }
+ m_InfoView->setRaces(raceNames);
//the right side
- m_TickView = new TickView(m_RightSplit);
+ //m_TickView = new TickView(m_RightSplit);
m_FleetViews = new QWidgetStack(m_RightSplit);
- m_ScanView = new ScanView(m_RightSplit);
+ //m_ScanView = new ScanView(m_RightSplit);
+ Fleet fl1;
+ //fl1.setRace(tr("Terran").latin1());
+ fl1.setRace("Terran");
+ Fleet fl2;
+ fl2.setRace(tr("Generic").latin1());
+
//the widget stack
m_BattleSum = new BattleSum();
m_FleetViews->addWidget(m_BattleSum, 0);
- m_FleetView = new FleetViewBase();
+ m_FleetView = new FleetView(&fl1, true);
m_FleetViews->addWidget(m_FleetView, 1);
+ m_GenericFleetView = new FleetView(&fl2, true);
+ m_FleetViews->addWidget(m_GenericFleetView, 2);
+ m_FleetView->slotViewTickRange(m_iMinTick, m_iMaxTick);
+ m_GenericFleetView->slotViewTickRange(m_iMinTick, m_iMaxTick);
//m_FleetViews->raiseWidget(0);
- connect(m_NumberView, SIGNAL(selectionChanged(QListViewItem *)), SLOT(slotFleetSelection(QListViewItem *)));
+ connect(m_NumberView, SIGNAL(selectionChanged(QListViewItem *)), SLOT(slotFleetSelection(QListViewItem *)));
+ connect(m_FleetView, SIGNAL(fleetChanged(const Fleet*)), SLOT(slotFleetChanged(const Fleet*)));
+ connect(m_GenericFleetView, SIGNAL(fleetChanged(const Fleet*)), SLOT(slotFleetChanged(const Fleet*)));
}
BSView::~BSView()
*/
void BSView::slotDocumentChanged()
{
+ if (m_bMoreDocChanges)
+ return;
+
m_NumberView->clear();
- map<QString, map<QString, map<QString, Fleet> > >& battles = m_doc->Battles();
+ const BattleList& battles = m_doc->battles();
- for (map<QString, map<QString, map<QString, Fleet> > >::iterator i = battles.begin(); i != battles.end(); i++)
+ vector<QString> battlenames;
+
+ for (BattleList::const_iterator i = battles.begin(); i != battles.end(); ++i)
{
QString b = (*i).first;
+ battlenames.push_back(i->first);
QListViewItem* battle = new QListViewItem(m_NumberView, b);
+ battle->setOpen(m_TreeExpanded[b]["--"]);
+
- for (map<QString, map<QString, Fleet> >::iterator j = battles[b].begin(); j != battles[b].end(); j++)
+ for (map<QString, map<QString, Fleet*> >::const_iterator j = i->second.begin(); j != i->second.end(); ++j)
{
QString g = (*j).first;
QListViewItem* group = new QListViewItem(battle, g);
+ int groupShips = 0;
+ unsigned groupScore = 0;
+ group->setOpen(m_TreeExpanded[b][g]);
+
+ for (map<QString, Fleet*>::const_iterator k = j->second.begin(); k != j->second.end(); ++k)
+ {
+ int ships = k->second->numberOfShips();
+ unsigned score = k->second->score();
+ groupShips += ships;
+ groupScore += score;
+ //if(k->first == tr("Home Planet"))
+ (void) new QListViewItem(group, (*k).first, QString("%1").arg(ships), QString("%1").arg(k->second->ETA()), QString("%1").arg(score));
+ /*else
+ (void) new QCheckListItem(group, (*k).first, QString("%1").arg(ships), QString("%1").arg(k->second->ETA()), QString("%1").arg(score), QCheckListItem::CheckBox);*/
- for (map<QString, Fleet>::iterator k = battles[b][g].begin(); k != battles[b][g].end(); k++)
- {
- (void) new QListViewItem(group, (*k).first);
}
+ group->setText(1, QString("%1").arg(groupShips));
+ group->setText(3, QString("%1").arg(groupScore));
}
}
+ m_InfoView->setBattles(battlenames);
+ updateInfoView();
+ updateFleetView();
}
//////////////////////////////////////////////////////////////////////////////
//
void BSView::slotFleetSelection(QListViewItem *lvi)
{
- //cout << lvi->parent()->text(2).toLocal8bit() << endl;
-// for (int i = 0; i < 5; i++)
-// cout << lvi->text(i).local8Bit() << endl;
-
if (lvi->parent() == '\0')
{
}
else if (lvi->parent()->parent() == '\0')
{
- m_FleetView->slotHomePlanet(false);
if (lvi->text(0) == tr("Friendly"))
{
- m_FleetView->slotAttacker(false);
+ // m_FleetView->slotAttacker(false);
}
else
{
- m_FleetView->slotAttacker(true);
+ // m_FleetView->slotAttacker(true);
}
- m_FleetViews->raiseWidget(1);
+ m_FleetViews->raiseWidget(2);
}
else
{
- if (lvi->parent()->text(0) == tr("Friendly"))
+ m_sFleet = lvi->text(0);
+ m_sGroup = lvi->parent()->text(0);
+ m_sBattle = lvi->parent()->parent()->text(0);
+
+ updateInfoView();
+ updateFleetView();
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotItemExpanded(QListViewItem *lvi)
+{
+ if (lvi->parent() == '\0')
+ {
+ m_TreeExpanded[lvi->text(0)]["--"] = true;
+ }
+ else if (lvi->parent()->parent() == '\0')
+ {
+ m_TreeExpanded[lvi->parent()->text(0)][lvi->text(0)] = true;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotItemCollapsed(QListViewItem *lvi)
+{
+ if (lvi->parent() == '\0')
+ {
+ m_TreeExpanded[lvi->text(0)]["--"] = false;
+ }
+ else if (lvi->parent()->parent() == '\0')
+ {
+ m_TreeExpanded[lvi->parent()->text(0)][lvi->text(0)] = false;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotFleetChanged(const Fleet* fleet)
+{
+ m_doc->changeFleet(m_sBattle, m_sGroup, m_sFleet, fleet);
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotInfoApply()
+{
+ QString battle = m_InfoView->battle();
+ QString group = m_InfoView->group();
+ QString fleet = m_InfoView->fleetName();
+
+
+
+ const Fleet* old = m_doc->specificFleet(m_sBattle, m_sGroup, m_sFleet);
+
+ const Planet* oldpl = dynamic_cast<const Planet*>(old);
+
+ Fleet* fl;
+ if(oldpl)
+ fl = new Planet(*oldpl);
+ else
+ fl = new Fleet(*old);
+
+
+
+ m_bMoreDocChanges = true;
+ m_doc->removeFleet(m_sBattle, m_sGroup, m_sFleet);
+ m_bMoreDocChanges = false;
+
+ m_sBattle = battle;
+ m_sGroup = group;
+ m_sFleet = fleet;
+
+
+ fl->setETA(m_InfoView->eta());
+ fl->setName(m_sFleet.latin1());
+ fl->setRace(m_InfoView->race().latin1());
+
+ m_doc->newFleet(m_sBattle, m_sGroup, m_sFleet, fl);
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotInfoCancel()
+{
+ updateInfoView();
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotInfoNew()
+{
+
+ QString battle = m_InfoView->battle();
+ QString group = m_InfoView->group();
+ QString fleet = m_InfoView->fleetName();
+
+ const Fleet* fl1 = m_doc->specificFleet(battle, group, fleet);
+ if (fl1)
+ {
+ //fleet does already exist, do not overwrite.
+ //Need something else here....
+ return;
+ }
+
+
+
+ Fleet* fl = new Fleet();
+
+ m_sBattle = battle;
+ m_sGroup = group;
+ m_sFleet = fleet;
+
+ fl->setETA(m_InfoView->eta());
+ fl->setName(m_sFleet.latin1());
+ fl->setRace(m_InfoView->race().latin1());
+
+ m_doc->newFleet(m_sBattle, m_sGroup, m_sFleet, fl);
+
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotInfoRemove()
+{
+ m_doc->removeFleet(m_sBattle, m_sGroup, m_sFleet);
+ m_sFleet = "";
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::updateInfoView()
+{
+ const Fleet* fl = m_doc->specificFleet(m_sBattle, m_sGroup, m_sFleet);
+
+ if(!fl)
+ {
+ m_InfoView->setFleetName("");
+ m_InfoView->setEta(0);
+ m_InfoView->enableNameChange(true);
+ m_InfoView->enableRemove(false);
+ return;
+ }
+ m_InfoView->setGroup(m_sGroup);
+ m_InfoView->setBattle(m_sBattle);
+
+/* NO LONGER NEEDED SINCE IT'S INTEGRATED IN THE InfoView CLASS
+ * if(m_sFleet == tr("Home Planet") && m_sGroup == tr("Friendly"))
+ {
+ //m_InfoView->enableNameChange(false);
+ //m_InfoView->enableRemove(false);
+ }
+ else
+ {
+ m_InfoView->enableNameChange(true);
+ m_InfoView->enableRemove(true);
+ }
+*/
+
+ m_InfoView->setRace(fl->race().c_str());
+ m_InfoView->setFleetName(m_sFleet);
+ m_InfoView->setEta(fl->ETA());
+ m_InfoView->setGroup(m_sGroup);
+ m_InfoView->setBattle(m_sBattle);
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::updateFleetView()
+{
+ bool friendly = false;
+ bool home = false;
+
+ const Fleet* fl = m_doc->specificFleet(m_sBattle, m_sGroup, m_sFleet);
+
+ if (!fl)
+ {
+ m_FleetViews->raiseWidget(2);
+ return;
+ }
+
+ if ( m_sGroup == tr("Friendly"))
+ {
+ friendly = true;
+ if(m_sFleet == tr("Home Planet"))
+ home=true;
+ }
+ if (fl->race() == tr("Generic").latin1())
+ {
+ m_GenericFleetView->viewFleet(fl, friendly);
+ m_FleetViews->raiseWidget(2);
+
+ }
+ else
+ {
+ if (fl->race() == m_FleetView->fleet()->race() &&
+ m_FleetView->isHome() == home)
{
- m_FleetView->slotAttacker(false);
- m_FleetView->slotHomePlanet(false);
- if (lvi->text(0) == tr("Home Planet"))
- {
- m_FleetView->slotHomePlanet(true);
- }
+ m_FleetView->viewFleet(fl, friendly);
}
else
{
- m_FleetView->slotAttacker(true);
- m_FleetView->slotHomePlanet(false);
+ m_FleetViews->removeWidget(m_FleetView);
+ delete m_FleetView;
+ m_FleetView = new FleetView(fl, friendly);
+ connect(m_FleetView, SIGNAL(fleetChanged(const Fleet*)), SLOT(slotFleetChanged(const Fleet*)));
+ m_FleetView->slotViewTickRange(m_iMinTick, m_iMaxTick);
+ m_FleetView->slotSetResultMode(m_iResultMode);
+ m_FleetViews->addWidget(m_FleetView, 1);
}
+ m_FleetViews->raiseWidget(2);
m_FleetViews->raiseWidget(1);
-
}
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotTickChanged(int min, int max)
+{
+ m_FleetView->slotViewTickRange(min, max);
+ m_GenericFleetView->slotViewTickRange(min, max);
+
+ m_iMinTick = min;
+ m_iMaxTick = max;
+}
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotResultModeChanged( int i)
+{
+ m_FleetView->slotSetResultMode(i);
+ m_GenericFleetView->slotSetResultMode(i);
+ m_iResultMode = i;
}