aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/skin/widgets/combobox.h
blob: 08ec11bfd82ddd1f4a8eb0fad95c70b860d250cf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#ifndef __COMBOBOX_H
#define __COMBOBOX_H

#include <api/skin/widgets/dropdownlist.h>
#include <api/script/objects/c_script/h_edit.h>
#include <api/script/objects/c_script/c_edit.h>

#define COMBOBOX_PARENT DropDownList

class XmlObject;
class HEBKeysCallback;

class ComboBox : public COMBOBOX_PARENT {

  public:

    ComboBox();
    virtual ~ComboBox();

    virtual int wantTrapButton() { return 1; }
    virtual int wantTrapText() { return 0; }
    virtual int wantTrapEdit() { return 1; }

    virtual void abstract_onNewContent();
    virtual void trapControls();

    virtual const wchar_t *dropdownlist_getMainGroupId() { return L"wasabi.combobox.main.group"; }
    virtual const wchar_t *dropdownlist_getListGroupId() { return L"wasabi.combobox.list.group"; }
    virtual const wchar_t *dropdownlist_getButtonId() { return L"combobox.button"; }
    virtual const wchar_t *dropdownlist_getListId() { return L"combobox.list"; }

    virtual const wchar_t *combobox_getEditId() { return L"combobox.edit"; }
                        
    virtual const wchar_t *embeddedxui_getEmbeddedObjectId() { return combobox_getEditId(); }

    virtual void dropdownlist_onCloseList();
    virtual void dropdownlist_onOpenList();

    virtual void setText(const wchar_t *text, int hover=0); // use this to set the content of the edit box
    virtual const wchar_t *getText(int fromcontrol=0); // use this one to ask for the currently displayed entry

    virtual const wchar_t *getCustomText() { return NULL; }

    virtual void dropdownlist_onConfigureList(GuiObject *o);
    virtual void onSelect(int id, int hover);
    virtual void enter();

    void selectEditor();
    virtual int onAction(const wchar_t *action, const wchar_t *param=NULL, int x=-1, int y=-1, intptr_t p1=0, intptr_t p2=0, void *data=NULL, size_t datalen=0, ifc_window *source=NULL);

    virtual void onEditKeyDown(int vk);
    virtual void onEditKeyUp(int vk);
    virtual void onEditEnter(const wchar_t *txt);
    virtual void onEditChar(int c);

    virtual int wantTransferDownToList() { return 1; }
    virtual int wantTransferUpToList() { return 1; }
    virtual int wantTransferHomeToList() { return 1; }
    virtual int wantTransferEndToList() { return 1; }
    virtual int wantTransferPgUpToList() { return 1; }
    virtual int wantTransferPgDnToList() { return 1; }
    virtual int wantTransferEnterToList() { return 1; }
    virtual int wantDownOpenList() { return 1; }
    virtual int wantCloseListOnChar() { return 1; }
    virtual int wantEnterOnSelect() { return 1; }

    virtual void listDown();
    virtual void listUp();
    virtual void listHome();
    virtual void listEnd();
    virtual void listPageDown();
    virtual void listPageUp();
    virtual void listSelect();

    virtual void onPreCloseList();

  private:
    
    virtual void updateTextInControl(const wchar_t *text);

    HEBKeysCallback *keys_edit;
    GuiObject *lastlist;
    StringW curtxt;

    int savedidle, savedautoenter;
    int disable_getselection;
};

class HEBKeysCallback : public H_Edit {
  public:
    
    HEBKeysCallback(ScriptObject *trap, ComboBox *_callback) :
        callback(_callback), H_Edit(trap), o(trap) {
    }

  virtual void hook_onKeyDown(int vk) {
    callback->onEditKeyDown(vk);
  }

  virtual void hook_onKeyUp(int vk) {
    callback->onEditKeyUp(vk);
  }

  virtual void hook_onEnter() 
	{
    C_Edit e(o);
    callback->onEditEnter(e.getText());
  }


  virtual void hook_onChar(wchar_t c) {
    callback->onEditChar(c);
  } 

  private:
    ComboBox *callback;
    ScriptObject *o;
};


#endif