]> ruin.nu Git - hbs.git/blobdiff - bs/bsview.cpp
adding, removing and chaning fleets now works.
[hbs.git] / bs / bsview.cpp
index f5e74bc82324a8f93440976d6b9bddad7cc388b9..c050952c291c942b45b733f80af97bb1ab70f297 100644 (file)
@@ -35,10 +35,13 @@ using namespace std;
 #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*/
+       
+       m_bMoreDocChanges = false;
        connect(doc, SIGNAL(documentChanged()), this, SLOT(slotDocumentChanged()));
        
        m_doc = doc;
@@ -120,6 +123,9 @@ void BSView::addBattle(QString name)
  */
 void BSView::slotDocumentChanged()
 {
+       if (m_bMoreDocChanges)
+               return;
+
        m_NumberView->clear();
        
        const BattleList& battles = m_doc->battles();   
@@ -235,6 +241,38 @@ void BSView::slotFleetChanged(const Fleet* 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);
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -248,11 +286,26 @@ void BSView::slotInfoCancel()
 //
 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 = m_InfoView->battle();
-       m_sGroup = m_InfoView->group();
-       m_sFleet = m_InfoView->fleetName();
+       m_sBattle = battle;
+       m_sGroup = group;
+       m_sFleet = fleet;
 
        fl->setETA(m_InfoView->eta());
        fl->setName(m_sFleet.latin1());
@@ -266,6 +319,8 @@ void BSView::slotInfoNew()
 //
 void BSView::slotInfoRemove()
 {
+       m_doc->removeFleet(m_sBattle, m_sGroup, m_sFleet);
+       m_sFleet = "";
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -276,26 +331,27 @@ void BSView::updateInfoView()
 
        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;
        }
+       m_InfoView->setGroup(m_sGroup);
+       m_InfoView->setBattle(m_sBattle);
 
-       if(m_sFleet == tr("Home Planet"))
+/*     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);
+               //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);