]> ruin.nu Git - hbs.git/blobdiff - bs/bsview.cpp
started to work on the battle report.. almost there =)
[hbs.git] / bs / bsview.cpp
index f5e74bc82324a8f93440976d6b9bddad7cc388b9..c6fcc46efe831d4f2975572ff26626a0589be94c 100644 (file)
@@ -28,23 +28,41 @@ using namespace std;
 //QT includes
 #include <qlistview.h>
 #include <qwidgetstack.h>
+#include <qtabwidget.h>
+#include <qtextedit.h>
 
 #include "battlesum.h"
 #include "scanview.h"
 #include "ui/infoview.h"
-#include "tickview.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*/
+
+       m_iMaxTick = 0;
+       m_iMinTick = 0;
+       m_iResultMode = 0;
+       
+       m_bMoreDocChanges = false;
        connect(doc, SIGNAL(documentChanged()), this, SLOT(slotDocumentChanged()));
        
        m_doc = doc;
        
        m_LeftSplit = new QSplitter(QSplitter::Vertical, this);
-       m_RightSplit = new QSplitter(QSplitter::Vertical, this);
+
+       m_Pages = new QTabWidget(this);
+
+       m_RightSplit = new QSplitter(QSplitter::Vertical);
+       m_Pages->addTab(m_RightSplit, tr("Units"));
+       
+       m_Report = new QTextEdit();
+       m_Report->setReadOnly(true);
+       m_Pages->addTab(m_Report, tr("Report"));
+
 
        //setting up the listview
        m_NumberView = new QListView(m_LeftSplit);
@@ -76,7 +94,7 @@ BSView::BSView(QWidget *parent, BSDoc *doc) : QSplitter(parent)
        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);
        
@@ -93,10 +111,14 @@ BSView::BSView(QWidget *parent, BSDoc *doc) : QSplitter(parent)
        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_FleetView, SIGNAL(fleetChanged(const Fleet*)), SLOT(slotFleetChanged(const Fleet*)));
        connect(m_GenericFleetView, SIGNAL(fleetChanged(const Fleet*)), SLOT(slotFleetChanged(const Fleet*)));
+       connect(m_ScanView, SIGNAL(scanUsed(int,QString, int)), SLOT(slotUseScan(int, QString, int)));
 }
 
 BSView::~BSView()
@@ -120,6 +142,9 @@ void BSView::addBattle(QString name)
  */
 void BSView::slotDocumentChanged()
 {
+       if (m_bMoreDocChanges)
+               return;
+
        m_NumberView->clear();
        
        const BattleList& battles = m_doc->battles();   
@@ -176,11 +201,11 @@ void BSView::slotFleetSelection(QListViewItem *lvi)
        {
                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(2);
                
@@ -189,7 +214,13 @@ void BSView::slotFleetSelection(QListViewItem *lvi)
        {
                m_sFleet = lvi->text(0);
                m_sGroup = lvi->parent()->text(0);
-               m_sBattle = lvi->parent()->parent()->text(0);
+               QString temp = lvi->parent()->parent()->text(0);
+
+               if (temp != m_sBattle)
+               {
+                       m_sBattle = temp;
+                       slotGenerateReport();
+               }
 
                updateInfoView();
                updateFleetView();
@@ -235,6 +266,39 @@ 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());
+       fl->setStays(m_InfoView->stays());
+       
+       m_doc->newFleet(m_sBattle, m_sGroup, m_sFleet, fl);
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -248,15 +312,31 @@ 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());
        fl->setRace(m_InfoView->race().latin1());
+       fl->setStays(m_InfoView->stays());
 
        m_doc->newFleet(m_sBattle, m_sGroup, m_sFleet, fl);
 
@@ -266,6 +346,8 @@ void BSView::slotInfoNew()
 //
 void BSView::slotInfoRemove()
 {
+       m_doc->removeFleet(m_sBattle, m_sGroup, m_sFleet);
+       m_sFleet = "";
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -276,32 +358,34 @@ 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);
        m_InfoView->setEta(fl->ETA());
        m_InfoView->setGroup(m_sGroup);
        m_InfoView->setBattle(m_sBattle);
+       m_InfoView->setStays(fl->stays());
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -344,8 +428,92 @@ void BSView::updateFleetView()
                        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;
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotUseScan(int action, QString text, int fleets)
+{
+       cerr << "Action: " << action << endl;
+       cerr << "Text: " << text.latin1() << endl;
+       cerr << "Fleets: " << fleets << endl;
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSView::slotGenerateReport()
+{
+       const Fleet *fl = m_doc->specificFleet(m_sBattle, "Friendly", "Home Planet");
+       
+       const Planet* pl = dynamic_cast<const Planet*>(fl);
+       if (pl)
+       {
+               ReportList report = pl->report();
+               QString t;
+               
+               t.append("<qt>\n");
+               
+
+               for (ReportList::iterator i = report.begin(); i != report.end(); ++i)
+               {
+                       t.append(QString("Tick number: %0\n").arg(i->first));
+                       t.append("<ul>\n");
+                       for(map<int, map<string, map<string, map<string, int> > > >::iterator j = i->second.begin(); j != i->second.end(); ++j)
+                       {
+                               t.append(QString("<li>Now handling initiative: %0\n").arg(j->first));
+                               t.append("<ul type=circle>\n");
+                               for(map<string, map<string, map<string, int> > >::iterator k = j->second.begin(); k != j->second.end(); ++k)
+                               {
+                                       for(map<string, map<string, int> >::iterator l = k->second.begin(); l != k->second.end(); ++l)
+                                       {
+                                               t.append(QString("<li>%0 %1 %2 killing/blocking at: \n").arg(l->second["000"]).arg(k->first.c_str()).arg(l->first.c_str()));
+                                               t.append("<ul type=square>\n");
+
+                                               t.append("</ul>\n");
+                                               t.append("</li>\n");
+                                       }
+                               }
+                               t.append("</ul>\n");
+                               t.append("</li>\n");
+                       }
+                       t.append("</ul>\n");
+
+                       t.append("<hr>\n");
+               }
+               t.append("</qt>\n");
+               //cerr << t.latin1();
+               m_Report->clear();
+               m_Report->setText(t);
+
+       }
+       //m_Report->append("<b>test\n<b>");
+}