Initial commit
[forms.git] / src / F_Input.C
blob01d4ad7293d4649a6b2054c720108fb7e9fe1528
2 #include <F_Input.H>
4 using namespace F;
6 void F_Input::draw()
8  F_Widget::draw();
9  if (!label().size())
10    return;
11  F_Point p(0, 0);
12  bool bright = fg() & 0x8;
13  if (state != F_INPUT_NORMAL)
14    fg((fg() & 0x7) | (bright ? 0 : 0x8));
15  put_string(p, label());
16  if (state != F_INPUT_NORMAL)
17    fg((fg() & 0x7) | (bright ? 0x8 : 0));
18  F_Text_Symbol smb(' ', bg(), fg());
19  unsigned int len = 0;
20  for (int xx = 0; xx < w(); xx++) {
21    p.move(xx, 1);
22    smb.ch_ = f_text_display->recode((len < text_.size()) ? text_.at(len++) : ' ');
23    draw_buf.set(p, smb);
24  }
25  damage(F_DAMAGE_FLUSH);
26  if (state == F_INPUT_ON_FOCUS) {
27    coord_t cp = (text_.size() > w()) ? w() : text_.size();
28    f_text_display->cursor(parent()->x() + x() + cp, parent()->y() + y() + 1);
29    f_text_display->cursor(1);
30    f_text_display->mouse_cursor(0);
31  }
34 bool F_Input::handle(F_Event_t &ev)
36  switch(ev.type) {
37    case F_FOCUS:
38    case F_ENTER:
39      state = F_INPUT_ON_FOCUS;
40      draw();
41      return true;
42    case F_UNFOCUS:
43    case F_LEAVE:
44      f_text_display->cursor(0);
45      f_text_display->mouse_cursor(1);
46      state = F_INPUT_NORMAL;
47      draw();
48      return true;
49    case F_KEY_PRESS:
50      switch (ev.kbd.key) {
51        // ÔÉÐÁ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ
52        case F_Left:
53        case F_Right:
54        case F_Home:
55        case F_Page_Up:
56        case F_End:
57        case F_Page_Down:
58        case F_Insert:
59        case F_Delete:
60          return false;
61        case F_Enter:
62          do_callback();
63          break;
64        case F_BackSpace:
65          if (text_.size())
66            text_.erase(text_.end() - 1);
67          break;
68        default:
69          if (F_Printable(ev.kbd.key))
70            text_ += (unsigned char)ev.kbd.key;
71          else
72            return false;
73    }
74      draw();
75      return true;
76    default:
77      debug("iid - %d, evtype - %d", id(), ev.type);
78      break;
79  }
80  return false;