option.cc
Go to the documentation of this file.
1 
2 #include "option.hh"
3 #include "canvas.hh"
4 #include "stage.hh"
5 #include "worldfile.hh"
6 using namespace Stg;
7 
8 Option::Option(const std::string &n, const std::string &tok, const std::string &key, bool v,
9  World *world)
10  : optName(n), value(v), wf_token(tok), shortcut(key), menu(NULL), menuIndex(0), menuCb(NULL),
11  menuCbWidget(NULL), _world(world), htname(n)
12 {
13  /* do nothing */
14 }
15 
16 Fl_Menu_Item *getMenuItem(Fl_Menu_ *menu, int i)
17 {
18  const Fl_Menu_Item *mArr = menu->menu();
19  return const_cast<Fl_Menu_Item *>(&mArr[i]);
20 }
21 
22 void Option::Load(Worldfile *wf, int section)
23 {
24  // printf( "loading wf key %s\n", wf_token.c_str() );
25  set((bool)wf->ReadInt(section, wf_token.c_str(), value));
26 }
27 
28 void Option::Save(Worldfile *wf, int section)
29 {
30  wf->WriteInt(section, wf_token.c_str(), value);
31 }
32 
33 void Option::toggleCb(Fl_Widget *, void *p)
34 {
35  // Fl_Menu_* menu = static_cast<Fl_Menu_*>( w );
36  Option *opt = static_cast<Option *>(p);
37  opt->invert();
38  if (opt->menuCb)
39  opt->menuCb(opt->menuCbWidget, opt);
40 }
41 
42 void Option::menuCallback(Fl_Callback *cb, Fl_Widget *w)
43 {
44  menuCb = cb;
45  menuCbWidget = w;
46 }
47 
48 void Option::createMenuItem(Fl_Menu_Bar *m, std::string path)
49 {
50  menu = m;
51  path = path + "/" + optName;
52  // create a menu item and save its index
53  menuIndex = menu->add(path.c_str(), shortcut.c_str(), toggleCb, this,
54  FL_MENU_TOGGLE | (value ? FL_MENU_VALUE : 0));
55 }
56 
57 void Option::set(bool val)
58 {
59  value = val;
60 
61  if (menu) {
62  Fl_Menu_Item *item = getMenuItem(menu, menuIndex);
63  value ? item->set() : item->clear();
64  }
65 
66  if (_world) {
67  WorldGui *wg = dynamic_cast<WorldGui *>(_world);
68  if (wg == NULL)
69  return;
70  Canvas *canvas = wg->GetCanvas();
71  canvas->invalidate();
72  canvas->redraw();
73  }
74 }
bool val() const
Definition: option.hh:40
World class
Definition: stage.hh:764
The Stage library uses its own namespace.
Definition: canvas.hh:8
static void toggleCb(Fl_Widget *w, void *p)
Definition: option.cc:33
Fl_Callback * menuCb
Definition: option.hh:30
void invert()
Definition: option.hh:48
std::string wf_token
Definition: option.hh:26
Fl_Widget * menuCbWidget
Definition: option.hh:31
void Save(Worldfile *wf, int section)
Definition: option.cc:28
void WriteInt(int entity, const char *name, int value)
Definition: worldfile.cc:1480
void set(bool val)
Definition: option.cc:57
Canvas * GetCanvas(void) const
Definition: stage.hh:1519
void createMenuItem(Fl_Menu_Bar *menu, std::string path)
Definition: option.cc:48
World * _world
Definition: option.hh:32
void menuCallback(Fl_Callback *cb, Fl_Widget *w)
Definition: option.cc:42
Option(const std::string &n, const std::string &tok, const std::string &key, bool v, World *world)
Definition: option.cc:8
std::string optName
Definition: option.hh:23
bool value
Definition: option.hh:24
void Load(Worldfile *wf, int section)
Definition: option.cc:22
int ReadInt(int entity, const char *name, int value)
Definition: worldfile.cc:1470
std::string shortcut
Definition: option.hh:27
int menuIndex
Definition: option.hh:29
Fl_Menu_Item * getMenuItem(Fl_Menu_ *menu, int i)
Definition: option.cc:16
Fl_Menu_ * menu
Definition: option.hh:28


stage
Author(s): Richard Vaughan , Brian Gerkey , Reed Hedges , Andrew Howard , Toby Collett , Pooya Karimian , Jeremy Asher , Alex Couture-Beil , Geoff Biggs , Rich Mattes , Abbas Sadat
autogenerated on Mon Feb 28 2022 23:48:56