TextEditor.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. package imgui
  2. // #include "stdlib.h"
  3. // #include "TextEditorWrapper.h"
  4. import "C"
  5. import "unsafe"
  6. type LanguageDefinition uintptr
  7. func NewLanguageDefinition() LanguageDefinition {
  8. handle := C.IggNewLanguageDef()
  9. return LanguageDefinition(handle)
  10. }
  11. func (ld LanguageDefinition) handle() C.IggTextEditorLanguageDefinition {
  12. return C.IggTextEditorLanguageDefinition(ld)
  13. }
  14. func (ld LanguageDefinition) SetName(name string) {
  15. nameArg, nameDeleter := wrapString(name)
  16. defer nameDeleter()
  17. C.IggTextEditorLDSetName(ld.handle(), nameArg)
  18. }
  19. func (ld LanguageDefinition) SetKeywords(keywords []string) {
  20. keywordsArg := make([]*C.char, len(keywords))
  21. for i, k := range keywords {
  22. kArg, kDeleter := wrapString(k)
  23. defer kDeleter()
  24. keywordsArg[i] = kArg
  25. }
  26. C.IggTextEditorLDSetKeywords(ld.handle(), &keywordsArg[0], C.int(len(keywords)))
  27. }
  28. type TextEditor uintptr
  29. func NewTextEditor() TextEditor {
  30. handle := C.IggNewTextEditor()
  31. return TextEditor(handle)
  32. }
  33. func (t TextEditor) handle() C.IggTextEditor {
  34. return C.IggTextEditor(t)
  35. }
  36. func (t TextEditor) Render(title string, size Vec2, border bool) {
  37. titleArg, titleFn := wrapString(title)
  38. defer titleFn()
  39. sizeArg, _ := size.wrapped()
  40. C.IggTextEditorRender(t.handle(), titleArg, sizeArg, castBool(border))
  41. }
  42. func (t TextEditor) SetShowWhitespaces(show bool) {
  43. C.IggTextEditorSetShowWhitespaces(t.handle(), castBool(show))
  44. }
  45. func (t TextEditor) SetTabSize(size int) {
  46. C.IggTextEditorSetTabSize(t.handle(), C.int(size))
  47. }
  48. func (t TextEditor) InsertText(text string) {
  49. textArg, textFn := wrapString(text)
  50. defer textFn()
  51. C.IggTextEditorInsertText(t.handle(), textArg)
  52. }
  53. func (t TextEditor) SetText(text string) {
  54. textArg, textFn := wrapString(text)
  55. defer textFn()
  56. C.IggTextEditorSetText(t.handle(), textArg)
  57. }
  58. func (t TextEditor) GetText() string {
  59. str := C.IggTextEditorGetText(t.handle())
  60. defer C.free(unsafe.Pointer(str))
  61. return C.GoString(str)
  62. }
  63. func (t TextEditor) GetWordUnderCursor() string {
  64. str := C.IggTextEditorGetWordUnderCursor(t.handle())
  65. defer C.free(unsafe.Pointer(str))
  66. return C.GoString(str)
  67. }
  68. func (t TextEditor) HasSelection() bool {
  69. return C.IggTextEditorHasSelection(t.handle()) != 0
  70. }
  71. func (t TextEditor) GetSelectedText() string {
  72. str := C.IggTextEditorGetSelectedText(t.handle())
  73. defer C.free(unsafe.Pointer(str))
  74. return C.GoString(str)
  75. }
  76. func (t TextEditor) GetCurrentLineText() string {
  77. str := C.IggTextEditorGetCurrentLineText(t.handle())
  78. defer C.free(unsafe.Pointer(str))
  79. return C.GoString(str)
  80. }
  81. func (t TextEditor) IsTextChanged() bool {
  82. return C.IggTextEditorIsTextChanged(t.handle()) != 0
  83. }
  84. func (t TextEditor) GetScreenCursorPos() (int, int) {
  85. var column int
  86. var line int
  87. C.IggTextEditorGetScreenCursorPos(t.handle(), (*C.int)(unsafe.Pointer(&column)), (*C.int)(unsafe.Pointer(&line)))
  88. return column, line
  89. }
  90. func (t TextEditor) GetCursorPos() (int, int) {
  91. var column int
  92. var line int
  93. C.IggTextEditorGetCursorPos(t.handle(), (*C.int)(unsafe.Pointer(&column)), (*C.int)(unsafe.Pointer(&line)))
  94. return column, line
  95. }
  96. func (t TextEditor) SetCursorPos(line, column int) {
  97. C.IggTextEditorSetCursorPos(t.handle(), (C.int)(column), (C.int)(line))
  98. }
  99. func (t TextEditor) GetSelectionStart() (int, int) {
  100. var column int
  101. var line int
  102. C.IggTextEditorGetSelectionStart(t.handle(), (*C.int)(unsafe.Pointer(&column)), (*C.int)(unsafe.Pointer(&line)))
  103. return column, line
  104. }
  105. func (t TextEditor) SetLanguageDefinition(ld LanguageDefinition) {
  106. C.IggTextEditorSetLanguageDefinition(t.handle(), ld.handle())
  107. }
  108. func (t TextEditor) SetLanguageDefinitionSQL() {
  109. C.IggTextEditorSetLanguageDefinitionSQL(t.handle())
  110. }
  111. func (t TextEditor) SetLanguageDefinitionCPP() {
  112. C.IggTextEditorSetLanguageDefinitionCPP(t.handle())
  113. }
  114. func (t TextEditor) SetLanguageDefinitionC() {
  115. C.IggTextEditorSetLanguageDefinitionC(t.handle())
  116. }
  117. func (t TextEditor) SetLanguageDefinitionLua() {
  118. C.IggTextEditorSetLanguageDefinitionLua(t.handle())
  119. }
  120. type ErrorMarkers uintptr
  121. func NewErrorMarkers() ErrorMarkers {
  122. handle := C.IggTextEditorNewErrorMarkers()
  123. return ErrorMarkers(handle)
  124. }
  125. func (e ErrorMarkers) handle() C.IggTextEditorErrorMarkers {
  126. return C.IggTextEditorErrorMarkers(e)
  127. }
  128. func (e ErrorMarkers) Insert(pos int, errMsg string) {
  129. errMsgArg, errMsgFn := wrapString(errMsg)
  130. defer errMsgFn()
  131. C.IggTextEditorErrorMarkersInsert(e.handle(), C.int(pos), errMsgArg)
  132. }
  133. func (e ErrorMarkers) Clear() {
  134. C.IggTextEditorErrorMarkersClear(e.handle())
  135. }
  136. func (e ErrorMarkers) Size() uint {
  137. return uint(C.IggTextEditorErrorMarkersSize(e.handle()))
  138. }
  139. func (t TextEditor) SetErrorMarkers(markers ErrorMarkers) {
  140. C.IggTextEditorSetErrorMarkers(t.handle(), markers.handle())
  141. }
  142. func (t TextEditor) Copy() {
  143. C.IggTextEditorCopy(t.handle())
  144. }
  145. func (t TextEditor) Cut() {
  146. C.IggTextEditorCut(t.handle())
  147. }
  148. func (t TextEditor) Paste() {
  149. C.IggTextEditorPaste(t.handle())
  150. }
  151. func (t TextEditor) Delete() {
  152. C.IggTextEditorDelete(t.handle())
  153. }
  154. func (t TextEditor) SelectWordUnderCursor() {
  155. C.IggTextEditorSelectWordUnderCursor(t.handle())
  156. }
  157. func (t TextEditor) SelectAll() {
  158. C.IggTextEditorSelectAll(t.handle())
  159. }
  160. func (t TextEditor) SetHandleKeyboardInputs(b bool) {
  161. val := 0
  162. if b {
  163. val = 1
  164. }
  165. C.IggTextEditorSetHandleKeyboardInputs(t.handle(), C.int(val))
  166. }