]> ruin.nu Git - hbs.git/blobdiff - bs/bsview.cpp
added comboboxes for the battle and group in the info view
[hbs.git] / bs / bsview.cpp
index 1906dda16732358ee4452f3be5b00c6e0b99469f..6f0bf311fd01af1d5b219282107a996d38f1faf8 100644 (file)
@@ -33,13 +33,13 @@ using namespace std;
 #include "scanview.h"
 #include "ui/infoview.h"
 #include "tickview.h"
-#include "ui/fleetviewbase.h"
+#include "fleetview.h"
 #include "fleet.h"
 
 BSView::BSView(QWidget *parent, BSDoc *doc) : QSplitter(parent)
 {
   /** connect doc with the view*/
-  connect(doc, SIGNAL(documentChanged()), this, SLOT(slotDocumentChanged()));
+       connect(doc, SIGNAL(documentChanged()), this, SLOT(slotDocumentChanged()));
        
        m_doc = doc;
        
@@ -52,23 +52,46 @@ BSView::BSView(QWidget *parent, BSDoc *doc) : QSplitter(parent)
        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);
+
+       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_FleetViews = new QWidgetStack(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_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()
@@ -94,24 +117,43 @@ void BSView::slotDocumentChanged()
 {
        m_NumberView->clear();
        
-       map<QString, map<QString, map<QString, Fleet> > >& battles = m_doc->Battles();  
+       const BattleList& battles = m_doc->battles();   
+
+       vector<QString> battlenames;
 
-       for (map<QString, map<QString, map<QString, Fleet> > >::iterator i = battles.begin(); i != battles.end(); i++)
+       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);
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -129,37 +171,99 @@ void BSView::slotFleetSelection(QListViewItem *lvi)
        }
        else if (lvi->parent()->parent() == '\0')
        {
-                       m_FleetView->slotHomePlanet(false);
+//                     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"))
+               bool friendly = false;
+               bool home       = false;
+               m_sFleet = lvi->text(0);
+               m_sGroup = lvi->parent()->text(0);
+               m_sBattle = lvi->parent()->parent()->text(0);
+
+               if ( m_sGroup == tr("Friendly"))
                {
-                       m_FleetView->slotAttacker(false);
-                       m_FleetView->slotHomePlanet(false);
-                       if (lvi->text(0) == tr("Home Planet"))
-                       {
-                               m_FleetView->slotHomePlanet(true);
-                       }
+                       friendly = true;
+                       if(m_sFleet == tr("Home Planet"))
+                               home=true;
                }
-               else
+
+               const Fleet* fl = m_doc->specificFleet(m_sBattle, m_sGroup, m_sFleet);
+
+               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);
+
+               if (fl->race() == tr("Generic").latin1())
                {
-                       m_FleetView->slotAttacker(true);
-                       m_FleetView->slotHomePlanet(false);
+                       m_GenericFleetView->viewFleet(fl, friendly);
+                       m_FleetViews->raiseWidget(2);
+
+               }
+               else 
+               {
+                       if (fl->race() == m_FleetView->fleet()->race() &&
+                       m_FleetView->isHome() == home)
+                       {
+                               m_FleetView->viewFleet(fl, friendly);
+                       }
+                       else
+                       {
+                               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_FleetViews->addWidget(m_FleetView, 1);
+                       }
+                       m_FleetViews->raiseWidget(1);
                }
-               m_FleetViews->raiseWidget(1);
-                               
        }
+}
 
-       
+//////////////////////////////////////////////////////////////////////////
+//
+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);
+}
+