📄 gtk.bas
字号:
REM *************************************************************************************REMREM Module to reach the GTK-server for Scriptbasic.REMREM *************************************************************************************MODULE gtkDECLARE SUB ::gtk ALIAS "_gtk" LIB "gtk-server"REM *************************************************************************************REMREM Example functions to wrap GTK into Scriptbasic.REMREM Only implementing the widgets which can be found on HTML forms to get started withREM GUI programming. Implement more if you like.REMREM -windowsREM -normal buttonsREM -check buttonsREM -radio buttonsREM -text entriesREM -password entriesREM -labelsREM -drop down listsREM -multiline text editsREM -horizontal linesREM -fieldsetsREM -listsREMREM Version 1.0REM - Initial release (february 5, 2006)REM Version 1.1REM - Fixed bug with enabling logging (january 29, 2008)REMREM (c) Peter van Eerten, GPL licenseREMREM *************************************************************************************GLOBAL GTK_INITGLOBAL GTK_CONTAINERGLOBAL GTK_TYPEGLOBAL GTK_START_ITERGLOBAL GTK_END_ITERGLOBAL GTK_TEXT_VIEWGLOBAL GTK_COMBO_BOUNDGLOBAL GTK_LIST_STOREGLOBAL GTK_LIST_ITERGLOBAL GTK_LIST_SELECTGLOBAL GTK_LIST_ARRAYREM ************************************************************** Concat arguments to GTKFUNCTION GUI(g0, g1, g2, g3, g4, g5, g6)LOCAL result$IF GTK_INIT = undef THEN IF g0 = "log" THEN gtk("gtk_server_cfg -log=gtk-server.log") g0 = "gtk_server_version" END IF IF LEN(gtk("gtk_check_version 2 6 0")) > 0 THEN PRINT "Your GTK installation is too old!\n" PRINT "GTK version 2.6.0 or higher is required. Exiting...\n" END END IF gtk("gtk_init NULL NULL") GTK_INIT = "done"END IFresult$ = STR(g0) & " " & STR(g1) & " " & STR(g2) & " " & STR(g3) & " " & STR(g4) & " " & STR(g5) & " " & STR(g6)GUI = gtk(result$)END FUNCTIONREM ************************************************************** UTF-8 conversion for high ASCIIFUNCTION UTF8(st$)LOCAL t, x, b1, b2t = 1WHILE t <= LEN(st$) x = ASC(MID(st$, t, 1)) IF x > 127 THEN b1 = CHR((x AND 192) / 64 + 192) b2 = CHR((x AND 63) + 128) st$ = LEFT(st$, t - 1) & b1 & b2 & RIGHT(st$, LEN(st$) - t - 1) t+=1 END IF t+=1WENDUTF8 = st$END FUNCTIONREM ************************************************************** Window creation starts hereFUNCTION window(title, xsize, ysize)LOCAL win$, fix$win$ = GUI("gtk_window_new 0")GUI("gtk_window_set_title", win$, "\"" & title & "\"")GUI("gtk_widget_set_size_request", win$, xsize, ysize)GUI("gtk_window_set_resizable", win$, 0)GUI("gtk_widget_set_name", win$, win$)GUI("gtk_widget_show", win$)fix$ = GUI("gtk_fixed_new")GUI("gtk_container_add", win$, fix$)GUI("gtk_widget_show", fix$)GTK_CONTAINER{win$} = fix$GTK_TYPE{win$} = "window"window = win$END FUNCTIONREM ************************************************************** ParentizeFUNCTION attach(widget, parent, x, y)LOCAL fix$fix$ = GTK_CONTAINER{parent}GUI("gtk_fixed_put", fix$, widget, x, y)END FUNCTIONREM ************************************************************** Button creation starts hereFUNCTION button(text, xsize, ysize)LOCAL but$but$ = GUI("gtk_button_new_with_label \"" & text & "\"")GUI("gtk_widget_set_size_request", but$, xsize, ysize)GUI("gtk_widget_set_name", but$, but$)GUI("gtk_widget_show", but$)GTK_TYPE{but$} = "button"button = but$END FUNCTIONREM ************************************************************** Check Button creation starts hereFUNCTION check(text, xsize, ysize)LOCAL chk$chk$ = GUI("gtk_check_button_new_with_label \"" & text & "\"")GUI("gtk_widget_set_size_request", chk$, xsize, ysize)GUI("gtk_widget_set_name", chk$, chk$)GUI("gtk_widget_show", chk$)GTK_TYPE{chk$} = "check"check = chk$END FUNCTIONREM ************************************************************** Radio Button creation starts hereFUNCTION radio(text, xsize, ysize, group)LOCAL rad$rad$ = GUI("gtk_radio_button_new_with_label_from_widget", "\"" & STR(group) & "\"", "\"" & text & "\"")GUI("gtk_widget_set_size_request", rad$, xsize, ysize)GUI("gtk_widget_set_name", rad$, rad$)GUI("gtk_widget_show", rad$)GTK_TYPE{rad$} = "radio"radio = rad$END FUNCTIONREM ************************************************************** Entry creation starts hereFUNCTION entry(xsize, ysize)LOCAL ent$ent$ = GUI("gtk_entry_new")GUI("gtk_widget_set_size_request", ent$, xsize, ysize)GUI("gtk_widget_set_name", ent$, ent$)GUI("gtk_widget_show", ent$)GTK_TYPE{ent$} = "entry"entry = ent$END FUNCTIONREM ************************************************************** Password creation starts hereFUNCTION password(xsize, ysize)LOCAL pwd$pwd$ = GUI("gtk_entry_new")GUI("gtk_widget_set_size_request", pwd$, xsize, ysize)GUI("gtk_entry_set_visibility", pwd$, 0)GUI("gtk_widget_set_name", pwd$, pwd$)GUI("gtk_widget_show", pwd$)GTK_TYPE{pwd$} = "password"password = pwd$END FUNCTIONREM ************************************************************** Label creation starts hereFUNCTION label(text, xsize, ysize)LOCAL lab$lab$ = GUI("gtk_label_new \"" & text & "\"")GUI("gtk_widget_set_size_request", lab$, xsize, ysize)GUI("gtk_widget_set_name", lab$, lab$)GUI("gtk_widget_show", lab$)GTK_TYPE{lab$} = "label"label = lab$END FUNCTIONREM ************************************************************** DropList creation starts hereFUNCTION droplist(text, xsize, ysize)LOCAL drop$, idrop$ = GUI("gtk_combo_box_new_text")IF LBOUND(text) = undef THEN PRINT "WARNING: Pass an array to create a droplist!\n" GTK_COMBO_BOUND{drop$} = undefELSE FOR i = LBOUND(text) TO UBOUND(text) GUI("gtk_combo_box_append_text", drop$, "\"" & text[i] & "\"") NEXT i GTK_COMBO_BOUND{drop$} = UBOUND(text) - LBOUND(text)END IFGUI("gtk_combo_box_set_active", drop$, 0)GUI("gtk_widget_set_size_request", drop$, xsize, ysize)GUI("gtk_widget_set_name", drop$, drop$)GUI("gtk_widget_show", drop$)GTK_TYPE{drop$} = "droplist"droplist = drop$END FUNCTIONREM ************************************************************** Multiline text starts hereFUNCTION text(xsize, ysize)LOCAL buf$, vw$, sw$buf$ = GUI("gtk_text_buffer_new NULL")vw$ = GUI("gtk_text_view_new_with_buffer", buf$)GUI("gtk_text_view_set_wrap_mode", vw$, 1)GUI("gtk_widget_set_name", vw$, vw$)GUI("gtk_widget_show", vw$)sw$ = GUI("gtk_scrolled_window_new NULL NULL")GUI("gtk_scrolled_window_set_policy", sw$, 1, 1)GUI("gtk_scrolled_window_set_shadow_type", sw$, 1)GUI("gtk_container_add", sw$, vw$)GUI("gtk_text_view_set_editable", vw$, 1)GUI("gtk_text_view_set_wrap_mode", vw$, 2)GUI("gtk_widget_set_size_request", sw$, xsize, ysize)GUI("gtk_widget_show", sw$)GTK_START_ITER{sw$} = GUI("gtk_server_opaque")GTK_END_ITER{sw$} = GUI("gtk_server_opaque")GTK_TEXT_VIEW{sw$} = vw$GTK_CONTAINER{sw$} = buf$GTK_TYPE{sw$} = "text"text = sw$END FUNCTIONREM ************************************************************** Separator creation starts hereFUNCTION separator(xsize)LOCAL sep$sep$ = GUI("gtk_hseparator_new")GUI("gtk_widget_set_size_request", sep$, xsize, 0)GUI("gtk_widget_set_name", sep$, sep$)GUI("gtk_widget_show", sep$)GTK_TYPE{sep$} = "separator"separator = sep$END FUNCTIONREM ************************************************************** Fieldset (frame) creation starts hereFUNCTION frame(text, xsize, ysize)LOCAL frm$frm$ = GUI("gtk_frame_new NULL")GUI("gtk_frame_set_label", frm$, "\"" & text & "\"")GUI("gtk_widget_set_size_request", frm$, xsize, ysize)GUI("gtk_widget_set_name", frm$, frm$)GUI("gtk_widget_show", frm$)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -