nimrepl uses new GTK wrapper

This commit is contained in:
Andreas Rumpf 2010-02-28 23:27:49 +01:00
commit df672f5b9a
2 changed files with 83 additions and 87 deletions

View file

@ -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".}

View file

@ -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()