1 // $Id: display.h,v 1.23 2012/02/29 00:29:58 ewalkup Exp $
2 
3 /*
4   Copyright 2002  Peter Beerli, Mary Kuhner, Jon Yamato and Joseph Felsenstein
5 
6   This software is distributed free of charge for non-commercial use
7   and is copyrighted.  Of course, we do not guarantee that the software
8   works, and are not responsible for any damage you may cause or have.
9 */
10 
11 #ifndef DISPLAY_H
12 #define DISPLAY_H
13 
14 #include <string>
15 #include <vector>
16 
17 #include "menudefs.h" // for menu_return_type
18 #include "vectorx.h"
19 
20 class Dialog;
21 class NewMenu;
22 class MenuDisplayQuantaVec;
23 class MenuDisplayGroup;
24 class ToggleMenuItem2dGroup;
25 class MenuDisplayLine;
26 class MenuDisplayTable;
27 
28 class Display
29 {
30   public:
Display()31     Display() {};
~Display()32     virtual ~Display() {};
33     virtual menu_return_type DisplayNewMenu(NewMenu&) = 0;
34     virtual menu_return_type DisplayRaw(StringVec1d) = 0;
35     //
36     virtual void ShowMenuDisplayGroup(MenuDisplayGroup&) = 0;
37     virtual void ShowMenuDisplay2dGroup(ToggleMenuItem2dGroup&) = 0;
38     virtual void ShowMenuDisplayLine(MenuDisplayLine&) = 0;
39     virtual void ShowMenuDisplayTable(MenuDisplayTable&) = 0;
40     //
41     virtual void DisplayDialogOutput(std::string) = 0;
42     virtual std::string GetUserInput() = 0;
43 };
44 
45 class ScrollingDisplay : public Display
46 {
47   protected:
48     void ShowMenuDisplayQuantaVec(MenuDisplayQuantaVec);
49     void Prompt();
50     void Title(const std::string & title, const std::string & info);
51     void DisplayOneLine(std::string);
52     void ShowOneMenuLine(std::string,std::string,std::string);
53     void ShowExtraMenuLines(std::vector<string> storedMenuText, std::vector<string> generatedMenuText);
54     std::vector<std::string> BreakAtCarriageReturns(std::string);
55     std::vector<std::string> MakeDisplayableUnits(std::string, long int width);
56     void ChideOnInconsistencies(StringVec1d inconsistencies);
57   public:
58     ScrollingDisplay();
59     ~ScrollingDisplay();
60     //
61     virtual menu_return_type DisplayNewMenu(NewMenu&);
62     virtual menu_return_type DisplayRaw(StringVec1d);
63     //
64     virtual void ShowMenuDisplayGroup(MenuDisplayGroup&);
65     virtual void ShowMenuDisplay2dGroup(ToggleMenuItem2dGroup&);
66     virtual void ShowMenuDisplayLine(MenuDisplayLine&);
67     virtual void ShowMenuDisplayTable(MenuDisplayTable&);
68     //
69     virtual void DisplayDialogOutput(std::string);
70     virtual std::string GetUserInput();
71     //
72     void Warn(std::vector<std::string> warnings);
73 };
74 
75 class NoDisplay : public Display
76 {
77   public:
78     NoDisplay() ;
79     ~NoDisplay();
80     virtual menu_return_type DisplayNewMenu(NewMenu&);
81     virtual menu_return_type DisplayRaw(StringVec1d);
82     //
83     virtual void ShowMenuDisplayGroup(MenuDisplayGroup&);
84     virtual void ShowMenuDisplay2dGroup(ToggleMenuItem2dGroup&);
85     virtual void ShowMenuDisplayLine(MenuDisplayLine&);
86     virtual void ShowMenuDisplayTable(MenuDisplayTable&);
87     //
88     virtual void DisplayDialogOutput(std::string);
89     virtual std::string GetUserInput();
90 };
91 
92 #endif  // DISPLAY_H
93 
94 //____________________________________________________________________________________
95