1 // $Id: priormenus.cpp,v 1.11 2011/10/31 22:04:51 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 #include <cassert>
12 #include <string>
13 
14 #include "local_build.h"
15 
16 #include "lamarc_strings.h"
17 #include "newmenuitems.h"
18 #include "priormenus.h"
19 #include "togglemenuitem.h"
20 #include "ui_interface.h"
21 #include "ui_strings.h"
22 #include "ui_vars.h"
23 
24 using std::string;
25 
26 //------------------------------------------------------------------------------------
27 
PriorMenu(UIInterface & myui)28 PriorMenu::PriorMenu(UIInterface & myui)
29     : NewMenu(myui,lamarcmenu::priorTitle)
30 {
31     AddMenuItem(new PriorByForceMenuItemGroup(ui));
32 }
33 
~PriorMenu()34 PriorMenu::~PriorMenu()
35 {
36 }
37 
PriorByForceMenuItemGroup(UIInterface & ui)38 PriorByForceMenuItemGroup::PriorByForceMenuItemGroup(UIInterface& ui)
39     : MenuDisplayGroupBaseImplementation(ui,uistr::priorByForce)
40 {
41 }
42 
~PriorByForceMenuItemGroup()43 PriorByForceMenuItemGroup::~PriorByForceMenuItemGroup()
44 {
45 }
46 
47 MenuInteraction_ptr
MakeOneHandler(UIId id)48 PriorByForceMenuItemGroup::MakeOneHandler(UIId id)
49 {
50     return MenuInteraction_ptr(new PriorMenuForOneForce(ui,id));
51 }
52 
53 UIIdVec1d
GetVisibleIds()54 PriorByForceMenuItemGroup::GetVisibleIds()
55 {
56     return ui.doGetUIIdVec1d(uistr::validForces);
57 }
58 
59 string
GetKey(UIId id)60 PriorByForceMenuItemGroup::GetKey(UIId id)
61 {
62     switch(id.GetForceType())
63     {
64         case force_COAL:
65             return "T";
66             break;
67         case force_DISEASE:
68             return "D";
69             break;
70         case force_GROW:
71             return "G";
72             break;
73         case force_MIG:
74             return "M";
75             break;
76         case force_REC:
77             return "R";
78             break;
79         case force_REGION_GAMMA:
80             return "L";
81             break;
82         case force_EXPGROWSTICK:
83             return "X";
84             break;
85         case force_LOGISTICSELECTION:
86             return "S";
87             break;
88         case force_LOGSELECTSTICK:
89             return "H";
90             break;
91         default:
92             assert(false);              //uncaught force type.
93     }
94     throw implementation_error("force_type enum missing case in PriorByForceMenuItemGroup::GetKey");
95 }
96 
PriorMenuForOneForce(UIInterface & ui,UIId id)97 PriorMenuForOneForce::PriorMenuForOneForce(UIInterface& ui,UIId id)
98     : NewMenu(ui,lamarcmenu::priorTitle + lamarcmenu::wordFor
99               +ToString(id.GetForceType()), lamarcmenu::priorInfoForForce)
100 {
101     AddMenuItem(new ToggleMenuItemId("U",ui,uistr::useDefaultPriorsForForce,id));
102     AddMenuItem(new DefaultPriorForForce("D", ui, id));
103     AddMenuItem(new PriorByParameterMenuItemGroup(ui,id));
104 }
105 
~PriorMenuForOneForce()106 PriorMenuForOneForce::~PriorMenuForOneForce()
107 {
108 }
109 
SubMenuPriorForOneForce(std::string key,UIInterface & ui,UIId id)110 SubMenuPriorForOneForce::SubMenuPriorForOneForce(std::string key, UIInterface& ui, UIId id)
111     : ForceSubMenuItem(key, ui, new PriorMenuForOneForceCreator(ui, id), id)
112 {
113 }
114 
~SubMenuPriorForOneForce()115 SubMenuPriorForOneForce::~SubMenuPriorForOneForce()
116 {
117 }
118 
IsVisible()119 bool SubMenuPriorForOneForce::IsVisible()
120 {
121     return (ForceSubMenuItem::IsVisible() && ui.doGetBool(uistr::bayesian));
122 }
123 
PriorByParameterMenuItemGroup(UIInterface & ui,UIId id)124 PriorByParameterMenuItemGroup::PriorByParameterMenuItemGroup(UIInterface & ui,UIId id)
125     : MenuDisplayGroupBaseImplementation(ui,uistr::priorByID),
126       m_id(id)
127 {
128 }
129 
~PriorByParameterMenuItemGroup()130 PriorByParameterMenuItemGroup::~PriorByParameterMenuItemGroup()
131 {
132 }
133 
134 UIIdVec1d
GetVisibleIds()135 PriorByParameterMenuItemGroup::GetVisibleIds()
136 {
137     return ui.doGetUIIdVec1d(uistr::validParamsForForce,m_id);
138 }
139 
140 MenuInteraction_ptr
MakeOneHandler(UIId id)141 PriorByParameterMenuItemGroup::MakeOneHandler(UIId id)
142 {
143     return MenuInteraction_ptr(new PriorMenuForOneParameter(ui,id));
144 }
145 
DefaultPriorForForce(string myKey,UIInterface & myUI,UIId myId)146 DefaultPriorForForce::DefaultPriorForForce(string myKey, UIInterface& myUI,
147                                            UIId myId)
148     : SubMenuItem(myKey, myUI, new PriorMenuForOneParameterCreator
149                   (myUI, UIId(myId.GetForceType(), uiconst::GLOBAL_ID))),
150       m_id(myId)
151 {
152 }
153 
~DefaultPriorForForce()154 DefaultPriorForForce::~DefaultPriorForForce()
155 {
156 }
157 
GetVariableText()158 string DefaultPriorForForce::GetVariableText()
159 {
160     return ui.GetCurrentVars().forces.GetPriorTypeSummaryDescription(m_id.GetForceType(), uiconst::GLOBAL_ID);
161 }
162 
163 //One possible parameter is the 'default' parameter for a particular force.
PriorMenuForOneParameter(UIInterface & ui,UIId id)164 PriorMenuForOneParameter::PriorMenuForOneParameter(UIInterface& ui, UIId id)
165     : NewMenu(ui, lamarcmenu::priorTitle, lamarcmenu::priorInfoForParam),
166       m_id(id)
167 {
168     if (id.GetIndex1() != uiconst::GLOBAL_ID)
169     {
170         AddMenuItem( new ToggleMenuItemId("D",ui,uistr::priorUseDefault,id));
171     }
172     AddMenuItem(new ToggleMenuItemId("S",ui,uistr::priorType,id));
173     AddMenuItem(new SetMenuItemId("U",ui,uistr::priorUpperBound,id));
174     AddMenuItem(new SetMenuItemId("L",ui,uistr::priorLowerBound,id));
175 #ifdef LAMARC_NEW_FEATURE_RELATIVE_SAMPLING
176     AddMenuItem(new SetMenuItemId("R",ui,uistr::relativeSampleRate,id));
177 #endif
178 }
179 
~PriorMenuForOneParameter()180 PriorMenuForOneParameter::~PriorMenuForOneParameter()
181 {
182 }
183 
Title()184 string PriorMenuForOneParameter::Title()
185 {
186     if (m_id.GetIndex1() == uiconst::GLOBAL_ID)
187     {
188         return lamarcmenu::defaultForParamsFor + ToString(m_id.GetForceType());
189     }
190     else
191     {
192         return lamarcmenu::priorTitle + lamarcmenu::wordFor +
193             ui.GetCurrentVars().GetParamNameWithConstraint(m_id.GetForceType(), m_id.GetIndex1());
194     }
195 }
196 
197 //____________________________________________________________________________________
198