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