]> ruin.nu Git - hbs.git/blobdiff - bs/bsview.cpp
added the possibility to add new fleets..
[hbs.git] / bs / bsview.cpp
index 2dfe3f37f45263381c262a25b30c8dfc1f8169ca..f5e74bc82324a8f93440976d6b9bddad7cc388b9 100644 (file)
@@ -62,6 +62,11 @@ BSView::BSView(QWidget *parent, BSDoc *doc) : QSplitter(parent)
        
        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)
@@ -89,7 +94,9 @@ BSView::BSView(QWidget *parent, BSDoc *doc) : QSplitter(parent)
        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()
@@ -117,9 +124,12 @@ void BSView::slotDocumentChanged()
        
        const BattleList& battles = m_doc->battles();   
 
+       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]["--"]);
                        
@@ -138,22 +148,25 @@ void BSView::slotDocumentChanged()
                                unsigned score = k->second->score();
                                groupShips += ships;
                                groupScore += score;
-                               (void) new QListViewItem(group, (*k).first, QString("%1").arg(ships), QString("%1").arg(k->second->ETA()), QString("%1").arg(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);*/
+
                        }
                        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')
        {
@@ -161,7 +174,6 @@ void BSView::slotFleetSelection(QListViewItem *lvi)
        }
        else if (lvi->parent()->parent() == '\0')
        {
-//                     m_FleetView->slotHomePlanet(false);
                if (lvi->text(0) == tr("Friendly"))
                {
 //                     m_FleetView->slotAttacker(false);
@@ -175,42 +187,12 @@ void BSView::slotFleetSelection(QListViewItem *lvi)
        }
        else
        {
-               bool friendly = false;
-               bool home       = false;
-               QString fleet = lvi->text(0);
-               QString group = lvi->parent()->text(0);
-               QString battle = lvi->parent()->parent()->text(0);
-               if ( group == tr("Friendly"))
-               {
-                       friendly = true;
-                       if(fleet == tr("Home Planet"))
-                               home=true;
-               }
-               const Fleet* fl = m_doc->specificFleet(battle, group, fleet);
-               m_InfoView->setRace(fl->race().c_str());
-               m_InfoView->setFleetName(fleet);
-               m_InfoView->setEta(fl->ETA());
-               if (fl->race() == tr("Generic").latin1())
-               {
-                       m_GenericFleetView->viewFleet(fl, friendly);
-                       m_FleetViews->raiseWidget(2);
+               m_sFleet = lvi->text(0);
+               m_sGroup = lvi->parent()->text(0);
+               m_sBattle = lvi->parent()->parent()->text(0);
 
-               }
-               else 
-               {
-                       if (fl->race() == m_FleetView->fleet()->race() &&
-                       m_FleetView->isHome() == home)
-                       {
-                               m_FleetView->viewFleet(fl, friendly);
-                       }
-                       else
-                       {
-                               m_FleetViews->removeWidget(m_FleetView);
-                               m_FleetView = new FleetView(fl, friendly);
-                               m_FleetViews->addWidget(m_FleetView, 1);
-                       }
-                       m_FleetViews->raiseWidget(1);
-               }
+               updateInfoView();
+               updateFleetView();
        }
 }
 
@@ -242,3 +224,128 @@ void BSView::slotItemCollapsed(QListViewItem *lvi)
        }
 }
 
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotFleetChanged(const Fleet* fleet)
+{
+       m_doc->changeFleet(m_sBattle, m_sGroup, m_sFleet, fleet);
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotInfoApply()
+{
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotInfoCancel()
+{
+       updateInfoView();
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotInfoNew()
+{
+       Fleet* fl = new Fleet();
+
+       m_sBattle = m_InfoView->battle();
+       m_sGroup = m_InfoView->group();
+       m_sFleet = m_InfoView->fleetName();
+
+       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()
+{
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::updateInfoView()
+{
+       const Fleet* fl = m_doc->specificFleet(m_sBattle, m_sGroup, m_sFleet);
+
+       if(!fl)
+       {
+               m_InfoView->setRace("");
+               m_InfoView->setFleetName("");
+               m_InfoView->setEta(0);
+               m_InfoView->setGroup("");
+               m_InfoView->setBattle("");              
+               m_InfoView->enableNameChange(true);
+               m_InfoView->enableRemove(false);
+               return;
+       }
+
+       if(m_sFleet == tr("Home Planet"))
+       {
+               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->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);
+       }
+}