[Avida-SVN] r2761 - branches/vo/source/targets/viewer-fltk

michaelvo at myxo.css.msu.edu michaelvo at myxo.css.msu.edu
Wed Aug 27 00:28:06 PDT 2008


Author: michaelvo
Date: 2008-08-27 03:28:06 -0400 (Wed, 27 Aug 2008)
New Revision: 2761

Modified:
   branches/vo/source/targets/viewer-fltk/cDriver_FLTKViewer.cc
   branches/vo/source/targets/viewer-fltk/cDriver_FLTKViewer.h
Log:


Modified: branches/vo/source/targets/viewer-fltk/cDriver_FLTKViewer.cc
===================================================================
--- branches/vo/source/targets/viewer-fltk/cDriver_FLTKViewer.cc	2008-08-26 17:56:50 UTC (rev 2760)
+++ branches/vo/source/targets/viewer-fltk/cDriver_FLTKViewer.cc	2008-08-27 07:28:06 UTC (rev 2761)
@@ -44,6 +44,7 @@
 #include "cFLTKBox.h"
 #include "tFLTKButton.h"
 #include "avidalogo.xpm"
+#include "cFLTKStats.h"
 #include <cstdlib>
 
 #include <FL/Fl.H>
@@ -71,13 +72,14 @@
 cDriver_FLTKViewer::cDriver_FLTKViewer(cWorld* world)
   : m_world(world)
   , m_info(world, 18)
-	, m_text(world)
+  , m_text(world)
   , m_done(false)
   , m_main_window(FLTK_MAINWIN_WIDTH, FLTK_MAINWIN_HEIGHT, "Avida")
 
 {
   // Setup the initial view mode (loaded from avida.cfg)
   m_info.SetViewMode(world->GetConfig().VIEW_MODE.Get());
+
   
   Fl_Tabs* tabs = new Fl_Tabs(10, 10, FLTK_MAINWIN_WIDTH-20, FLTK_MENU2_Y-15);
   
@@ -97,85 +99,23 @@
   a->end();
   
   Fl_Group* b = new Fl_Group(10, 35, FLTK_MAINWIN_WIDTH-20, FLTK_MENU2_Y-15, "&Zoom");
-	{
-  m_org_inst_buffer = new Fl_Text_Buffer();
-  m_org_inst_display = new Fl_Text_Display(FLTK_SPACING+20, FLTK_SPACING+50, FLTK_MAINWIN_WIDTH-(FLTK_GRID_SIDE+FLTK_SPACING*2+20), FLTK_GRID_SIDE);
-  m_org_inst_display->buffer(m_org_inst_buffer);
-	
-	m_cell_x_input = new Fl_Input(500, 50+FLTK_SPACING, 100, 30, "X");
-	m_cell_x_input->value("0");
-	m_cell_y_input = new Fl_Input(620, 50+FLTK_SPACING, 100, 30, "Y");
-	m_cell_y_input->value("0");
+  {
+		m_zoom_screen=new cFLTKZoom(world);
 	}
   
   b->end();
 
   Fl_Group* c = new Fl_Group(10, 35, FLTK_MAINWIN_WIDTH-20, FLTK_MENU2_Y-15, "&Stats");
-
-  //c->color(fl_color());
-  Fl_Box* framePopStats = new Fl_Box(FL_BORDER_FRAME, 20, 20, 300, 115, "");
-  {
-		//framePopStats->align(FL_ALIGN_TOP|FL_ALIGN_INSIDE|FL_ALIGN_LEFT);
-		PutInside(c, framePopStats);
-		framePopStats->color(FL_BLACK);
-  
-		Fl_Multiline_Output* popStatsLabel = new Fl_Multiline_Output(10, 10, 200, 100, "");
-		m_pop_stats_label = new Fl_Multiline_Output(150, 10, 100, 100, "");
-		//popStatsLabel->set_boxtype(FL_NO_BOX, 0, 0, 0, 0);
-  
-		popStatsLabel->labelfont(FL_COURIER);
-		popStatsLabel->value("Total Births:\nBreedTrue:\nParasites:\nEnergy:\nMax Fitness:\nMax Merit:");
-  
-		popStatsLabel->box(FL_NO_BOX);
-		m_pop_stats_label->box(FL_NO_BOX);
-		popStatsLabel->labelfont(FL_COURIER);
-  
-		PutInside(framePopStats, popStatsLabel);
-		PutInside(framePopStats, m_pop_stats_label);
-  }
-	
-  Fl_Box* frameDomAveStats = new Fl_Box(FL_BORDER_FRAME, 20, 145, 400, 300, "");
-  {
-		PutInside(c, frameDomAveStats);
-		frameDomAveStats->color(FL_BLACK);
-		Fl_Multiline_Output* domAveStatsLabel = new Fl_Multiline_Output(10, 25, 130, 180, "");
-		domAveStatsLabel->value("Fitness:\nMerit:\nGestation:\nLength:\nCopy Length:\nExec Length:\nAbundance:\nBirths:\nBirthrate:\nTree Depth:\nGen. Ave:");
-		m_pop_dominant_label = new Fl_Multiline_Output(150, 25, 100, 180, "");
-		m_pop_average_label = new Fl_Multiline_Output(270, 25, 100, 180, "");
-		domAveStatsLabel->box(FL_NO_BOX);
-		m_pop_average_label->box(FL_NO_BOX);
-		m_pop_dominant_label->box(FL_NO_BOX);
-		PutInside(frameDomAveStats, domAveStatsLabel);
-		PutInside(frameDomAveStats, m_pop_average_label);
-		PutInside(frameDomAveStats, m_pop_dominant_label);
-  }
-	
-	Fl_Box* frame_tasks = new Fl_Box(FL_BORDER_FRAME, 430, 145, 200, 300, "");
 	{
-		PutInside(c, frame_tasks);
-		frame_tasks->color(FL_BLACK);
-		Fl_Multiline_Output* task_label = new Fl_Multiline_Output(10, 25, 130, 180, "");
-		cString task_string="";
-		for(int n=0; n<m_world->GetEnvironment().GetNumTasks(); n++){
-			task_string+=m_world->GetEnvironment().GetTask(n).GetName();
-			task_string+="\n";
-		}
-		task_label->value(task_string);
-		m_task_label = new Fl_Multiline_Output(150, 25, 40, 180, ""); 
-		PutInside(frame_tasks, task_label);
-		PutInside(frame_tasks, m_task_label);
-		task_label->box(FL_NO_BOX);
-		m_task_label->box(FL_NO_BOX);
+    m_stats_screen= new cFLTKStats(m_world);
 	}
-  
-  c->end();
-  
+	c->end();
   tabs->end();
 
   m_update_box = new cFLTKBox(m_main_window, 100, FLTK_MENU2_Y, 200, FLTK_MENUBAR_HEIGHT, "Update: 0");
   m_pause_button = new tFLTKButton<cDriver_FLTKViewer>(m_main_window,     400, FLTK_MENU2_Y, 30, 30, "@||");
   m_quit_button = new tFLTKButton<cDriver_FLTKViewer>(m_main_window,      440, FLTK_MENU2_Y, 30, 30, "@square");
-  m_org_inst_buffer->text("N/A");
+  //m_org_inst_buffer->text("N/A");
   cDriverManager::Register(static_cast<cAvidaDriver*>(this));
   world->SetDriver(this);
 	
@@ -350,109 +290,6 @@
 }
 
 
-bool cDriver_FLTKViewer::ProcessKeypress(int keypress)
-{
-  bool unknown = false;
-
-  switch (keypress) {
-//   case 'a':
-//   case 'A':
-//     ChangeCurScreen(analyze_screen);
-//     break;
-//   case 'b':
-//   case 'B':
-//    ChangeCurScreen(NULL);
-//     break;
-//   case 'C':
-//   case 'c':
-//     NavigateMapWindow();
-//     // Now we need to restore the proper window mode (already cleared)
-//     ChangeCurScreen(cur_screen);
-//     break;
-//   case 'e':
-//   case 'E':
-//     ChangeCurScreen(environment_screen);
-//     break;
-//   case 'h':
-//   case 'H':
-//     ChangeCurScreen(hist_screen);
-//     break;
-//   case 'm':
-//   case 'M':
-//     ChangeCurScreen(map_screen);
-//     break;
-//   case 'n':
-//   case 'N':
-//     if (info.GetPauseLevel() == PAUSE_ON) {
-//       info.SetPauseLevel(PAUSE_ADVANCE_UPDATE);
-//       // parasite_zoom = false; // if executing, show code that is running
-//       info.GetActiveCell()->GetOrganism()->GetPhenotype().SetFault("");
-//       nodelay(stdscr, true); // Don't delay for input; get to processing.
-//     }
-//     if (cur_screen) cur_screen->AdvanceUpdate();
-//     break;
-//   case 'o':
-//   case 'O':
-//     ChangeCurScreen(options_screen);
-//     break;
-  case 'p':
-  case 'P':
-    if (m_info.TogglePause() == true) {
-//      nodelay(stdscr, false); // Wait for input if pause is on...
-    } else {
-//       nodelay(stdscr, true); // Don't delay if pause is off.
-    }
-
-    // Redraw the screen to account for the toggled pause.
-//    if (cur_screen) cur_screen->Draw();
-
-    break;
-  case 'q':
-    if (!Confirm("Are you sure you want to quit?")) break;
-  case 'Q':      // Note: Capital 'Q' quits w/o confirming.
-    // clear the windows before we go.  Do bar window last to end at top.
-    ExitFLTKViewer(0);
-    break;
-//   case 's':
-//   case 'S':
-//     ChangeCurScreen(stats_screen);
-//     break;
-//   case 'W':
-//   case 'w':
-//     CloneSoup();
-//     break;
-//   case 'X':
-//   case 'x':
-//     ExtractCreature();
-//     break;
-//   case 'z':
-//   case 'Z':
-//     ChangeCurScreen(zoom_screen);
-//     break;
-  case 3: // CTRL-C...
-    exit(0);
-    break;
-//   case 12: // CTRL-L...
-//     wclear(stdscr);
-//     wrefresh(stdscr);
-//     m_bar_window.Redraw();
-//     m_main_window.Redraw();
-//     break;
-  case 26: // CTRL-Z
-    kill(getpid(), SIGTSTP);
-    break;
-  case 0:
-    break;
-  default:
-    clog << "Unknown Key!" << endl;
-    unknown = true;
-    break;
-  }
-
-  return !unknown;
-}
-
-
 void cDriver_FLTKViewer::RaiseException(const cString& in_string)
 {
   NotifyWarning(in_string);
@@ -474,44 +311,16 @@
 void cDriver_FLTKViewer::DoUpdate()
 {
   bool error = Fl::check();
-
+  cString curr_update;
+  curr_update.Set("Update: %d", m_world->GetStats().GetUpdate());
   m_info.SetupUpdate();
-
-  cString update_string;
-  update_string.Set("Update: %d", m_world->GetStats().GetUpdate());
-  m_update_box->SetName(update_string);
-  m_update_box->Refresh();
+  m_update_box->SetLabel(curr_update);
   
-  cString stats_string;
-  stats_string.Set("%d\n%d\n%d\n%f\n%f\n%f", m_world->GetStats().GetNumBirths(), m_world->GetStats().GetBreedTrue(),
-		m_world->GetStats().GetNumParasites(), m_world->GetStats().GetEnergy(), m_world->GetStats().GetMaxFitness(), m_world->GetStats().GetMaxMerit());
-  m_pop_stats_label->value(stats_string);
-	
-  stats_string.Set("%f \n%f \n%f \n%d \n%f \n%f \n%d \n%d \n%f \n%d", m_world->GetStats().GetDomFitness(), m_world->GetStats().GetDomMerit(),
-		m_world->GetStats().GetDomGestation(), m_world->GetStats().GetDomSize(), m_world->GetStats().GetDomCopySize(), m_world->GetStats().GetDomExeSize(),
-		m_world->GetStats().GetDomAbundance(), m_world->GetStats().GetDomBirths(), m_world->GetStats().GetDomReproRate(), m_world->GetStats().GetDomGeneDepth());
-  m_pop_dominant_label->value(stats_string);
-	
-  stats_string.Set("%f \n%f \n%f \n%f \n%f \n%f \n%f \n%f \n%f \n%f \n%f", m_world->GetStats().GetAveFitness(), m_world->GetStats().GetAveMerit(),
-		m_world->GetStats().GetAveGestation(), m_world->GetStats().GetAveSize(), m_world->GetStats().GetAveCopySize(), m_world->GetStats().GetAveExeSize(),
-		double(m_world->GetStats().GetNumCreatures())/m_world->GetStats().GetNumGenotypes(),
-		0,
-		m_world->GetStats().GetAveReproRate(), 0,0);
-		//m_world->GetStats().SumGenotypeDepth().Average(), 
-		//m_world->GetStats().SumGeneration().Average());
-  m_pop_average_label->value(stats_string);
-	
-	cString format_string="";
-	for(int n=0; n<m_world->GetEnvironment().GetNumTasks(); n++){
-		stats_string.Set("%d\n", m_world->GetStats().GetTaskLastCount(n));
-		format_string+=stats_string;
-	}
-	m_task_label->value(format_string);
-		
   m_grid_view->Redraw();
   m_legend->Redraw();
   
-  PrototypeStepThrough();
+	m_zoom_screen->Redraw();
+	m_stats_screen->Redraw();
   const int pause_level = m_info.GetPauseLevel();
 
   // If we are stepping in some way, we've come to a stop, so revert to a normal pause.
@@ -606,40 +415,3 @@
 
   exit(exit_code);
 }
-
-void cDriver_FLTKViewer::PrototypeStepThrough()
-{
-	int org_id=0;
-	cString boxContents="";
-	cString number_converter;
-	int x, y;
-	
-	number_converter=m_cell_x_input->value();
-	x=number_converter.AsInt();
-	
-	number_converter=m_cell_y_input->value();
-	y=number_converter.AsInt();	
-
-	tArray< cString > inst = m_text.GetOrganismInstructions(x, y);
-  if(inst.GetSize()>0)
-  {
-
-    for(int n=0; n<inst.GetSize(); n++)
-    {
-			cString box_line;
-			box_line.Set("%d: ", n);
-			boxContents+=box_line;
-			boxContents+=inst[n];
-			boxContents+="\n";
-		}
-	}
-	else
-	{
-		boxContents="N/A";
-	}
-	m_org_inst_buffer->text(boxContents);
-	m_org_inst_display->redraw();
-
-	
-}
-

Modified: branches/vo/source/targets/viewer-fltk/cDriver_FLTKViewer.h
===================================================================
--- branches/vo/source/targets/viewer-fltk/cDriver_FLTKViewer.h	2008-08-26 17:56:50 UTC (rev 2760)
+++ branches/vo/source/targets/viewer-fltk/cDriver_FLTKViewer.h	2008-08-27 07:28:06 UTC (rev 2761)
@@ -26,7 +26,7 @@
 #define cDriver_FLTKViewer_h
 
 #ifndef cAvidaDriver_h
-#include "cAvidaDriver.h"
+#include "cAvidaDriver.h"Ä
 #endif
 
 #ifndef cCoreView_Info_h
@@ -47,6 +47,7 @@
 #include <FL/Fl_Text_Display.H>
 #include <FL/Fl_Multiline_Output.H>
 #include "cFLTKZoom.h"
+#include "cFLTKStats.h"
 #include <sstream>
 #include <iostream>
 #include <fstream>
@@ -75,21 +76,20 @@
 
   cFLTKGridView* m_grid_view;
   cFLTKLegend* m_legend;
-  cFLTKZoom* z;
+  cFLTKZoom* m_zoom_screen;
+  cFLTKStats* m_stats_screen;
   tFLTKMenu<cDriver_FLTKViewer>* m_grid_view_menu;
   tFLTKMenu<cDriver_FLTKViewer>* m_grid_tags_menu;
   tFLTKMenu<cDriver_FLTKViewer>* m_grid_symbol_menu;
   tFLTKButton<cDriver_FLTKViewer>* m_pause_button;
   tFLTKButton<cDriver_FLTKViewer>* m_quit_button;
   
-  Fl_Text_Display* m_org_inst_display;
-  Fl_Text_Buffer* m_org_inst_buffer;
+
   Fl_Multiline_Output* m_pop_stats_label;
   Fl_Multiline_Output* m_pop_dominant_label;
   Fl_Multiline_Output* m_pop_average_label;
   Fl_Multiline_Output* m_task_label;
-  Fl_Input* m_cell_x_input;
-  Fl_Input* m_cell_y_input;
+
 public:
   cDriver_FLTKViewer(cWorld* world);
   ~cDriver_FLTKViewer();
@@ -103,7 +103,7 @@
   // IO
   void Flush();
   int GetKeypress() { return 0; } // @CAO FIX!
-  bool ProcessKeypress(int keypress);
+  //bool ProcessKeypress(int keypress);
 
   void RaiseException(const cString& in_string);
   void RaiseFatalException(int exit_code, const cString& in_string);
@@ -131,7 +131,6 @@
 
   // Menu Callbacks
   void MenuCallback_View(int new_mode);
-  void PrototypeStepThrough();
 
 };
 




More information about the Avida-cvs mailing list