/platform/win/controls/oslistfield.d

http://github.com/wilkie/djehuty · D · 125 lines · 96 code · 27 blank · 2 comment · 1 complexity · ea1ab83c92a7c84cb5f279733fea58c9 MD5 · raw file

  1. module platform.win.controls.oslistfield;
  2. import gui.listfield;
  3. import core.string;
  4. import platform.win.definitions;
  5. import platform.win.vars;
  6. import platform.win.common;
  7. import platform.win.oscontrolinterface;
  8. import platform.win.main;
  9. import core.view;
  10. import gui.widget;
  11. import gui.window;
  12. import interfaces.list;
  13. import utils.arraylist;
  14. class OSListField : ListField, OSControl
  15. {
  16. public:
  17. this(int x, int y, int width, int height, AbstractList!(String) list = null)
  18. {
  19. super(x,y,width,height,null);
  20. }
  21. override void OnAdd()
  22. {
  23. // CBS_DROPDOWN - editable
  24. _hWnd = CreateWindowExW(0, "COMBOBOX\0", null, WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_BORDER | WS_VSCROLL , _x,_y,_width,_height,
  25. WindowGetPlatformVars(_window).hWnd,null, cast(HINSTANCE)GetWindowLongW(WindowGetPlatformVars(_window).hWnd,GWLP_HINSTANCE), null);
  26. SetWindowPos(_hWnd, cast(HWND)HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
  27. SetWindowLongW(_hWnd, GWLP_USERDATA, cast(ulong)(cast(void*)(cast(OSControl)this)));
  28. _oldproc = cast(WNDPROC)SetWindowLongW(_hWnd, GWLP_WNDPROC, cast(ulong)&CtrlProc);
  29. SendMessageW( _hWnd, WM_SETFONT, cast(WPARAM)win_button_font, 1);
  30. // Add all members of the list
  31. Iterator irate = getIterator();
  32. String data;
  33. while(getItem(data, irate))
  34. {
  35. SendMessageW(_hWnd, CB_ADDSTRING, 0, cast(LPARAM)data.ptr);
  36. }
  37. }
  38. override void OnRemove()
  39. {
  40. DestroyWindow(_hWnd);
  41. }
  42. override void addItem(String text)
  43. {
  44. _list.addItem(text);
  45. SendMessageW(_hWnd, CB_ADDSTRING, 0, cast(LPARAM)text.ptr);
  46. }
  47. override void addItem(StringLiteral text)
  48. {
  49. _list.addItem(new String(text));
  50. SendMessageW(_hWnd, CB_ADDSTRING, 0, cast(LPARAM)text.ptr);
  51. }
  52. override void addList(AbstractList!(String) list)
  53. {
  54. Iterator irate = _list.getIterator();
  55. String data;
  56. while(_list.getItem(data, irate))
  57. {
  58. addItem(data);
  59. }
  60. }
  61. override bool getItem(out String data, uint index)
  62. {
  63. return _list.getItem(data, index);
  64. }
  65. override Iterator getIterator()
  66. {
  67. return _list.getIterator();
  68. }
  69. override bool getItem(out String data, ref Iterator irate)
  70. {
  71. return _list.getItem(data, irate);
  72. }
  73. override uint length()
  74. {
  75. return _list.length();
  76. }
  77. protected:
  78. LRESULT _AppLoopMessage(uint message, WPARAM wParam, LPARAM lParam)
  79. {
  80. switch (message)
  81. {
  82. break;
  83. default:
  84. break;
  85. }
  86. return CallWindowProcW(_oldproc, _hWnd, message, wParam, lParam);
  87. }
  88. View _ReturnView(out int x, out int y, out int w, out int h)
  89. {
  90. x = _x;
  91. y = _y;
  92. w = _width;
  93. h = _height;
  94. return _view;
  95. }
  96. HWND _hWnd;
  97. WNDPROC _oldproc;
  98. }