1 // $Id: constraintmenus.h,v 1.8 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 CONSTRAINTMENUS_H
12 #define CONSTRAINTMENUS_H
13 
14 #include <string>
15 #include "forcesmenus.h"
16 #include "newmenuitems.h"
17 #include "setmenuitem.h"
18 #include "togglemenuitem.h"
19 
20 class UIInterface;
21 
22 class ConstraintMenuForOneForce : public NewMenu
23 {
24   public:
25     ConstraintMenuForOneForce(UIInterface &ui,UIId id);
26     virtual ~ConstraintMenuForOneForce();
27 };
28 
29 //These two classes are used for the individual forces' menus.
30 class SubMenuConstraintsForOneForce : public ForceSubMenuItem
31 {
32   private:
33     SubMenuConstraintsForOneForce(); //undefined
34     UIId id;
35   public:
36     SubMenuConstraintsForOneForce(std::string key, UIInterface& ui, UIId id);
37     virtual ~SubMenuConstraintsForOneForce();
38 };
39 
40 class ConstraintsMenuForOneForceCreator : public NewMenuCreator
41 {
42   private:
43     ConstraintsMenuForOneForceCreator(); //undefined
44     UIInterface& ui;
45     UIId id;
46   public:
ConstraintsMenuForOneForceCreator(UIInterface & myui,UIId myid)47     ConstraintsMenuForOneForceCreator(UIInterface& myui, UIId myid) :
48         ui(myui), id(myid) {};
~ConstraintsMenuForOneForceCreator()49     virtual ~ConstraintsMenuForOneForceCreator() {};
Create()50     virtual NewMenu_ptr Create() { return NewMenu_ptr(new ConstraintMenuForOneForce(ui, id));};
51 };
52 
53 class AddToGroupedConstraintsMenuItem : public SetMenuItemId
54 {
55   public:
56     AddToGroupedConstraintsMenuItem(std::string key, UIInterface& ui,
57                                     UIId id);
58     virtual ~AddToGroupedConstraintsMenuItem();
59     virtual MenuInteraction_ptr GetHandler(std::string input);
60 };
61 
62 class GetIdAndAddDialog : public SetDialog
63 {
64   private:
65     UIId outputId;
66   protected:
67     virtual void stuffValIntoUI(std::string val);
68     virtual void stuffVal2IntoUI(std::string val);
69   public:
70     GetIdAndAddDialog(UIInterface& ui, string menuKey, UIId id);
71     virtual ~GetIdAndAddDialog();
72     virtual menu_return_type InvokeMe(Display& display);
73     virtual bool handleInput2(std::string input);
74     virtual string inLoopOutputString();
75     virtual string inLoopOutputString2();
76 
77 };
78 
79 class RemoveFromGroupedConstraintsMenuItem : public SetMenuItemId
80 {
81   public:
82     RemoveFromGroupedConstraintsMenuItem(std::string key, UIInterface& ui,
83                                          UIId id);
84     virtual ~RemoveFromGroupedConstraintsMenuItem();
85     virtual MenuInteraction_ptr GetHandler(std::string input);
86 };
87 
88 class GetIdAndRemoveDialog : public SetDialog
89 {
90   protected:
91     virtual void stuffValIntoUI(std::string val);
92   public:
93     GetIdAndRemoveDialog(UIInterface& ui, string menuKey, UIId id);
94     virtual ~GetIdAndRemoveDialog();
95     virtual string inLoopOutputString();
96 
97 };
98 
99 class ToggleMenuItemUngroupedConstraints : public ToggleMenuItemGroup
100 {
101   private:
102     UIId    m_id;
103   public:
104     ToggleMenuItemUngroupedConstraints(UIInterface & ui,UIId id);
105     virtual ~ToggleMenuItemUngroupedConstraints();
106     virtual std::string GetGroupDescription();
107     virtual std::string GetEmptyDescription();
108     virtual UIIdVec1d GetVisibleIds();
109 };
110 
111 class ToggleMenuItem2dGroup : public MenuDisplayQuantaWithHandler
112 {
113   private:
114     ToggleMenuItem2dGroup(); //undefined
115   protected:
116     UIInterface & ui;
117     std::string menuKey;
118     virtual UIId GetIdFromKey(std::string key);
119     virtual MenuInteraction_ptr MakeOneHandler(UIId id);
120     virtual UIId GetGroupIdFromLocalId(UIId localId);
121   public:
122     ToggleMenuItem2dGroup(UIInterface& ui, string menuKey);
~ToggleMenuItem2dGroup()123     virtual ~ToggleMenuItem2dGroup() {};
124     virtual UIIdVec2d GetVisibleIds() = 0;
125     // single alphanumeric to invoke this line
126     virtual std::string GetKey(UIId id);
127     // description of this item
128     virtual std::string GetText(UIId id);
129     // current value of this item if any
130     virtual std::string GetVariableText(UIId id);
GetGroupDescription()131     virtual std::string GetGroupDescription() {return "\n";};
132     virtual std::string GetGroupDescription(long groupId);
GetEmptyDescription()133     virtual std::string GetEmptyDescription() {return "\n";};
134     virtual std::string GetEmptyDescription(long groupId);
135     virtual bool Handles(std::string input);
136     virtual MenuInteraction_ptr GetHandler(std::string input);
137     // not virtual because we're assuming all inheritors should
138     // use the canned routine given in class Display
139     void DisplayItemOn(Display & display);
140 
141     // stuff for multi-line items
HasMultiLineItems()142     virtual bool HasMultiLineItems() {return false;};
GetExtraText(UIId id)143     virtual std::vector<std::string> GetExtraText(UIId id) {return std::vector<std::string>();};
GetExtraVariableText(UIId id)144     virtual std::vector<std::string> GetExtraVariableText(UIId id) {return std::vector<std::string>();};
145 
146 };
147 
148 class ToggleMenuItemGroupedConstraints : public ToggleMenuItem2dGroup
149 {
150   private:
151     UIId    m_id;
152   public:
153     ToggleMenuItemGroupedConstraints(UIInterface & ui,UIId id);
154     virtual ~ToggleMenuItemGroupedConstraints();
155     virtual UIIdVec2d GetVisibleIds();
156     // description of the group
157     virtual std::string GetGroupDescription(long groupId);
158     virtual std::string GetEmptyDescription(long groupId);
159 };
160 
161 #endif  // CONSTRAINTMENUS_H
162 
163 //____________________________________________________________________________________
164