nimrepl uses new GTK wrapper
This commit is contained in:
parent
cf56d5ba3e
commit
df672f5b9a
2 changed files with 83 additions and 87 deletions
|
|
@ -9358,7 +9358,7 @@ proc modified*(a: var TTextBuffer): guint
|
||||||
proc set_modified*(a: var TTextBuffer, `modified`: guint)
|
proc set_modified*(a: var TTextBuffer, `modified`: guint)
|
||||||
proc text_buffer_get_type*(): GType{.cdecl, dynlib: lib,
|
proc text_buffer_get_type*(): GType{.cdecl, dynlib: lib,
|
||||||
importc: "gtk_text_buffer_get_type".}
|
importc: "gtk_text_buffer_get_type".}
|
||||||
proc buffer_new*(table: PTextTagTable): PTextBuffer{.cdecl, dynlib: lib,
|
proc text_buffer_new*(table: PTextTagTable): PTextBuffer{.cdecl, dynlib: lib,
|
||||||
importc: "gtk_text_buffer_new".}
|
importc: "gtk_text_buffer_new".}
|
||||||
proc get_line_count*(buffer: PTextBuffer): gint{.cdecl, dynlib: lib,
|
proc get_line_count*(buffer: PTextBuffer): gint{.cdecl, dynlib: lib,
|
||||||
importc: "gtk_text_buffer_get_line_count".}
|
importc: "gtk_text_buffer_get_line_count".}
|
||||||
|
|
@ -9692,7 +9692,7 @@ proc text_view_get_type*(): TType{.cdecl, dynlib: lib,
|
||||||
importc: "gtk_text_view_get_type".}
|
importc: "gtk_text_view_get_type".}
|
||||||
proc text_view_new*(): PTextView{.cdecl, dynlib: lib,
|
proc text_view_new*(): PTextView{.cdecl, dynlib: lib,
|
||||||
importc: "gtk_text_view_new".}
|
importc: "gtk_text_view_new".}
|
||||||
proc view_new_with_buffer*(buffer: PTextBuffer): PTextView{.cdecl,
|
proc text_view_new_with_buffer*(buffer: PTextBuffer): PTextView{.cdecl,
|
||||||
dynlib: lib, importc: "gtk_text_view_new_with_buffer".}
|
dynlib: lib, importc: "gtk_text_view_new_with_buffer".}
|
||||||
proc set_buffer*(text_view: PTextView, buffer: PTextBuffer){.cdecl,
|
proc set_buffer*(text_view: PTextView, buffer: PTextBuffer){.cdecl,
|
||||||
dynlib: lib, importc: "gtk_text_view_set_buffer".}
|
dynlib: lib, importc: "gtk_text_view_set_buffer".}
|
||||||
|
|
|
||||||
|
|
@ -17,34 +17,34 @@ proc execCode(code: string): output =
|
||||||
return (compilerOutput, appOutput)
|
return (compilerOutput, appOutput)
|
||||||
|
|
||||||
var shiftPressed = False
|
var shiftPressed = False
|
||||||
var w: PGtkWindow
|
var w: gtk2.PWindow
|
||||||
var InputTextBuffer: PGtkTextBuffer
|
var InputTextBuffer: PTextBuffer
|
||||||
var OutputTextBuffer: PGtkTextBuffer
|
var OutputTextBuffer: PTextBuffer
|
||||||
|
|
||||||
proc destroy(widget: PGtkWidget, data: pgpointer){.cdecl.} =
|
proc destroy(widget: PWidget, data: pgpointer){.cdecl.} =
|
||||||
gtk_main_quit()
|
main_quit()
|
||||||
|
|
||||||
proc FileOpenClicked(menuitem: PGtkMenuItem, userdata: pgpointer) =
|
proc FileOpenClicked(menuitem: PMenuItem, userdata: pgpointer) {.cdecl.} =
|
||||||
var path = ChooseFileToOpen(w)
|
var path = ChooseFileToOpen(w)
|
||||||
|
|
||||||
if path != "":
|
if path != "":
|
||||||
|
|
||||||
var file: string = readFile(path)
|
var file: string = readFile(path)
|
||||||
if file != nil:
|
if file != nil:
|
||||||
gtk_text_buffer_set_text(InputTextBuffer, file, len(file))
|
set_text(InputTextBuffer, file, len(file))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
error(w, "Unable to read from file")
|
error(w, "Unable to read from file")
|
||||||
|
|
||||||
proc FileSaveClicked(menuitem: PGtkMenuItem, userdata: pgpointer) =
|
proc FileSaveClicked(menuitem: PMenuItem, userdata: pgpointer) {.cdecl.} =
|
||||||
var path = ChooseFileToSave(w)
|
var path = ChooseFileToSave(w)
|
||||||
|
|
||||||
if path != "":
|
if path != "":
|
||||||
var startIter: TGtkTextIter
|
var startIter: TTextIter
|
||||||
var endIter: TGtkTextIter
|
var endIter: TTextIter
|
||||||
gtk_text_buffer_get_start_iter(InputTextBuffer, addr(startIter))
|
get_start_iter(InputTextBuffer, addr(startIter))
|
||||||
gtk_text_buffer_get_end_iter(InputTextBuffer, addr(endIter))
|
get_end_iter(InputTextBuffer, addr(endIter))
|
||||||
var InputText = gtk_text_buffer_get_text(InputTextBuffer, addr(startIter), addr(endIter), False)
|
var InputText = get_text(InputTextBuffer, addr(startIter), addr(endIter), False)
|
||||||
|
|
||||||
var f: TFile
|
var f: TFile
|
||||||
if open(f, path, fmWrite):
|
if open(f, path, fmWrite):
|
||||||
|
|
@ -54,109 +54,105 @@ proc FileSaveClicked(menuitem: PGtkMenuItem, userdata: pgpointer) =
|
||||||
error(w, "Unable to write to file")
|
error(w, "Unable to write to file")
|
||||||
|
|
||||||
|
|
||||||
proc inputKeyPressed(widget: PGtkWidget, event: PGdkEventKey, userdata: pgpointer): bool =
|
proc inputKeyPressed(widget: PWidget, event: PEventKey, userdata: pgpointer): bool =
|
||||||
if ($gdk_keyval_name(event.keyval)).tolower() == "shift_l":
|
if ($keyval_name(event.keyval)).tolower() == "shift_l":
|
||||||
# SHIFT is pressed
|
# SHIFT is pressed
|
||||||
shiftPressed = True
|
shiftPressed = True
|
||||||
|
|
||||||
return False
|
proc inputKeyReleased(widget: PWidget, event: PEventKey, userdata: pgpointer): bool =
|
||||||
proc inputKeyReleased(widget: PGtkWidget, event: PGdkEventKey, userdata: pgpointer): bool =
|
echo(keyval_name(event.keyval))
|
||||||
echo(gdk_keyval_name(event.keyval))
|
if ($keyval_name(event.keyval)).tolower() == "shift_l":
|
||||||
if ($gdk_keyval_name(event.keyval)).tolower() == "shift_l":
|
|
||||||
# SHIFT is released
|
# SHIFT is released
|
||||||
shiftPressed = False
|
shiftPressed = False
|
||||||
|
|
||||||
if ($gdk_keyval_name(event.keyval)).tolower() == "return":
|
if ($keyval_name(event.keyval)).tolower() == "return":
|
||||||
echo($gdk_keyval_name(event.keyval), "Shift_L")
|
echo($keyval_name(event.keyval), "Shift_L")
|
||||||
# Enter pressed
|
# Enter pressed
|
||||||
if shiftPressed == False:
|
if shiftPressed == False:
|
||||||
var startIter: TGtkTextIter
|
var startIter: TTextIter
|
||||||
var endIter: TGtkTextIter
|
var endIter: TTextIter
|
||||||
gtk_text_buffer_get_start_iter(InputTextBuffer, addr(startIter))
|
get_start_iter(InputTextBuffer, addr(startIter))
|
||||||
gtk_text_buffer_get_end_iter(InputTextBuffer, addr(endIter))
|
get_end_iter(InputTextBuffer, addr(endIter))
|
||||||
var InputText = gtk_text_buffer_get_text(InputTextBuffer, addr(startIter), addr(endIter), False)
|
var InputText = get_text(InputTextBuffer, addr(startIter), addr(endIter), False)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
var r: output = execCode($InputText)
|
var r = execCode($InputText)
|
||||||
gtk_text_buffer_set_text(OutputTextBuffer, r[0] & r[1], len(r[0] & r[1]))
|
set_text(OutputTextBuffer, r[0] & r[1], len(r[0] & r[1]))
|
||||||
except:
|
except:
|
||||||
gtk_text_buffer_set_text(OutputTextBuffer, "Error: Could not open file temp.nim", len("Error: Could not open file temp.nim"))
|
set_text(OutputTextBuffer, "Error: Could not open file temp.nim", len("Error: Could not open file temp.nim"))
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
proc initControls() =
|
proc initControls() =
|
||||||
w = gtk_window_new(GTK_WINDOW_TOPLEVEL)
|
w = window_new(gtk2.WINDOW_TOPLEVEL)
|
||||||
gtk_window_set_default_size(w, 500, 600)
|
set_default_size(w, 500, 600)
|
||||||
gtk_window_set_title(w, "Nimrod REPL")
|
set_title(w, "Nimrod REPL")
|
||||||
discard gtk_signal_connect(GTKOBJECT(w), "destroy",
|
discard signal_connect(w, "destroy", SIGNAL_FUNC(nimrepl.destroy), nil)
|
||||||
GTK_SIGNAL_FUNC(destroy), nil)
|
|
||||||
|
|
||||||
# MainBox (vbox)
|
# MainBox (vbox)
|
||||||
var MainBox: PGtkWidget = gtk_vbox_new(False, 0)
|
var MainBox = vbox_new(False, 0)
|
||||||
gtk_container_add(GTK_Container(w), MainBox)
|
add(w, MainBox)
|
||||||
|
|
||||||
# TopMenu (MenuBar)
|
# TopMenu (MenuBar)
|
||||||
var TopMenu: PGtkWidget = gtk_menu_bar_new()
|
var TopMenu = menu_bar_new()
|
||||||
gtk_widget_show(TopMenu)
|
show(TopMenu)
|
||||||
|
|
||||||
var FileMenu = gtk_menu_new()
|
var FileMenu = menu_new()
|
||||||
var OpenMenuItem = gtk_menu_item_new_with_label("Open")
|
var OpenMenuItem = menu_item_new_with_label("Open")
|
||||||
gtk_menu_append(FileMenu, OpenMenuItem)
|
append(FileMenu, OpenMenuItem)
|
||||||
gtk_widget_show(OpenMenuItem)
|
show(OpenMenuItem)
|
||||||
discard gtk_signal_connect(GTKOBJECT(OpenMenuItem), "activate",
|
discard signal_connect(OpenMenuItem, "activate",
|
||||||
GTK_SIGNAL_FUNC(FileOpenClicked), nil)
|
SIGNAL_FUNC(FileOpenClicked), nil)
|
||||||
var SaveMenuItem = gtk_menu_item_new_with_label("Save...")
|
var SaveMenuItem = menu_item_new_with_label("Save...")
|
||||||
gtk_menu_append(FileMenu, SaveMenuItem)
|
append(FileMenu, SaveMenuItem)
|
||||||
gtk_widget_show(SaveMenuItem)
|
show(SaveMenuItem)
|
||||||
discard gtk_signal_connect(GTKOBJECT(SaveMenuItem), "activate",
|
discard signal_connect(SaveMenuItem, "activate",
|
||||||
GTK_SIGNAL_FUNC(FileSaveClicked), nil)
|
SIGNAL_FUNC(FileSaveClicked), nil)
|
||||||
var FileMenuItem = gtk_menu_item_new_with_label("File")
|
var FileMenuItem = menu_item_new_with_label("File")
|
||||||
|
|
||||||
|
|
||||||
gtk_menu_item_set_submenu(FileMenuItem, FileMenu)
|
set_submenu(FileMenuItem, FileMenu)
|
||||||
gtk_widget_show(FileMenuItem)
|
show(FileMenuItem)
|
||||||
gtk_menu_bar_append(TopMenu, FileMenuItem)
|
append(TopMenu, FileMenuItem)
|
||||||
|
|
||||||
gtk_box_pack_start(GTK_Box(MainBox), TopMenu, False, False, 0)
|
pack_start(MainBox, TopMenu, False, False, 0)
|
||||||
|
|
||||||
# VPaned - Seperates the InputTextView and the OutputTextView
|
# VPaned - Seperates the InputTextView and the OutputTextView
|
||||||
var paned = gtk_vpaned_new()
|
var paned = vpaned_new()
|
||||||
gtk_paned_set_position(paned, 450)
|
set_position(paned, 450)
|
||||||
gtk_box_pack_start(GTK_Box(MainBox), paned, True, True, 0)
|
pack_start(MainBox, paned, True, True, 0)
|
||||||
gtk_widget_show(paned)
|
show(paned)
|
||||||
|
|
||||||
# Init the TextBuffers
|
# Init the TextBuffers
|
||||||
InputTextBuffer = gtk_text_buffer_new(nil)
|
InputTextBuffer = text_buffer_new(nil)
|
||||||
OutputTextBuffer = gtk_text_buffer_new(nil)
|
OutputTextBuffer = text_buffer_new(nil)
|
||||||
|
|
||||||
# InputTextView (TextView)
|
# InputTextView (TextView)
|
||||||
var InputScrolledWindow = gtk_scrolled_window_new(nil, nil)
|
var InputScrolledWindow = scrolled_window_new(nil, nil)
|
||||||
gtk_scrolled_window_set_policy(InputScrolledWindow,
|
set_policy(InputScrolledWindow, POLICY_AUTOMATIC, POLICY_AUTOMATIC)
|
||||||
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC)
|
var InputTextView = text_view_new_with_buffer(InputTextBuffer)
|
||||||
var InputTextView = gtk_text_view_new_with_buffer(InputTextBuffer)
|
add_with_viewport(InputScrolledWindow, InputTextView)
|
||||||
gtk_scrolled_window_add_with_viewport(InputScrolledWindow, InputTextView)
|
add1(paned, InputScrolledWindow)
|
||||||
gtk_paned_add1(paned, InputScrolledWindow)
|
show(InputScrolledWindow)
|
||||||
gtk_widget_show(InputScrolledWindow)
|
show(InputTextView)
|
||||||
gtk_widget_show(InputTextView)
|
|
||||||
|
|
||||||
discard gtk_signal_connect(GTKOBJECT(InputTextView), "key-release-event",
|
discard signal_connect(InputTextView, "key-release-event",
|
||||||
GTK_SIGNAL_FUNC(inputKeyReleased), nil)
|
SIGNAL_FUNC(inputKeyReleased), nil)
|
||||||
discard gtk_signal_connect(GTKOBJECT(InputTextView), "key-press-event",
|
discard signal_connect(InputTextView, "key-press-event",
|
||||||
GTK_SIGNAL_FUNC(inputKeyPressed), nil)
|
SIGNAL_FUNC(inputKeyPressed), nil)
|
||||||
|
|
||||||
# OutputTextView (TextView)
|
# OutputTextView (TextView)
|
||||||
var OutputScrolledWindow = gtk_scrolled_window_new(nil, nil)
|
var OutputScrolledWindow = scrolled_window_new(nil, nil)
|
||||||
gtk_scrolled_window_set_policy(OutputScrolledWindow,
|
set_policy(OutputScrolledWindow, POLICY_AUTOMATIC, POLICY_AUTOMATIC)
|
||||||
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC)
|
var OutputTextView = text_view_new_with_buffer(OutputTextBuffer)
|
||||||
var OutputTextView = gtk_text_view_new_with_buffer(OutputTextBuffer)
|
add_with_viewport(OutputScrolledWindow, OutputTextView)
|
||||||
gtk_scrolled_window_add_with_viewport(OutputScrolledWindow, OutputTextView)
|
add2(paned, OutputScrolledWindow)
|
||||||
gtk_paned_add2(paned, OutputScrolledWindow)
|
show(OutputScrolledWindow)
|
||||||
gtk_widget_show(OutputScrolledWindow)
|
show(OutputTextView)
|
||||||
gtk_widget_show(OutputTextView)
|
|
||||||
|
|
||||||
gtk_widget_show(w)
|
show(w)
|
||||||
gtk_widget_show(MainBox)
|
show(MainBox)
|
||||||
|
|
||||||
gtk_nimrod_init()
|
nimrod_init()
|
||||||
initControls()
|
initControls()
|
||||||
gtk_main()
|
main()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue