added eugtk examples
11
eugtk/examples/.httpd.css
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
-- ====================================================================
|
||||||
|
-- Styling for the remote display is set here;
|
||||||
|
-- ====================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
button {width: 100%;}
|
||||||
|
button.dir {background-color: skyblue;}
|
||||||
|
button.html {background-color: orange;}
|
||||||
|
|
||||||
|
body {background-image: linear-gradient(180deg, yellow, blue); background-repeat: no-repeat;)
|
845
eugtk/examples/BEAR.ex
Normal file
@ -0,0 +1,845 @@
|
|||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
--# BEAR (Browse, Edit And Run)
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
-- Requires EuGTK version 4.11.10, GtkSourceView and WebKit2Gtk libraries.
|
||||||
|
-- You may have to manually change the names of the libraries in GtkSourcView.plugin
|
||||||
|
-- and/or GtkWebKit.plugin!
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include GtkFileSelector.e
|
||||||
|
include GtkFontSelector.e
|
||||||
|
|
||||||
|
include GtkSettings.e
|
||||||
|
|
||||||
|
include GtkWebKit.plugin
|
||||||
|
include GtkSourceView.plugin
|
||||||
|
include GtkAboutDialog.e
|
||||||
|
|
||||||
|
include std/net/url.e
|
||||||
|
include std/net/http.e
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
-- Globals
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
object current_web_page = "documentation/README.html"
|
||||||
|
object current_net_page = ""
|
||||||
|
object current_edit_file = ""
|
||||||
|
object current_font = "Ubuntu mono 12"
|
||||||
|
object current_web_folder = "~/demos"
|
||||||
|
object current_edit_folder = "~/demos"
|
||||||
|
object current_style = "classic"
|
||||||
|
object uri, link, lang, tags = {}
|
||||||
|
object svbuffer, request, lm, edit_html = 0
|
||||||
|
constant cb = create(GtkClipboard)
|
||||||
|
constant ini = canonical_path("~/.bear.ini")
|
||||||
|
atom sv, menu, m1, m2, m3, m4, m5, sep, context
|
||||||
|
atom wvsettings, svsettings, controller,sig
|
||||||
|
integer toggle = 1, show_map = 0 -- map not used
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
-- Styling
|
||||||
|
-----------------------------
|
||||||
|
constant css = create(GtkCssProvider,`
|
||||||
|
@define-color yellow #F5EEB5;
|
||||||
|
@define-color blue #B5F5F4;
|
||||||
|
GtkFrame,GtkToolbar {border-radius: 10px;
|
||||||
|
background-image:
|
||||||
|
-gtk-gradient (linear,
|
||||||
|
left top, right bottom,
|
||||||
|
from(@yellow), to(@blue));
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
constant mgr = create(GtkSourceStyleSchemeManager)
|
||||||
|
constant ids = get(mgr,"scheme ids")
|
||||||
|
sequence sty = repeat(0,length(ids))
|
||||||
|
sty[1] = create(GtkRadioMenuItem,0,ids[1],_("SelectStyle"),ids[1])
|
||||||
|
for i = 2 to length(ids) do
|
||||||
|
sty[i] = create(GtkRadioMenuItem,sty[i-1],
|
||||||
|
ids[i],_("SelectStyle"),ids[i])
|
||||||
|
end for
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
-- Interface
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,"name=MainWindow,title=The Bear,size=1200x800,border=10,$delete-event=Bail")
|
||||||
|
|
||||||
|
add("MainWindow",create(GtkBox,"name=top,orientation=VERTICAL"))
|
||||||
|
|
||||||
|
pack("top",create(GtkButtonBox,"name=bar,layout=2,margin-bottom=5"))
|
||||||
|
|
||||||
|
add("bar",{ -- these display current file names, captions, and language type;
|
||||||
|
create(GtkFrame,"name=frame1"),
|
||||||
|
create(GtkFrame,"name=frame2"),
|
||||||
|
create(GtkFrame,"name=frame3"),
|
||||||
|
create(GtkFrame,"name=frame4")})
|
||||||
|
|
||||||
|
add("frame1",create(GtkLabel,"name=label1,text=URL,font=8"))
|
||||||
|
add("frame2",create(GtkLabel,"name=label2,text=TITLE,font=8"))
|
||||||
|
add("frame3",create(GtkLabel,"name=label3,text=LANG,font=8"))
|
||||||
|
add("frame4",create(GtkLabel,"name=label4,text=FILE,font=8"))
|
||||||
|
|
||||||
|
|
||||||
|
pack("top",create(GtkPaned,"name=paned,orientation=HORIZONTAL,position=600"),TRUE,TRUE)
|
||||||
|
set("paned","pack1",create_webview(),1,1) -- left side contains web view;
|
||||||
|
|
||||||
|
set("paned","pack2",create(GtkBox,"name=pane2,orientation=VERTICAL"),TRUE,TRUE)
|
||||||
|
pack("pane2",create_sourceview(),1,1) -- right side contains source view;
|
||||||
|
|
||||||
|
pack_end("top",create(GtkBox,"name=control_box,orientation=HORIZONTAL,spacing=5"))
|
||||||
|
pack("control_box",{ -- container for controls at bottom of screen;
|
||||||
|
create(GtkFrame,"name=frame5,label=Web Page"),
|
||||||
|
create(GtkFrame,"name=frame6,label=Source")},TRUE,TRUE)
|
||||||
|
|
||||||
|
add("frame5",create(GtkToolbar,"name=bar1,style=2,icon size=1,font=8"))
|
||||||
|
add("bar1",{ -- buttons for web page navigation;
|
||||||
|
create(GtkToolButton,"name=netOpen,icon_name=www,label=Network",,_("OpenNetPage")),
|
||||||
|
create(GtkToolButton,"name=htmlOpen,stock-id=gtk-open,label=Local",,_("OpenWebPage")),
|
||||||
|
create(GtkToolButton,"name=htmlEdit,stock-id=gtk-edit",,_("EditHtml")),
|
||||||
|
create(GtkToolButton,"name=htmlBack,stock-id=gtk-go-back",,_("Back")),
|
||||||
|
create(GtkToolButton,"name=htmlFwd,stock-id=gtk-go-forward",,_("Fwd")),
|
||||||
|
create(GtkToolButton,"name=htmlFind,stock-id=gtk-find",,_("Find")),
|
||||||
|
create(GtkToolButton,"name=zoomOut,stock-id=gtk-zoom-out",,_("ZoomOut")),
|
||||||
|
create(GtkToolButton,"name=zoomIn,stock-id=gtk-zoom-in",,_("ZoomIn")),
|
||||||
|
create(GtkToolButton,"name=htmlHelp,stock-id=gtk-help",,_("Help"))})
|
||||||
|
|
||||||
|
add("frame6",create(GtkToolbar,"name=bar2,style=2,icon size=1,font=8"))
|
||||||
|
add("bar2",{ -- buttons for source view navigation;
|
||||||
|
create(GtkToolButton,"name=srcNew,stock-id=gtk-new",,_("fileNew")),
|
||||||
|
create(GtkToolButton,"name=srcOpen,stock-id=gtk-open",,_("fileOpen")),
|
||||||
|
create(GtkToolButton,"name=srcSave,stock-id=gtk-save",,_("fileSave")),
|
||||||
|
create(GtkToolButton,"name=srcSaveAs,stock-id=gtk-save-as",,_("fileSaveAs")),
|
||||||
|
create(GtkToolButton,"name=srcRun,stock-id=gtk-execute",,_("fileRun")),
|
||||||
|
create(GtkSeparatorToolItem,"draw=TRUE,expand=TRUE"),
|
||||||
|
create(GtkMenuToolButton,"name=srcMenu,stock-id=gtk-preferences"),
|
||||||
|
create(GtkToolButton,"name=srcAbout,stock-id=gtk-about",,_("About"))})
|
||||||
|
connect("srcMenu","clicked",_("Preferences"))
|
||||||
|
|
||||||
|
set("srcMenu","menu",build_prefs_menu())
|
||||||
|
connect("srcMenu","clicked",_("PopupSrcMenu"))
|
||||||
|
connect("MainWindow","realize",_("on_startup"))
|
||||||
|
|
||||||
|
show_all("MainWindow")
|
||||||
|
--set("MainWindow","interactive debugging",1)
|
||||||
|
main()
|
||||||
|
|
||||||
|
------------------
|
||||||
|
function fileNew()
|
||||||
|
------------------
|
||||||
|
fileselector:do_overwrite_confirmation = TRUE
|
||||||
|
fileselector:filters = {"euphoria","html","text"}
|
||||||
|
object f = fileselector:New()
|
||||||
|
if not atom(f) then
|
||||||
|
create_file(f)
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
function fileOpen()
|
||||||
|
--------------------
|
||||||
|
fileselector:filters = {"euphoria","html","css","text"}
|
||||||
|
object f = fileselector:Open(current_edit_folder & "/*")
|
||||||
|
if not atom(f) then
|
||||||
|
load_file(f)
|
||||||
|
current_edit_folder = pathname(f)
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
function fileSave()
|
||||||
|
--------------------
|
||||||
|
object f
|
||||||
|
atom fn
|
||||||
|
|
||||||
|
fileselector:do_overwrite_confirmation = FALSE
|
||||||
|
|
||||||
|
if match("http://",current_edit_file) = 1 then
|
||||||
|
f = fileselector:Save(canonical_path(filename(fix(decode(current_edit_file)))))
|
||||||
|
|
||||||
|
else
|
||||||
|
f = canonical_path(get("label4","text"))
|
||||||
|
fileselector:filters = {fileext(f)} & {"text"}
|
||||||
|
chdir(pathname(f))
|
||||||
|
f = fileselector:Save(f)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if string(f) then
|
||||||
|
|
||||||
|
fn = open(f,"w")
|
||||||
|
write_file(fn,get(svbuffer,"text"),TEXT_MODE)
|
||||||
|
flush(fn)
|
||||||
|
close(fn)
|
||||||
|
|
||||||
|
if match("htm",fileext(f)) = 1 then
|
||||||
|
set("WebView","reload bypass cache")
|
||||||
|
current_web_folder = pathname(f)
|
||||||
|
else
|
||||||
|
current_edit_folder = pathname(f)
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
function fileSaveAs()
|
||||||
|
-----------------------
|
||||||
|
fileselector:do_overwrite_confirmation = TRUE
|
||||||
|
|
||||||
|
object f = filename(current_edit_file)
|
||||||
|
fileselector:filters = {fileext(f)} & {"text"}
|
||||||
|
|
||||||
|
f = fileselector:SaveAs(f & ".backup")
|
||||||
|
if string(f) then
|
||||||
|
write_file(f,get(svbuffer,"text"),TEXT_MODE)
|
||||||
|
if match("htm",fileext(f)) = 1 then
|
||||||
|
current_web_folder = pathname(f)
|
||||||
|
else
|
||||||
|
current_edit_folder = pathname(f)
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------
|
||||||
|
function fileRun()
|
||||||
|
------------------
|
||||||
|
object f = current_edit_file
|
||||||
|
object cmd = command_line()
|
||||||
|
atom fn
|
||||||
|
cmd = pathname(get("label4","text"))
|
||||||
|
f = filebase(f)
|
||||||
|
object tmp = temp_file(canonical_path("~/"),sprintf("tmp/%s_",{f}),"ex",1)
|
||||||
|
if not file_exists(canonical_path("~/tmp")) then
|
||||||
|
create_directory(canonical_path("~/tmp"),448,1)
|
||||||
|
end if
|
||||||
|
fn = open(tmp,"w")
|
||||||
|
write_file(fn,get(svbuffer,"text"),TEXT_MODE)
|
||||||
|
flush(fn)
|
||||||
|
close(fn)
|
||||||
|
setenv("EUINC",canonical_path("~/demos"))
|
||||||
|
system(text:format("eui [] & ",{tmp}),0)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
function create_file(object f)
|
||||||
|
-------------------------------
|
||||||
|
object hdr
|
||||||
|
lang = get(lm,"guess language",f)
|
||||||
|
set(svbuffer,"language",lang)
|
||||||
|
name = get(lang,"name")
|
||||||
|
switch name do
|
||||||
|
case "Euphoria" then hdr = euhdr
|
||||||
|
case "Python" then hdr = pyhdr
|
||||||
|
case ".ini" then hdr = inihdr
|
||||||
|
case "C","CSS","C++","C/C++/ObjC Header" then hdr = chdr
|
||||||
|
case else hdr = "-- []\n\n"
|
||||||
|
end switch
|
||||||
|
set(svbuffer,"text",format(hdr,{f}))
|
||||||
|
set("label3","text",get(lang,"name"))
|
||||||
|
set("label4","text",f)
|
||||||
|
write_file(f,get(svbuffer,"text"))
|
||||||
|
current_edit_file = f
|
||||||
|
current_edit_folder = pathname(f)
|
||||||
|
return update_buttons()
|
||||||
|
end function
|
||||||
|
|
||||||
|
-------------------------------------------
|
||||||
|
function load_file(object f, integer web=0)
|
||||||
|
-------------------------------------------
|
||||||
|
object txt
|
||||||
|
if match("file://",lower(f)) then
|
||||||
|
f = f[8..$]
|
||||||
|
end if
|
||||||
|
|
||||||
|
if file_exists(canonical_path(f)) then
|
||||||
|
txt = read_file(canonical_path(f))
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
if not networked() then return Warn(,,"Network down") end if
|
||||||
|
|
||||||
|
if not match("http://",f) = 1 then f = "http://" & f end if
|
||||||
|
|
||||||
|
txt = http_get(f)
|
||||||
|
if atom(txt) then
|
||||||
|
Error(,,"Error %d loading %s ",{txt,f})
|
||||||
|
return -1
|
||||||
|
else
|
||||||
|
txt = txt[2]
|
||||||
|
end if
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
lang = get(lm,"guess language",f)
|
||||||
|
set(svbuffer,"language",lang)
|
||||||
|
set(svbuffer,"text",txt)
|
||||||
|
set("label3","text",get(lang,"name"))
|
||||||
|
set("label4","text",f)
|
||||||
|
current_edit_file = f
|
||||||
|
current_edit_folder = pathname(f)
|
||||||
|
|
||||||
|
return update_buttons()
|
||||||
|
end function
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
function fix(object x)
|
||||||
|
----------------------
|
||||||
|
if match("#",x) then
|
||||||
|
x = split(x,'#')
|
||||||
|
x = x[1]
|
||||||
|
end if
|
||||||
|
if match("file:",x) = 1 then
|
||||||
|
return x[8..$]
|
||||||
|
end if
|
||||||
|
if match("http:",x) = 1 then
|
||||||
|
return x[8..$]
|
||||||
|
end if
|
||||||
|
if match("https:",x) = 1 then
|
||||||
|
return x[9..$]
|
||||||
|
end if
|
||||||
|
return x
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
function Back(atom ctl)
|
||||||
|
-----------------------
|
||||||
|
set("WebView","go back")
|
||||||
|
return update_buttons()
|
||||||
|
end function
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
function Fwd(atom ctl)
|
||||||
|
----------------------
|
||||||
|
set("WebView","go forward")
|
||||||
|
return update_buttons()
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------
|
||||||
|
function Undo()
|
||||||
|
---------------
|
||||||
|
set(svbuffer,"undo")
|
||||||
|
return update_buttons()
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------
|
||||||
|
function Redo()
|
||||||
|
---------------
|
||||||
|
set(svbuffer,"redo")
|
||||||
|
return update_buttons()
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------
|
||||||
|
function ZoomIn()
|
||||||
|
------------------
|
||||||
|
set("WebView","zoom level",get("WebView","zoom level") + .1)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------
|
||||||
|
function ZoomOut()
|
||||||
|
------------------
|
||||||
|
set("WebView","zoom level",get("WebView","zoom level") - .1)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-------------------------
|
||||||
|
function update_buttons()
|
||||||
|
-------------------------
|
||||||
|
integer x = get(svbuffer,"char count")
|
||||||
|
set("netOpen","sensitive",networked())
|
||||||
|
set("srcSave","sensitive",x)
|
||||||
|
set("srcSaveAs","sensitive",x)
|
||||||
|
set("srcRun","sensitive",x)
|
||||||
|
if string(current_edit_file)
|
||||||
|
and equal("ex",fileext(current_edit_file)) then
|
||||||
|
set("srcRun","sensitive",equal("ex",fileext(current_edit_file)))
|
||||||
|
else
|
||||||
|
set("srcRun","sensitive",FALSE)
|
||||||
|
end if
|
||||||
|
object uri = get("WebView","uri")
|
||||||
|
if sequence(uri) and match("htm",uri) then
|
||||||
|
set("htmlEdit","tooltip text",uri)
|
||||||
|
set("label1","text",uri)
|
||||||
|
set("label2","text",get("WebView","title"))
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
function OpenNetPage()
|
||||||
|
-----------------------
|
||||||
|
atom dlg = create(GtkDialog)
|
||||||
|
set(dlg,"add button","gtk-cancel",MB_CANCEL)
|
||||||
|
set(dlg,"add button","gtk-ok",MB_OK)
|
||||||
|
atom ca = get(dlg,"content area")
|
||||||
|
atom lbl = create(GtkLabel," Enter a web address beginning with http:// ")
|
||||||
|
atom input = create(GtkEntry)
|
||||||
|
add(ca,{lbl,input})
|
||||||
|
show_all(dlg)
|
||||||
|
|
||||||
|
if match("file://",current_net_page) = 1 then
|
||||||
|
set(input,"text","")
|
||||||
|
elsif match("http://",current_net_page) = 1 then
|
||||||
|
set(input,"text",current_net_page)
|
||||||
|
else
|
||||||
|
set(input,"text","http://" & current_net_page)
|
||||||
|
end if
|
||||||
|
|
||||||
|
object uri, request
|
||||||
|
if run(dlg) = MB_OK then
|
||||||
|
uri = get(input,"text")
|
||||||
|
if length(uri) > 0 then
|
||||||
|
request = create(WebkitUriRequest,decode(uri))
|
||||||
|
set("WebView","load request",request)
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
destroy(dlg)
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
function OpenWebPage()
|
||||||
|
-----------------------
|
||||||
|
fileselector:filters = {"html","css"}
|
||||||
|
object f = fileselector:Open(current_web_folder & "/*")
|
||||||
|
if not atom(f) then
|
||||||
|
load_html(f)
|
||||||
|
current_web_folder = pathname(f)
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
function load_html(object x)
|
||||||
|
----------------------------
|
||||||
|
x = canonical_path(x)
|
||||||
|
if file_type(x) = 1 then
|
||||||
|
set(svsettings,"search text",0)
|
||||||
|
request = create(WebkitUriRequest,"file://" & x)
|
||||||
|
set("WebView","load request",request)
|
||||||
|
set("label1","text",x)
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
function on_load_changed(atom view, integer event)
|
||||||
|
--------------------------------------------------
|
||||||
|
object uri, ext = "?", x = 0
|
||||||
|
object editables = {"e","ex","txt","text","ini","css","xml","glade","c","cpp","h"}
|
||||||
|
|
||||||
|
set(svsettings,"search text","")
|
||||||
|
|
||||||
|
switch event do
|
||||||
|
case WEBKIT_LOAD_STARTED then
|
||||||
|
uri = decode(get("WebView","uri"))
|
||||||
|
ext = fileext(filename(uri))
|
||||||
|
if find(ext,editables) then
|
||||||
|
set("WebView","stop loading")
|
||||||
|
load_file(uri,0)
|
||||||
|
end if
|
||||||
|
|
||||||
|
case WEBKIT_LOAD_REDIRECTED then
|
||||||
|
|
||||||
|
case WEBKIT_LOAD_COMMITTED then
|
||||||
|
|
||||||
|
case WEBKIT_LOAD_FINISHED then
|
||||||
|
uri = decode(get("WebView","uri"))
|
||||||
|
if find(ext,editables) = 0 then
|
||||||
|
current_web_page = uri
|
||||||
|
end if
|
||||||
|
current_net_page = uri
|
||||||
|
|
||||||
|
end switch
|
||||||
|
edit_html = 0
|
||||||
|
|
||||||
|
return update_buttons()
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------------
|
||||||
|
function EditHtml()
|
||||||
|
--------------------------
|
||||||
|
object f = canonical_path(fix(get("label1","text")))
|
||||||
|
edit_html = 1
|
||||||
|
if file_exists(f) then
|
||||||
|
object txt = read_file(f)
|
||||||
|
if not atom(txt) then
|
||||||
|
load_file(f,1)
|
||||||
|
end if
|
||||||
|
else
|
||||||
|
f = get("WebView","uri")
|
||||||
|
if match("#",f) then
|
||||||
|
f = split(f,'#')
|
||||||
|
f = f[1]
|
||||||
|
end if
|
||||||
|
object content = http_get(f)
|
||||||
|
if atom(content) then
|
||||||
|
Error(,,"Cannot load web page",f)
|
||||||
|
else
|
||||||
|
lang = get(lm,"guess language",f)
|
||||||
|
set(svbuffer,"language",lang)
|
||||||
|
set("label3","text",get(lang,"name"))
|
||||||
|
set("label4","text",f)
|
||||||
|
set(svbuffer,"text",content[2])
|
||||||
|
current_edit_file = f
|
||||||
|
update_buttons()
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------------
|
||||||
|
function create_webview()
|
||||||
|
--------------------------
|
||||||
|
atom webview = create(WebkitWebView,"name=WebView")
|
||||||
|
atom vset = get(webview,"settings")
|
||||||
|
set(vset,{
|
||||||
|
{"enable tabs to links",TRUE},
|
||||||
|
{"zoom text only",FALSE},
|
||||||
|
{"enable developer extras",TRUE},
|
||||||
|
{"enable smooth scrolling",TRUE},
|
||||||
|
{"enable_caret_browsing",TRUE},
|
||||||
|
{"draw_compositing_indicators",TRUE},
|
||||||
|
$})
|
||||||
|
|
||||||
|
connect(webview,"load-changed",_("on_load_changed"))
|
||||||
|
|
||||||
|
wvsettings = get(webview,"settings")
|
||||||
|
set(wvsettings,"enable plugins",1)
|
||||||
|
set(wvsettings,"zoom text only",1)
|
||||||
|
set(wvsettings,"enable smooth scrolling",1)
|
||||||
|
--set(wvsettings,"auto load images",0)
|
||||||
|
--set(wvsettings,"enable write console messages to stdout",1)
|
||||||
|
--set(wvsettings,"enable spatial navigation",1)
|
||||||
|
--set(wvsettings,"enable tabs to links",1)
|
||||||
|
--set(wvsettings,"enable xss auditor",1)
|
||||||
|
--set(wvsettings,"minimum font size",12)
|
||||||
|
--set(wvsettings,"draw compositing indicators",1)
|
||||||
|
set(wvsettings,"enable html5 database",1)
|
||||||
|
set(wvsettings,"enable html5 local storage",1)
|
||||||
|
set(wvsettings,"enable hyperlink auditing",1)
|
||||||
|
|
||||||
|
controller = get(webview,"find controller")
|
||||||
|
|
||||||
|
-- following are not implemented by webview yet;
|
||||||
|
--context = get(webview,"context")
|
||||||
|
--set(context,"preferred languages",{"en_US"})
|
||||||
|
--set(context,"spell checking languages",{"en_US"})
|
||||||
|
--set(context,"spell checking enabled",TRUE)
|
||||||
|
|
||||||
|
return webview
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------
|
||||||
|
function Find()
|
||||||
|
---------------
|
||||||
|
atom buffer = get(context,"buffer")
|
||||||
|
object a = allocate(100)
|
||||||
|
object b = allocate(100)
|
||||||
|
object c = allocate(100)
|
||||||
|
object x, count
|
||||||
|
integer try = 1
|
||||||
|
atom fn = define_c_func(LIBSV,"gtk_source_search_context_forward",{P,P,P,P},I)
|
||||||
|
object txt = get(cb,"wait for text")
|
||||||
|
label "retry"
|
||||||
|
c_proc(fnBufStart,{buffer,a})
|
||||||
|
c_proc(fnBufEnd,{buffer,b})
|
||||||
|
if string(txt) then
|
||||||
|
txt = transmute(txt,
|
||||||
|
{{},"<",">","&"},
|
||||||
|
{{},"<",">","&"})
|
||||||
|
txt = join(split(txt),"\\s+")
|
||||||
|
set(svsettings,"regex enabled",1)
|
||||||
|
set(svsettings,"search text",txt)
|
||||||
|
|
||||||
|
count = get(context,"occurrences count")
|
||||||
|
if count = -1 then
|
||||||
|
try += 1
|
||||||
|
if try > 20 then
|
||||||
|
return 0
|
||||||
|
end if
|
||||||
|
goto "retry"
|
||||||
|
else
|
||||||
|
|
||||||
|
-- if count > 1 then
|
||||||
|
-- if show_map then
|
||||||
|
-- set("map","deiconify")
|
||||||
|
-- set("map","present")
|
||||||
|
-- end if
|
||||||
|
-- else
|
||||||
|
-- if show_map then
|
||||||
|
-- set("map","iconify")
|
||||||
|
-- end if
|
||||||
|
-- end if
|
||||||
|
|
||||||
|
x = c_func(fn,{context,a,b,c})
|
||||||
|
set(sv,"scroll to iter",b,.25,1,0,0)
|
||||||
|
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
function create_sourceview()
|
||||||
|
-----------------------------
|
||||||
|
atom scroller = create(GtkScrolledWindow)
|
||||||
|
sv = create(GtkSourceView,{
|
||||||
|
{"name","SrcView"},
|
||||||
|
{"show line numbers",TRUE},
|
||||||
|
{"tab width",4},
|
||||||
|
{"indent width",4},
|
||||||
|
{"indent on tab",TRUE},
|
||||||
|
{"auto indent",TRUE},
|
||||||
|
{"font","Ubuntu mono bold 12"},
|
||||||
|
{"show right margin",TRUE},
|
||||||
|
{"show line marks",TRUE},
|
||||||
|
{"draw spaces",FALSE},
|
||||||
|
{"insert spaces instead of tabs",FALSE},
|
||||||
|
{"right margin position",90},
|
||||||
|
{"highlight current line",TRUE},
|
||||||
|
{"wrap mode",GTK_WRAP_NONE}})
|
||||||
|
add(scroller,sv)
|
||||||
|
|
||||||
|
set(sv,"font",current_font)
|
||||||
|
|
||||||
|
-- map is commented out since only the latest WebView supports maps;
|
||||||
|
|
||||||
|
-- atom win2 = create(GtkWindow,"name=map,border=10,size=80x800")
|
||||||
|
-- atom smap = create(GtkSourceMap,"font=Ubuntu mono 4")
|
||||||
|
--
|
||||||
|
-- set(smap,"view",sv)
|
||||||
|
-- add(win2,smap)
|
||||||
|
-- set(win2,"deletable",0)
|
||||||
|
-- set(win2,"move",0,0)
|
||||||
|
-- set(win2,"decorated",0)
|
||||||
|
-- show_all(win2)
|
||||||
|
-- set(win2,"visible",show_map)
|
||||||
|
--
|
||||||
|
svbuffer = get(sv,"buffer")
|
||||||
|
|
||||||
|
lm = create(GtkSourceLanguageManager)
|
||||||
|
svsettings = create(GtkSourceSearchSettings)
|
||||||
|
context = create(GtkSourceSearchContext,svbuffer,svsettings)
|
||||||
|
|
||||||
|
set(svsettings,"at word boundaries",0)
|
||||||
|
set(svsettings,"case sensitive",1)
|
||||||
|
|
||||||
|
atom tt = get(svbuffer,"tag table")
|
||||||
|
set(tt,"foreach",_("get_tags"))
|
||||||
|
set(tags[1],"background","red")
|
||||||
|
set(tags[1],"foreground","white")
|
||||||
|
set(tags[1],"font","bold")
|
||||||
|
return scroller
|
||||||
|
end function
|
||||||
|
|
||||||
|
function get_tags(atom tt)
|
||||||
|
register(tt,GtkTextTag)
|
||||||
|
tags = append(tags,tt)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------
|
||||||
|
function ToggleMap()
|
||||||
|
------------------------------------
|
||||||
|
-- show_map = not(show_map)
|
||||||
|
-- if show_map then set("map","deiconify")
|
||||||
|
-- else set("map","iconify")
|
||||||
|
-- end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------
|
||||||
|
function ToggleLineNumbers(atom ctl)
|
||||||
|
------------------------------------
|
||||||
|
set("SrcView","show line numbers",get(ctl,"active"))
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------
|
||||||
|
function ToggleSpaces(atom ctl)
|
||||||
|
------------------------------------
|
||||||
|
if get(ctl,"active") then
|
||||||
|
set("SrcView","draw spaces",GTK_SOURCE_DRAW_SPACES_ALL)
|
||||||
|
else
|
||||||
|
set("SrcView","draw spaces",FALSE)
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------
|
||||||
|
function ChooseFont(atom ctl)
|
||||||
|
------------------------------------
|
||||||
|
fontselector:mono_filter = TRUE
|
||||||
|
object x = fontselector:Select(current_font)
|
||||||
|
if not atom(x) then
|
||||||
|
set("SrcView","font",x)
|
||||||
|
current_font = x
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
function build_prefs_menu()
|
||||||
|
-----------------------------
|
||||||
|
menu = create(GtkMenu)
|
||||||
|
m1 = create(GtkMenuItem,"Editor font",_("ChooseFont"))
|
||||||
|
m2 = create(GtkCheckMenuItem,"Line numbers",_("ToggleLineNumbers"))
|
||||||
|
m3 = create(GtkCheckMenuItem,"Draw spaces+tabs",_("ToggleSpaces"))
|
||||||
|
m4 = create(GtkCheckMenuItem,"Show Map",_("ToggleMap"))
|
||||||
|
|
||||||
|
atom sep1 = create(GtkSeparatorMenuItem)
|
||||||
|
atom sep2 = create(GtkSeparatorMenuItem)
|
||||||
|
|
||||||
|
set(menu,"append",{m1,sep1,m2,m3,sep2,sty})
|
||||||
|
set(m2,"name","ShowLineNumbers")
|
||||||
|
set(m2,"active",get("SrcView","show line numbers"))
|
||||||
|
set(m3,"name","DrawSpaces")
|
||||||
|
set(m3,"active",get("SrcView","draw spaces"))
|
||||||
|
set(m4,"name","ShowMap")
|
||||||
|
set(m4,"active",show_map)
|
||||||
|
set(menu,"name","popup_menu")
|
||||||
|
show_all(menu)
|
||||||
|
return menu
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------------------------------
|
||||||
|
function SelectStyle(atom ctl, object name)
|
||||||
|
--------------------------------------------
|
||||||
|
if atom(name) then name = unpack(name) end if
|
||||||
|
atom scheme = get(mgr,"scheme",name)
|
||||||
|
set(svbuffer,"style scheme",scheme)
|
||||||
|
set(mgr,"force rescan")
|
||||||
|
current_style = name
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
function Help()
|
||||||
|
-----------------------------
|
||||||
|
object uri = "file://" & canonical_path("~/demos/documentation/bear.html")
|
||||||
|
set("WebView","load uri",uri)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
function About()
|
||||||
|
-----------------------------
|
||||||
|
atom dlg = about:Dialog
|
||||||
|
set(dlg,"program name","The Bear")
|
||||||
|
set(dlg,"version","Version 1.3")
|
||||||
|
set(dlg,"logo","thumbnails/mongoose.png")
|
||||||
|
set(dlg,"add credit section","Using:",
|
||||||
|
{"Euphoria " & version_string_short(),filename(svdll),filename(wkdll)})
|
||||||
|
run(dlg)
|
||||||
|
hide(dlg)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
function PopupSrcMenu()
|
||||||
|
-------------------------------
|
||||||
|
set("popup_menu","popup")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
function on_startup()
|
||||||
|
-------------------------------
|
||||||
|
settings:Load(ini)
|
||||||
|
|
||||||
|
object x = get("MainWindow","data","edit_file")
|
||||||
|
if sequence(x) and length(x) > 0 and file_exists(canonical_path(x)) then
|
||||||
|
load_file(canonical_path(x),1)
|
||||||
|
end if
|
||||||
|
|
||||||
|
x = get("MainWindow","data","current_web_folder")
|
||||||
|
if sequence(x) and length(x) > 0 then
|
||||||
|
current_web_folder = x
|
||||||
|
end if
|
||||||
|
|
||||||
|
x = get("MainWindow","data","current_net_page")
|
||||||
|
if sequence(x) and length(x) > 0 then
|
||||||
|
current_net_page = fix(x)
|
||||||
|
load_html(current_net_page)
|
||||||
|
end if
|
||||||
|
|
||||||
|
x = get("MainWindow","data","current_edit-folder")
|
||||||
|
if sequence(x) and length(x) > 0 then
|
||||||
|
current_edit_folder = x
|
||||||
|
end if
|
||||||
|
|
||||||
|
x = get("MainWindow","data","current_style")
|
||||||
|
if sequence(x) and length(x) > 0 then
|
||||||
|
current_style = x
|
||||||
|
x = find(current_style,ids)
|
||||||
|
if x > 0 and x <= length(sty) then
|
||||||
|
set(sty[x],"active",1)
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
|
||||||
|
set("netOpen","tooltip text","Open a web page on the WWW")
|
||||||
|
set("htmlOpen","tooltip text","Open a local html file")
|
||||||
|
set("srcOpen","tooltip text","Open a local text file")
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
global function Bail()
|
||||||
|
-------------------------------
|
||||||
|
settings:Save(ini,{"MainWindow","paned","ShowLineNumbers","DrawSpaces","FontSelector"})
|
||||||
|
settings:Add(ini,"MainWindow","data.edit_file",fix(current_edit_file))
|
||||||
|
settings:Add(ini,"MainWindow","data.current_web_folder",current_web_folder)
|
||||||
|
settings:Add(ini,"MainWindow","data.current_net_page",fix(get("label1","text")))
|
||||||
|
settings:Add(ini,"MainWindow","data.current_edit_folder",current_edit_folder)
|
||||||
|
settings:Add(ini,"MainWindow","data.current_style",current_style)
|
||||||
|
settings:Add(ini,"SrcView","font",get("FontSelector","font"))
|
||||||
|
|
||||||
|
-- line above sets the sv font on loading, but there's no direct way to
|
||||||
|
-- save the sv font on exit, so we save the FontSelector current font instead,
|
||||||
|
-- and use that value to restore the sv font.
|
||||||
|
|
||||||
|
return Quit()
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
||||||
|
-- Boilerplate for new files;
|
||||||
|
|
||||||
|
constant euhdr = `
|
||||||
|
----------------------------
|
||||||
|
-- []
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
|
||||||
|
`
|
||||||
|
constant inihdr = `
|
||||||
|
;---------------------------
|
||||||
|
; []
|
||||||
|
;---------------------------
|
||||||
|
|
||||||
|
|
||||||
|
`
|
||||||
|
constant pyhdr = `
|
||||||
|
#-----------------------------
|
||||||
|
# []
|
||||||
|
#-----------------------------
|
||||||
|
|
||||||
|
|
||||||
|
`
|
||||||
|
constant chdr = `
|
||||||
|
/*
|
||||||
|
[]
|
||||||
|
*/
|
||||||
|
|
||||||
|
`
|
||||||
|
--========================================================================--
|
||||||
|
|
39
eugtk/examples/GtkAboutDialog.e
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
-------------------
|
||||||
|
namespace about -- Generic About dialog
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
export constant version = "4.12.0"
|
||||||
|
|
||||||
|
--# EXPORTS: about:Dialog -- use run(about:Dialog), not show()
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
public include euphoria/info.e
|
||||||
|
|
||||||
|
if not equal(version,gtk:version) then
|
||||||
|
Error(,,"GtkAboutDialog version mismatch","should be version " & gtk:version)
|
||||||
|
end if
|
||||||
|
|
||||||
|
export atom Dialog = create(GtkAboutDialog,{
|
||||||
|
{"name","about:dialog"},
|
||||||
|
{"logo","thumbnails/eugtk.png"},
|
||||||
|
{"program name",prg_name},
|
||||||
|
{"version","EuGTK version: " & gtk:version},
|
||||||
|
{"copyright",copyright},
|
||||||
|
{"comments","For information on the Euphoria\nprogramming language, click below"},
|
||||||
|
|
||||||
|
-- must specify custom as the license type if supplying license text;
|
||||||
|
{"license type",GTK_LICENSE_CUSTOM},
|
||||||
|
{"license",LGPL}, -- LGPL text is built into EuGTK
|
||||||
|
{"wrap license",0},
|
||||||
|
|
||||||
|
{"website","http://OpenEuphoria.org"},
|
||||||
|
{"website label","OpenEuphoria"},
|
||||||
|
{"authors",{"Irv Mullins"}},
|
||||||
|
|
||||||
|
--{"artists",0},
|
||||||
|
--{"documenters",0},
|
||||||
|
--{"translator credits",0},
|
||||||
|
--{"add credit section","Special Thanks to",{"\nBob's Burgers\nDuff's Beer"}},
|
||||||
|
$})
|
||||||
|
|
643
eugtk/examples/GtkCairo.e
Normal file
@ -0,0 +1,643 @@
|
|||||||
|
|
||||||
|
----------------------------
|
||||||
|
namespace cairo
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
export constant version = "4.12.0"
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
if not equal(version,gtk:version) then
|
||||||
|
Error(,,"GtkCairo version mismatch","should be version " & gtk:version)
|
||||||
|
end if
|
||||||
|
|
||||||
|
export constant pango_version = gtk_str_func("pango_version_string")
|
||||||
|
|
||||||
|
widget[GdkCairo_t] = {"gdk_cairo",
|
||||||
|
{Cairo_t},
|
||||||
|
{"new",{P},-routine_id("newGdkCairo")},
|
||||||
|
{"draw_from_gl",{P,P,I,I,I,I,I,I,I}}, -- 3.16
|
||||||
|
{"get_clip_rectangle",{P},-routine_id("getClipRect")},
|
||||||
|
{"set_source_pixbuf",{P,P,D,D}},
|
||||||
|
{"set_source_window",{P,P,D,D}},
|
||||||
|
{"region",{P,P}},
|
||||||
|
{"region_create_from_surface",{P},P},
|
||||||
|
{"surface_create_from_pixbuf",{P,I,P},P,0,CairoSurface_t},
|
||||||
|
{"set_source_rgba",{P,I,I,I,D},-routine_id("setCairoRGBA")},
|
||||||
|
{"set_color",{P,P},-routine_id("setCairoColor")},
|
||||||
|
"GdkCairo_t"}
|
||||||
|
|
||||||
|
function getClipRect(atom cr)
|
||||||
|
atom fn = define_func("gdk_cairo_get_clip_rectangle",{P,P},B)
|
||||||
|
atom rect = allocate(8,1)
|
||||||
|
if c_func(fn,{cr,rect}) then
|
||||||
|
return rect
|
||||||
|
else return -1
|
||||||
|
end if
|
||||||
|
end function
|
||||||
|
|
||||||
|
function newGdkCairo(atom win)
|
||||||
|
return gtk_func("gdk_cairo_create",{P},{win})
|
||||||
|
end function
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
-- to use the Cairo color specs, where colors are 0.0 => 1.0
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
function setCairoRGBA(atom cr, atom r, atom g, atom b, atom a=1)
|
||||||
|
gtk_proc("cairo_set_source_rgba",{P,D,D,D,D},{cr,r,g,b,a})
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------------------------------
|
||||||
|
-- it's easier to use named colors
|
||||||
|
--------------------------------------------
|
||||||
|
function setCairoColor(atom cr, object color)
|
||||||
|
if atom(color) then color = sprintf("#%06x",color) end if
|
||||||
|
color = to_rgba(color)
|
||||||
|
color = from_rgba(color,7)
|
||||||
|
setCairoRGBA(cr,color[1],color[2],color[3],color[4])
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget[Cairo_t] = {"cairo",
|
||||||
|
{GObject},
|
||||||
|
{"create",{P},P},
|
||||||
|
{"reference",{P},P},
|
||||||
|
{"destroy",{P}},
|
||||||
|
{"status",{P},I},
|
||||||
|
{"save",{P}},
|
||||||
|
{"restore",{P}},
|
||||||
|
{"get_target",{P},P,0,CairoSurface_t},
|
||||||
|
{"push_group",{P}},
|
||||||
|
{"push_group_with_content",{P,P}},
|
||||||
|
{"pop_group",{P},P},
|
||||||
|
{"pop_group_to_source",{P}},
|
||||||
|
{"get_group_target",{P},P},
|
||||||
|
{"set_source_rgb",{P,D,D,D}},
|
||||||
|
{"set_source",{P,P}},
|
||||||
|
{"get_source",{P},P},
|
||||||
|
{"set_source_surface",{P,P,D,D}},
|
||||||
|
{"set_antialias",{P,I}},
|
||||||
|
{"get_antialias",{P},I},
|
||||||
|
{"set_dash",{P,P,I,D}},
|
||||||
|
{"get_dash_count",{P},I},
|
||||||
|
{"get_dash",{P,D,D}},
|
||||||
|
{"set_fill_rule",{P,I}},
|
||||||
|
{"get_fill_rule",{P},I},
|
||||||
|
{"set_line_cap",{P,I}},
|
||||||
|
{"get_line_cap",{P},I},
|
||||||
|
{"set_line_join",{P,I}},
|
||||||
|
{"get_line_join",{P},I},
|
||||||
|
{"set_line_width",{P,D}},
|
||||||
|
{"get_line_width",{P},D},
|
||||||
|
{"set_miter_limit",{P,I}},
|
||||||
|
{"get_miter_limit",{P},I},
|
||||||
|
{"set_operator",{P,I}},
|
||||||
|
{"get_operator",{P},I},
|
||||||
|
{"set_tolerance",{P,D}},
|
||||||
|
{"get_tolerance",{P},D},
|
||||||
|
{"clip",{P}},
|
||||||
|
{"clip_preserve",{P}},
|
||||||
|
{"clip_extents",{P,D,D,D,D}},
|
||||||
|
{"in_clip",{P,D,D},B},
|
||||||
|
{"reset_clip",{P}},
|
||||||
|
{"rectangle_list_destroy",{P}},
|
||||||
|
{"fill",{P}},
|
||||||
|
{"fill_preserve",{P}},
|
||||||
|
{"fill_extents",{P,D,D,D,D}},
|
||||||
|
{"in_fill",{P,D,D},B},
|
||||||
|
{"mask",{P,P}},
|
||||||
|
{"mask_surface",{P,P,D,D}},
|
||||||
|
{"paint",{P}},
|
||||||
|
{"paint_with_alpha",{P,D}},
|
||||||
|
{"stroke",{P}},
|
||||||
|
{"stroke_preserve",{P}},
|
||||||
|
{"stroke_extents",{P,D,D,D,D}},
|
||||||
|
{"in_stroke",{P,D,D},B},
|
||||||
|
{"copy_page",{P}},
|
||||||
|
{"show_page",{P}},
|
||||||
|
{"copy_path",{P},P},
|
||||||
|
{"copy_path_flat",{P},P},
|
||||||
|
{"path_destroy",{P}},
|
||||||
|
{"append_path",{P,P}},
|
||||||
|
{"has_current_point",{P},B},
|
||||||
|
{"get_current_point",{P,D,D}},
|
||||||
|
{"new_path",{P}},
|
||||||
|
{"new_sub_path",{P}},
|
||||||
|
{"close_path",{P}},
|
||||||
|
{"set_user_data",{P,S,P,P},I},
|
||||||
|
{"get_user_data",{P,S}},
|
||||||
|
{"arc",{P,D,D,D,D,D}},
|
||||||
|
{"arc_negative",{P,D,D,D,D,D}},
|
||||||
|
{"move_to",{P,D,D}},
|
||||||
|
{"rel_move_to",{P,D,D}},
|
||||||
|
{"line_to",{P,D,D}},
|
||||||
|
{"rel_line_to",{P,D,D}},
|
||||||
|
{"rectangle",{P,D,D,D,D}},
|
||||||
|
{"glyph_path",{P,I,I}},
|
||||||
|
{"text_path",{P,S}},
|
||||||
|
{"curve_to",{P,D,D,D,D,D,D}},
|
||||||
|
{"rel_curve_to",{P,D,D,D,D,D,D}},
|
||||||
|
{"path_extents",{P,D,D,D,D}},
|
||||||
|
{"set_font_face",{P,S}},
|
||||||
|
{"device_get_type",{P},I},
|
||||||
|
{"device_status",{P},I},
|
||||||
|
{"status_to_string",{I},S},
|
||||||
|
{"translate",{P,D,D}},
|
||||||
|
{"scale",{P,D,D}},
|
||||||
|
{"rotate",{P,D}},
|
||||||
|
{"transform",{P,P}},
|
||||||
|
{"translate",{P,D,D}},
|
||||||
|
{"scale",{P,D,D}},
|
||||||
|
{"rotate",{P,D}},
|
||||||
|
{"transform",{P,P}},
|
||||||
|
{"set_matrix",{P,P}},
|
||||||
|
{"get_matrix",{P,P}},
|
||||||
|
{"identity_matrix",{P}},
|
||||||
|
{"user_to_device",{P,D,D}},
|
||||||
|
{"user_to_device_distance",{P,D,D}},
|
||||||
|
{"device_to_user",{P,D,D}},
|
||||||
|
{"device_to_user_distance",{P,D,D}},
|
||||||
|
{"version",{},I},
|
||||||
|
{"version_string",{},S},
|
||||||
|
{"set_font_size",{P,D}},
|
||||||
|
{"set_font_matrix",{P,P}},
|
||||||
|
{"get_font_matrix",{P,P}},
|
||||||
|
{"set_font_options",{P,P}},
|
||||||
|
{"get_font_options",{P,P}},
|
||||||
|
{"select_font_face",{P,S,I,I}},
|
||||||
|
{"get_font_face",{P},P},
|
||||||
|
{"set_scaled_font",{P,P}},
|
||||||
|
{"get_scaled_font",{P},P},
|
||||||
|
{"show_glyphs",{P,P}},
|
||||||
|
{"show_text_glyphs",{P,S,I,P,I,P,I,I}},
|
||||||
|
{"font_extents",{P,P}},
|
||||||
|
{"text_extents",{P,S,P}},
|
||||||
|
{"glyph_extents",{P,P,I,P}},
|
||||||
|
{"toy_font_face_create",{S,I,I},P},
|
||||||
|
{"toy_font_face_get_slant",{P},I},
|
||||||
|
{"toy_font_face_get_weight",{P},I},
|
||||||
|
{"glyph_allocate",{I},P},
|
||||||
|
{"glyph_free",{P}},
|
||||||
|
{"text_cluster_allocate",{I},P},
|
||||||
|
{"text_cluster_free",{P}},
|
||||||
|
{"show_text",{P,S}},
|
||||||
|
{"set_source_rgba",{P,D,D,D,D},-routine_id("setCairoRGBA")},
|
||||||
|
{"set_color",{P,S},-routine_id("setCairoColor")},
|
||||||
|
{"should_draw_window",{P,P},-routine_id("CairoShouldDrawWin")},
|
||||||
|
{"transform_to_window",{P,P,P},-routine_id("CairoTransformToWin")},
|
||||||
|
"Cairo_t"}
|
||||||
|
|
||||||
|
function CairoShouldDrawWin(atom cr, atom win)
|
||||||
|
return gtk_func("gtk_cairo_should_draw_window",{P,P},{cr,win})
|
||||||
|
end function
|
||||||
|
|
||||||
|
function CairoTransformToWin(atom cr, atom win1, atom win2)
|
||||||
|
gtk_proc("gtk_cairo_transform_to_window",{P,P,P},{cr,win1,win2})
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget[CairoPattern_t] = {0,
|
||||||
|
{Cairo_t},
|
||||||
|
"CairoPattern_t"}
|
||||||
|
|
||||||
|
widget[CairoFontOptions] = {"cairo_font_options",
|
||||||
|
{0},
|
||||||
|
"CairoFontOptions"}
|
||||||
|
|
||||||
|
widget[CairoContent_t] = {0,
|
||||||
|
{Cairo_t},
|
||||||
|
"CairoContent_t"}
|
||||||
|
|
||||||
|
widget[CairoStatus_t] = {0,
|
||||||
|
{0},
|
||||||
|
"CairoStatus_t"}
|
||||||
|
|
||||||
|
widget[CairoPattern] = {"cairo_pattern",
|
||||||
|
{CairoPattern_t},
|
||||||
|
{"new",{P},-routine_id("newCairoPattern")},
|
||||||
|
{"add_color_stop_rgb",{P,D,D,D,D}},
|
||||||
|
{"add_color_stop_rgba",{P,D,D,D,D,D}},
|
||||||
|
{"get_color_stop_count",{P,I},P,0,CairoStatus_t},
|
||||||
|
{"get_color_stop_rgba",{P,I,D,D,D,D,D},P,0,CairoStatus_t},
|
||||||
|
{"create_rgb",{D,D,D},P,0,CairoPattern_t},
|
||||||
|
{"create_rgba",{D,D,D,D},P,0,CairoPattern_t},
|
||||||
|
{"get_rgba",{P,D,D,D,D},P,0,CairoPattern_t},
|
||||||
|
{"create_for_surface",{P},P,0,CairoPattern_t},
|
||||||
|
{"reference",{P},P,0,CairoPattern_t},
|
||||||
|
{"destroy",{P}},
|
||||||
|
{"status",{P},P,0,CairoStatus_t},
|
||||||
|
{"set_extend",{P,I}},
|
||||||
|
{"get_extend",{P},I},
|
||||||
|
{"set_filter",{P,I}},
|
||||||
|
{"get_filter",{P},I},
|
||||||
|
{"set_matrix",{P,P}},
|
||||||
|
{"get_matrix",{P,P}},
|
||||||
|
{"get_type",{P},I},
|
||||||
|
{"get_reference_count",{P},I},
|
||||||
|
"CairoPattern"}
|
||||||
|
|
||||||
|
function newCairoPattern(atom surf)
|
||||||
|
return gtk_func("cairo_pattern_create_for_surface",{P},{surf})
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget[CairoLinearGradient] = {"cairo_pattern",
|
||||||
|
{CairoPattern},
|
||||||
|
{"new",{D,D,D,D},-routine_id("newLinearGradient"),0,CairoPattern_t},
|
||||||
|
{"get_linear_points",{P,D,D,D,D},P,0,CairoStatus_t},
|
||||||
|
"CairoLinearGradient"}
|
||||||
|
|
||||||
|
function newLinearGradient(atom a, atom b, atom c, atom d)
|
||||||
|
return gtk_func("cairo_pattern_create_linear",{D,D,D,D},{a,b,c,d})
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget[CairoRadialGradient] = {"cairo_pattern",
|
||||||
|
{CairoPattern},
|
||||||
|
{"new",{D,D,D,D,D,D},-routine_id("newRadialGradient"),0,CairoPattern_t},
|
||||||
|
{"get_radial_circles",{P,D,D,D,D,D,D},P,0,CairoStatus_t},
|
||||||
|
"CairoRadialGradient"}
|
||||||
|
|
||||||
|
function newRadialGradient(atom a, atom b, atom c, atom d, atom e, atom f)
|
||||||
|
return gtk_func("cairo_pattern_create_radial",{D,D,D,D,D,D},{a,b,c,d,e,f})
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget[CairoRegion_t] = {"cairo_region_t", -- FIXME!
|
||||||
|
{Cairo_t},
|
||||||
|
"CairoRegion_t"}
|
||||||
|
|
||||||
|
widget[CairoSurface_t] = {"cairo_surface_t",
|
||||||
|
{Cairo_t},
|
||||||
|
{"get_write_to_png",{P,S},-routine_id("writetoPNG")},
|
||||||
|
{"create_similar",{P,P,I,I},P,0,CairoSurface_t},
|
||||||
|
{"create_for_rectangle",{P,D,D,D,D},P,0,CairoSurface_t},
|
||||||
|
{"reference",{P},P,0,CairoSurface_t},
|
||||||
|
{"destroy",{P}},
|
||||||
|
{"finish",{P}},
|
||||||
|
{"flush",{P}},
|
||||||
|
{"get_font_options",{P,P}},
|
||||||
|
{"mark_dirty",{P}},
|
||||||
|
{"mark_dirty_rectangle",{P,I,I,I,I}},
|
||||||
|
{"show_page",{P}},
|
||||||
|
"CairoSurface_t"}
|
||||||
|
|
||||||
|
function writetoPNG(atom surf, object name) -- note difference in call name;
|
||||||
|
return gtk_func("cairo_surface_write_to_png",{P,S},{surf,name})
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget[CairoImageSurface] = {"cairo_image_surface",
|
||||||
|
{CairoSurface_t},
|
||||||
|
{"new",{P},-routine_id("newCairoImageSurface")},
|
||||||
|
{"get_format",{P},I},
|
||||||
|
{"get_width",{P},P},
|
||||||
|
{"get_height",{P},P},
|
||||||
|
{"get_stride",{P},I},
|
||||||
|
"CairoImageSurface"}
|
||||||
|
|
||||||
|
function newCairoImageSurface(object png)
|
||||||
|
if string(png) then
|
||||||
|
png = locate_file(png) if file_type(png) = 1 then
|
||||||
|
png = allocate_string(png)
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
return gtk_func("cairo_image_surface_create_from_png",{S},{png})
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget[PangoCairoLayout] = {"pango_cairo",
|
||||||
|
{PangoLayout},
|
||||||
|
{"new",{P},-routine_id("newPangoCairoLayout")},
|
||||||
|
{"update_layout",{P,P},-routine_id("updateLayout")},
|
||||||
|
{"show_glyph_string",{P,P,P}},
|
||||||
|
{"show_glyph_item",{P,S,P}},
|
||||||
|
{"show_layout_line",{P,P}},
|
||||||
|
{"layout_line_path",{P,P}},
|
||||||
|
{"layout_path",{P,P}},
|
||||||
|
"PangoCairoLayout"}
|
||||||
|
|
||||||
|
function newPangoCairoLayout(atom cr)
|
||||||
|
atom pcl = gtk_func("pango_cairo_create_layout",{P},{cr})
|
||||||
|
register(pcl,PangoLayout)
|
||||||
|
return pcl
|
||||||
|
end function
|
||||||
|
|
||||||
|
function updateLayout(atom pl, atom cr) -- params swapped;
|
||||||
|
gtk_proc("pango_cairo_update_layout",{P,P},{cr,pl})
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget[PangoFont] = {"pango_font",
|
||||||
|
{0},
|
||||||
|
{"describe",{P},P,0,PangoFontDescription},
|
||||||
|
{"describe_with_absolute_size",{P},P,0,PangoFontDescription},
|
||||||
|
{"get_coverage",{P,P},P},
|
||||||
|
{"get_metrics",{P,P},P},
|
||||||
|
{"get_font_map",{P},P,0,PangoFontMap},
|
||||||
|
"PangoFont"}
|
||||||
|
|
||||||
|
widget[PangoAttrList] = {"pango_attr_list",
|
||||||
|
{0},
|
||||||
|
"PangoAttrList"}
|
||||||
|
|
||||||
|
widget[PangoFontDescription] = {"pango_font_description",
|
||||||
|
{PangoFont},
|
||||||
|
{"new",{P},-routine_id("newPangoFontDescription")},
|
||||||
|
{"copy",{P},P,0,PangoFontDescription},
|
||||||
|
{"copy_static",{P},P,0,PangoFontDescription},
|
||||||
|
{"hash",{P},I},
|
||||||
|
{"equal",{P,P},B},
|
||||||
|
{"free",{P}},
|
||||||
|
{"set_family",{P,S}},
|
||||||
|
{"set_family_static",{P,S}},
|
||||||
|
{"get_family",{P},S},
|
||||||
|
{"set_style",{P,I}},
|
||||||
|
{"get_style",{P},I},
|
||||||
|
{"set_variant",{P,I}},
|
||||||
|
{"get_variant",{P},P},
|
||||||
|
{"set_weight",{P,I}},
|
||||||
|
{"get_weight",{P},I},
|
||||||
|
{"set_stretch",{P,I}},
|
||||||
|
{"get_stretch",{P},I},
|
||||||
|
{"set_size",{P,I}},
|
||||||
|
{"get_size",{P},I},
|
||||||
|
{"set_absolute_size",{P,D}},
|
||||||
|
{"get_size_is_absolute",{P},B},
|
||||||
|
{"set_gravity",{P,I}},
|
||||||
|
{"get_gravity",{P},I},
|
||||||
|
{"get_set_fields",{P},I},
|
||||||
|
{"unset_fields",{P,I}},
|
||||||
|
{"merge",{P,P,B}},
|
||||||
|
{"merge_static",{P,P,B}},
|
||||||
|
{"better_match",{P,P,P},B},
|
||||||
|
-- from_string, see new
|
||||||
|
{"to_string",{P},S},
|
||||||
|
{"to_filename",{P},S},
|
||||||
|
"PangoFontDescription"}
|
||||||
|
|
||||||
|
function newPangoFontDescription(object name=0)
|
||||||
|
if atom(name) then
|
||||||
|
return gtk_func("pango_font_description_new")
|
||||||
|
else
|
||||||
|
return gtk_func("pango_font_description_from_string",{P},{allocate_string(name,1)})
|
||||||
|
end if
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget[PangoContext] = {"pango_context",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"load_font",{P,P},P},
|
||||||
|
{"load_fontset",{P,P,P},P},
|
||||||
|
{"get_metrics",{P,P,P},P},
|
||||||
|
{"list_families",{P,A,I}},
|
||||||
|
{"set_font_description",{P,P}},
|
||||||
|
{"get_font_description",{P},P,0,PangoFontDescription},
|
||||||
|
{"set_font_map",{P,P}},
|
||||||
|
{"get_font_map",{P},P},
|
||||||
|
{"set_base_gravity",{P,I}},
|
||||||
|
{"get_language",{P},P},
|
||||||
|
{"set_language",{P,P}},
|
||||||
|
{"get_layout",{P},P},
|
||||||
|
{"get_base_dir",{P},I},
|
||||||
|
{"set_base_dir",{P,I}},
|
||||||
|
{"get_base_gravity",{P},I},
|
||||||
|
{"set_base_gravity",{P,I}},
|
||||||
|
{"get_gravity",{P},I},
|
||||||
|
{"get_gravity_hint",{P},I},
|
||||||
|
{"set_gravity_hint",{P,I}},
|
||||||
|
{"get_matrix",{P},P},
|
||||||
|
{"set_matrix",{P,P}},
|
||||||
|
"PangoContext"}
|
||||||
|
|
||||||
|
widget[PangoFontsetSimple] = {"pango_fontset_simple",
|
||||||
|
{GObject},
|
||||||
|
{"new",{P},P},
|
||||||
|
{"append",{P,P}},
|
||||||
|
{"size",{P},I},
|
||||||
|
"PangoFontsetSimple"}
|
||||||
|
|
||||||
|
widget[PangoFontSet] = {"pango_fontset",
|
||||||
|
{PangoFontsetSimple},
|
||||||
|
{"get_font",{P,I},P,0,PangoFont},
|
||||||
|
{"get_metrics",{P},P},
|
||||||
|
{"foreach",{P,P,P}},
|
||||||
|
"PangoFontSet"}
|
||||||
|
|
||||||
|
widget[PangoFontMap] = {"pango_font_map",
|
||||||
|
{PangoFontSet},
|
||||||
|
{"create_context",{P},P},
|
||||||
|
{"load_font",{P,P,S},P},
|
||||||
|
{"load_fontset",{P,P,S,P},P},
|
||||||
|
{"list_families",{P,A,I}},
|
||||||
|
{"get_shape_engine_type",{P},S},
|
||||||
|
{"get_serial",{P},I},
|
||||||
|
{"changed",{P}},
|
||||||
|
"PangoFontMap"}
|
||||||
|
|
||||||
|
widget[PangoFontFace] = {"pango_font_face",
|
||||||
|
{PangoFontMap},
|
||||||
|
{"get_face_name",{P},S},
|
||||||
|
{"list_sizes",{P,P,I}},
|
||||||
|
{"describe",{P},P,0,PangoFontDescription},
|
||||||
|
{"is_synthesized",{P},B},
|
||||||
|
"PangoFontFace"}
|
||||||
|
|
||||||
|
widget[PangoFontFamily] = {"pango_font_family",
|
||||||
|
{PangoFontFace},
|
||||||
|
{"get_name",{P},S},
|
||||||
|
{"is_monospace",{P},B},
|
||||||
|
{"list_faces",{P,P,I}},
|
||||||
|
"PangoFontFamily"}
|
||||||
|
|
||||||
|
widget[PangoLayout] = {"pango_layout",
|
||||||
|
{GObject},
|
||||||
|
{"new",{P},-routine_id("newPangoLayout")},
|
||||||
|
{"set_text",{P,P},-routine_id("pl_set_text")},
|
||||||
|
{"get_text",{P},S},
|
||||||
|
{"get_character_count",{P},I},
|
||||||
|
{"set_markup",{P,S},-routine_id("pl_set_markup")},
|
||||||
|
{"set_markup_with_accel",{P,S,I,I},-routine_id("pl_set_markup_with_accel")},
|
||||||
|
{"set_font_description",{P,P}},
|
||||||
|
{"get_font_description",{P},P},
|
||||||
|
{"set_attributes",{P,P}},
|
||||||
|
{"get_attributes",{P},P,0,PangoAttrList},
|
||||||
|
{"set_width",{P,I}},
|
||||||
|
{"get_width",{P},I},
|
||||||
|
{"set_height",{P,I}},
|
||||||
|
{"get_height",{P},I},
|
||||||
|
{"get_size",{P,I,I}},
|
||||||
|
{"get_pixel_size",{P,I,I}},
|
||||||
|
{"set_wrap",{P,I}},
|
||||||
|
{"get_wrap",{P},I},
|
||||||
|
{"is_wrapped",{P},B},
|
||||||
|
{"set_ellipsize",{P,I}},
|
||||||
|
{"get_ellipsize",{P},I},
|
||||||
|
{"is_ellipsized",{P},B},
|
||||||
|
{"set_indent",{P,I}},
|
||||||
|
{"get_extents",{P,P,P}},
|
||||||
|
{"get_indent",{P},I},
|
||||||
|
{"get_pixel_size",{P,I,I}},
|
||||||
|
{"get_size",{P,I,I}},
|
||||||
|
{"set_spacing",{P,I}},
|
||||||
|
{"get_spacing",{P},I},
|
||||||
|
{"set_justify",{P,B}},
|
||||||
|
{"get_justify",{P},B},
|
||||||
|
{"set_auto_dir",{P,B}},
|
||||||
|
{"get_auto_dir",{P},B},
|
||||||
|
{"set_alignment",{P,P}},
|
||||||
|
{"get_alignment",{P},P},
|
||||||
|
{"set_tabs",{P,A}},
|
||||||
|
{"get_tabs",{P},A},
|
||||||
|
{"set_single_paragraph_mode",{P,B}},
|
||||||
|
{"get_single_paragraph_mode",{P},B},
|
||||||
|
{"get_unknown_glyphs_count",{P},I},
|
||||||
|
{"get_log_attrs",{P,P,I}},
|
||||||
|
{"get_log_attrs_readonly",{P,I},P},
|
||||||
|
{"index_to_pos",{P,I,P}},
|
||||||
|
{"index_to_line_x",{P,I,B,I,I}},
|
||||||
|
{"xy_to_line",{P,I,I,I,I},B},
|
||||||
|
{"get_cursor_pos",{P,I,P,P}},
|
||||||
|
{"move_cursor_visually",{P,B,I,I,I,I,I}},
|
||||||
|
{"get_pixel_extents",{P,P,P}},
|
||||||
|
{"get_baseline",{P},I},
|
||||||
|
{"get_line_count",{P},I},
|
||||||
|
{"get_line",{P,I},P,0,PangoLayoutLine},
|
||||||
|
{"get_line_readonly",{P,I},P,0,PangoLayoutLine},
|
||||||
|
{"get_lines",{P},A,0,GSList},
|
||||||
|
{"get_lines_readonly",{P},A,0,GSList},
|
||||||
|
{"get_iter",{P},P,0,PangoLayoutIter},
|
||||||
|
{"show_layout",{P,P},-routine_id("pl_show_layout")},
|
||||||
|
{"get_context",{P},P,0,PangoContext},
|
||||||
|
{"context_changed",{P}},
|
||||||
|
{"get_serial",{P},I},
|
||||||
|
{"get_extents",{P,P,P}},
|
||||||
|
"PangoLayout"}
|
||||||
|
|
||||||
|
function newPangoLayout(atom cr=0)
|
||||||
|
if cr=0 then
|
||||||
|
Error(,,"requires cairo_t as param!")
|
||||||
|
end if
|
||||||
|
return gtk_func("pango_cairo_create_layout",{P},{cr})
|
||||||
|
end function
|
||||||
|
|
||||||
|
function pl_set_text(atom layout, object txt)
|
||||||
|
if string(txt) then
|
||||||
|
txt = allocate_string(txt,1)
|
||||||
|
end if
|
||||||
|
gtk_proc("pango_layout_set_text",{P,P,I},{layout,txt,-1})
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
function pl_set_markup(atom layout, object txt)
|
||||||
|
if string(txt) then
|
||||||
|
txt = allocate_string(txt,1)
|
||||||
|
end if
|
||||||
|
gtk_proc("pango_layout_set_markup",{P,P,I},{layout,txt,-1})
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
function pl_set_markup_with_accel(atom layout, object txt,
|
||||||
|
integer marker, integer char)
|
||||||
|
if string(txt) then
|
||||||
|
txt = allocate_string(txt,1)
|
||||||
|
end if
|
||||||
|
gtk_proc("pango_layout_set_markup_with_accel",{P,P,I,I,I},
|
||||||
|
{layout,txt,-1,marker,char})
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
function pl_show_layout(atom pcl, atom cr)
|
||||||
|
gtk_proc("pango_cairo_show_layout",{P,P},{cr,pcl})
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget[PangoLayoutLine] = {"pango_layout_line",
|
||||||
|
{0},
|
||||||
|
{"ref",{P},P},
|
||||||
|
{"unref",{P}},
|
||||||
|
{"get_extents",{P,P,P}},
|
||||||
|
{"get_pixel_extents",{P,P,P}},
|
||||||
|
{"index_to_x",{P,I,B,I}},
|
||||||
|
{"x_to_index",{P,I,I,I},B},
|
||||||
|
{"get_x_ranges",{P,I,I,P,P}},
|
||||||
|
"PangoLayoutLine"}
|
||||||
|
|
||||||
|
widget[PangoLayoutIter] = {"pango_layout_iter",
|
||||||
|
{0},
|
||||||
|
{"copy",{P},P,0,PangoLayoutIter},
|
||||||
|
{"free",{P}},
|
||||||
|
{"next_run",{P},B},
|
||||||
|
{"next_char",{P},B},
|
||||||
|
{"next_cluster",{P},B},
|
||||||
|
{"next_line",{P},B},
|
||||||
|
{"at_last_line",{P},B},
|
||||||
|
{"get_index",{P},I},
|
||||||
|
{"get_baseline",{P},I},
|
||||||
|
{"get_run",{P},P,0,PangoLayoutRun},
|
||||||
|
{"get_run_readonly",{P},P,0,PangoLayoutRun},
|
||||||
|
{"get_line",{P},P,0,PangoLayoutLine},
|
||||||
|
{"get_line_readonly",{P},P,0,PangoLayoutLine},
|
||||||
|
{"get_layout",{P},P,0,PangoLayout},
|
||||||
|
{"get_char_extents",{P,P}},
|
||||||
|
{"get_cluster_extents",{P,P,P}},
|
||||||
|
{"get_run_extents",{P,P,P}},
|
||||||
|
{"get_line_yrange",{P,I,I}},
|
||||||
|
{"get_line_extents",{P,P,P}},
|
||||||
|
{"get_layout_extents",{P,P,P}},
|
||||||
|
"PangoLayoutIter"}
|
||||||
|
|
||||||
|
widget[PangoLayoutRun] = {"pango_layout_run",
|
||||||
|
{0},
|
||||||
|
"PangoLayoutRun"}
|
||||||
|
|
||||||
|
widget[PangoTabArray] = {"pango_tab_array",
|
||||||
|
{0},
|
||||||
|
{"new",{I,B},P},
|
||||||
|
{"get_size",{P},I},
|
||||||
|
{"resize",{P,I}},
|
||||||
|
{"set_tab",{P,I,I,I}},
|
||||||
|
{"get_tab",{P,I,P,P}},
|
||||||
|
{"get_tabs",{P,P,P}},
|
||||||
|
{"get_position_in_pixels",{P},B},
|
||||||
|
"PangoTabArray"}
|
||||||
|
|
||||||
|
widget[PangoLanguage] = {"pango_language",
|
||||||
|
{GObject},
|
||||||
|
{"new",{S},-routine_id("newPangoLanguage")},
|
||||||
|
{"get_default",{P},-routine_id("getDefaultLanguage")},
|
||||||
|
{"get_sample_string",{P},-routine_id("getSampleStr")},
|
||||||
|
{"to_string",{P},S},
|
||||||
|
{"matches",{P,S},B},
|
||||||
|
{"includes_script",{P,P},B},
|
||||||
|
"PangoLanguage"}
|
||||||
|
|
||||||
|
function newPangoLanguage(object s)
|
||||||
|
return gtk_func("pango_language_from_string",{S},{s})
|
||||||
|
end function
|
||||||
|
|
||||||
|
function getDefaultLanguage(object junk)
|
||||||
|
return gtk_str_func("pango_language_get_default")
|
||||||
|
end function
|
||||||
|
|
||||||
|
function getSampleStr(object x)
|
||||||
|
return gtk_str_func("pango_language_get_sample_string",{P},{x})
|
||||||
|
end function
|
||||||
|
|
||||||
|
export enum by * 2
|
||||||
|
PANGO_STRETCH_ULTRA_CONDENSED,
|
||||||
|
PANGO_STRETCH_EXTRA_CONDENSED,
|
||||||
|
PANGO_STRETCH_CONDENSED,
|
||||||
|
PANGO_STRETCH_SEMI_CONDENSED,
|
||||||
|
PANGO_STRETCH_NORMAL,
|
||||||
|
PANGO_STRETCH_SEMI_EXPANDED,
|
||||||
|
PANGO_STRETCH_EXPANDED = 64,
|
||||||
|
PANGO_STRETCH_EXTRA_EXPANDED,
|
||||||
|
PANGO_STRETCH_ULTRA_EXPANDED
|
||||||
|
|
||||||
|
export enum by * 2
|
||||||
|
PANGO_FONT_MASK_FAMILY,
|
||||||
|
PANGO_FONT_MASK_STYLE,
|
||||||
|
PANGO_FONT_MASK_VARIANT,
|
||||||
|
PANGO_FONT_MASK_WEIGHT,
|
||||||
|
PANGO_FONT_MASK_STRETCH,
|
||||||
|
PANGO_FONT_MASK_SIZE,
|
||||||
|
PANGO_FONT_MASK_GRAVITY
|
||||||
|
|
||||||
|
|
9648
eugtk/examples/GtkEngine.e
Normal file
1514
eugtk/examples/GtkEnums.e
Normal file
277
eugtk/examples/GtkEvents.e
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
|
||||||
|
----------------
|
||||||
|
namespace events
|
||||||
|
----------------
|
||||||
|
|
||||||
|
export constant version = "4.12.0"
|
||||||
|
|
||||||
|
--Thanks to Pete Eberlein for helping with this!
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include std/convert.e
|
||||||
|
|
||||||
|
if not equal(version,gtk:version) then
|
||||||
|
Error(,,"GtkEvents version mismatch","should be version " & gtk:version)
|
||||||
|
end if
|
||||||
|
|
||||||
|
-- Maps keys from keypad to match same keys on keyboard,
|
||||||
|
-- maps control/arrow keys to negative numbers, so they
|
||||||
|
-- can be differentiated from the same ascii character
|
||||||
|
-- values;
|
||||||
|
|
||||||
|
constant keyvalues = {
|
||||||
|
{8,-8}, -- bksp
|
||||||
|
{9,-9}, -- tab
|
||||||
|
{20,-20}, -- scroll lock
|
||||||
|
{27,27}, -- escape
|
||||||
|
{80,-80}, -- home 'P'
|
||||||
|
{81,-81}, -- left arrow 'Q'
|
||||||
|
{82,-82}, -- up arrow 'R'
|
||||||
|
{83,-83}, -- right arrow 'S'
|
||||||
|
{84,-84}, -- down arrow 'T'
|
||||||
|
{85,-85}, -- page up 'U'
|
||||||
|
{86,-86}, -- page dn 'V'
|
||||||
|
{87,-87}, -- end 'W'
|
||||||
|
{99,-99}, -- insert 'c'
|
||||||
|
{103,-103},
|
||||||
|
{127,-127}, -- num lock
|
||||||
|
|
||||||
|
{141,13}, -- keypad Enter, with or w/o numlock;
|
||||||
|
|
||||||
|
-- keypad keys w/o numlock;
|
||||||
|
{149,-149}, -- keypad home
|
||||||
|
{150,-150}, -- keypad left
|
||||||
|
{151,-151}, -- keypad up
|
||||||
|
{152,-152}, -- keypad right
|
||||||
|
{153,-153}, -- keypad down
|
||||||
|
{154,-154}, -- keypad pg up
|
||||||
|
{155,-155}, -- keypad pg dn
|
||||||
|
{156,-156}, -- keypad end
|
||||||
|
{157,-157}, -- keypad 5
|
||||||
|
{158,-158}, -- keypad ins
|
||||||
|
{159,-159}, -- keypad del
|
||||||
|
|
||||||
|
-- keypad keys with numlock - return ascii 0..9
|
||||||
|
{170,'*'},{171,'+'},{173,'-'},{175,'/'},
|
||||||
|
{176,48},{177,49},{178,50},{179,51},{180,52}, -- keypad numbers 0..4
|
||||||
|
{181,53},{182,54},{183,55},{184,56},{185,57}, -- keypad numbers 5..9
|
||||||
|
|
||||||
|
-- F keys;
|
||||||
|
{190,-190}, -- F1
|
||||||
|
{191,-191}, -- F2
|
||||||
|
{192,-192}, -- F3
|
||||||
|
{193,-193}, -- F4
|
||||||
|
{194,-194}, -- F5
|
||||||
|
{195,-195}, -- F6
|
||||||
|
{196,-196}, -- F7
|
||||||
|
{197,-197}, -- F8
|
||||||
|
{198,-198}, -- F9
|
||||||
|
{199,-199}, -- F10
|
||||||
|
{200,-200}, -- F11
|
||||||
|
{201,-201}, -- F12
|
||||||
|
{227,-227}, -- left ctl
|
||||||
|
{228,-228}, -- right ctl
|
||||||
|
{229,-229},
|
||||||
|
{225,-225}, -- left shift
|
||||||
|
{226,-226}, -- right shift
|
||||||
|
{228,-228},
|
||||||
|
{233,-233}, -- left alt
|
||||||
|
{234,-234}, -- right alt
|
||||||
|
{236,-236},
|
||||||
|
{255,-255}, -- delete
|
||||||
|
$}
|
||||||
|
|
||||||
|
constant shiftkeys = {
|
||||||
|
{32,-9}, -- shift tab
|
||||||
|
$}
|
||||||
|
|
||||||
|
constant event_names = {
|
||||||
|
{3,"focus-in"},
|
||||||
|
{11,"focus-out"}
|
||||||
|
}
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
export function key(atom event) -- get key pressed;
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
if event = 0 then return 0 end if
|
||||||
|
integer k = peek(event+16)
|
||||||
|
integer z = peek(event+17)
|
||||||
|
integer s = state(event)
|
||||||
|
ifdef BITS64 then
|
||||||
|
k = peek(event+28)
|
||||||
|
z = peek(event+29)
|
||||||
|
end ifdef
|
||||||
|
switch z do
|
||||||
|
case 0 then return k
|
||||||
|
case 255 then return vlookup(k,keyvalues,1,2,k)
|
||||||
|
case 254 then return vlookup(k,shiftkeys,1,2,k)
|
||||||
|
end switch
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
||||||
|
--(32/64)struct GdkEventButton
|
||||||
|
-- 0 0 GdkEventType type a.k.a. id
|
||||||
|
-- 4 8 GtkWindow *window
|
||||||
|
-- 8 16 gint8 send_event
|
||||||
|
-- 12 20 guint32 time
|
||||||
|
-- 16 24 gdouble x
|
||||||
|
-- 24 32 gdouble y
|
||||||
|
-- 32 40 gdouble *axes
|
||||||
|
-- 36 48 guint state
|
||||||
|
-- 40 52 guint button
|
||||||
|
-- 44 56 GdkDevice *device
|
||||||
|
-- 48 64 gdouble x_root, y_root
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
export function id(atom event)
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
if event > 0 then return peek4u(event) else return event end if
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
export function name(atom event)
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
event = id(event)
|
||||||
|
for i = 1 to length(event_names) do
|
||||||
|
if event = event_names[i][1] then
|
||||||
|
return event_names[i][2]
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
return -1
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
export function window(atom event) -- get event window
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
ifdef BITS64 then
|
||||||
|
return peek8u(event + 8)
|
||||||
|
end ifdef
|
||||||
|
return peek4u(event + 4)
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
export function time(atom event) -- get event time
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
ifdef BITS64 then
|
||||||
|
return peek4u(event + 20)
|
||||||
|
end ifdef
|
||||||
|
return peek4u(event + 12)
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
export function xy(atom event) -- get mouse button x y;
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
ifdef BITS64 then
|
||||||
|
return floor({
|
||||||
|
float64_to_atom(peek({event + 24, 8})),
|
||||||
|
float64_to_atom(peek({event + 32, 8}))})
|
||||||
|
end ifdef
|
||||||
|
return floor({
|
||||||
|
float64_to_atom(peek({event + 16, 8})),
|
||||||
|
float64_to_atom(peek({event + 24, 8}))})
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
export function axes(atom event)
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
ifdef BITS64 then
|
||||||
|
return float64_to_atom(peek({event + 40, 8}))
|
||||||
|
end ifdef
|
||||||
|
return float64_to_atom(peek({event + 32, 8}))
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
export function button(atom event) -- get mouse button clicked;
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
ifdef BITS64 then
|
||||||
|
return peek(event+52)
|
||||||
|
end ifdef
|
||||||
|
return peek(event+40)
|
||||||
|
end function
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
export function state(atom event)
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
ifdef BITS64 then
|
||||||
|
return peek(event+48)
|
||||||
|
end ifdef
|
||||||
|
return peek(event+36)
|
||||||
|
end function
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
export function device(atom event)
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
ifdef BITS64 then
|
||||||
|
return peek(event+56)
|
||||||
|
end ifdef
|
||||||
|
return peek(event+44)
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
export function clicks(atom event)
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
atom ct = allocate(64)
|
||||||
|
object result
|
||||||
|
if gtk_func("gdk_event_get_click_count",{P,I},{event,ct}) then
|
||||||
|
result = peek4u(ct)
|
||||||
|
else
|
||||||
|
result = -1
|
||||||
|
end if
|
||||||
|
free(ct)
|
||||||
|
return result
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
export function scroll_dir(atom event)
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
atom dir = allocate(64)
|
||||||
|
object result
|
||||||
|
if gtk_func("gdk_event_get_scroll_direction",{P,I},{event,dir}) then
|
||||||
|
result = peek4u(dir)
|
||||||
|
else
|
||||||
|
result = -1
|
||||||
|
end if
|
||||||
|
free(dir)
|
||||||
|
return result
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------
|
||||||
|
export function pending() -- used sometimes when using timeout or eu tasks
|
||||||
|
---------------------------------------------------------------------------------
|
||||||
|
return gtk_func("gtk_events_pending")
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
export procedure main_iteration()
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
gtk_proc("gtk_main_iteration")
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------------
|
||||||
|
export procedure main_iteration_do(integer i) -- used sometimes when multi-tasking;
|
||||||
|
-----------------------------------------------------------------------------------
|
||||||
|
gtk_proc("gtk_main_iteration_do",{I},i)
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
-- following routine traps the enter key when Entry is activated,
|
||||||
|
-- and uses it like the tab key - so it works like people expect.
|
||||||
|
-- When using Glade, connect each entry's 'activate' signal to
|
||||||
|
-- trap_enter_key
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
constant gsig = define_proc("g_signal_emit_by_name",{P,P,P})
|
||||||
|
constant fsig = allocate_string("move-focus")
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
global function trap_enter_key(atom ctl, atom event)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
if class_id(ctl) = GtkEntry then
|
||||||
|
if event = 0 then
|
||||||
|
c_proc(gsig,{ctl,allocate_string("move-focus"),0})
|
||||||
|
return 1
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
||||||
|
|
454
eugtk/examples/GtkFileSelector.e
Normal file
@ -0,0 +1,454 @@
|
|||||||
|
|
||||||
|
-------------------------
|
||||||
|
namespace fileselector -- Generic file selection dialog;
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
--# EXPORTS:
|
||||||
|
/*
|
||||||
|
-- functions:
|
||||||
|
fileselector:New()
|
||||||
|
fileselector:Open()
|
||||||
|
fileselector:Save()
|
||||||
|
fileselector:SaveAs()
|
||||||
|
fileselector:CreateFolder()
|
||||||
|
fileselector:SelectFolder()
|
||||||
|
|
||||||
|
-- returns:
|
||||||
|
full file path if successful, e.g. "/home/irv/demos/test99.ex"
|
||||||
|
or an atom:
|
||||||
|
MB_ABORT when dialog is closed
|
||||||
|
MB_CANCEL when cancel button is clicked.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
export constant version = "4.12.0"
|
||||||
|
|
||||||
|
if not equal(version,gtk:version) then
|
||||||
|
Error(,,"GtkFileSelector version mismatch","should be version " & gtk:version)
|
||||||
|
end if
|
||||||
|
|
||||||
|
|
||||||
|
-- default settings, change before calling the dialog if required;
|
||||||
|
export boolean
|
||||||
|
create_folders = TRUE,
|
||||||
|
local_only = TRUE,
|
||||||
|
select_multiple = FALSE,
|
||||||
|
show_hidden = FALSE,
|
||||||
|
do_overwrite_confirmation = TRUE,
|
||||||
|
show_preview = FALSE,
|
||||||
|
preview_widget_active = TRUE
|
||||||
|
|
||||||
|
export sequence preview_size = {200,200}
|
||||||
|
|
||||||
|
export atom preview_max = 150 -- default size
|
||||||
|
|
||||||
|
export object selected_filter=0, filters = {"euphoria","text"}
|
||||||
|
|
||||||
|
-- may change filters before calling the dialog
|
||||||
|
-- (or every 5,000 miles, whichever comes first)
|
||||||
|
|
||||||
|
-- IOW, to show only .css files, add the line:
|
||||||
|
-- fileselector:filters = {"css"}
|
||||||
|
-- before calling:
|
||||||
|
-- fileselector:Open("~/demos/*")
|
||||||
|
|
||||||
|
-- note that the syntax of the parameter to Open() is important:
|
||||||
|
-- ~/demos or ~/demos/ will only cause the dialog to highlight the ~/demos folder,
|
||||||
|
-- ~/demos/* will open the demos folder and display the [filtered] file types
|
||||||
|
-- ~/demos/*.css will show folders and all *.css files
|
||||||
|
|
||||||
|
-- combining filters with wildcards:
|
||||||
|
-- fileselector:filters = {"images"}
|
||||||
|
-- fileselector:Open("~/demos/glade/*")
|
||||||
|
-- the above will show all images in the specified directory,
|
||||||
|
|
||||||
|
-- whereas:
|
||||||
|
-- fileselector:Open("~/demos/glade/*.png")
|
||||||
|
-- will show only .png images in the specified directory,
|
||||||
|
-- regardless of how the filters are set.
|
||||||
|
|
||||||
|
-- below, only .png images will be shown, but drop-down options to show .html and .c files
|
||||||
|
-- will be available also:
|
||||||
|
-- fileselector:filters = {"html","c"}
|
||||||
|
-- fileselector:Open("~/demos/glade/*.png")
|
||||||
|
|
||||||
|
--------------------------------------
|
||||||
|
function generate_filter(object name)
|
||||||
|
--------------------------------------
|
||||||
|
object filter = 0
|
||||||
|
|
||||||
|
switch name do
|
||||||
|
|
||||||
|
case "images",".jpg",".gif",".png",".xpm" then filter = create(GtkFileFilter,{
|
||||||
|
{"name","Images"},{"add mime type","image/*"}})
|
||||||
|
|
||||||
|
case "euphoria",".eu",".e",".exw" then filter = create(GtkFileFilter,{
|
||||||
|
{"name","Euphoria files"},{"add pattern","*.e"},
|
||||||
|
{"add pattern","*.ex"},{"add pattern","*.cfg"}})
|
||||||
|
|
||||||
|
case "text",".text",".txt" then filter = create(GtkFileFilter,{
|
||||||
|
{"name","All text"},{"add mime type","text/plain"}})
|
||||||
|
|
||||||
|
case "c",".c",".h" then filter = create(GtkFileFilter,{
|
||||||
|
{"name","C source code"},{"add mime type","text/x-c"},
|
||||||
|
{"add pattern","*.c"},{"add pattern","*.h"}})
|
||||||
|
|
||||||
|
case "c++" then filter = create(GtkFileFilter,{
|
||||||
|
{"name","C++ source code"},{"add pattern","*.c++"}})
|
||||||
|
|
||||||
|
case "css",".css" then filter = create(GtkFileFilter,{
|
||||||
|
{"name","css markup"},{"add mime type","text/css"},
|
||||||
|
{"add pattern","*.css"}})
|
||||||
|
|
||||||
|
case "python",".python",".py" then filter = create(GtkFileFilter,{
|
||||||
|
{"name","Python"},{"add mime type","text/x-python"}})
|
||||||
|
|
||||||
|
case "html",".htm",".html" then filter = create(GtkFileFilter,{
|
||||||
|
{"name","html source"},{"add mime type","text/html"},
|
||||||
|
{"add pattern","*.html"}})
|
||||||
|
|
||||||
|
case "ini",".ini" then filter = create(GtkFileFilter,{
|
||||||
|
{"name","ini"},{"add pattern","*.ini"}})
|
||||||
|
|
||||||
|
case "all" then filter = create(GtkFileFilter,{
|
||||||
|
{"name","All files"},{"add pattern","*"}})
|
||||||
|
|
||||||
|
case "dir" then filter = create(GtkFileFilter,{
|
||||||
|
{"name","Directories"},{"add mime type","inode/directory"}})
|
||||||
|
|
||||||
|
end switch
|
||||||
|
|
||||||
|
return filter
|
||||||
|
|
||||||
|
end function
|
||||||
|
|
||||||
|
constant update_preview = call_back(routine_id("UpdatePreview"))
|
||||||
|
|
||||||
|
----------------------------------------------------------
|
||||||
|
export function New(object current=0)
|
||||||
|
----------------------------------------------------------
|
||||||
|
object result=0
|
||||||
|
atom dlg = create(GtkFileChooserDialog)
|
||||||
|
|
||||||
|
set(dlg,{
|
||||||
|
{"name","FileNew"},
|
||||||
|
{"title","Create a new file"},
|
||||||
|
{"action",GTK_FILE_CHOOSER_ACTION_SAVE},
|
||||||
|
{"preview widget active",preview_widget_active},
|
||||||
|
|
||||||
|
{"add button","gtk-cancel",MB_CANCEL},
|
||||||
|
{"add button","gtk-ok",MB_OK},
|
||||||
|
{"create folders",create_folders},
|
||||||
|
{"local only",local_only},
|
||||||
|
{"select multiple",select_multiple},
|
||||||
|
{"show hidden",show_hidden},
|
||||||
|
{"do overwrite confirmation",do_overwrite_confirmation}})
|
||||||
|
|
||||||
|
for i = 1 to length(filters) do
|
||||||
|
set(dlg,"add filter",generate_filter(filters[i]))
|
||||||
|
end for
|
||||||
|
|
||||||
|
if show_preview = TRUE then
|
||||||
|
atom preview = create(GtkImage)
|
||||||
|
set(dlg,"preview widget",preview)
|
||||||
|
connect(dlg,"update-preview",update_preview,preview)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if atom(current) and current > 0 then
|
||||||
|
set(dlg,"current name",unpack(current))
|
||||||
|
end if
|
||||||
|
|
||||||
|
result = get(dlg,"run")
|
||||||
|
if result = MB_OK then
|
||||||
|
result = get(dlg,"filename")
|
||||||
|
end if
|
||||||
|
|
||||||
|
destroy(dlg)
|
||||||
|
|
||||||
|
return result
|
||||||
|
end function
|
||||||
|
export constant new = call_back(routine_id("New"))
|
||||||
|
|
||||||
|
----------------------------------------------------
|
||||||
|
export function Open(object data=0, atom x=0)
|
||||||
|
----------------------------------------------------
|
||||||
|
object result=0
|
||||||
|
object filter=0
|
||||||
|
|
||||||
|
if atom(data) and data > 0 then data = unpack(data) end if
|
||||||
|
if string(data) and equal("*",filename(data)) then filters &= {"all"} end if
|
||||||
|
|
||||||
|
atom dlg = create(GtkFileChooserDialog)
|
||||||
|
|
||||||
|
set(dlg,{
|
||||||
|
{"name","FileOpen"},
|
||||||
|
{"title","Open a file"},
|
||||||
|
{"action",GTK_FILE_CHOOSER_ACTION_OPEN},
|
||||||
|
{"preview widget active",preview_widget_active},
|
||||||
|
|
||||||
|
{"add button","gtk-cancel",MB_CANCEL},
|
||||||
|
{"add button","gtk-ok",MB_OK},
|
||||||
|
{"create folders",create_folders},
|
||||||
|
{"local only",local_only},
|
||||||
|
{"select multiple",select_multiple},
|
||||||
|
{"show hidden",show_hidden},
|
||||||
|
{"do overwrite confirmation",do_overwrite_confirmation}})
|
||||||
|
|
||||||
|
for i = 1 to length(filters) do
|
||||||
|
set(dlg,"add filter",generate_filter(filters[i]))
|
||||||
|
end for
|
||||||
|
|
||||||
|
if show_preview = TRUE then
|
||||||
|
atom preview = create(GtkImage)
|
||||||
|
set(dlg,"preview widget",preview)
|
||||||
|
connect(dlg,"update-preview",update_preview,preview)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if atom(data) and data > 0 then
|
||||||
|
data = unpack(data)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if string(data) then
|
||||||
|
if file_exists(canonical_path(data)) then
|
||||||
|
set(dlg,"filename",canonical_path(data))
|
||||||
|
else
|
||||||
|
if not equal("*",filename(data)) then
|
||||||
|
filter = create(GtkFileFilter,{ -- build a custom filter;
|
||||||
|
{"name",filename(data) & " files"},
|
||||||
|
{"add pattern",filename(data)}})
|
||||||
|
set(dlg,"add filter",filter)
|
||||||
|
set(dlg,"filter",filter)
|
||||||
|
end if
|
||||||
|
set(dlg,"filename",canonical_path(data)) -- change to desired folder;
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
result = get(dlg,"run")
|
||||||
|
|
||||||
|
if result = MB_OK then
|
||||||
|
result = get(dlg,"filename")
|
||||||
|
end if
|
||||||
|
|
||||||
|
destroy(dlg)
|
||||||
|
|
||||||
|
return result
|
||||||
|
end function
|
||||||
|
export constant open = call_back(routine_id("Open"))
|
||||||
|
|
||||||
|
----------------------------------------------------
|
||||||
|
export function Save(object data, object x=0)
|
||||||
|
----------------------------------------------------
|
||||||
|
object result=0
|
||||||
|
atom dlg = create(GtkFileChooserDialog)
|
||||||
|
atom f
|
||||||
|
|
||||||
|
set(dlg,{
|
||||||
|
{"name","FileSave"},
|
||||||
|
{"title","Save this file"},
|
||||||
|
{"action",GTK_FILE_CHOOSER_ACTION_SAVE},
|
||||||
|
|
||||||
|
{"add button","gtk-cancel",MB_CANCEL},
|
||||||
|
{"add button","gtk-ok",MB_OK},
|
||||||
|
{"create folders",create_folders},
|
||||||
|
{"local only",local_only},
|
||||||
|
{"select multiple",select_multiple},
|
||||||
|
{"show hidden",show_hidden},
|
||||||
|
{"do overwrite confirmation",do_overwrite_confirmation}})
|
||||||
|
|
||||||
|
for i = 1 to length(filters) do
|
||||||
|
set(dlg,"add filter",generate_filter(filters[i]))
|
||||||
|
end for
|
||||||
|
|
||||||
|
if show_preview = TRUE then
|
||||||
|
atom preview = create(GtkImage)
|
||||||
|
set(dlg,"preview widget",preview)
|
||||||
|
connect(dlg,"update-preview",update_preview,preview)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if atom(data) and data > 0 then
|
||||||
|
set(dlg,"current name",unpack(data))
|
||||||
|
end if
|
||||||
|
|
||||||
|
if string(data) then
|
||||||
|
set(dlg,"current name",data)
|
||||||
|
end if
|
||||||
|
|
||||||
|
result = get(dlg,"run")
|
||||||
|
|
||||||
|
if result = MB_OK then
|
||||||
|
result = get(dlg,"filename")
|
||||||
|
end if
|
||||||
|
|
||||||
|
destroy(dlg)
|
||||||
|
|
||||||
|
return result
|
||||||
|
end function
|
||||||
|
export constant save = call_back(routine_id("Save"))
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
export function SaveAs(object data=0, object x=0)
|
||||||
|
-----------------------------------------------------------
|
||||||
|
object result=0
|
||||||
|
atom dlg = create(GtkFileChooserDialog)
|
||||||
|
|
||||||
|
set(dlg,{
|
||||||
|
{"name=FileSaveAs"},
|
||||||
|
{"title","Save this file with a new name"},
|
||||||
|
{"action",GTK_FILE_CHOOSER_ACTION_SAVE},
|
||||||
|
|
||||||
|
{"add button","gtk-cancel",MB_CANCEL},
|
||||||
|
{"add button","gtk-ok",MB_OK},
|
||||||
|
{"create folders",create_folders},
|
||||||
|
{"local only",local_only},
|
||||||
|
{"select multiple",select_multiple},
|
||||||
|
{"show hidden",show_hidden},
|
||||||
|
{"do overwrite confirmation",do_overwrite_confirmation}})
|
||||||
|
|
||||||
|
for i = 1 to length(filters) do
|
||||||
|
set(dlg,"add filter",generate_filter(filters[i]))
|
||||||
|
end for
|
||||||
|
|
||||||
|
if show_preview = TRUE then
|
||||||
|
atom preview = create(GtkImage)
|
||||||
|
set(dlg,"preview widget",preview)
|
||||||
|
connect(dlg,"update-preview",update_preview,preview)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if atom(data) and data > 0 then
|
||||||
|
set(dlg,"current name",unpack(data))
|
||||||
|
elsif string(data) then
|
||||||
|
set(dlg,"current name",data)
|
||||||
|
end if
|
||||||
|
|
||||||
|
result = get(dlg,"run")
|
||||||
|
|
||||||
|
if result = MB_OK then
|
||||||
|
result = get(dlg,"filename")
|
||||||
|
end if
|
||||||
|
|
||||||
|
destroy(dlg)
|
||||||
|
|
||||||
|
return result
|
||||||
|
end function
|
||||||
|
export constant save_as = call_back(routine_id("SaveAs"))
|
||||||
|
|
||||||
|
---------------------------------------------------------------
|
||||||
|
export function CreateFolder(object data=0, object x=0)
|
||||||
|
---------------------------------------------------------------
|
||||||
|
object result=0
|
||||||
|
atom dlg = create(GtkFileChooserDialog)
|
||||||
|
|
||||||
|
set(dlg,{
|
||||||
|
{"name=NewFolder"},
|
||||||
|
{"title","Create a new folder"},
|
||||||
|
{"action",GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER},
|
||||||
|
|
||||||
|
{"add button","gtk-cancel",MB_CANCEL},
|
||||||
|
{"add button","gtk-ok",MB_OK},
|
||||||
|
{"create folders",create_folders},
|
||||||
|
{"local only",local_only},
|
||||||
|
{"select multiple",select_multiple},
|
||||||
|
{"show hidden",show_hidden},
|
||||||
|
{"do overwrite confirmation",do_overwrite_confirmation}})
|
||||||
|
|
||||||
|
for i = 1 to length(filters) do
|
||||||
|
set(dlg,"add filter",generate_filter(filters[i]))
|
||||||
|
end for
|
||||||
|
|
||||||
|
if show_preview = TRUE then
|
||||||
|
atom preview = create(GtkImage)
|
||||||
|
set(dlg,"preview widget",preview)
|
||||||
|
connect(dlg,"update-preview",update_preview,preview)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if atom(data) and data > 0 then
|
||||||
|
set(dlg,"current name",unpack(data))
|
||||||
|
end if
|
||||||
|
|
||||||
|
result = get(dlg,"run")
|
||||||
|
|
||||||
|
if result = MB_OK then
|
||||||
|
result = get(dlg,"filename")
|
||||||
|
end if
|
||||||
|
|
||||||
|
destroy(dlg)
|
||||||
|
|
||||||
|
return result
|
||||||
|
end function
|
||||||
|
export constant create_folder = call_back(routine_id("CreateFolder"))
|
||||||
|
|
||||||
|
---------------------------------------------------------------
|
||||||
|
export function SelectFolder(object data=0, object x=0)
|
||||||
|
---------------------------------------------------------------
|
||||||
|
object result=0
|
||||||
|
atom dlg = create(GtkFileChooserDialog)
|
||||||
|
|
||||||
|
set(dlg,{
|
||||||
|
{"name","SelectFolder"},
|
||||||
|
{"title","Select a folder"},
|
||||||
|
{"action",GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER},
|
||||||
|
|
||||||
|
{"add button","gtk-cancel",MB_CANCEL},
|
||||||
|
{"add button","gtk-ok",MB_OK},
|
||||||
|
{"create folders",create_folders},
|
||||||
|
{"local only",local_only},
|
||||||
|
{"select multiple",select_multiple},
|
||||||
|
{"show hidden",show_hidden},
|
||||||
|
{"do overwrite confirmation",do_overwrite_confirmation}})
|
||||||
|
|
||||||
|
for i = 1 to length(filters) do
|
||||||
|
set(dlg,"add filter",generate_filter(filters[i]))
|
||||||
|
end for
|
||||||
|
|
||||||
|
if show_preview = TRUE then
|
||||||
|
atom preview = create(GtkImage)
|
||||||
|
set(dlg,"preview widget",preview)
|
||||||
|
connect(dlg,"update-preview",update_preview,preview)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if atom(data) and data > 0 then
|
||||||
|
data = unpack(data)
|
||||||
|
if string(data) then
|
||||||
|
if file_exists(canonical_path(data)) then
|
||||||
|
set(dlg,"filename",canonical_path(data))
|
||||||
|
else
|
||||||
|
set(dlg,"filename",data)
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
result = get(dlg,"run")
|
||||||
|
|
||||||
|
if result = MB_OK then
|
||||||
|
result = get(dlg,"filename")
|
||||||
|
end if
|
||||||
|
|
||||||
|
destroy(dlg)
|
||||||
|
|
||||||
|
return result
|
||||||
|
end function
|
||||||
|
export constant select_folder = call_back(routine_id("SelectFolder"))
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
function UpdatePreview(atom dlg, atom preview) -- local: follow focus changes;
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
object pix
|
||||||
|
atom ratio
|
||||||
|
object dimensions
|
||||||
|
object fn = get(dlg,"filename")
|
||||||
|
|
||||||
|
if string(fn) then -- avoid trying to preview a directory!
|
||||||
|
pix = create(GdkPixbuf,fn)
|
||||||
|
if pix > 0 then
|
||||||
|
dimensions = get(pix,"size")
|
||||||
|
ratio = preview_max / dimensions[1]
|
||||||
|
dimensions *= {ratio,ratio}
|
||||||
|
pix = get(pix,"scale simple",dimensions[1],dimensions[2],1)
|
||||||
|
set(preview,"from pixbuf",pix)
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
154
eugtk/examples/GtkFontSelector.e
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
|
||||||
|
----------------------
|
||||||
|
namespace fontselector -- Generic font selector dialog
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
--# EXPORTS
|
||||||
|
/*
|
||||||
|
-- functions -- callbacks
|
||||||
|
fontselector:Select() fontselector:select
|
||||||
|
fontselector:FilterFonts() fontselector:filter
|
||||||
|
|
||||||
|
-- fontlist
|
||||||
|
*/
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include GtkCairo.e
|
||||||
|
include std/wildcard.e
|
||||||
|
include std/hash.e
|
||||||
|
|
||||||
|
export constant version = "4.12.0"
|
||||||
|
|
||||||
|
if not equal(version,gtk:version) then
|
||||||
|
Error(,,"GtkFontSelector version mismatch","should be version " & gtk:version)
|
||||||
|
end if
|
||||||
|
|
||||||
|
-- Optional parameter is preferred (default) font, the one to be
|
||||||
|
-- returned if the font dialog ok button is clicked without choosing
|
||||||
|
-- a different font. You can just specify a size here: "8" and that
|
||||||
|
-- will set only the dialog's size selector.
|
||||||
|
--
|
||||||
|
-- You can specify a full font name and size: e.g. Purisa bold 16,
|
||||||
|
-- and that font will be the one highlighted for selection.
|
||||||
|
-- If you specify a font that doesn't exist: e.g. Bogus italic 18,
|
||||||
|
-- and then use the returned font, GTK will do the best it can,
|
||||||
|
-- which will be to set the existing font to italic in 18pt.
|
||||||
|
-- Fairly fail-safe, in other words.
|
||||||
|
--
|
||||||
|
-- Setting this does not filter the list of fonts shown by the dialog.
|
||||||
|
-- to do this, you need to set the pattern. See below.
|
||||||
|
--
|
||||||
|
-- To exclude unwanted (and unreadable) fonts, such as symbols and
|
||||||
|
-- dingbats, add them to the exclude sequence. See below.
|
||||||
|
--
|
||||||
|
-- pattern can be set prior to the select() call
|
||||||
|
-- pattern can be an array of font names, wildcards are ok
|
||||||
|
-- e.g. {"Courier*","purisa"}
|
||||||
|
-- if you use, for example, just {"Courier"}, without the wildcard,
|
||||||
|
-- no fonts will be found.
|
||||||
|
--
|
||||||
|
-- {"sans"}, {"*sans"}, or {"*sans*"} will each return a different
|
||||||
|
-- set of matching font names! trial and error may be required.
|
||||||
|
--
|
||||||
|
-- if pattern is left unset, ALL fonts will be shown!
|
||||||
|
|
||||||
|
export atom dlg = create(GtkFontChooserDialog,"name=FontSelector")
|
||||||
|
|
||||||
|
export object
|
||||||
|
name = 0, -- font name
|
||||||
|
title = "Choose a font", -- dialog title
|
||||||
|
preview_text = "This is an EuGTK font selector",
|
||||||
|
description = 0, -- a PangoFontDescription
|
||||||
|
family = 0, -- font family
|
||||||
|
style = 0, -- normal, oblique, italic
|
||||||
|
variant = 0,
|
||||||
|
weight = PANGO_WEIGHT_NORMAL,
|
||||||
|
mono_filter = 0,
|
||||||
|
font_list = {}
|
||||||
|
|
||||||
|
export atom size = 12*1024
|
||||||
|
export integer points = 12
|
||||||
|
export sequence pattern = {"*"}
|
||||||
|
|
||||||
|
export sequence exclude = {"*symbol*","*dingbat*","*webdings","*wingdings*"}
|
||||||
|
-- above list filters out unusable fonts;
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
export function Select(object curr_fnt=0)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
set(dlg,"title","Select a font")
|
||||||
|
set(dlg,"preview text",preview_text)
|
||||||
|
if string(curr_fnt) then
|
||||||
|
set(dlg,"font",curr_fnt)
|
||||||
|
end if
|
||||||
|
pattern = lower(pattern)
|
||||||
|
exclude = lower(exclude)
|
||||||
|
|
||||||
|
set(dlg,"filter func",filter)
|
||||||
|
|
||||||
|
if get(dlg,"run") then
|
||||||
|
name = get(dlg,"font")
|
||||||
|
description = create(PangoFontDescription,name)
|
||||||
|
family = get(description,"family")
|
||||||
|
size = get(description,"size")
|
||||||
|
points = math:round(size/PANGO_UNIT)
|
||||||
|
variant = get(description,"variant")
|
||||||
|
style = get(description,"style")
|
||||||
|
weight = get(description,"weight")
|
||||||
|
end if
|
||||||
|
|
||||||
|
hide(dlg) -- we keep it around, since it's likely to be used again :p
|
||||||
|
|
||||||
|
return name
|
||||||
|
end function
|
||||||
|
export constant select = call_back(routine_id("Select"))
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
export function FilterFonts(object family, object face, object data)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
integer result = 0
|
||||||
|
|
||||||
|
if mono_filter then
|
||||||
|
if gtk_func("pango_font_family_is_monospace",{P},{family}) = FALSE then
|
||||||
|
return 0
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
object name = lower(gtk_str_func("pango_font_family_get_name",{P},{family}))
|
||||||
|
for i = 1 to length(pattern) do
|
||||||
|
result = is_match(pattern[i],name) > 0
|
||||||
|
if result = 1 then
|
||||||
|
for x = 1 to length(exclude) do
|
||||||
|
if is_match(exclude[x],name) then
|
||||||
|
return 0
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
end if
|
||||||
|
return result
|
||||||
|
end for
|
||||||
|
return result
|
||||||
|
end function
|
||||||
|
export constant filter = call_back(routine_id("FilterFonts"))
|
||||||
|
|
||||||
|
sequence weight_names =
|
||||||
|
{"thin","ultralight","light","book","normal","medium",
|
||||||
|
"semibold","bold","ultrabold","heavy","ultraheavy"}
|
||||||
|
|
||||||
|
/* -- reference;
|
||||||
|
PANGO_WEIGHT_THIN = 100,
|
||||||
|
PANGO_WEIGHT_ULTRALIGHT = 200,
|
||||||
|
PANGO_WEIGHT_LIGHT = 300,
|
||||||
|
PANGO_WEIGHT_BOOK = 380,
|
||||||
|
PANGO_WEIGHT_NORMAL = 400,
|
||||||
|
PANGO_WEIGHT_MEDIUM = 500,
|
||||||
|
PANGO_WEIGHT_SEMIBOLD = 600,
|
||||||
|
PANGO_WEIGHT_BOLD = 700,
|
||||||
|
PANGO_WEIGHT_ULTRABOLD = 800,
|
||||||
|
PANGO_WEIGHT_HEAVY = 900,
|
||||||
|
PANGO_WEIGHT_ULTRAHEAVY = 1000,
|
||||||
|
PANGO_UNIT = 1024
|
||||||
|
|
||||||
|
PANGO_STYLE_NORMAL = 0,
|
||||||
|
PANGO_STYLE_OBLIQUE = 1,
|
||||||
|
PANGO_STYLE_ITALIC = 2
|
||||||
|
*/
|
567
eugtk/examples/GtkPrinter.e
Normal file
@ -0,0 +1,567 @@
|
|||||||
|
|
||||||
|
--------------------
|
||||||
|
namespace printer -- Utility to make printing easier
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
export constant version = "4.12.0"
|
||||||
|
|
||||||
|
-- EXPORTS:
|
||||||
|
-- functions callbacks
|
||||||
|
-- printer:PrintFile() printer:print_file
|
||||||
|
-- printer:PrintText() printer:print_text
|
||||||
|
|
||||||
|
-- This version handles most common printing needs, but it will not yet respect
|
||||||
|
-- 'marked up' a.k.a. 'rich' text, i.e. text with colors and styles as produced
|
||||||
|
-- by GTK3's TextView widget. It just prints them as plain text.
|
||||||
|
--
|
||||||
|
-- However, it DOES print text marked up with GTK's HTML subset, so you can use
|
||||||
|
-- <b>, <i>, <u>, <span>, <font> ... etc. in your printouts! This includes various
|
||||||
|
-- imbedded font styles and colors.
|
||||||
|
--
|
||||||
|
-- More documentation is found in ~/documentation/printing.html
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include GtkCairo.e
|
||||||
|
include std/datetime.e
|
||||||
|
|
||||||
|
if not equal(version,gtk:version) then
|
||||||
|
Error(,,"GtkPrinter version mismatch","should be version " & gtk:version)
|
||||||
|
end if
|
||||||
|
|
||||||
|
-- The following exported variables can be modified before calling the
|
||||||
|
-- print routine:
|
||||||
|
|
||||||
|
public object header = "[1]\n" -- default is just the page title
|
||||||
|
|
||||||
|
public object subheader = "[1] page [5]\n\n" -- format for headers on pg.2 ... n
|
||||||
|
-- default subheader (above) prints page title and pg #;
|
||||||
|
|
||||||
|
public object footer = "<small>\n<i>Printed by EuGTK [8] on [9]'s computer</i></small>"
|
||||||
|
-- default footer (above) prints date and user name;
|
||||||
|
|
||||||
|
-- Info ID's for use in header and footer;
|
||||||
|
-- 1 = page title (for first page)
|
||||||
|
-- 2 = sub title (for subsequent pages - leave null to use page title (1) on all pgs)
|
||||||
|
-- 3 = file name
|
||||||
|
-- 4 = short name (file name w/o path)
|
||||||
|
-- 5 = current page number
|
||||||
|
-- 6 = n_pages printed e.g. pg 1 of n
|
||||||
|
-- 7 = n_copies requested
|
||||||
|
-- 8 = today's date in date_format
|
||||||
|
-- 9 = user name
|
||||||
|
--10 = user's real name
|
||||||
|
--11 = font name used for this print job
|
||||||
|
--12 = file length in bytes
|
||||||
|
--13 = file timestamp
|
||||||
|
--14 = exported filename, if any
|
||||||
|
|
||||||
|
export integer
|
||||||
|
n_pages = 0, -- number of pages to print (0=all)
|
||||||
|
n_copies = 1,
|
||||||
|
collate = FALSE,
|
||||||
|
duplex = 0,
|
||||||
|
number_up = 1,
|
||||||
|
number_up_layout = 1,
|
||||||
|
units = GTK_UNIT_INCH,
|
||||||
|
use_line_numbers = TRUE,
|
||||||
|
use_color = TRUE, -- print eu comments in red if true
|
||||||
|
lines_per_page = 60,
|
||||||
|
wrap_at = 0,
|
||||||
|
track_status = TRUE,
|
||||||
|
show_progress = TRUE, -- enable the built-in progressbar
|
||||||
|
embed_page_setup = TRUE,
|
||||||
|
orientation = 0,
|
||||||
|
order = 0,
|
||||||
|
confirm = FALSE,
|
||||||
|
sourcecode = TRUE,
|
||||||
|
plaintext = FALSE,
|
||||||
|
use_full_page = FALSE, -- ignore margins
|
||||||
|
has_selection = FALSE,
|
||||||
|
support_selection = FALSE,
|
||||||
|
quality = GTK_PRINT_QUALITY_DRAFT,
|
||||||
|
action = GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
|
||||||
|
auto_lpp = TRUE
|
||||||
|
|
||||||
|
export atom
|
||||||
|
scale = 100,
|
||||||
|
top_margin = 0.25, -- in inch units
|
||||||
|
left_margin = 0.25,
|
||||||
|
right_margin = 0.25,
|
||||||
|
bottom_margin = 0.25,
|
||||||
|
parent = 0,
|
||||||
|
|
||||||
|
signal_status_changed = call_back(routine_id("show_status")),
|
||||||
|
signal_begin_print = call_back(routine_id("begin_print")),
|
||||||
|
signal_draw_page = call_back(routine_id("draw_page")),
|
||||||
|
signal_end_print = call_back(routine_id("end_print")),
|
||||||
|
signal_request_page_setup = 0,
|
||||||
|
signal_done = 0,
|
||||||
|
signal_ready = 0,
|
||||||
|
signal_got_page_size = 0
|
||||||
|
|
||||||
|
export object
|
||||||
|
name = 0,
|
||||||
|
font = "Ubuntu Mono 8",
|
||||||
|
jobname = 0,
|
||||||
|
settings_file = 0,
|
||||||
|
setup_file = 0,
|
||||||
|
export_file = 0,
|
||||||
|
page_ranges = 0,
|
||||||
|
page_set = GTK_PAGE_SET_ALL,
|
||||||
|
custom_tab_hook = 0,
|
||||||
|
custom_tab_label = 0,
|
||||||
|
custom_tab_func = 0
|
||||||
|
|
||||||
|
ifdef WINDOWS then font = "Courier New 16" end ifdef
|
||||||
|
|
||||||
|
export object
|
||||||
|
line_number_format = "[:4] []\n", -- controls line # format AND code line!
|
||||||
|
paper_name = "na_letter", -- 8.5x11.0"
|
||||||
|
tabs = " ", -- replace tab chars with 8 spaces
|
||||||
|
file_name = 0,
|
||||||
|
short_name = 0,
|
||||||
|
page_title = 0,
|
||||||
|
sub_title = 0
|
||||||
|
|
||||||
|
export atom
|
||||||
|
progress = create(GtkProgressBar),
|
||||||
|
settings = create(GtkPrintSettings)
|
||||||
|
|
||||||
|
-- use date and time formats in std/datetime.e;
|
||||||
|
export sequence date_format = "%A, %B %d %Y %l:%M %p"
|
||||||
|
|
||||||
|
sequence user
|
||||||
|
ifdef WINDOWS then
|
||||||
|
user = "User"
|
||||||
|
elsedef
|
||||||
|
user = proper(getenv("USER"))
|
||||||
|
end ifdef
|
||||||
|
|
||||||
|
-- for local use;
|
||||||
|
atom fontdesc
|
||||||
|
integer filesize = 0
|
||||||
|
object timestamp = 0
|
||||||
|
sequence text
|
||||||
|
sequence today = datetime:format(datetime:now(),date_format)
|
||||||
|
|
||||||
|
export procedure reset()
|
||||||
|
n_pages = 0
|
||||||
|
n_copies = 1
|
||||||
|
collate = FALSE
|
||||||
|
duplex = 0
|
||||||
|
number_up = 1
|
||||||
|
number_up_layout = 1
|
||||||
|
units = GTK_UNIT_INCH
|
||||||
|
use_line_numbers = TRUE
|
||||||
|
use_color = TRUE
|
||||||
|
lines_per_page = 60
|
||||||
|
wrap_at = 0
|
||||||
|
track_status = TRUE
|
||||||
|
show_progress = TRUE
|
||||||
|
embed_page_setup = TRUE
|
||||||
|
orientation = 0
|
||||||
|
order = 0
|
||||||
|
confirm = FALSE
|
||||||
|
sourcecode = TRUE
|
||||||
|
plaintext = FALSE
|
||||||
|
use_full_page = FALSE
|
||||||
|
has_selection = FALSE
|
||||||
|
support_selection = FALSE
|
||||||
|
quality = GTK_PRINT_QUALITY_DRAFT
|
||||||
|
action = GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG
|
||||||
|
auto_lpp = TRUE
|
||||||
|
|
||||||
|
scale = 100
|
||||||
|
top_margin = 0.25
|
||||||
|
left_margin = 0.25
|
||||||
|
right_margin = 0.25
|
||||||
|
bottom_margin = 0.25
|
||||||
|
parent = 0
|
||||||
|
|
||||||
|
name = 0
|
||||||
|
paper_name = "na_letter"
|
||||||
|
font = "Ubuntu Mono 8"
|
||||||
|
jobname = 0
|
||||||
|
settings_file = 0
|
||||||
|
setup_file = 0
|
||||||
|
export_file = 0
|
||||||
|
page_ranges = 0
|
||||||
|
page_set = GTK_PAGE_SET_ALL
|
||||||
|
custom_tab_hook = 0
|
||||||
|
custom_tab_label = 0
|
||||||
|
custom_tab_func = 0
|
||||||
|
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
export function PrintFile(object f=0, object x=0)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if string(f) and string(x) then
|
||||||
|
page_title = f
|
||||||
|
file_name = canonical_path(x)
|
||||||
|
timestamp = file_timestamp(file_name)
|
||||||
|
filesize = file_length(file_name)
|
||||||
|
short_name = filebase(file_name)
|
||||||
|
text = read_file(file_name)
|
||||||
|
setup_printer()
|
||||||
|
return 1
|
||||||
|
end if
|
||||||
|
|
||||||
|
if string(f) and atom(x) and x = 0 then
|
||||||
|
f = canonical_path(f)
|
||||||
|
file_name = f
|
||||||
|
timestamp = file_timestamp(f)
|
||||||
|
filesize = file_length(f)
|
||||||
|
short_name = filebase(f)
|
||||||
|
page_title = filename(f)
|
||||||
|
text = read_file(f)
|
||||||
|
setup_printer()
|
||||||
|
return 1
|
||||||
|
end if
|
||||||
|
|
||||||
|
if string(f) and atom(x) and x < 100 then
|
||||||
|
page_title = f
|
||||||
|
short_name = f
|
||||||
|
file_name = f
|
||||||
|
text = read_file(x)
|
||||||
|
setup_printer()
|
||||||
|
return 1
|
||||||
|
end if
|
||||||
|
|
||||||
|
if atom(f) and atom(x) and x < 101 then
|
||||||
|
if atom(file_name) then
|
||||||
|
file_name = ""
|
||||||
|
end if
|
||||||
|
if atom(short_name) then
|
||||||
|
short_name = ""
|
||||||
|
end if
|
||||||
|
if atom(page_title) then
|
||||||
|
page_title = ""
|
||||||
|
end if
|
||||||
|
text = read_file(x)
|
||||||
|
setup_printer()
|
||||||
|
return 1
|
||||||
|
end if
|
||||||
|
|
||||||
|
if atom(f) and atom(x) then
|
||||||
|
x = unpack(x)
|
||||||
|
x = canonical_path(x)
|
||||||
|
file_name = x
|
||||||
|
short_name = filebase(x)
|
||||||
|
page_title = filename(x)
|
||||||
|
text = read_file(x)
|
||||||
|
setup_printer()
|
||||||
|
return 1
|
||||||
|
end if
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
export constant print_file = call_back(routine_id("PrintFile"))
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
export function PrintText(object f=0, object x=0)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if string(f) and string(x) then
|
||||||
|
page_title = f
|
||||||
|
text = x
|
||||||
|
setup_printer()
|
||||||
|
return 1
|
||||||
|
end if
|
||||||
|
|
||||||
|
if atom(f) and string(x) then
|
||||||
|
setup_printer()
|
||||||
|
text = x
|
||||||
|
return 1
|
||||||
|
end if
|
||||||
|
|
||||||
|
if atom(f) and atom(x) then
|
||||||
|
if atom(page_title) and page_title = 0 then
|
||||||
|
page_title = ""
|
||||||
|
end if
|
||||||
|
text = unpack(x)
|
||||||
|
setup_printer()
|
||||||
|
return 1
|
||||||
|
end if
|
||||||
|
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
export constant print_text = call_back(routine_id("PrintText"))
|
||||||
|
|
||||||
|
integer status_code
|
||||||
|
sequence status_string
|
||||||
|
|
||||||
|
-----------------------------------------------
|
||||||
|
export function show_status(atom op)
|
||||||
|
-----------------------------------------------
|
||||||
|
atom
|
||||||
|
fn1 = define_func("gtk_print_operation_get_status",{P},I),
|
||||||
|
fn2 = define_func("gtk_print_operation_get_status_string",{P},S)
|
||||||
|
|
||||||
|
status_code = c_func(fn1,{op})
|
||||||
|
status_string = peek_string(c_func(fn2,{op}))
|
||||||
|
|
||||||
|
ifdef PRINT then display("Status [] []",{status_code,status_string}) end ifdef
|
||||||
|
|
||||||
|
if show_progress then
|
||||||
|
set(progress,"text",status_string)
|
||||||
|
end if
|
||||||
|
|
||||||
|
ifdef DELAY then sleep(0.15) end ifdef
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------------------------
|
||||||
|
export function begin_print(atom op, atom context)
|
||||||
|
------------------------------------------------------
|
||||||
|
ifdef PRINT then display("Begin printing [] pages ",length(text)) end ifdef
|
||||||
|
|
||||||
|
fontdesc = create(PangoFontDescription,font)
|
||||||
|
|
||||||
|
if auto_lpp then
|
||||||
|
atom setup = get(op,"default page setup")
|
||||||
|
atom pght = get(setup,"page height",GTK_UNIT_POINTS)
|
||||||
|
--display("Page height [] pt.",pght)
|
||||||
|
pght -= length(header)
|
||||||
|
pght -= length(footer)
|
||||||
|
atom fs = get(fontdesc,"size") / 1024
|
||||||
|
--display("Font size []",fs)
|
||||||
|
fs = fs * (96/72)
|
||||||
|
integer lpp = 1
|
||||||
|
while ((fs*lpp)) < pght do
|
||||||
|
lpp += 1
|
||||||
|
--display("Text height [] lpp []",{(fs*lpp),lpp})
|
||||||
|
end while
|
||||||
|
--display("New LPP []",lpp-1)
|
||||||
|
lines_per_page = lpp
|
||||||
|
end if
|
||||||
|
|
||||||
|
text = process_text(text)
|
||||||
|
|
||||||
|
set(op,"n pages",n_pages)
|
||||||
|
|
||||||
|
-- important, as a new value for n_pages is computed
|
||||||
|
-- based on the length of the file being read, unless a set number
|
||||||
|
-- has been provided from the calling program.
|
||||||
|
|
||||||
|
if show_progress then -- turn on the progress dialog in the calling program
|
||||||
|
show_all(progress)
|
||||||
|
end if
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
export function draw_page(atom op, atom context, integer pg, atom data)
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
atom fn6 = define_func("gtk_print_context_get_cairo_context",{P},P)
|
||||||
|
|
||||||
|
atom cr = c_func(fn6,{context})
|
||||||
|
atom pl = create(PangoCairoLayout,cr)
|
||||||
|
set(pl,"font description",fontdesc)
|
||||||
|
|
||||||
|
pg += 1
|
||||||
|
if pg > length(text) then
|
||||||
|
set(progress,"text","Printing complete")
|
||||||
|
return 0
|
||||||
|
end if
|
||||||
|
|
||||||
|
if show_progress then
|
||||||
|
set(progress,"text",sprintf("Printing page %d",pg))
|
||||||
|
set(progress,"fraction",pg/n_pages)
|
||||||
|
end if
|
||||||
|
|
||||||
|
ifdef DELAY then sleep(0.25) end ifdef
|
||||||
|
|
||||||
|
object details = {
|
||||||
|
page_title,sub_title,file_name,short_name,
|
||||||
|
pg,n_pages,n_copies,
|
||||||
|
today,user,real_name,font,filesize,timestamp,export_file
|
||||||
|
}
|
||||||
|
|
||||||
|
object page
|
||||||
|
|
||||||
|
if atom(header) then header = "<b><u>[1]</u> page [5] of [6]</b>\n\n" end if
|
||||||
|
|
||||||
|
if pg = 1 or atom(subheader) then
|
||||||
|
page = text:format(header,details)
|
||||||
|
& flatten(text[pg])
|
||||||
|
& text:format(footer,details)
|
||||||
|
else
|
||||||
|
page = text:format(subheader,details)
|
||||||
|
& flatten(text[pg])
|
||||||
|
& text:format(footer,details)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if plaintext then
|
||||||
|
set(pl,"text",page,length(page))
|
||||||
|
else
|
||||||
|
set(pl,"markup",page,length(page))
|
||||||
|
end if
|
||||||
|
|
||||||
|
set(pl,"update layout",cr)
|
||||||
|
set(pl,"show layout",cr)
|
||||||
|
|
||||||
|
ifdef PRINT then printf(1,"Page %d\n",pg) end ifdef
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
function process_text(object txt)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
txt = split(txt,'\n')
|
||||||
|
integer comment, n
|
||||||
|
object a,b
|
||||||
|
object test
|
||||||
|
|
||||||
|
|
||||||
|
for i = 1 to length(txt) do -- replace chars which will confuse markup
|
||||||
|
|
||||||
|
txt[i] = join(split(txt[i],'&'),"&")
|
||||||
|
txt[i] = join(split(txt[i],"&amp;"),"&")
|
||||||
|
|
||||||
|
if sourcecode then
|
||||||
|
txt[i] = join(split(txt[i],'<'),"<")
|
||||||
|
txt[i] = join(split(txt[i],'>'),">")
|
||||||
|
end if
|
||||||
|
|
||||||
|
if use_color then
|
||||||
|
if match("--",txt[i]) then -- a comment;
|
||||||
|
txt[i] = split(txt[i],"--")
|
||||||
|
txt[i] = txt[i][1] & "<span color='red'>-- " & txt[i][2] & "</span>"
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
if use_line_numbers then
|
||||||
|
txt[i] = text:format(line_number_format,{i,txt[i]})
|
||||||
|
else
|
||||||
|
txt[i] &= '\n'
|
||||||
|
end if
|
||||||
|
|
||||||
|
end for
|
||||||
|
|
||||||
|
txt = breakup(txt,lines_per_page)
|
||||||
|
|
||||||
|
if n_pages = 0 then -- no selection
|
||||||
|
n_pages = length(txt)
|
||||||
|
end if
|
||||||
|
|
||||||
|
return txt
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
export function end_print()
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
status_string = "Printing complete"
|
||||||
|
ifdef PRINT then display(status_string) end ifdef
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------
|
||||||
|
export function setup_printer()
|
||||||
|
---------------------------------------------------------------
|
||||||
|
atom _size = create(GtkPaperSize,paper_name)
|
||||||
|
atom err = allocate(16) err = 0
|
||||||
|
object results = 0
|
||||||
|
|
||||||
|
atom fn7 = define_func("gtk_print_operation_run",{P,I,P,P},I)
|
||||||
|
atom fn8 = define_func("gtk_print_run_page_setup_dialog",{P,P,P},P)
|
||||||
|
|
||||||
|
set(settings,"paper size",_size,units)
|
||||||
|
set(settings,"n copies",n_copies)
|
||||||
|
set(settings,"collate",collate)
|
||||||
|
set(settings,"duplex",duplex)
|
||||||
|
set(settings,"reverse",order)
|
||||||
|
set(settings,"scale",scale)
|
||||||
|
set(settings,"quality",quality)
|
||||||
|
set(settings,"number up",number_up)
|
||||||
|
set(settings,"number up layout",number_up_layout)
|
||||||
|
|
||||||
|
if string(name) then
|
||||||
|
set(settings,"printer",name)
|
||||||
|
end if
|
||||||
|
|
||||||
|
atom setup = create(GtkPageSetup)
|
||||||
|
set(setup,"paper size",_size)
|
||||||
|
set(setup,"orientation",orientation)
|
||||||
|
set(setup,"left margin",left_margin,units)
|
||||||
|
set(setup,"right margin",right_margin,units)
|
||||||
|
set(setup,"top margin",top_margin,units)
|
||||||
|
set(setup,"bottom margin",bottom_margin,units)
|
||||||
|
|
||||||
|
atom printop = create(GtkPrintOperation)
|
||||||
|
set(printop,"print settings",settings)
|
||||||
|
set(printop,"default page setup",setup)
|
||||||
|
set(printop,"show progress",show_progress)
|
||||||
|
set(printop,"track print status",track_status)
|
||||||
|
set(printop,"embed page setup",embed_page_setup)
|
||||||
|
set(printop,"support selection",support_selection)
|
||||||
|
set(printop,"has selection",has_selection)
|
||||||
|
set(printop,"use full page",use_full_page)
|
||||||
|
|
||||||
|
if action = GTK_PRINT_OPERATION_ACTION_EXPORT then
|
||||||
|
export_file = canonical_path(export_file)
|
||||||
|
set(printop,"export filename",export_file)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if string(jobname) then
|
||||||
|
set(printop,"job name",jobname)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if custom_tab_hook != 0 then
|
||||||
|
set(printop,"custom tab label",custom_tab_label)
|
||||||
|
connect(printop,"create-custom-widget",custom_tab_func,printop)
|
||||||
|
connect(printop,"custom-widget-apply",custom_tab_hook)
|
||||||
|
end if
|
||||||
|
|
||||||
|
connect(printop,"status-changed",signal_status_changed)
|
||||||
|
connect(printop,"begin-print",signal_begin_print)
|
||||||
|
connect(printop,"draw-page",signal_draw_page)
|
||||||
|
connect(printop,"end-print",signal_end_print)
|
||||||
|
connect(printop,"request-page-setup",signal_request_page_setup)
|
||||||
|
connect(printop,"done",signal_done)
|
||||||
|
connect(printop,"ready",signal_ready)
|
||||||
|
connect(printop,"got-page-size",signal_got_page_size)
|
||||||
|
|
||||||
|
display(get(settings,"printer lpi"))
|
||||||
|
|
||||||
|
c_func(fn7,{printop,action,parent,err}) -- start the print process;
|
||||||
|
|
||||||
|
if string(setup_file) and file_exists(canonical_path(setup_file)) then
|
||||||
|
get(setup,"to file",canonical_path(setup_file))
|
||||||
|
end if
|
||||||
|
|
||||||
|
object jobname = get(printop,"job name")
|
||||||
|
if confirm then
|
||||||
|
if action = GTK_PRINT_OPERATION_ACTION_EXPORT then
|
||||||
|
if Question(0,"PDF Written",
|
||||||
|
sprintf("%s\n<small>Folder: %s</small>",
|
||||||
|
{filename(export_file),pathname(export_file)}),
|
||||||
|
sprintf("%s\nStatus: %d\n%s\nClick Yes to view",{jobname,status_code,status_string})
|
||||||
|
,,,"printer") then
|
||||||
|
show_uri(export_file)
|
||||||
|
end if
|
||||||
|
else
|
||||||
|
Info(0,"Print Job",jobname,
|
||||||
|
sprintf("Status: %d %s",{status_code,status_string})
|
||||||
|
,,"printer")
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
page_title = 0
|
||||||
|
n_pages = 0
|
||||||
|
n_copies = 1
|
||||||
|
action = GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
header = "<b><u>[1]</u></b>\n\n"
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
-- copyright 2015 Irv Mullins
|
||||||
|
-----------------------------
|
||||||
|
|
305
eugtk/examples/GtkSettings.e
Normal file
@ -0,0 +1,305 @@
|
|||||||
|
|
||||||
|
---------------------
|
||||||
|
namespace settings -- functions to read and write config files (*.ini);
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
export constant version = "4.12.0"
|
||||||
|
|
||||||
|
--# EXPORTS
|
||||||
|
/*
|
||||||
|
--functions:
|
||||||
|
settings:Save()
|
||||||
|
settings:Load()
|
||||||
|
settings:Add()
|
||||||
|
|
||||||
|
-- debug:
|
||||||
|
-d SETTINGS
|
||||||
|
*/
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
if not equal(version,gtk:version) then
|
||||||
|
Error(,,"GtkSettings version mismatch","should be version " & gtk:version)
|
||||||
|
end if
|
||||||
|
|
||||||
|
constant fmt = """[].[]=[]"""
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
export function Save(sequence inifile, object ctl_list, integer debug=0)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
-- writes an 'ini' type file (file name and extension are up to you)
|
||||||
|
-- with an entry for each control on ctl_list. The controls MUST have
|
||||||
|
-- been named, otherwise there's no way to save and retrieve the
|
||||||
|
-- value/setting for that control.
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
object comments = {}
|
||||||
|
object txt,line
|
||||||
|
|
||||||
|
if file_exists(inifile) then
|
||||||
|
|
||||||
|
txt = read_lines(inifile)
|
||||||
|
for i = 1 to length(txt) do -- extract the comments;
|
||||||
|
line = txt[i]
|
||||||
|
if match("--",line) = 1
|
||||||
|
or match("!",line) = 1
|
||||||
|
or match("+",line) = 1
|
||||||
|
or equal("\n",line)
|
||||||
|
or equal({},line) then
|
||||||
|
comments = append(comments,line)
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
write_lines(inifile,comments) -- removing everything but the comments;
|
||||||
|
end if -- file exists
|
||||||
|
|
||||||
|
object setting, tmp = 0, pos = {0,0}
|
||||||
|
object t1, name, prop
|
||||||
|
atom handle
|
||||||
|
integer class
|
||||||
|
|
||||||
|
atom fn = open(inifile,"a")
|
||||||
|
|
||||||
|
for x = 1 to length(ctl_list) do
|
||||||
|
|
||||||
|
if string(ctl_list[x]) then
|
||||||
|
handle = pointer(ctl_list[x])
|
||||||
|
else
|
||||||
|
handle = ctl_list[x]
|
||||||
|
end if
|
||||||
|
|
||||||
|
name = get(handle,"name")
|
||||||
|
class = class_id(handle)
|
||||||
|
|
||||||
|
if class=GtkWindow then -- special handling for multiple properties;
|
||||||
|
printf(fn,"%s\n",{get_setting(handle,"size")})
|
||||||
|
pos = get(handle,"position")
|
||||||
|
printf(fn,"%s.position={%d,%d}\n",{name,pos[1],pos[2]})
|
||||||
|
|
||||||
|
else
|
||||||
|
setting = get_setting(handle) -- others have 1 obvious 'saveable' property
|
||||||
|
if length(setting) < 1 then
|
||||||
|
continue
|
||||||
|
end if
|
||||||
|
|
||||||
|
if sequence(setting) then
|
||||||
|
printf(fn,"%s\n",{setting})
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
|
||||||
|
flush(fn)
|
||||||
|
close(fn)
|
||||||
|
|
||||||
|
-- if ! exists for this control:property, then ignore the updated setting;
|
||||||
|
tmp = read_lines(inifile)
|
||||||
|
for i = 1 to length(tmp) do
|
||||||
|
if match("--!",tmp[i]) = 1 then
|
||||||
|
t1 = split(tmp[i],"=")
|
||||||
|
t1 = t1[1][2..$]
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
|
||||||
|
write_lines(inifile,tmp)
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
export function Load(sequence inifile, integer debug=0)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
-- used to restore settings from the specified ini file.
|
||||||
|
-- this should be called after the controls are 'realized'
|
||||||
|
|
||||||
|
object txt, line, obj, prop, val1=0, val2=0, val3=0, val4=0
|
||||||
|
|
||||||
|
if not(file_exists(inifile)) then
|
||||||
|
write_file(inifile,sprintf("--%s\n\n",{inifile}),TEXT_MODE)
|
||||||
|
display("Creating ini file: []",{inifile})
|
||||||
|
else
|
||||||
|
if debug then display("Reading []",{inifile}) end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
txt = read_lines(inifile)
|
||||||
|
|
||||||
|
integer err=0
|
||||||
|
object a,b
|
||||||
|
|
||||||
|
for i = 1 to length(txt) do
|
||||||
|
|
||||||
|
line = txt[i]
|
||||||
|
|
||||||
|
if match("--",line) > 2 then -- strip trailing comments;
|
||||||
|
line = line[1..match("--",line)-2]
|
||||||
|
end if
|
||||||
|
|
||||||
|
if match("--!",line) = 1 then
|
||||||
|
line = line[4..$] -- keep it
|
||||||
|
end if
|
||||||
|
|
||||||
|
if match("+",line) = 1 or match("!",line) then
|
||||||
|
line = line[2..$] -- dito
|
||||||
|
end if
|
||||||
|
|
||||||
|
if match("--",line) or match(";",line)
|
||||||
|
or match("/*",line) then
|
||||||
|
continue -- a comment, do nothing with it
|
||||||
|
end if
|
||||||
|
|
||||||
|
if length(line) > 0 then
|
||||||
|
line = split(line,'=')
|
||||||
|
a = line[1] b = line[2]
|
||||||
|
a = split(a,'.')
|
||||||
|
line = a & {b}
|
||||||
|
|
||||||
|
if debug > 1 then display(line) end if
|
||||||
|
|
||||||
|
if vlookup(line[1],registry,4,1,-1) = -1 then
|
||||||
|
err = i
|
||||||
|
Error(,"Ini Load Error",
|
||||||
|
sprintf("Invalid object name: %s",{line[1]}),
|
||||||
|
sprintf("Line #%d of %s",{i,filename(inifile)}))
|
||||||
|
else
|
||||||
|
if equal("data",line[2]) then
|
||||||
|
set(line[1],"data",line[3],line[4])
|
||||||
|
else
|
||||||
|
set(line[1],line[2],line[3])
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
|
||||||
|
if debug = 1 then
|
||||||
|
for i = 1 to length(txt) do
|
||||||
|
if i = err then
|
||||||
|
display("ERROR:[:3]:[]",{i,txt[i]})
|
||||||
|
else
|
||||||
|
display("[:3]:[]",{i,txt[i]})
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
end if
|
||||||
|
|
||||||
|
write_lines(inifile,txt)
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------------------
|
||||||
|
export function Add(object ini,object ctl, sequence prop, object v1=0, object v2=0)
|
||||||
|
-------------------------------------------------------------------------------------------
|
||||||
|
if atom(ctl) then ctl = get(ctl,"name") end if
|
||||||
|
|
||||||
|
Delete(ini,ctl,prop)
|
||||||
|
|
||||||
|
if equal("position",prop) or equal("size",prop) then
|
||||||
|
if string(v1) then v2 = v1[2] v1 = v1[1] end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
if atom(v2) and v2=0 then
|
||||||
|
writefln("+[].[]=[]",{ctl,prop,v1},{ini,"a"})
|
||||||
|
else
|
||||||
|
writefln("+[].[]={[],[]}",{ctl,prop,v1,v2},{ini,"a"})
|
||||||
|
end if
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
export function Delete(object ini,object ctl, sequence prop)
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
if atom(ctl) then ctl = get(ctl,"name") end if
|
||||||
|
object tmp = read_lines(ini)
|
||||||
|
object out = {}
|
||||||
|
object s1 = text:format("[].[]",{ctl,prop})
|
||||||
|
for i = 1 to length(tmp) do
|
||||||
|
if match(s1,tmp[i]) then -- skip
|
||||||
|
else out &= {tmp[i]}
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
write_lines(ini,out)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------
|
||||||
|
function get_setting(object self, object property = 0)
|
||||||
|
-- returns the 'important' value from a control
|
||||||
|
---------------------------------------------------------------------------------
|
||||||
|
-- returns settings string
|
||||||
|
-- object must be a named object, e.g. MyButton
|
||||||
|
|
||||||
|
-- MyButton.active=1
|
||||||
|
-- My Calendar.date={YYYY,MM,DD}
|
||||||
|
|
||||||
|
object name = 0
|
||||||
|
object dt
|
||||||
|
|
||||||
|
if string(self) then
|
||||||
|
name = self
|
||||||
|
self = vlookup(self,registry,4,1)
|
||||||
|
end if
|
||||||
|
|
||||||
|
object val = 0
|
||||||
|
object txt = {}
|
||||||
|
|
||||||
|
integer x = find(self,vslice(registry,1))
|
||||||
|
|
||||||
|
ifdef SETTINGS then
|
||||||
|
display("SELF [] []",{x,self})
|
||||||
|
display(registry[x])
|
||||||
|
end ifdef
|
||||||
|
|
||||||
|
switch class_id(self) do
|
||||||
|
-- this decides which value is the important one to save;
|
||||||
|
-- and stores the control's current value into the registry;
|
||||||
|
|
||||||
|
case GtkEntry,GtkEntryBuffer then property = "text"
|
||||||
|
|
||||||
|
case GtkCheckButton,GtkRadioButton, GtkToggleButton,
|
||||||
|
GtkSwitch,GtkComboBox,GtkComboBoxText,
|
||||||
|
GtkCheckMenuItem,GtkToggleToolButton, GtkSearchEntry
|
||||||
|
then property = "active"
|
||||||
|
|
||||||
|
case GtkPopover then property = "position"
|
||||||
|
|
||||||
|
case GtkFontButton then property = "font name"
|
||||||
|
|
||||||
|
case GtkAdjustment,GtkSpinButton,GtkScaleButton,GtkVolumeButton,
|
||||||
|
GtkModelButton,GtkScale
|
||||||
|
then property = "value"
|
||||||
|
|
||||||
|
case GtkEntryCompletion then property = "model"
|
||||||
|
|
||||||
|
case GtkLinkButton then property = "uri"
|
||||||
|
|
||||||
|
case GtkMenuItem then property = "sensitive"
|
||||||
|
|
||||||
|
case GtkPaned then property = "position"
|
||||||
|
|
||||||
|
case GtkFileChooser, GtkFileChooserButton, GtkFileChooserWidget, GtkFileChooserDialog
|
||||||
|
then property = "filename"
|
||||||
|
|
||||||
|
case GtkFontChooser, GtkFontChooserWidget, GtkFontChooserDialog then
|
||||||
|
property = "font"
|
||||||
|
|
||||||
|
case GtkCalendar then
|
||||||
|
dt = get(self,"datetime",0)
|
||||||
|
registry[x][5] = {"date",dt[1..3]}
|
||||||
|
txt &= text:format(fmt,{registry[x][4],"date",dt[1..3]})
|
||||||
|
return txt
|
||||||
|
|
||||||
|
case GtkColorButton,GtkColorChooser,GtkColorChooserWidget,
|
||||||
|
GtkColorChooserDialog then
|
||||||
|
registry[x][5] = {"rgba",get(self,"rgba",1)}
|
||||||
|
txt &= text:format(fmt,{registry[x][4],"rgba",get(self,"rgba",1)})
|
||||||
|
return txt
|
||||||
|
|
||||||
|
end switch
|
||||||
|
|
||||||
|
if atom(property) then
|
||||||
|
return txt
|
||||||
|
end if
|
||||||
|
|
||||||
|
val = get(self,property)
|
||||||
|
registry[x][5] = {property,val}
|
||||||
|
txt &= text:format(fmt,{registry[x][4],property,val})
|
||||||
|
|
||||||
|
return txt
|
||||||
|
end function
|
741
eugtk/examples/GtkSourceView.plugin
Normal file
@ -0,0 +1,741 @@
|
|||||||
|
|
||||||
|
---------------
|
||||||
|
namespace sv -- "Plug-in" for GtkSourceView
|
||||||
|
---------------
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------
|
||||||
|
-- A plug-in appends new widgets to the widget array, adding functions
|
||||||
|
-- and an additional library file without changing GtkEngine.e source.
|
||||||
|
-- This needed to be implemented as a plug-in because the SourceView
|
||||||
|
-- library is shipped separately from libgtk3.
|
||||||
|
|
||||||
|
-- Many more functions remain to be added, including style selections,
|
||||||
|
-- printing options, etc. --
|
||||||
|
-------------------------------------------------------------------------
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
export constant version = "4.12.0"
|
||||||
|
|
||||||
|
if not equal(version,gtk:version) then
|
||||||
|
Error(,,"GtkSourceView.plugin version mismatch","should be version " & gtk:version)
|
||||||
|
end if
|
||||||
|
|
||||||
|
ifdef WINDOWS then
|
||||||
|
export constant svdll = "libgtksourceview-3.0-1.dll"
|
||||||
|
elsedef
|
||||||
|
export constant svdll = "libgtksourceview-3.0.so.1"
|
||||||
|
end ifdef
|
||||||
|
|
||||||
|
export atom LIBSV = open_dll(svdll)
|
||||||
|
if LIBSV = 0 then
|
||||||
|
Error(,,"No libgtksourceview found!",
|
||||||
|
"If you're sure you have one, set the library\nname at the top of GtkSourceView.plugin",
|
||||||
|
GTK_BUTTONS_OK)
|
||||||
|
crash("No libgtksourceview found!")
|
||||||
|
end if
|
||||||
|
|
||||||
|
ifdef SV then display("SOURCEVIEW:[]",{svdll}) end ifdef
|
||||||
|
|
||||||
|
LIBS = append(LIBS,LIBSV)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_mark",
|
||||||
|
{GtkTextMark,GObject},
|
||||||
|
{"new",{S,S},P},
|
||||||
|
{"get_category",{P},S},
|
||||||
|
{"next",{P,S},P,0,length(widget)},
|
||||||
|
{"prev",{P,S},P,0,length(widget)},
|
||||||
|
"GtkSourceMark"})
|
||||||
|
export constant GtkSourceMark = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_undo_manager",
|
||||||
|
{},
|
||||||
|
{"can_undo",{P},B},
|
||||||
|
{"can_redo",{P},B},
|
||||||
|
{"undo",{P}},
|
||||||
|
{"redo",{P}},
|
||||||
|
{"begin_not_undoable_action",{P}},
|
||||||
|
{"end_not_undoable_action",{P}},
|
||||||
|
{"can_undo_changed",{P}},
|
||||||
|
{"can_redo_changed",{P}},
|
||||||
|
"GtkSourceUndoManager"})
|
||||||
|
export constant GtkSourceUndoManager = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_tag_style",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"copy",{P},P},
|
||||||
|
{"free",{P}},
|
||||||
|
"GtkSourceTagStyle"})
|
||||||
|
export constant GtkSourceTagStyle = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_style_scheme",
|
||||||
|
{GObject},
|
||||||
|
{"get_id",{P},S},
|
||||||
|
{"get_name",{P},S},
|
||||||
|
{"get_description",{P},S},
|
||||||
|
{"get_authors",{P},A},
|
||||||
|
{"get_filename",{P},S},
|
||||||
|
{"get_style",{P,S},P},
|
||||||
|
"GtkSourceStyleScheme"})
|
||||||
|
export constant GtkSourceStyleScheme = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_language",
|
||||||
|
{GObject},
|
||||||
|
{"get_id",{P},S},
|
||||||
|
{"get_name",{P},S},
|
||||||
|
{"get_section",{P},S},
|
||||||
|
{"get_hidden",{P},B},
|
||||||
|
{"get_tags",{P},P},
|
||||||
|
{"get_tag_style",{P,S},P,0,GtkSourceTagStyle},
|
||||||
|
{"set_tag_style",{P,S,P}},
|
||||||
|
{"get_tag_default_style",{P,S},P,0,GtkSourceTagStyle},
|
||||||
|
{"get_escape_char",{P},S},
|
||||||
|
{"get_metadata",{P,S},S},
|
||||||
|
{"get_mime_types",{P},-routine_id("get_mime_types")},
|
||||||
|
{"set_mime_types",{P,A}},
|
||||||
|
{"get_globs",{P},P},
|
||||||
|
{"get_style_name",{P,S},S},
|
||||||
|
{"get_style_scheme",{P},P,0,GtkSourceStyleScheme},
|
||||||
|
{"set_style_scheme",{P,P}},
|
||||||
|
{"get_style_ids",{P},A},
|
||||||
|
{"get_style_name",{P,S},S},
|
||||||
|
{"get_style_fallback",{P,S},S},
|
||||||
|
"GtkSourceLanguage"})
|
||||||
|
export constant GtkSourceLanguage = length(widget)
|
||||||
|
|
||||||
|
function get_mime_types(atom sl)
|
||||||
|
object mimetypes = {}
|
||||||
|
atom x = gtk_func("gtk_source_language_get_mime_types",{P},{sl})
|
||||||
|
while peek4u(x) > 0 do
|
||||||
|
mimetypes &= peek_string(peek4u(x)) & " "
|
||||||
|
x += 4
|
||||||
|
end while
|
||||||
|
return mimetypes
|
||||||
|
end function
|
||||||
|
|
||||||
|
export constant GtkSourceMarker = length(widget)+1
|
||||||
|
widget = append(widget, {"gtk_source_marker",
|
||||||
|
{GObject},
|
||||||
|
{"set_marker_type",{P,S}},
|
||||||
|
{"get_marker_type",{P},S},
|
||||||
|
{"get_line",{P},I},
|
||||||
|
{"get_name",{P},S},
|
||||||
|
{"get_buffer",{P},P},
|
||||||
|
{"next",{P},P,0,GtkSourceMarker},
|
||||||
|
{"prev",{P},P,0,GtkSourceMarker},
|
||||||
|
"GtkSourceMarker"})
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_buffer",
|
||||||
|
{GObject,GtkTextBuffer,GObject},
|
||||||
|
{"new",{P},P},
|
||||||
|
{"new_with_language",{P},P},
|
||||||
|
{"get_check_brackets",{P},B},
|
||||||
|
{"set_check_brackets",{P,B}},
|
||||||
|
{"set_bracket_match_style",{P,P}},
|
||||||
|
{"get_highlight",{P},B},
|
||||||
|
{"set_highlight",{P,B}},
|
||||||
|
{"set_highlight_syntax",{P,B}},
|
||||||
|
{"get_highlight_syntax",{P},B},
|
||||||
|
{"set_language",{P,P}},
|
||||||
|
{"get_language",{P},P,0,GtkSourceLanguage},
|
||||||
|
{"get_escape_char",{P},S},
|
||||||
|
{"set_escape_char",{P,S}},
|
||||||
|
{"set_highlight_matching_brackets",{P,B}},
|
||||||
|
{"get_highlight_matching_brackets",{P},B},
|
||||||
|
{"set_style_scheme",{P,P}},
|
||||||
|
{"get_style_scheme",{P},P,0,GtkSourceStyleScheme},
|
||||||
|
{"ensure_highlight",{P,P,P}},
|
||||||
|
{"undo",{P}},
|
||||||
|
{"redo",{P}},
|
||||||
|
{"can_undo",{P},B},
|
||||||
|
{"can_redo",{P},B},
|
||||||
|
{"begin_not_undoable_action",{P}},
|
||||||
|
{"end_not_undoable_action",{P}},
|
||||||
|
{"get_max_undo_levels",{P},I},
|
||||||
|
{"set_max_undo_levels",{P,I}},
|
||||||
|
{"get_undo_manager",{P},P,0,GtkSourceUndoManager},
|
||||||
|
{"set_undo_manager",{P,P}},
|
||||||
|
{"iter_has_context_class",{P,P,S},B},
|
||||||
|
{"get_context_classes_at_iter",{P,P,P},P},
|
||||||
|
{"iter_forward_to_context_class_toggle",{P,P,S},B},
|
||||||
|
{"iter_backward_to_context_class_toggle",{P,P,S},B},
|
||||||
|
{"create_marker",{P,S,S,P},P,0,GtkSourceMarker},
|
||||||
|
{"create_source_mark",{P,S,S,P},P,0,GtkSourceMark},
|
||||||
|
{"move_marker",{P,P,P}},
|
||||||
|
{"delete_marker",{P,P}},
|
||||||
|
{"get_marker",{P,S},P,0,GtkSourceMarker},
|
||||||
|
{"get_markers_in_region",{P,P,P},A},
|
||||||
|
{"get_first_marker",{P},P,0,GtkSourceMarker},
|
||||||
|
{"get_last_marker",{P},P,0,GtkSourceMarker},
|
||||||
|
{"get_iter_at_marker",{P,P,P}},
|
||||||
|
{"get_next_marker",{P,P},P,0,GtkSourceMarker},
|
||||||
|
{"get_prev_marker",{P,P},P,0,GtkSourceMarker},
|
||||||
|
{"forward_iter_to_source_mark",{P,P,S},B},
|
||||||
|
{"backward_iter_to_source_mark",{P,P,S},B},
|
||||||
|
{"get_source_marks_at_line",{P,I,S},P,0,GSList},
|
||||||
|
{"get_source_marks_at_iter",{P,P,S},P,0,GSList},
|
||||||
|
{"remove_source_marks",{P,P,P,S}},
|
||||||
|
{"change_case",{P,I,P,P}},
|
||||||
|
{"join_lines",{P,P,P}},
|
||||||
|
{"sort_lines",{P,P,P,I,I}},
|
||||||
|
{"set_implicit_trailing_newline",{P,B}},
|
||||||
|
{"get_implicit_trailing_newline",{P},B},
|
||||||
|
"GtkSourceBuffer"})
|
||||||
|
export constant GtkSourceBuffer = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_gutter_renderer",
|
||||||
|
{GObject},
|
||||||
|
{"begin",{P,P,P,P,P,P}},
|
||||||
|
{"draw",{P,P,P,P,P,P,I}},
|
||||||
|
{"end",{P}},
|
||||||
|
{"get_size",{P},I},
|
||||||
|
{"set_size",{P,I}},
|
||||||
|
{"set_visible",{P,B}},
|
||||||
|
{"get_visible",{P},B},
|
||||||
|
{"get_padding",{P,I,I}},
|
||||||
|
{"set_padding",{P,I,I}},
|
||||||
|
{"get_alignment",{P,F,F}},
|
||||||
|
{"set_alignment",{P,F,F}},
|
||||||
|
{"set_alignment_mode",{P,I}},
|
||||||
|
{"get_window_type",{P},I},
|
||||||
|
{"get_view",{P},P,0,GtkTextView},
|
||||||
|
{"get_alignment_mode",{P},I},
|
||||||
|
{"get_background",{P,P},B},
|
||||||
|
{"set_background",{P,P}},
|
||||||
|
{"activate",{P,P,P,P}},
|
||||||
|
{"query_activatable",{P,P,P,P},B},
|
||||||
|
{"queue_draw",{P}},
|
||||||
|
{"query_tooltip",{P,P,P,I,I,P},B},
|
||||||
|
{"query_data",{P,I,I,I}},
|
||||||
|
"GtkSourceGutterRenderer"})
|
||||||
|
export constant GtkSourceGutterRenderer = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_gutter",
|
||||||
|
{GObject},
|
||||||
|
{"get_window",{},P,0,GtkWindow},
|
||||||
|
{"insert",{P,P,I},B}, -- 3.0
|
||||||
|
{"reorder",{P,P,I}},
|
||||||
|
{"remove",{P,P}},
|
||||||
|
{"queue_redraw",{P}},
|
||||||
|
{"get_padding",{P,I,I}},
|
||||||
|
{"set_padding",{P,I,I}},
|
||||||
|
{"get_renderer_at_pos",{P,I,I},P,0,GtkSourceGutterRenderer},
|
||||||
|
"GtkSourceGutter"})
|
||||||
|
export constant GtkSourceGutter = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_view",
|
||||||
|
{GtkTextView,GtkContainer,GtkWidget,GtkBuildable,GtkScrollable,GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"get_buffer",{P},-routine_id("getSVBuffer"),0,GtkSourceBuffer},
|
||||||
|
{"set_show_line_numbers",{P,B}},
|
||||||
|
{"get_show_line_numbers",{P},B},
|
||||||
|
{"set_show_right_margin",{P,B}},
|
||||||
|
{"get_show_right_margin",{P},B},
|
||||||
|
{"set_right_margin_position",{P,I}},
|
||||||
|
{"get_right_margin_position",{P},I},
|
||||||
|
{"set_highlight_current_line",{P,B}},
|
||||||
|
{"get_highlight_current_line",{P},B},
|
||||||
|
{"set_auto_indent",{P,B}},
|
||||||
|
{"get_auto_indent",{P},B},
|
||||||
|
{"set_indent_on_tab",{P,B}},
|
||||||
|
{"get_indent_on_tab",{P},B},
|
||||||
|
{"set_tab_width",{P,I}},
|
||||||
|
{"get_tab_width",{P},I},
|
||||||
|
{"set_indent_width",{P,I}},
|
||||||
|
{"get_indent_width",{P},I},
|
||||||
|
{"set_insert_spaces_instead_of_tabs",{P,B}},
|
||||||
|
{"get_insert_spaces_instead_of_tabs",{P},B},
|
||||||
|
{"indent_lines",{P,P,P}},
|
||||||
|
{"unindent_lines",{P,P,P}},
|
||||||
|
{"get_visual_column",{P,P},I},
|
||||||
|
{"set_smart_home_end",{P,I}},
|
||||||
|
{"get_smart_home_end",{P},I},
|
||||||
|
{"set_mark_attributes",{P,S,P,I}},
|
||||||
|
{"get_mark_attributes",{P,S,I},P},
|
||||||
|
{"set_show_line_marks",{P,B}},
|
||||||
|
{"get_show_line_marks",{P},B},
|
||||||
|
{"set_draw_spaces",{P,I}},
|
||||||
|
{"get_draw_spaces",{P},I},
|
||||||
|
{"get_completion",{P},P},
|
||||||
|
{"get_gutter",{P,I},P,0,GtkSourceGutter},
|
||||||
|
{"set_background_pattern",{P,I}}, -- 3.16
|
||||||
|
{"get_background_pattern",{P},I}, -- 3.16
|
||||||
|
{"set_smart_backspace",{P,B}}, -- 3.18
|
||||||
|
{"get_smart_backspace",{P},B}, -- 3.18
|
||||||
|
"GtkSourceView"})
|
||||||
|
export constant GtkSourceView = length(widget)
|
||||||
|
|
||||||
|
function getSVBuffer(atom sv)
|
||||||
|
return gtk_func("gtk_text_view_get_buffer",{P},{sv})
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_map", -- 3.18
|
||||||
|
{GtkSourceView,GtkTextView,GtkContainer,GtkWidget,GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"set_view",{P,P}},
|
||||||
|
{"get_view",{P},P,0,GtkSourceView},
|
||||||
|
"GtkSourceMap"})
|
||||||
|
export constant GtkSourceMap = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_language_manager",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"get_default",{},P},
|
||||||
|
{"set_search_path",{P,P}},
|
||||||
|
{"get_search_path",{P},P},
|
||||||
|
{"get_language_ids",{P},V},
|
||||||
|
{"get_language",{P,P},P,0,GtkSourceLanguage},
|
||||||
|
{"guess_language",{P,P,P},P,0,GtkSourceLanguage},
|
||||||
|
"GtkSourceLanguageManager"})
|
||||||
|
export constant GtkSourceLanguageManager = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_languages_manager",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"get_available_languages",{P},A},
|
||||||
|
{"get_language_from_mime_type",{P,S},P,0,GtkSourceLanguage},
|
||||||
|
{"get_lang_files_dirs",{P},A},
|
||||||
|
"GtkSourceLanguagesManager"})
|
||||||
|
export constant GtkSourceLanguagesManager = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_print_job", -- doesn't currently work!
|
||||||
|
{GObject},
|
||||||
|
{"new",{P},P},
|
||||||
|
{"set_buffer",{P,P}},
|
||||||
|
{"get_buffer",{P},P,0,GtkSourceBuffer},
|
||||||
|
{"set_config",{P,P}},
|
||||||
|
{"get_config",{P},P},
|
||||||
|
{"setup_from_view",{P,P}},
|
||||||
|
{"set_tabs_width",{P,I}},
|
||||||
|
{"get_tabs_width",{P},I},
|
||||||
|
{"set_wrap_mode",{P,I}},
|
||||||
|
{"get_wrap_mode",{P},I},
|
||||||
|
{"set_highlight",{P,B}},
|
||||||
|
{"get_highlight",{P},B},
|
||||||
|
{"set_font_desc",{P,P}},
|
||||||
|
{"set_font",{P,S}},
|
||||||
|
{"get_font_desc",{P},P,0,PangoFontDescription},
|
||||||
|
{"get_font",{P},S},
|
||||||
|
{"set_numbers_font_desc",{P,P}},
|
||||||
|
{"set_numbers_font",{P,S}},
|
||||||
|
{"get_numbers_font_desc",{P},P,0,PangoFontDescription},
|
||||||
|
{"get_numbers_font",{P},S},
|
||||||
|
{"set_print_numbers",{P,I}},
|
||||||
|
{"get_print_numbers",{P},I},
|
||||||
|
{"set_text_margins",{P,D,D,D,D}},
|
||||||
|
{"get_text_margins",{P,D,D,D,D}},
|
||||||
|
{"print",{P},P},
|
||||||
|
{"print_range",{P,P,P},P},
|
||||||
|
{"print_range_async",{P,P,P},B},
|
||||||
|
{"cancel",{P}},
|
||||||
|
{"get_print_job",{P},P},
|
||||||
|
{"get_page",{P},I},
|
||||||
|
{"get_page_count",{P},I},
|
||||||
|
{"get_print_context",{P},P},
|
||||||
|
{"set_print_header",{P,B}},
|
||||||
|
{"get_print_header",{P},B},
|
||||||
|
{"set_print_footer",{P,B}},
|
||||||
|
{"get_print_footer",{P},B},
|
||||||
|
{"set_header_footer_font_desc",{P,P}},
|
||||||
|
{"set_header_footer_font",{P,S}},
|
||||||
|
{"get_header_footer_font_desc",{P},P,0,PangoFontDescription},
|
||||||
|
{"get_header_footer_font",{P},S},
|
||||||
|
{"set_header_format",{P,S,S,S,B}},
|
||||||
|
{"set_footer_format",{P,S,S,S,B}},
|
||||||
|
"GtkSourcePrintJob"})
|
||||||
|
export constant GtkSourcePrintJob = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_style",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"copy",{P},P},
|
||||||
|
"GtkSourceStyle"})
|
||||||
|
export constant GtkSourceStyle = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_tag_table",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"add_tags",{P,P}},
|
||||||
|
{"remove_source_tags",{P}},
|
||||||
|
"GtkSourceTagTable"})
|
||||||
|
export constant GtkSourceTagTable = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget,{"gtk_source_completion_item",
|
||||||
|
{GObject},
|
||||||
|
{"new",{S,S,P,S},P},
|
||||||
|
{"new_with_markup",{S,S,P,S},P},
|
||||||
|
"GtkSourceCompletionItem"})
|
||||||
|
export constant GtkSourceCompletionItem = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_completion_context",
|
||||||
|
{GObject},
|
||||||
|
{"add_proposals",{P,P,P,B}},
|
||||||
|
{"get_iter",{P,P},B},
|
||||||
|
{"get_activation",{P},I},
|
||||||
|
"GtkSourceCompletionContext"})
|
||||||
|
export constant GtkSourceCompletionContext = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_completion_info",
|
||||||
|
{GtkWindow,GtkBin,GtkContainer,GtkWidget,GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"move_to_iter",{P,P,P}},
|
||||||
|
{"set_widget",{P,P}},
|
||||||
|
{"get_widget",{P},P,0,GtkWidget},
|
||||||
|
"GtkSourceCompletionInfo"})
|
||||||
|
export constant GtkSourceCompletionInfo = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_completion_proposal",
|
||||||
|
{},
|
||||||
|
{"get_label",{P},S},
|
||||||
|
{"get_markup",{P},S},
|
||||||
|
{"get_text",{P},S},
|
||||||
|
{"get_icon",{P},P,0,GdkPixbuf},
|
||||||
|
{"get_icon_name",{P},S},
|
||||||
|
{"get_gicon",{P},P,0,GIcon},
|
||||||
|
{"get_info",{P},S},
|
||||||
|
{"changed",{P}},
|
||||||
|
{"hash",{P},I},
|
||||||
|
{"equal",{P,P},B},
|
||||||
|
"GtkSourceCompletionProposal"})
|
||||||
|
export constant GtkSourceCompletionProposal = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_completion_provider",
|
||||||
|
{},
|
||||||
|
{"get_name",{P},S},
|
||||||
|
{"get_icon",{P},P,0,GdkPixbuf},
|
||||||
|
{"get_icon_name",{P},S},
|
||||||
|
{"get_gicon",{P},P,0,GIcon},
|
||||||
|
{"populate",{P,P}},
|
||||||
|
{"get_activation",{P},I},
|
||||||
|
{"match",{P,P},B},
|
||||||
|
{"get_info_widget",{P,P},P,0,GtkWidget},
|
||||||
|
{"update_info",{P,P,P}},
|
||||||
|
{"get_start_iter",{P,P,P,P},B},
|
||||||
|
{"activate_proposal",{P,P,P},B},
|
||||||
|
{"get_interactive_delay",{P},I},
|
||||||
|
{"get_priority",{P},I},
|
||||||
|
"GtkSourceCompletionProvider"})
|
||||||
|
export constant GtkSourceCompletionProvider = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_completion_words",
|
||||||
|
{GObject},
|
||||||
|
{"new",{S,P},P},
|
||||||
|
{"register",{P,P}},
|
||||||
|
{"unregister",{P,P}},
|
||||||
|
"GtkSourceCompletionWords"})
|
||||||
|
export constant GtkSourceCompletionWords = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_completion",
|
||||||
|
{GObject},
|
||||||
|
{"add_provider",{P,P,X},B},
|
||||||
|
{"remove_provider",{P,P,X},B},
|
||||||
|
{"get_providers",{P},P,0,GList},
|
||||||
|
{"show",{P,P,P},B},
|
||||||
|
{"hide",{P}},
|
||||||
|
{"get_info_window",{P},P,0,GtkSourceCompletionInfo},
|
||||||
|
{"get_view",{P},P,0,GtkSourceView},
|
||||||
|
{"create_context",{P,P},P,0,GtkSourceCompletionContext},
|
||||||
|
{"move_window",{P,P}},
|
||||||
|
{"block_interactive",{P}},
|
||||||
|
{"unblock_interactive",{P}},
|
||||||
|
"GtkSourceCompletion"})
|
||||||
|
export constant GtkSourceCompletion = length(widget)
|
||||||
|
|
||||||
|
export constant GtkSourceEncoding = length(widget)+1
|
||||||
|
widget = append(widget, {"gtk_source_encoding",
|
||||||
|
{},
|
||||||
|
{"get_utf8",{},P},
|
||||||
|
{"get_current",{},P,0,GtkSourceEncoding},
|
||||||
|
{"get_from_charset",{S},P,0,GtkSourceEncoding},
|
||||||
|
{"to_string",{P},S},
|
||||||
|
{"get_name",{P},S},
|
||||||
|
{"get_charset",{P,S}},
|
||||||
|
{"get_all",{},P,0,GSList},
|
||||||
|
{"get_default_candidates",{},P,0,GSList},
|
||||||
|
{"copy",{P},P,0,GtkSourceEncoding},
|
||||||
|
{"free",{P}},
|
||||||
|
"GtkSourceEncoding"})
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_file",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"get_location",{P},P,0,GFile},
|
||||||
|
{"set_location",{P,P}},
|
||||||
|
{"get_encoding",{P},P,0,GtkSourceEncoding},
|
||||||
|
{"get_newline_type",{P},I},
|
||||||
|
{"get_compression_type",{P},I},
|
||||||
|
{"check_file_on_disk",{P}},
|
||||||
|
{"is_local",{P},B},
|
||||||
|
{"is_externally_modified",{P},B},
|
||||||
|
{"is_deleted",{P},B},
|
||||||
|
{"is_readonly",{P},B},
|
||||||
|
{"set_mount_operation_factory",{P,P,P,P}},
|
||||||
|
"GtkSourceFile"})
|
||||||
|
export constant GtkSourceFile = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_file_loader",
|
||||||
|
{GObject},
|
||||||
|
{"new",{P,P},P},
|
||||||
|
{"set_candidate_encodings",{P,P}},
|
||||||
|
{"get_buffer",{P},P,0,GtkSourceBuffer},
|
||||||
|
{"get_file",{P},P,0,GtkSourceFile},
|
||||||
|
{"get_location",{P},P,0,GFile},
|
||||||
|
{"get_input_stream",{P},P,0,GInputStream},
|
||||||
|
{"load_async",{P,I,P,P,P,P,P,P}},
|
||||||
|
{"load_finish",{P,P,X},B},
|
||||||
|
{"get_encoding",{P},P,0,GtkSourceEncoding},
|
||||||
|
{"get_newline_type",{P},I},
|
||||||
|
{"get_compression_type",{P},I},
|
||||||
|
"GtkSourceFileLoader"})
|
||||||
|
export constant GtkSourceFileLoader = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_file_saver",
|
||||||
|
{GObject},
|
||||||
|
{"new",{P,P},P},
|
||||||
|
{"get_buffer",{P},P,0,GtkSourceBuffer},
|
||||||
|
{"get_file",{P},P,0,GtkSourceFile},
|
||||||
|
{"get_location",{P},P,0,GFile},
|
||||||
|
{"set_encoding",{P,P}},
|
||||||
|
{"get_encoding",{P},P,0,GtkSourceEncoding},
|
||||||
|
{"set_newline_type",{P,I}},
|
||||||
|
{"get_newline_type",{P},I},
|
||||||
|
{"set_compression_type",{P,I}},
|
||||||
|
{"get_compression_type",{P},I},
|
||||||
|
{"set_flags",{P,I}},
|
||||||
|
{"get_flags",{P},I},
|
||||||
|
{"save_async",{P,I,P,P,P,P,P,P}},
|
||||||
|
{"save_finish",{P,P,X},B},
|
||||||
|
"GtkSourceFileSaver"})
|
||||||
|
export constant GtkSourceFileSaver = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_gutter_renderer_pixbuf",
|
||||||
|
{GtkSourceGutterRenderer,GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"set_pixbuf",{P,P}},
|
||||||
|
{"get_pixbuf",{P},P,0,GdkPixbuf},
|
||||||
|
{"set_stock_id",{P,S}},
|
||||||
|
{"get_stock_id",{P},S},
|
||||||
|
{"set_gicon",{P,P}},
|
||||||
|
{"get_gicon",{P},P,0,GIcon},
|
||||||
|
{"set_icon_name",{P,S}},
|
||||||
|
{"get_icon_name",{P},S},
|
||||||
|
"GtkSourceGutterRendererPixbuf"})
|
||||||
|
export constant GtkSourceGutterRendererPixbuf = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_gutter_renderer_text",
|
||||||
|
{GtkSourceGutterRenderer,GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"set_markup",{P,S,I}},
|
||||||
|
{"set_text",{P,S,I}},
|
||||||
|
{"measure",{P,S,I,I}},
|
||||||
|
{"measure_markup",{P,S,I,I}},
|
||||||
|
"GtkSourceGutterRendererText"})
|
||||||
|
export constant GtkSourceGutterRendererText = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_mark_attributes",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"set_background",{P,P}},
|
||||||
|
{"get_background",{P,P},B},
|
||||||
|
{"set_stock_id",{P,S}},
|
||||||
|
{"get_stock_id",{P},S},
|
||||||
|
{"set_icon_name",{P,S}},
|
||||||
|
{"get_icon_name",{P},S},
|
||||||
|
{"set_gicon",{P,P}},
|
||||||
|
{"get_gicon",{P},0,P,GIcon},
|
||||||
|
{"set_pixbuf",{P,P}},
|
||||||
|
{"get_pixbuf",{P},P,0,GdkPixbuf},
|
||||||
|
{"render_icon",{P,P,I},P,0,GdkPixbuf},
|
||||||
|
{"get_tooltip_text",{P,P},S},
|
||||||
|
{"get_tooltip_markup",{P,P},S},
|
||||||
|
"GtkSourceMarkAttriebutes"})
|
||||||
|
export constant GtkSourceMarkAttributes = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_print_compositor",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"new_from_view",{P},P},
|
||||||
|
{"get_buffer",{P},P,0,GtkSourceBuffer},
|
||||||
|
{"set_tab_width",{P,I}},
|
||||||
|
{"get_tab_width",{P},I},
|
||||||
|
{"set_wrap_mode",{P,I}},
|
||||||
|
{"get_wrap_mode",{P},I},
|
||||||
|
{"set_highlight_syntax",{P,B}},
|
||||||
|
{"get_highlight_syntax",{P},B},
|
||||||
|
{"set_print_line_numbers",{P,B}},
|
||||||
|
{"get_print_line_numbers",{P},B},
|
||||||
|
{"set_body_font_name",{P,S}},
|
||||||
|
{"get_body_font_name",{P},S},
|
||||||
|
{"set_line_numbers_font_name",{P,S}},
|
||||||
|
{"get_line_numbers_font_name",{P},S},
|
||||||
|
{"set_header_font_name",{P,S}},
|
||||||
|
{"get_header_font_name",{P},S},
|
||||||
|
{"set_footer_font_name",{P,S}},
|
||||||
|
{"get_footer_font_name",{P},S},
|
||||||
|
{"get_top_margin",{P,I},D},
|
||||||
|
{"set_top_margin",{P,D,I}},
|
||||||
|
{"get_bottom_margin",{P,I},D},
|
||||||
|
{"set_bottom_margin",{P,D,I}},
|
||||||
|
{"get_left_margin",{P,I},D},
|
||||||
|
{"set_left_margin",{P,D,I}},
|
||||||
|
{"get_right_margin",{P,I},D},
|
||||||
|
{"set_right_margin",{P,D,I}},
|
||||||
|
{"set_print_header",{P,B}},
|
||||||
|
{"get_print_header",{P},B},
|
||||||
|
{"set_print_footer",{P,B}},
|
||||||
|
{"get_print_footer",{P},B},
|
||||||
|
{"set_header_format",{P,B,S,S,S}},
|
||||||
|
{"set_footer_format",{P,B,S,S,S}},
|
||||||
|
{"get_n_pages",{P},I},
|
||||||
|
{"paginate",{P,P},B},
|
||||||
|
{"get_pagination_progress",{P},D},
|
||||||
|
{"draw_page",{P,P,I}},
|
||||||
|
"GtkSourcePrintCompositor"})
|
||||||
|
export constant GtkSourcePrintCompositor = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_search_settings",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"get_search_text",{P},S},
|
||||||
|
{"set_search_text",{P,S}},
|
||||||
|
{"get_case_sensitive",{P},B},
|
||||||
|
{"set_case_sensitive",{P,B}},
|
||||||
|
{"get_at_word_boundaries",{P},B},
|
||||||
|
{"set_at_word_boundaries",{P,B}},
|
||||||
|
{"get_wrap_around",{P},B},
|
||||||
|
{"set_wrap_around",{P,B}},
|
||||||
|
{"get_regex_enabled",{P},B},
|
||||||
|
{"set_regex_enabled",{P,B}},
|
||||||
|
"GtkSourceSearchSettings"})
|
||||||
|
export constant GtkSourceSearchSettings = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_search_context",
|
||||||
|
{GObject},
|
||||||
|
{"new",{P,P},P},
|
||||||
|
{"get_buffer",{P},P,0,GtkSourceBuffer},
|
||||||
|
{"get_settings",{P},P,0,GtkSourceSearchSettings},
|
||||||
|
{"set_settings",{P,P}},
|
||||||
|
{"get_highlight",{P},B},
|
||||||
|
{"set_highlight",{P,B}},
|
||||||
|
{"get_match_style",{P},P,0,GtkSourceStyle},
|
||||||
|
{"set_match_style",{P,P}},
|
||||||
|
{"get_occurrences_count",{P},I},
|
||||||
|
{"forward",{P,P,P,P},B},
|
||||||
|
{"forward_async",{P,P,P,P,P}},
|
||||||
|
{"forward_finish",{P,P,P,P,X},B},
|
||||||
|
{"backward",{P,P,P,P},B},
|
||||||
|
{"backward_async",{P,P,P,P,P}},
|
||||||
|
{"backward_finish",{P,P,P,P,X},B},
|
||||||
|
{"replace",{P,P,P,P,I,X},B},
|
||||||
|
{"replace_all",{P,P,I,X},I},
|
||||||
|
{"get_regex_error",{P},P},
|
||||||
|
"GtkSourceSearchContext"})
|
||||||
|
export constant GtkSourceSearchContext = length(widget)
|
||||||
|
|
||||||
|
export constant fnGetSCPos = define_c_func(LIBSV,
|
||||||
|
"gtk_source_search_context_get_occurrence_position",{P,P,P},I)
|
||||||
|
|
||||||
|
export function unescape_search_text(object txt)
|
||||||
|
return gtk_str_func("gtk_source_utils_unescape_search_text",{P},
|
||||||
|
{allocate_string(txt,1)})
|
||||||
|
end function
|
||||||
|
|
||||||
|
export function escape_search_text(object txt)
|
||||||
|
return gtk_str_func("gtk_source_utils_escape_search_text",{P},
|
||||||
|
{allocate_string(txt,1)})
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_style_scheme_chooser_button",
|
||||||
|
{GtkButton,GtkBin,GtkContainer,GtkWidget,GObject},
|
||||||
|
{"new",{},P,0,GtkWidget},
|
||||||
|
"GtkSourceStyleSchemeChooserButton"})
|
||||||
|
export constant GtkSourceStyleSchemeChooserButton = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_style_scheme_chooser_widget",
|
||||||
|
{GtkBin,GtkContainer,GtkWidget,GObject},
|
||||||
|
{"new",{},P,0,GtkWidget},
|
||||||
|
"GtkStyleSchemeChooserWidget"})
|
||||||
|
export constant GtkSourceStyleSchemeChooserWidget = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_style_scheme_chooser",
|
||||||
|
{GtkWidget},
|
||||||
|
{"get_style_scheme",{P},P,0,GtkSourceStyleScheme},
|
||||||
|
{"set_style_scheme",{P,P}},
|
||||||
|
"GtkStyleSchemeChooser"})
|
||||||
|
export constant GtkStyleSchemeChooser = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_style_scheme",
|
||||||
|
{GObject},
|
||||||
|
{"get_id",{P},S},
|
||||||
|
{"get_name",{P},S},
|
||||||
|
{"get_description",{P},S},
|
||||||
|
{"get_authors",{P},A},
|
||||||
|
{"get_filename",{P},S},
|
||||||
|
{"get_style",{P,S},P,0,GtkSourceStyle},
|
||||||
|
"GtkStyleScheme"})
|
||||||
|
export constant tkStyleScheme = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"gtk_source_style_scheme_manager",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"get_default",{},P},
|
||||||
|
{"set_search_path",{P,P}},
|
||||||
|
{"append_search_path",{P,S}},
|
||||||
|
{"prepend_search_path",{P,S}},
|
||||||
|
{"get_search_path",{P},A},
|
||||||
|
{"get_scheme_ids",{P},V},
|
||||||
|
{"get_scheme",{P,P},P,0,GtkSourceStyleScheme},
|
||||||
|
{"force_rescan",{P}},
|
||||||
|
"GtkSourceStyleSchemeManager"})
|
||||||
|
export constant GtkSourceStyleSchemeManager = length(widget)
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
export enum
|
||||||
|
GTK_SOURCE_DRAW_SPACES_SPACE = 1,
|
||||||
|
GTK_SOURCE_DRAW_SPACES_TAB=2,
|
||||||
|
GTK_SOURCE_DRAW_SPACES_NEWLINE=4,
|
||||||
|
GTK_SOURCE_DRAW_SPACES_NBSP = 8,
|
||||||
|
GTK_SOURCE_DRAW_SPACES_LEADING = 16,
|
||||||
|
GTK_SOURCE_DRAW_SPACES_TEXT = 32,
|
||||||
|
GTK_SOURCE_DRAW_SPACES_TRAILING = 64,
|
||||||
|
GTK_SOURCE_DRAW_SPACES_ALL=127,
|
||||||
|
SPACES = 1, -- shorthand for above;
|
||||||
|
TABS = 2,
|
||||||
|
NEWLINES = 4,
|
||||||
|
NBSP = 8,
|
||||||
|
LEADING = 16,
|
||||||
|
TEXT = 32,
|
||||||
|
TRAILING = 64,
|
||||||
|
|
||||||
|
GTK_SOURCE_SMART_HOME_END_DISABLED = 0,
|
||||||
|
GTK_SOURCE_SMART_HOME_END_BEFORE,
|
||||||
|
GTK_SOURCE_SMART_HOME_END_AFTER,
|
||||||
|
GTK_SOURCE_SMART_HOME_END_ALWAYS,
|
||||||
|
DISABLED = 0,
|
||||||
|
BEFORE,
|
||||||
|
AFTER,
|
||||||
|
ALWAYS,
|
||||||
|
|
||||||
|
GTK_SOURCE_VIEW_GUTTER_POSITION_LINES = 0,
|
||||||
|
GTK_SOURCE_VIEW_GUTTER_POSITION_MARKS,
|
||||||
|
LINES = 0,
|
||||||
|
MARKS,
|
||||||
|
|
||||||
|
GTK_SOURCE_BACKGROUND_PATTERN_TYPE_NONE=0,
|
||||||
|
GTK_SOURCE_BACKGROUND_PATTERN_TYPE_GRID,
|
||||||
|
NONE = 0,
|
||||||
|
GRID,
|
||||||
|
|
||||||
|
GTK_SOURCE_CHANGE_CASE_LOWER = 0,
|
||||||
|
GTK_SOURCE_CHANGE_CASE_UPPER,
|
||||||
|
GTK_SOURCE_CHANGE_CASE_TOGGLE,
|
||||||
|
GTK_SOURCE_CHANGE_CASE_TITLE,
|
||||||
|
|
||||||
|
GTK_SOURCE_SORT_FLAGS_NONE = 0,
|
||||||
|
GTK_SOURCE_SORT_FLAGS_CASE_SENSITIVE,
|
||||||
|
GTK_SOURCE_SORT_FLAGS_REVERSE_ORDER,
|
||||||
|
GTK_SOURCE_SORT_FLAGS_REMOVE_DUPLICATES
|
||||||
|
|
||||||
|
|
||||||
|
|
498
eugtk/examples/GtkWebKit.plugin
Normal file
@ -0,0 +1,498 @@
|
|||||||
|
|
||||||
|
---------------
|
||||||
|
namespace wk -- "Plug-in" for WebkitGTK
|
||||||
|
---------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
-- A plug-in appends new widgets to the widget array, adding functions
|
||||||
|
-- from an additional library file without changing GtkEngine.e source.
|
||||||
|
-- This needed to be implemented as a plug-in because the webkit
|
||||||
|
-- library is separate from libgtk3.
|
||||||
|
|
||||||
|
-- Many more functions remain to be added, including style selections,
|
||||||
|
-- printing options, etc.
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
export constant version = "4.12.0"
|
||||||
|
|
||||||
|
if not equal(version,gtk:version) then
|
||||||
|
Error(,,"GtkWebKit version mismatch","should be version " & gtk:version)
|
||||||
|
end if
|
||||||
|
|
||||||
|
ifdef WINDOWS then
|
||||||
|
export object wkdll = "libwebkit-3.0.dll"
|
||||||
|
elsedef
|
||||||
|
export object wkdll = walk_dir("/usr/lib/",routine_id("find_lib"),1)
|
||||||
|
end ifdef
|
||||||
|
|
||||||
|
function find_lib(object path, object item) -- get the latest!
|
||||||
|
if match("libwebkit2gtk-3",item[D_NAME])
|
||||||
|
or match("libwebkit2gtk-4",item[D_NAME]) then
|
||||||
|
return path & '/' & item[D_NAME]
|
||||||
|
end if
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
||||||
|
atom LIBWK = open_dll(wkdll)
|
||||||
|
if LIBWK = 0 then
|
||||||
|
Error(,,"No libwebkit2gtk-3 found!",
|
||||||
|
"If you're sure you have one, set the library\nname at the top of GtkWebKit.plugin",
|
||||||
|
GTK_BUTTONS_OK)
|
||||||
|
crash("ERROR:\n****** No libwebkit2gtk-3 found!")
|
||||||
|
end if
|
||||||
|
|
||||||
|
ifdef WK then display("WEBKIT:[]",{wkdll}) end ifdef
|
||||||
|
|
||||||
|
LIBS = append(LIBS,LIBWK)
|
||||||
|
|
||||||
|
export constant webkit_version = text:format("[].[].[]",
|
||||||
|
{gtk_func("webkit_get_major_version"),
|
||||||
|
gtk_func("webkit_get_minor_version"),
|
||||||
|
gtk_func("webkit_get_micro_version")})
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_uri_request",
|
||||||
|
{GObject},
|
||||||
|
{"new",{S},P},
|
||||||
|
{"get_http_headers",{P},S},
|
||||||
|
{"get_type",{P},I},
|
||||||
|
{"get_uri",{P},S},
|
||||||
|
{"set_uri",{P,S}},
|
||||||
|
"WebkitUriRequest"})
|
||||||
|
export constant WebkitUriRequest = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_back_forward_list_item",
|
||||||
|
{GObject},
|
||||||
|
{"get_title",{P},S},
|
||||||
|
{"get_uri",{P},S},
|
||||||
|
{"get_original_uri",{P},S},
|
||||||
|
"WebkitBackForwardListItem"})
|
||||||
|
export constant WebkitBackForwardListItem = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_back_forward_list",
|
||||||
|
{GObject},
|
||||||
|
{"get_length",{P},I},
|
||||||
|
{"get_current_item",{P},P,0,WebkitBackForwardListItem},
|
||||||
|
{"get_back_item",{P},P,0,WebkitBackForwardListItem},
|
||||||
|
{"get_forward_item",{P},P,0,WebkitBackForwardListItem},
|
||||||
|
{"get_nth_item",{P,I},P,0,WebkitBackForwardListItem},
|
||||||
|
{"get_back_list",{P},A,0,GList},
|
||||||
|
{"get_back_list_with_limit",{P,I},P,0,GList},
|
||||||
|
{"get_forward_list",{P},A,0,GList},
|
||||||
|
{"get_forward_list_with_limit",{P,I},P,0,GList},
|
||||||
|
"WebkitBackForwardList"})
|
||||||
|
export constant WebkitBackForwardList = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_uri_response",
|
||||||
|
{GObject},
|
||||||
|
{"get_uri",{P},S},
|
||||||
|
{"get_status_code",{P},I},
|
||||||
|
{"get_content_length",{P},I},
|
||||||
|
{"get_mime_type",{P},S},
|
||||||
|
{"get_suggested_filename",{P},S},
|
||||||
|
{"get_http_headers",{P},P},-- soup message headers;
|
||||||
|
"WebkitUriResponse"})
|
||||||
|
export constant WebkitUriResponse = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_web_page",
|
||||||
|
{GObject},
|
||||||
|
{"get_dom_document",{P},P},
|
||||||
|
{"get_id",{P},I},
|
||||||
|
{"get_uri",{P},S},
|
||||||
|
{"get_main_frame",{P},P},
|
||||||
|
{"get_editor",{P},P},
|
||||||
|
"WebkitWebPage"})
|
||||||
|
export constant WebkitWebPage = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_notification",
|
||||||
|
{GObject},
|
||||||
|
{"get_id",{P},I},
|
||||||
|
{"get_title",{P},S},
|
||||||
|
{"get_body",{P},S},
|
||||||
|
{"close",{P}},
|
||||||
|
"WebkitNotification"})
|
||||||
|
export constant WebkitNotification = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_hit_test_result",
|
||||||
|
{GObject},
|
||||||
|
{"get_context",{P},I},
|
||||||
|
{"context_is_link",{P},B},
|
||||||
|
{"context_is_image",{P},B},
|
||||||
|
{"context_is_media",{P},B},
|
||||||
|
{"context_is_editable",{P},B},
|
||||||
|
{"context_is_selection",{P},B},
|
||||||
|
{"get_link_uri",{P},S},
|
||||||
|
{"get_link_title",{P},S},
|
||||||
|
{"get_link_label",{P},S},
|
||||||
|
{"get_image_uri",{P},S},
|
||||||
|
{"get_media_uri",{P},S},
|
||||||
|
{"context_is_scrollbar",{P},B},
|
||||||
|
"WebkitHitTest"})
|
||||||
|
export constant WebkitHitTest = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_web_inspector",
|
||||||
|
{GObject},
|
||||||
|
{"get_web_view",{P},P},
|
||||||
|
{"get_inspected_uri",{P},S},
|
||||||
|
{"get_can_attach",{P},B}, --?
|
||||||
|
{"is_attached",{P},B},
|
||||||
|
{"attach",{P}},
|
||||||
|
{"detach",{P}},
|
||||||
|
{"show",{P}},
|
||||||
|
{"close",{P}},
|
||||||
|
{"get_attached_height",{P},I},
|
||||||
|
"WebkitWebInspector"})
|
||||||
|
export constant WebkitWebInspector = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_web_context",
|
||||||
|
{GObject},
|
||||||
|
{"get_default",{},P},
|
||||||
|
{"clear_cache",{P}},
|
||||||
|
{"download_uri",{P,S},P},
|
||||||
|
{"get_cookie_manager",{P},P},
|
||||||
|
{"get_security_manager",{P},P},
|
||||||
|
{"get_spell_checking_enabled",{P},B},
|
||||||
|
{"set_spell_checking_enabled",{P,B}},
|
||||||
|
{"set_spell_checking_languages",{P,A}},
|
||||||
|
{"set_preferred_languages",{P,A}},
|
||||||
|
{"set_tls_errors_policy",{P,I}},
|
||||||
|
{"get_tls_errors_policy",{P},I},
|
||||||
|
{"allow_tls_certificate_for_host",{P,P,S}},
|
||||||
|
{"set_web_extensions_directory",{P,S}},
|
||||||
|
{"set_web_extensions_initialization_user_data",{P,P}},
|
||||||
|
{"prefetch_dns",{P,S}},
|
||||||
|
{"set_process_model",{P,P}},
|
||||||
|
{"get_process_model",{P},P},
|
||||||
|
"WebkitWebContext"})
|
||||||
|
export constant WebkitWebContext = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_context_menu_item",
|
||||||
|
{GObject},
|
||||||
|
{"new",{P},-routine_id("newContextMenuItem")},
|
||||||
|
{"get_action",{P},P},
|
||||||
|
{"is_separator",{P},B},
|
||||||
|
{"set_submenu",{P,P}},
|
||||||
|
{"get_submenu",{P},P},
|
||||||
|
"WebkitContextMenuItem"})
|
||||||
|
export constant WebkitContextMenuItem = length(widget)
|
||||||
|
|
||||||
|
function newContextMenuItem(atom act)
|
||||||
|
return gtk_func("webkit_context_menu_item_new_from_stock_action",{I},{act})
|
||||||
|
end function
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_context_menu",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"append",{P,P}},
|
||||||
|
{"prepend",{P,P}},
|
||||||
|
{"insert",{P,P,I}},
|
||||||
|
{"move_item",{P,P,I}},
|
||||||
|
{"get_items",{P},P,0,GList},
|
||||||
|
{"get_n_items",{P},I},
|
||||||
|
{"first",{P},P,0,WebkitContextMenuItem},
|
||||||
|
{"last",{P},P,0,WebkitContextMenuItem},
|
||||||
|
{"get_item_at_position",{P,I},P,0,WebkitContextMenuItem},
|
||||||
|
{"remove",{P,P}},
|
||||||
|
{"remove_all",{P}},
|
||||||
|
{"set_user_data",{P,P}},
|
||||||
|
{"get_user_data",{P},P},
|
||||||
|
"WebkitContextMenu"})
|
||||||
|
export constant WebkitContextMenu = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_settings",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"get_auto_load_images",{P},B},
|
||||||
|
{"set_auto_load_images",{P,B}},
|
||||||
|
{"get_enable_frame_flattening",{P},B},
|
||||||
|
{"set_enable_frame_flattening",{P,B}},
|
||||||
|
{"get_enable_html5_database",{P},B},
|
||||||
|
{"set_enable_html5_database",{P,B}},
|
||||||
|
{"get_enable_html5_local_storage",{P},B},
|
||||||
|
{"set_enable_html5_local_storage",{P,B}},
|
||||||
|
{"get_enable_hyperlink_auditing",{P},B},
|
||||||
|
{"set_enable_hyperlink_auditing",{P,B}},
|
||||||
|
{"get_enable_java",{P},B},
|
||||||
|
{"set_enable_java",{P,B}},
|
||||||
|
{"get_enable_javascript",{P},B},
|
||||||
|
{"set_enable_javascript",{P,B}},
|
||||||
|
{"get_enable_offline_web_application_cache",{P},B},
|
||||||
|
{"set_enable_offline_web_application_cache",{P,B}},
|
||||||
|
{"get_enable_plugins",{P},B},
|
||||||
|
{"set_enable_plugins",{P,B}},
|
||||||
|
{"get_enable_xss_auditor",{P},B},
|
||||||
|
{"set_enable_xss_auditor",{P,B}},
|
||||||
|
{"get_javascript_can_open_windows_automatically",{P},B},
|
||||||
|
{"set_javascript_can_open_windows_automatically",{P,B}},
|
||||||
|
{"get_load_icons_ignoring_image_load_setting",{P},B},
|
||||||
|
{"set_load_icons_ignoring_image_load_setting",{P,B}},
|
||||||
|
{"get_default_font_family",{P},S},
|
||||||
|
{"set_default_font_family",{P,S}},
|
||||||
|
{"get_monospace_font_family",{P},S},
|
||||||
|
{"set_monospace_font_family",{P,S}},
|
||||||
|
{"get_serif_font_family",{P},S},
|
||||||
|
{"set_serif_font_family",{P,S}},
|
||||||
|
{"get_sans_serif_font_family",{P},S},
|
||||||
|
{"set_sans_serif_font_family",{P,S}},
|
||||||
|
{"get_cursive_font_family",{P},S},
|
||||||
|
{"set_cursive_font_family",{P,S}},
|
||||||
|
{"get_fantasy_font_family",{P},S},
|
||||||
|
{"set_fantasy_font_family",{P,S}},
|
||||||
|
{"get_pictograph_font_family",{P},S},
|
||||||
|
{"set_pictograph_font_family",{P,S}},
|
||||||
|
{"get_default_font_size",{P},I},
|
||||||
|
{"set_default_font_size",{P,I}},
|
||||||
|
{"get_default_monospace_font_size",{P},I},
|
||||||
|
{"set_default_monospace_font_size",{P,I}},
|
||||||
|
{"get_minimum_font_size",{P},I},
|
||||||
|
{"set_minimum_font_size",{P,I}},
|
||||||
|
{"get_default_charset",{P},S},
|
||||||
|
{"set_default_charset",{P,S}},
|
||||||
|
{"get_enable_page_cache",{P},B},
|
||||||
|
{"set_enable_page_cache",{P,B}},
|
||||||
|
{"get_enable_site_specific_quirks",{P},B},
|
||||||
|
{"set_enable_site_specific_quirks",{P,B}},
|
||||||
|
{"get_draw_compositing_indicators",{P},B},
|
||||||
|
{"set_draw_compositing_indicators",{P,B}},
|
||||||
|
{"get_enable_private_browsing",{P},B},
|
||||||
|
{"set_enable_private_browsing",{P,B}},
|
||||||
|
{"get_enable_developer_extras",{P},B},
|
||||||
|
{"set_enable_developer_extras",{P,B}},
|
||||||
|
{"get_enable_resizable_text_areas",{P},B},
|
||||||
|
{"set_enable_resizable_text_areas",{P,B}},
|
||||||
|
{"get_enable_tabs_to_links",{P},B},
|
||||||
|
{"set_enable_tabs_to_links",{P,B}},
|
||||||
|
{"get_enable_dns_prefetching",{P},B},
|
||||||
|
{"set_enable_dns_prefetching",{P,B}},
|
||||||
|
{"get_enable_caret_browsing",{P},B},
|
||||||
|
{"set_enable_caret_browsing",{P,B}},
|
||||||
|
{"get_enable_fullscreen",{P},B},
|
||||||
|
{"set_enable_fullscreen",{P,B}},
|
||||||
|
{"get_print_backgrounds",{P},B},
|
||||||
|
{"set_print_backgrounds",{P,B}},
|
||||||
|
{"get_enable_webaudio",{P},B},
|
||||||
|
{"set_enable_webaudio",{P,B}},
|
||||||
|
{"get_enable_webgl",{P},B},
|
||||||
|
{"set_enable_webgl",{P,B}},
|
||||||
|
{"get_allow_modal_dialogs",{P},B},
|
||||||
|
{"set_allow_modal_dialogs",{P,B}},
|
||||||
|
{"get_zoom_text_only",{P},B},
|
||||||
|
{"set_zoom_text_only",{P,B}},
|
||||||
|
{"get_user_agent",{P},S},
|
||||||
|
{"set_user_agent",{P,S}},
|
||||||
|
{"get_javascript_can_access_clipboard",{P},B},
|
||||||
|
{"set_javascript_can_access_clipboard",{P,B}},
|
||||||
|
{"set_enable_write_console_messages_to_stdout",{P,B}},
|
||||||
|
{"get_enable_write_console_messages_to_stdout",{P},B},
|
||||||
|
{"set_enable_developer_extras",{P,B}},
|
||||||
|
{"get_enable_smooth_scrolling",{P},B},
|
||||||
|
{"set_enable_smooth_scrolling",{P,B}},
|
||||||
|
{"get_enable_accelerated_2d_canvas",{P},B},
|
||||||
|
{"set_enable_accelerated_2d_canvas",{P,B}},
|
||||||
|
{"get_enable_media_stream",{P},B},
|
||||||
|
{"set_enable_media_stream",{P,B}},
|
||||||
|
{"get_enable_spacial_navigation",{P},B},
|
||||||
|
{"set_enable_spacial_navigation",{P,B}},
|
||||||
|
{"get_enable_mediasource",{P},B},
|
||||||
|
{"set_enable_mediasource",{P,B}},
|
||||||
|
{"get_allow_file_access_from_file_urls",{P},B},
|
||||||
|
{"set_allow_file_access_from_file_urls",{P,B}},
|
||||||
|
{"get_media_playback_allows_inline",{P},B},
|
||||||
|
{"set_media_playback_allows_inline",{P,B}},
|
||||||
|
{"get_media_playback_requires_user_gesture",{P},B},
|
||||||
|
{"set_media_playback_requires_user_gesture",{P,B}},
|
||||||
|
"WebkitSettings"})
|
||||||
|
export constant WebkitSettings = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_window_properties",
|
||||||
|
{GObject},
|
||||||
|
{"get_geometry",{P,P}},
|
||||||
|
{"get_toolbar_visible",{P},B},
|
||||||
|
{"get_statusbar_visible",{P},B},
|
||||||
|
{"get_scrollbars_visible",{P},B},
|
||||||
|
{"get_menubar_visible",{P},B},
|
||||||
|
{"get_locationbar_visible",{P},B},
|
||||||
|
{"get_resizable",{P},B},
|
||||||
|
{"get_fullscreen",{P},B},
|
||||||
|
"WebkitWindowProperties"})
|
||||||
|
export constant WebkitWindowProperties = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_uri_response",
|
||||||
|
{GObject},
|
||||||
|
{"get_uri",{P},S},
|
||||||
|
{"get_status_code",{P},I},
|
||||||
|
{"get_content_length",{P},I},
|
||||||
|
{"get_mime_type",{P},S},
|
||||||
|
{"get_suggested_filename",{P},S},
|
||||||
|
{"get_http_headers",{P},P}, -- SoupMessageHeaders;
|
||||||
|
"WebkitURIResponse"})
|
||||||
|
export constant WebkitURIResponse = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_web_resource",
|
||||||
|
{GObject},
|
||||||
|
{"get_uri",{P},S},
|
||||||
|
{"get_response",{P},P,0,WebkitURIResponse},
|
||||||
|
{"get_data",{P,P,P,P}},
|
||||||
|
{"get_data_finish",{P,P,P,P},S},
|
||||||
|
"WebkitWebResource"})
|
||||||
|
export constant WebkitWebResource = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_find_controller",
|
||||||
|
{GObject},
|
||||||
|
{"search",{P,S,I,I}},
|
||||||
|
{"search_finish",{P}},
|
||||||
|
{"search_next",{P}},
|
||||||
|
{"search_previous",{P}},
|
||||||
|
{"get_search_text",{P},S},
|
||||||
|
{"count_matches",{P,S,I,I}},
|
||||||
|
{"get_options",{P},I},
|
||||||
|
{"get_match_count",{P},I},
|
||||||
|
{"get_web_view",{P},P},
|
||||||
|
"WebkitFindController"})
|
||||||
|
export constant WebkitFindController = length(widget)
|
||||||
|
|
||||||
|
export constant
|
||||||
|
WEBKIT_FIND_OPTIONS_NONE = 1,
|
||||||
|
WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE = 2,
|
||||||
|
WEBKIT_FIND_OPTIONS_AT_WORD_STARTS = 4,
|
||||||
|
WEBKIT_FIND_OPTIONS_TREAT_MEDIAL_CAPITAL_AS_WORD_START = 8,
|
||||||
|
WEBKIT_FIND_OPTIONS_BACKWARDS = 16,
|
||||||
|
WEBKIT_FIND_OPTIONS_WRAP_AROUND = 32
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_web_view",
|
||||||
|
{GtkContainer,GtkWidget,GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"load_uri",{P,S}},
|
||||||
|
{"load_html",{P,S,S}},
|
||||||
|
{"load_plain_text",{P,S}},
|
||||||
|
{"load_alternate_html",{P,S,S,S}},
|
||||||
|
{"load_request",{P,P}},
|
||||||
|
{"get_context",{P},P,0,WebkitWebContext},
|
||||||
|
{"can_go_back",{P},B},
|
||||||
|
{"go_back",{P}},
|
||||||
|
{"can_go_forward",{P},B},
|
||||||
|
{"go_forward",{P}},
|
||||||
|
{"get_title",{P},S},
|
||||||
|
{"get_page_id",{P},I},
|
||||||
|
{"reload",{P}},
|
||||||
|
{"reload_bypass_cache",{P}},
|
||||||
|
{"stop_loading",{P}},
|
||||||
|
{"is_loading",{P},B},
|
||||||
|
{"is_playing_audio",{P},B},
|
||||||
|
{"get_estimated_load_progress",{P},D},
|
||||||
|
{"get_custom_charset",{P},S},
|
||||||
|
{"set_custom_charset",{P,S}},
|
||||||
|
{"get_back_forward_list",{P},P,0,WebkitBackForwardList},
|
||||||
|
{"go_to_back_forward_list_item",{P,P}},
|
||||||
|
{"get_uri",{P},S},
|
||||||
|
{"get_favicon",{P},P},
|
||||||
|
{"set_settings",{P,P}},
|
||||||
|
{"get_settings",{P},P,0,WebkitSettings},
|
||||||
|
{"get_window_properties",{P},P,0,WebkitWindowProperties},
|
||||||
|
{"set_zoom_level",{P,D}},
|
||||||
|
{"get_zoom_level",{P},D},
|
||||||
|
{"get_inspector",{P},P,0,WebkitWebInspector},
|
||||||
|
{"can_show_mime_type",{P,S},B},
|
||||||
|
{"save",{P,I,P,P,P}},
|
||||||
|
{"save_to_file",{P,P,P,P,P,P}},
|
||||||
|
{"save_to_file_finish",{P,P,P},B},
|
||||||
|
{"download_uri",{P,S},P},
|
||||||
|
{"set_background_color",{P,P}}, -- ?
|
||||||
|
{"get_main_resource",{P},P,0,WebkitWebResource},
|
||||||
|
{"execute_editing_command",{P,S}},
|
||||||
|
{"get_find_controller",{P},P,0,WebkitFindController},
|
||||||
|
"WebkitWebView"})
|
||||||
|
export constant WebkitWebView = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_download", --?
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"get_request",{P},P,0,WebkitUriRequest},
|
||||||
|
{"get_destination",{P},S},
|
||||||
|
{"set_destination",{P,S}},
|
||||||
|
{"get_response",{P},P,0,WebkitUriResponse},
|
||||||
|
{"cancel",{P}},
|
||||||
|
{"get_estimated_progress",{P},D},
|
||||||
|
{"get_elapsed_time",{P},D},
|
||||||
|
{"get_received_data_length",{P},I},
|
||||||
|
{"get_web_view",{P},P,0,WebkitWebView},
|
||||||
|
{"get_allow_overwrite",{P},B},
|
||||||
|
{"set_allow_overwrite",{P,B}},
|
||||||
|
"WebkitDownload"})
|
||||||
|
export constant WebkitDownload = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_print_operation", -- doesn't currently work.
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
"WebkitPrintOperation"})
|
||||||
|
export constant WebkitPrintOperation = length(widget)
|
||||||
|
|
||||||
|
widget = append(widget, {"webkit_user_content_manager",
|
||||||
|
{GObject},
|
||||||
|
{"new",{},P},
|
||||||
|
{"add_style_sheet",{P,P}},
|
||||||
|
{"remove_all_stylesheets",{P}},
|
||||||
|
{"add_script",{P,P}},
|
||||||
|
{"remove_all_scripts",{P}},
|
||||||
|
{"register_script_message_handler",{P,S},B},
|
||||||
|
{"unregister_script_message_handler",{P,S}},
|
||||||
|
"WebkitUserContentManager"})
|
||||||
|
export constant WebkitUserContentManager = length(widget)
|
||||||
|
|
||||||
|
export enum
|
||||||
|
WEBKIT_LOAD_STARTED = 0,
|
||||||
|
WEBKIT_LOAD_REDIRECTED,
|
||||||
|
WEBKIT_LOAD_COMMITTED,
|
||||||
|
WEBKIT_LOAD_FINISHED,
|
||||||
|
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_NO_ACTION = 0,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_OPEN_LINK,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_OPEN_LINK_IN_NEW_WINDOW,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_DOWNLOAD_LINK_TO_DISK,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_COPY_LINK_TO_CLIPBOARD,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_OPEN_IMAGE_IN_NEW_WINDOW,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_DOWNLOAD_IMAGE_TO_DISK,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_COPY_IMAGE_TO_CLIPBOARD,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_COPY_IMAGE_URL_TO_CLIPBOARD,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_OPEN_FRAME_IN_NEW_WINDOW,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_GO_BACK, --10
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_GO_FORWARD,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_STOP,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_RELOAD,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_COPY,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_CUT,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_PASTE,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_DELETE,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_SELECT_ALL,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_INPUT_METHODS,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_UNICODE, --20
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_SPELLING_GUESS,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_NO_GUESSES_FOUND,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_IGNORE_SPELLING,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_LEARN_SPELLING,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_IGNORE_GRAMMAR,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_FONT_MENU,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_BOLD,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_ITALIC,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_UNDERLINE,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_OUTLINE, --30
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_INSPECT_ELEMENT,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_OPEN_VIDEO_IN_NEW_WINDOW,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_OPEN_AUDIO_IN_NEW_WINDOW,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_COPY_VIDEO_LINK_TO_CLIPBOARD,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_COPY_AUDIO_LINK_TO_CLIPBOARD,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_TOGGLE_MEDIA_CONTROLS,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_TOGGLE_MEDIA_LOOP,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_ENTER_VIDEO_FULLSCREEN,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_MEDIA_PLAY,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_MEDIA_PAUSE,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_MEDIA_MUTE,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_DOWNLOAD_VIDEO_TO_DISK,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_DOWNLOAD_AUDIO_TO_DISK,
|
||||||
|
WEBKIT_CONTEXT_MENU_ACTION_CUSTOM
|
||||||
|
|
||||||
|
|
||||||
|
|
118
eugtk/examples/browser.ex
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
|
||||||
|
----------------------------------------------------------------------------------
|
||||||
|
--# A simple file browser/runner;
|
||||||
|
----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include std/sort.e
|
||||||
|
include std/datetime.e -- using this requires us to namespace gtk: functions
|
||||||
|
|
||||||
|
chdir(login)
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,"size=750x550,border=10,sig.destroy=Quit")
|
||||||
|
gtk:set(win,"title","EuGTK Browser - " & login)
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,"orientation=VERTICAL")
|
||||||
|
gtk:add(win,panel)
|
||||||
|
|
||||||
|
constant lbl = create(GtkLabel,
|
||||||
|
"markup='<small>Use <i>alt-f</i> to search, <i><enter></i> or double-click to run!</small>'")
|
||||||
|
gtk:add(panel,lbl)
|
||||||
|
|
||||||
|
constant store = create(GtkListStore,{gSTR,gSTR,gINT,gSTR,gINT,gSTR})
|
||||||
|
|
||||||
|
constant tv = create(GtkTreeView,{
|
||||||
|
{"model",store},
|
||||||
|
{"reorderable",TRUE},
|
||||||
|
{"headers clickable",TRUE},
|
||||||
|
{"set grid lines",GTK_TREE_VIEW_GRID_LINES_BOTH},
|
||||||
|
{"rules hint",TRUE}})
|
||||||
|
|
||||||
|
constant cols = { -- below is a new way to define cols and renderers in 1 line;
|
||||||
|
create(GtkColumn,"title=Name,type=text,text=1,sort_column_id=2"), --[1]
|
||||||
|
create(GtkColumn,"title=Size,type=text,text=3,sort_column_id=3"),
|
||||||
|
create(GtkColumn,"title=Date,type=text,text=4,sort_column_id=5"), --[2]
|
||||||
|
create(GtkColumn,"title=Description,type=text,markup=6,sort_column_id=6")
|
||||||
|
}
|
||||||
|
--[1] filename in col[1] is sorted by number in col[2]
|
||||||
|
--[2] date shown in col[4] is sorted on unix date in col[5]
|
||||||
|
|
||||||
|
gtk:add(tv,cols)
|
||||||
|
|
||||||
|
constant selection = gtk:get(tv,"selection")
|
||||||
|
set(selection,"mode",GTK_SELECTION_MULTIPLE)
|
||||||
|
|
||||||
|
constant scroller = create(GtkScrolledWindow)
|
||||||
|
pack(panel,scroller,TRUE,TRUE,10)
|
||||||
|
gtk:add(scroller,tv)
|
||||||
|
|
||||||
|
constant box = create(GtkButtonBox)
|
||||||
|
pack_end(panel,box)
|
||||||
|
|
||||||
|
constant btn = create(GtkButton,"gtk-quit","Quit")
|
||||||
|
gtk:add(box,btn)
|
||||||
|
|
||||||
|
-- load file list;
|
||||||
|
object files = dir("*.ex")
|
||||||
|
|
||||||
|
-- convert dates to usable format;
|
||||||
|
files = apply(files,routine_id("convert_date"))
|
||||||
|
files = apply(files,routine_id("convert_filename"))
|
||||||
|
|
||||||
|
-- load files into listview;
|
||||||
|
gtk:set(store,"data",files)
|
||||||
|
|
||||||
|
-- set up handlers;
|
||||||
|
gtk:set(tv,"rules hint",TRUE)
|
||||||
|
gtk:set(tv,"columns autosize")
|
||||||
|
gtk:set(tv,"search column",6)
|
||||||
|
gtk:set(tv,"search equal func",_("search_func"))
|
||||||
|
connect(tv,"row-activated","show_choice")
|
||||||
|
gtk:set(store,"sort column id",2,GTK_SORT_ASCENDING) -- default startup sort;
|
||||||
|
|
||||||
|
-- run the program!
|
||||||
|
show_all(win)
|
||||||
|
main()
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
function convert_filename(object f, object junk) -- allow 'natural' sort order;
|
||||||
|
------------------------------------------------
|
||||||
|
object tmp = io:read_lines(f[1])
|
||||||
|
for i = 1 to length(tmp) do
|
||||||
|
if match("--#",tmp[i]) =1 then
|
||||||
|
f[6] = tmp[i][5..$]
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
f[1] = filebase(f[1]) -- drop extension, build index of #s;
|
||||||
|
object x = filter(f[1],"out",{'0','9'},"[]")
|
||||||
|
object n = filter(f[1],"in",{'0','9'},"[]")
|
||||||
|
f[2] = x & pad_head(n,10,'0')
|
||||||
|
return f
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------------
|
||||||
|
function convert_date(object a, object b) -- convert dates to unix for sorting;
|
||||||
|
-----------------------------------------
|
||||||
|
object dt = datetime:new(a[4],a[5],a[6]) -- convert eu dir() date to datetime;
|
||||||
|
a[5] = to_unix(dt) -- store as UNIX timestamp for sorting purposes;
|
||||||
|
a[4] = datetime:format(dt,"%b %d %Y") -- store human-readable date for display;
|
||||||
|
a[6] = "?"
|
||||||
|
return a
|
||||||
|
end function
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
function search_func(atom mdl, integer col, object key, atom iter, object data)
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
key = lower(peek_string(key)) -- key is passed as pointer to string
|
||||||
|
data = get(mdl,"value",iter,6) -- value from col 6 of liststore (description)
|
||||||
|
return not match(key,lower(data)) -- find word anywhere in description, 0 = found
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
global function show_choice()
|
||||||
|
------------------------------
|
||||||
|
integer row = gtk:get(selection,"selected row")
|
||||||
|
object f = gtk:get(store,"col data",row,1)
|
||||||
|
system(sprintf("eui %s &",{f}),0) -- run it;
|
||||||
|
return 1
|
||||||
|
end function
|
11
eugtk/examples/documentation/.httpd.css
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
-- ====================================================================
|
||||||
|
-- Styling for the remote display is set here;
|
||||||
|
-- ====================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
button {width: 100%;}
|
||||||
|
button.dir {background-color: skyblue;}
|
||||||
|
button.html {background-color: orange;}
|
||||||
|
|
||||||
|
body {background-image: linear-gradient(180deg, yellow, blue); background-repeat: no-repeat;)
|
41
eugtk/examples/documentation/Broadway
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
launchpad.net GTK+3 with the Broadway (HTML5) backend : Nicolas Delvaux
|
||||||
|
|
||||||
|
This is a rebuild of the GTK+3 Ubuntu 12.04, 12.10, 13.04, 13.10, 14.04 and 14.10 packages with an enabled Broadway backend.
|
||||||
|
Note that this PPA is no longer necessary starting from Ubuntu 15.04, as the Broadway backend is now enabled by default. The main difference with this PPA is that the "broadwayd" binary is shipped in the "libgtk-3-bin" package when it was in a separated "broadwayd" package in the PPA.
|
||||||
|
|
||||||
|
ADDING THIS PPA TO YOUR SYSTEM
|
||||||
|
==============================
|
||||||
|
Run these commands in a terminal:
|
||||||
|
sudo add-apt-repository ppa:malizor/gtk-broadway
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get upgrade
|
||||||
|
sudo apt-get install broadwayd # For Ubuntu >= 13.10
|
||||||
|
|
||||||
|
HOWTO SINCE SAUCY (gtk+ >= 3.8)
|
||||||
|
===============================
|
||||||
|
As an example, here is how to run gedit in your browser.
|
||||||
|
|
||||||
|
In a terminal, run:
|
||||||
|
broadwayd
|
||||||
|
|
||||||
|
In another terminal, run:
|
||||||
|
GDK_BACKEND=broadway UBUNTU_MENUPROXY= LIBOVERLAY_SCROLLBAR=0 eui test0.ex
|
||||||
|
|
||||||
|
Finally, open you Web browser and go to http://localhost:8080/
|
||||||
|
The "UBUNTU_MENUPROXY= LIBOVERLAY_SCROLLBAR=0" is only useful if you use the global-menu and/or overlay-scrollbars. You have to disable them for Broadway, otherwise the program will segfault.
|
||||||
|
Please see the "broadwayd" manpage for more information.
|
||||||
|
|
||||||
|
HOWTO BEFORE SAUCY (gtk+ < 3.8)
|
||||||
|
===============================
|
||||||
|
As an example, here is how to run gedit in your browser.
|
||||||
|
In a terminal, run:
|
||||||
|
GDK_BACKEND=broadway UBUNTU_MENUPROXY= LIBOVERLAY_SCROLLBAR=0 gedit
|
||||||
|
Finally, open you Web browser and go to http://localhost:8080/
|
||||||
|
The "UBUNTU_MENUPROXY= LIBOVERLAY_SCROLLBAR=0" is only useful if you use the global-menu and/or overlay-scrollbars. You have to disable them for Broadway, otherwise the program will segfault.
|
||||||
|
You can customize the port by setting the BROADWAY_DISPLAY variable.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
==========
|
||||||
|
I provide this PPA in the hope that it will be useful and I will try to upload new versions whenever the Ubuntu package is updated.
|
||||||
|
However, I do NOT guarantee that this PPA will always be stable and up-to-date nor that packages it contains may not destroy your computer, cause the end of the world and kill kittens. AaCharis SIL CompactAaClear Sans AAAAA DarkLightAuto
|
418
eugtk/examples/documentation/Glade.html
Normal file
@ -0,0 +1,418 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>EuGTK and Glade</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
|
||||||
|
<heading>
|
||||||
|
<img src="../thumbnails/gtk-logo-rgb.gif" alt="GTK LOGO" />
|
||||||
|
<img src="../thumbnails/mongoose.png" alt="mongoose" />
|
||||||
|
<figure style="float:right; border:solid thin black;">
|
||||||
|
<img src="../screenshots/glade.png" alt="glade" align="right" width="400px" />
|
||||||
|
<figcaption>
|
||||||
|
Calendar program being edited in Glade
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
<h2> <hr />EuGTK 4.11.11 and Glade<hr /> </h2>
|
||||||
|
<h3>Drag and Drop interface construction</h3>
|
||||||
|
</heading>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<div class="hdr">Quick Links</div>
|
||||||
|
<a href="StartingGlade.html"><button>Starting with Glade</button></a><br />
|
||||||
|
<a href="#overview"><button>Overview</button></a>
|
||||||
|
<a href="#namespaces"><button>Namespaces</button></a>
|
||||||
|
<a href="#problems"><button>Problems?</button></a>
|
||||||
|
<a href="#compile"><button>Compiling/Shrouding/Binding</button></a>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<div class="hdr">Other Files:</div>
|
||||||
|
<a href="HowItWorks.html"><button>How EuGTK Works</button></a>
|
||||||
|
<a href="README.html"><button>README</button></a>
|
||||||
|
<a href="guide_a.html"><button>Alphabetical Guide</button></a>
|
||||||
|
<a href="dialogs.html"><button>Built-in EuGTK Dialogs</button></a>
|
||||||
|
<a href="treeviews.html"><button>ListView/TreeView widgets</button></a>
|
||||||
|
<a href="pango_markup.html"><button>Markup</button></a>
|
||||||
|
<a href="printing.html"><button>Printing</button></a>
|
||||||
|
<a href="ServerHelp.html"><button>Web Server</button></a>
|
||||||
|
<a href="functions.html"><button>Quick Function List</button></a>
|
||||||
|
<a href="platforms.html"><button>Platforms</button></a>
|
||||||
|
<br />
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<a name="overview" />
|
||||||
|
|
||||||
|
<h3><hr />Overview<hr /></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
It is now possible to use <a href="http://glade.gnome.org">Glade</a> to design your EuGTK
|
||||||
|
program interface. I've tested with Glade versions 3.16 and 3.18.
|
||||||
|
You will still have to write snippets of code in Euphoria to handle
|
||||||
|
user events - just as you would when using Visual Basic™, Delphi™, etc.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Begin by reading <a href="StartingGlade.html">Starting Glade I and II</a> for an
|
||||||
|
introduction, thenread the rest of this page for details.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Glade has a preview button so that you can see, to a limited extent, what your program
|
||||||
|
will look like. Controls won't be linked (can't respond to user interaction) until you
|
||||||
|
load the glade XML into your Euphoria program and provide the 'handler' functions.
|
||||||
|
Often, these handler functions will only require a few lines of code.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
EuGTK will try to help you with this task by supplying a ready-made template
|
||||||
|
for undeclared functions, which you copy and paste into your Euphoria code using whatever
|
||||||
|
text exitor you prefer.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>This template will appear on the terminal from which you run your
|
||||||
|
program. See the screenshot below.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>You <b><i>must</i></b> run programs from a terminal (x-term, for example) while
|
||||||
|
developing and testing. There's no way around this.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Your program begins as usual:<br />
|
||||||
|
<img src="../screenshots/template.png" alt="template" clear="left" align="right" width="400px" />
|
||||||
|
<code>
|
||||||
|
<pre> <em class="kw">include</em> GtkEngine.e</pre>
|
||||||
|
</code>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Next, you tell EuGTK's built-in <i>builder</i> object
|
||||||
|
to load your program's XML description from the file created by Glade. The builder will
|
||||||
|
try to connect any signals for which you have declared a handler
|
||||||
|
(in the Glade Properties/Signals tabs). Finally, you call main() to start the GTK
|
||||||
|
processing loop.
|
||||||
|
<div class="quote"><tt><pre>
|
||||||
|
<em class="kw">include</em> GtkEngine.e
|
||||||
|
<em class="gtk">add</em>(builder,<em class="str">"~/demos/examples/widgets.glade"</em>)
|
||||||
|
<em class="gtk">main()</em><pre></tt></div>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>With just those three lines of code, you are now ready to run your program!<br /><br />
|
||||||
|
Of course, it won't do anything, except perhaps spit out a message telling you that
|
||||||
|
you haven't bothered to write handlers for events declared in Glade.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You should run the program (preferably from WEE with terminal, the BEAR, Geany using
|
||||||
|
gneui.ex, or directly from an x-term).
|
||||||
|
EuGTK will prompt you with an error message and hopefully a function template for the
|
||||||
|
missing function.
|
||||||
|
You can copy and paste that into your editor, and then fill in the body of the function.
|
||||||
|
Put these functions after the call to main().
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/hint.png" alt="hint" width="100px" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
Note that when using Glade, your Euphoria code may use string identifiers to refer to
|
||||||
|
objects, rather than having to obtain a pointer (a.k.a. 'handle') to them first.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Glade will assign a unique identifier for widgets (which it calls the <b>ID:</b>).
|
||||||
|
The ID will be something like 'checkbutton1', 'checkbutton2', 'radiobutton1', etc.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p> This ID property is found on the General tab of the Properties dialog.
|
||||||
|
You may change the IDs if you wish, sometimes changing them can make your code clearer.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Obviously, you should avoid naming two controls with the same name.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If you are using <u>multiple</u> Glade files, you will almost certainly have more than
|
||||||
|
one 'button1', etc. but this isn't a problem, because a namespace will be prepended.
|
||||||
|
See <a href="#namespaces"> namespaces </a>below.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br clear="all" />
|
||||||
|
|
||||||
|
<a name="namespaces" />
|
||||||
|
|
||||||
|
<h3><hr />Namespaces<hr /></h3>
|
||||||
|
<p>When writing a large program with multiple windows, Glade can become difficult to
|
||||||
|
navigate safely. Click on the wrong thing in Glade, and you may lose all your work.
|
||||||
|
This isn't good, so you should try to break up your program into small, safe 'modules',
|
||||||
|
each with it's own Euphoria include (.e) file and corresponding Glade (.glade) file.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Let's say, for example, I'm going to need a 'main' window, a pop-up 'edit' window, and
|
||||||
|
the usual "About..." dialog.
|
||||||
|
I'd create three Glade files, one named main.glade, the second edit.glade, and the third
|
||||||
|
about.glade.
|
||||||
|
After laying out these three windows using Glade, it's very likely that Glade will
|
||||||
|
have used identical names for controls in the files. 'button1', for example, might appear
|
||||||
|
in all three. You could, if you wish, wade thru all your Glade files and rename these as
|
||||||
|
necessary to prevent conflicts, but
|
||||||
|
EuGTK version 4.8.9 and up offers a less labor-intensive way.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
EuGTK namespacing allows you to refer to these controls by name in a manner familiar to
|
||||||
|
Euphoria programmers:<br />
|
||||||
|
"button1" (the button1 in main.ex); "edit:button1" and "about:button1"
|
||||||
|
(buttons in the respective edit.e and about.e files).<br />
|
||||||
|
<code><pre> <em class="gtk">set</em>(<em class="str"><b>"edit:window1"</b>,"background","blue"</em>)
|
||||||
|
</pre></code>
|
||||||
|
Note that these are strings. If you wish to convert them to Euphoria objects, you can,
|
||||||
|
starting with EuGTK 4.8.9, use the new pointer() function:
|
||||||
|
<pre><code> <em class="kw">constant</em> win1 = <em class="gtk">pointer</em>(<em class="str"><b>"edit:window1"</b></em>)
|
||||||
|
</code></pre>
|
||||||
|
Other files can now access the edit.e window in the normal Euphoria way:
|
||||||
|
<pre><code> <em class="gtk">set</em>(win1,<em class="str">"background"</em>,...)</code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>There seems to be no noticeable delay when accessing controls via the string names.
|
||||||
|
In a test which read and set label text using the constant 'handle' to the label, 20,000
|
||||||
|
iterations per second were reported.
|
||||||
|
When using the label's name in string form, 18,900 per second were reported. </p>
|
||||||
|
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/hint.png" alt="hint" width="100px" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
When using the string form, the namespace prefix will be the same as the Glade file name
|
||||||
|
(sans the .glade part) which the include file loaded into the GTK builder.<br /><br />
|
||||||
|
When exported as a Eu constant or variable, the namespace prefix will be whatever
|
||||||
|
namespace the included .e file declares. To prevent confusion, it's probably best to use
|
||||||
|
identical names. IOW, code in 'foo.e' would have the namespace foo.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To keep things neatly organized, you should put your Eu code in separate files as well:
|
||||||
|
main.ex, edit.e, and about.e.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Your Eu file main.ex would then include the line:
|
||||||
|
<pre><code> <em class="gtk">add</em>(builder,<em class="str">"main.glade"</em>)</code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>And your edit.e include file would have the lines:
|
||||||
|
<div class="quote"><tt><pre>
|
||||||
|
<em class="kw">namespace</em> edit
|
||||||
|
<em class="kw">include</em> GtkEngine.e
|
||||||
|
<em class="gtk">add</em>(builder,<em class="str">"edit.glade"</em>)
|
||||||
|
</pre></tt></div>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<img src="../screenshots/namespace.png" align="right" width="500px" />
|
||||||
|
|
||||||
|
To examine the namespaced names as loaded by EuGTK, add the line
|
||||||
|
<b><code> with define BUILDER </code></b>
|
||||||
|
to your main program prior to including GtkEngine.e,
|
||||||
|
or add <b><code>-d BUILDER</code></b> to the command-line.
|
||||||
|
The namespaced names will be shown on the xterm when you run your program. <i>(as shown above)</i>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Glade objects loaded by the main (.ex) program will <i>not</i> be namespaced.
|
||||||
|
Those items can be addressed directly without a namespace qualifier.
|
||||||
|
This is done so that small programs which don't need multiple Glade 'includes' can
|
||||||
|
use code that isn't cluttered with unnecessary namespacery.</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<p><b>Widget names</b><br /><br />
|
||||||
|
Confusingly, Glade also has a Widget name: property, found under the Common tab,
|
||||||
|
which you should avoid using except under special circumstances. It isn't normally
|
||||||
|
needed. EuGTK refers to widgets created by Glade by their ID:, e.g. the main window
|
||||||
|
of a program created by Glade would have the default ID of "window1", and your EuGTK
|
||||||
|
program would access that window as "window1".
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
There are a few 'trick' uses for this Widget name property, however:<br />
|
||||||
|
<p>One possible use is to pass data to functions which handle more than one control.
|
||||||
|
For example, you might have a set of radio buttons which all call a single handler
|
||||||
|
function. That function could examine the control's 'name' to determine what to do.
|
||||||
|
If, for example, the buttons select various colors, each button could have a different
|
||||||
|
color as the name property: 'red', 'green', or 'blue', etc.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>A more complex use might be to pass function names to a central 'dispatch' function,
|
||||||
|
which could then call the desired function by converting the 'name' into a routine_id.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Some of the demos in the glade subfolder utilize these tricks. See, for example, the
|
||||||
|
hello.* files: <a href="../glade/hello.ex">hello.ex</a>, <a href="../glade/es.e">es.e</a>,
|
||||||
|
etc...
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
<p><b>Cautions</b><br /><br />
|
||||||
|
The XML file created by Glade may include a "requires..." line, demanding a certain GTK
|
||||||
|
version be present. You may find it helpful to remove that line under certain conditions,
|
||||||
|
for example when designing your program on Linux with a current version of GTK/Glade,
|
||||||
|
but running it on Windows™, which lags behind the other platforms.
|
||||||
|
Just use a plain-text editor to zap the offending line.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="problems" />
|
||||||
|
|
||||||
|
<h3><hr />Common Problems<hr /></h3>
|
||||||
|
<p>
|
||||||
|
<ol>
|
||||||
|
<li>I run my program without errors but <i>can't see anything!</i><br />
|
||||||
|
<dfn>
|
||||||
|
You <u>must</u> click on the <i>'visible'</i> property checkbox for your main window.
|
||||||
|
This is found on the 'Common' tab under 'Widget Flags'.<br />
|
||||||
|
<i></i><b>Oh, and while you're there,</b></i> be sure to link the main window's <i>destroy</i>
|
||||||
|
signal to the built-in function Quit, so that your program will clean up after itself when finished!
|
||||||
|
You must do these two things for the main window of every program you write.</dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>I put buttons in a dialog, such as FileChooserDialog, but they don't do anything!<br />
|
||||||
|
<dfn>Set a unique <i>'Response ID'</i> for each button.
|
||||||
|
This is found on the 'General' tab under 'Button Attributes'.<br />
|
||||||
|
This ID is returned when the dialog closes as a result of a button being clicked.
|
||||||
|
</dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>How do I make menu items work like check menu items or radio menu items?<br />
|
||||||
|
<dfn>
|
||||||
|
I don't know how to do that using Glade.
|
||||||
|
You'll have to write code in Euphoria, or <gasp!> try to edit the .glade xml directly.
|
||||||
|
</dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>I want to use widget x, but can't find it on the Glade palette<br />
|
||||||
|
<dfn>
|
||||||
|
Some things are hard to find, and some just aren't there.
|
||||||
|
New GTK widgets introduced since GTK 3.10 are partially missing.
|
||||||
|
If you're working on the 'bleeding edge' of GTK3, you probably should be
|
||||||
|
coding by hand.
|
||||||
|
</dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>How do I know how to name the function that responds to a signal?<br />
|
||||||
|
<dfn>
|
||||||
|
If you click on the widget's Signals tab, you'll see a list of signals that can be linked.<br />
|
||||||
|
For example, a button has a 'clicked' signal.
|
||||||
|
You then click on the <type here> space adjacent to the signal name, and press the 'o' key. <br />
|
||||||
|
<em>(That's the letter o, not a zero!)</em><br />
|
||||||
|
When you do, a suggested function handler name will be plugged in.
|
||||||
|
You can, of course, type in any global function name you prefer here.
|
||||||
|
For example, the handler name for a Quit or Exit button should usually be <em class="black">Quit</em>
|
||||||
|
(no quotes)<br />This will call EuGTK's built-in Quit() function when the button is clicked.
|
||||||
|
</dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>I want to write <i>one</i> Eu function to handle multiple controls.<br />
|
||||||
|
<dfn>
|
||||||
|
Instead of accepting the default handler name, supply your own
|
||||||
|
For example, if you have 3 buttons, Glade will supply handler names:
|
||||||
|
<ul><li>on_button1_clicked</li><li>on_button2_clicked</li><li>on_button3_clicked</li></ul>
|
||||||
|
You simply remove the 1,2,and 3 from the handler names, and name your Eu function
|
||||||
|
<em class="black">on_button_clicked</em>. All 3 buttons will call that function.
|
||||||
|
It's then your job to sort them out.
|
||||||
|
</dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="compile" />
|
||||||
|
<h3><hr />Compiling, Binding, etc...<hr /></h3>
|
||||||
|
<p>
|
||||||
|
As usual, you can compile, bind, or shroud your program. If you do any of these, your program
|
||||||
|
will <i>still</i> load the GUI description from the Glade XML file at run-time. This could be either good or bad, depending upon your perspective.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<u>The benefits:</u>
|
||||||
|
<ul>
|
||||||
|
<li>The GUI appearance can be adjusted without messing with the program logic</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<u>The drawbacks:</u>
|
||||||
|
<ul>
|
||||||
|
<li>Anyone can easily trash your nice program by changing names or removing controls in the .glade file.
|
||||||
|
</li>
|
||||||
|
<li>The .glade file must be distributed along with the .ex file
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="hint" style="width:80%;" >
|
||||||
|
<img class="hint" src="../thumbnails/hint.png" width="100px" alt="hint" align="left" float="right" />
|
||||||
|
<p style="margin-left: 40px">
|
||||||
|
<b>Knowing the way some users think...</b><br />
|
||||||
|
It's almost certain that someone will see that Glade™<sup><em>*</em></sup> file,<br />
|
||||||
|
think <i>"I don't care about air fresheners.."</i> and delete it.
|
||||||
|
<br /><br />
|
||||||
|
<small><i><sup><em>*</em></sup> brand name for a common type of room deodorizer in the U.S.</i></small>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
One easy solution to this problem is to copy the glade XML, paste it into a new file,
|
||||||
|
enclose it in triple quotes, and assign it to an exported constant. Below, the added code is in red, while the XML from Glade is shown in black:
|
||||||
|
<code><pre><em> export constant XML = """</em>
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.16.1 -->
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.10"/>
|
||||||
|
---etc---
|
||||||
|
<em>"""</em>
|
||||||
|
</pre></code></p>
|
||||||
|
<p>
|
||||||
|
|
||||||
|
Save this new file as an include, perhaps widgets.xml, with the widgets namespace, and then your code becomes:
|
||||||
|
<code><pre>
|
||||||
|
<em class="kw">include</em> GtkEngine.e
|
||||||
|
<em class="kw">include</em> widgets.xml
|
||||||
|
<em class="gtk">add</em>(builder,widgets:XML) <em>-- EuGTK can add objects from either a string variable or a filename</em>
|
||||||
|
<em class="gtk">main()</em>
|
||||||
|
</pre></code>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Now you can bind or compile your program and the interface will be 'hard coded' into it. Changing or deleting
|
||||||
|
the widgets.xml or widgets.glade files will make no difference. No changes to your program interface can be made
|
||||||
|
without re-compiling or re-binding.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The <a href="README.html#bear">Bear</a>,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Updated for EuGTK version 4.11.11, Sept 1, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
1195
eugtk/examples/documentation/HowItWorks.html
Normal file
1169
eugtk/examples/documentation/README.html
Normal file
184
eugtk/examples/documentation/ServerHelp.html
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Eu Server</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<img src="../thumbnails/gtk-logo-rgb.gif" alt="GTK Logo">
|
||||||
|
<img src="../thumbnails/mongoose.png" alt="OpenEuphoria Logo">
|
||||||
|
<img src="../screenshots/Screenshot-14.png" align="right" alt="server" width="50%" />
|
||||||
|
|
||||||
|
<h1>EuGTK 4.12.0</h1>
|
||||||
|
|
||||||
|
<h3><hr />Euphoria Web Server<hr /></h3>
|
||||||
|
<h4>version 1.1</h4>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<div class="hdr">Quick Links</div>
|
||||||
|
<a href="#options"><button>Options</button></a>
|
||||||
|
<a href="#screenshots"><button>Screenshots</button></a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<div class="hdr">Other Files</div>
|
||||||
|
<a href="README.html"><button>Readme First</button></a>
|
||||||
|
<a href="HowItWorks.html"><button>How EuGTK Works</button></a>
|
||||||
|
<a href="dialogs.html"><button>Dialogs</button></a>
|
||||||
|
<a href="printing.html"><button>Printing</button></a>
|
||||||
|
<a href="pango_markup.html"><button>Markup</button></a>
|
||||||
|
<a href="treeviews.html"><button>TreeViews</button></a>
|
||||||
|
<a href="guide_a.html"><button>Alphabetical Guide</button></a>
|
||||||
|
<a href="functions.html"><button>Quick Function List</button></a>
|
||||||
|
<a href="Glade.html"><button>Glade GUI Builder</button></a>
|
||||||
|
<a href="platforms.html"><button>Platforms</button></a>
|
||||||
|
<hr />
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<article {width: 950px; display: table;}
|
||||||
|
<p>
|
||||||
|
This uses a heavily modified <a href="../examples/httpd.ex">httpd.ex</a> (from the Eu demos) to serve up files over the local network.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Apache would work, but who wants to deal with all that arcane stuff?, Besides,
|
||||||
|
I'd still have to write cgi code to display the pages... so why go thru all that
|
||||||
|
just to share some files?
|
||||||
|
This solution is much simpler, and is written in Euphoria, so you can modify it as you wish!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Httpd.ex can work from a command line - just issue
|
||||||
|
<samp> %> eui httpd </samp> to see the options. When running from the command line, you'll need to enter
|
||||||
|
your server's IP address (use ifconfig to get that), and port, perhaps 8080, and the root (starting directory).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You can run more than one server at a time, just use a different port for each. For example,
|
||||||
|
set the root for port 8081 to your Music/Blues folder, and the root for port 8082 to your
|
||||||
|
Music/Opera folder - that way, listeners won't have to wade thru albums they may be allergic to:)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To make the server easier to use, I've added the EuGTK GUI shown above, which lets you select some options, and then starts the server running in the background
|
||||||
|
when you click the OK button. Once it's running, you just enter the IP address and port in your tablet or phone's
|
||||||
|
browser address bar to connect. e.g: <samp>192.168.1.100:8080</samp>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="options" />
|
||||||
|
<h3><hr />httpd.ex<hr /></h3>
|
||||||
|
<ul>
|
||||||
|
<li class="opts"><i>-help</i> <dfn>displays Usage</dfn></li>
|
||||||
|
<li class="opts"><i>-bind</i> <dfn><b>required</b> ip_address:port, e.g. 192.168.1.100:8080</dfn></li>
|
||||||
|
<li class="opts"><i>-root</i> <dfn> <b>required</b> e.g. /home/irv/demos/documentation</dfn></li>
|
||||||
|
<li class="opts"><i>-log</i> <dfn>optional, name of log file</dfn></li>
|
||||||
|
<li class="opts"><i>-h</i> <dfn>optional, show hidden files in directory listing</dfn></li>
|
||||||
|
<li class="opts"><i>-s</i> <dfn>optional, sort directory listings</dfn></li>
|
||||||
|
<li class="opts"><i>-r</i> <dfn>optional, include full request and response in log</dfn></li>
|
||||||
|
<li class="opts"><i>-t</i> <dfn>optional, number of tries to obtain port before giving up</dfn></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3><hr />webserver.ex<hr /></h3>
|
||||||
|
<ul>
|
||||||
|
<li><b>IP</b>:
|
||||||
|
<dd>Your network address, or 127.0.0.1 (a.k.a. localhost) if not networked.
|
||||||
|
This should be filled in automatically. If it's wrong, use ifconfig
|
||||||
|
to get the inet addr of your computer.</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><b>Port</b>:
|
||||||
|
<dd>use 8080, 8081, etc.<em> -- Avoid port 80</em></dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><b>Root</b>:
|
||||||
|
<dd>Starting (root) directory to serve up. Set this to your Music directory or a mounted music CD.
|
||||||
|
Also, try your Pictures directory, Demos, etc...
|
||||||
|
I have tried to make it difficult to browse 'off-limits',
|
||||||
|
i.e: into files or folders which are not in or subfolders of doc_root.
|
||||||
|
You may have better ideas than I do on this topic. Please contribute!</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><b>Log file</b>:
|
||||||
|
<dd>Name of a file to write transactions to. A new log file will be created if necessary.
|
||||||
|
You should delete it when no longer needed, since it continues to grow...
|
||||||
|
I suggest you make the log file a hidden file, so it won't show in normal directory listings.
|
||||||
|
Log entries will have date and time, client IP, plus name of file requested.</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><b>Tail -f</b>:
|
||||||
|
<dd>If checked, opens a terminal which follows the log file.
|
||||||
|
With mate-terminal, which I use, this opens a single terminal with two tabs,
|
||||||
|
one for the web server messages, and another for following the log file.
|
||||||
|
You may need to modify the routine at the top of webserver.ex which chooses a terminal,
|
||||||
|
depending upon what terminal programs you have available.
|
||||||
|
If, like mate-terminal, your term has different profiles, it will be helpful to create
|
||||||
|
a new profile named 'logview' with different colors, a tiny font size, etc.
|
||||||
|
for most convenient viewing of the log output.
|
||||||
|
This is how I get the nice transparent log view shown in the <a href="../screenshots/Screenshot-14.png" alt="server">screenshot</a> at top.</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><b>Sort</b>:
|
||||||
|
<dd>If checked, sort the file listing.</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><b>Show Full Request</b>
|
||||||
|
<dd>Adds the full request string to the server log. This includes info on the browser doing the request.
|
||||||
|
This info might be used to create and return different results depending upon whether the browser was
|
||||||
|
running on a computer, or perhaps a cell phone.</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><b>Show Hidden</b>:
|
||||||
|
<dd>If checked, show hidden files along with others in the directory listing</dd>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="screenshots" />
|
||||||
|
|
||||||
|
<img src="../screenshots/Vancouver.png" alt="Screenshot-18" width="100%" />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The appearance of the page is controlled by a file named .httpd.css, if it exists in the
|
||||||
|
currently-browsed folder. This is done so that directory
|
||||||
|
listings from different folders can have their own individual appearances (see screenshot above).
|
||||||
|
If no .httpd.css exists in a given folder, defaults built into
|
||||||
|
httpd.ex will be used.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src= "../screenshots/Screenshot-11.png" alt="Screenshot-11" width="100%" />
|
||||||
|
<p>
|
||||||
|
Above, webserver.ex serving a specified file as entered on the address bar, or by clicking on a link in a previous page.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
After closing the server, or a crash, it may take several seconds to minutes for your computer to
|
||||||
|
free the port you've used. Trying to run again too soon using the same port will result in an error (-2).
|
||||||
|
I have included a loop which will retry up to 20 times (unless overridden by the -t option), and then abort. If this happens, and you are running from the GUI, you can try hitting the OK button again. It may take
|
||||||
|
several tries, or you may have to shut down the port manually from a terminal.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<br clear="all" />
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The <a href="README.html#bear">Bear</a>,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>Updated for EuGTK version 4.12.0, Sept 15, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
271
eugtk/examples/documentation/StartingGlade.html
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Starting Glade Chap. 1</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<img src="../screenshots/glade_test_1.png" alt="glade test 1" align="right" width="500" />
|
||||||
|
|
||||||
|
<h2>Using Glade 1</h2>
|
||||||
|
|
||||||
|
<a name="starting" />
|
||||||
|
<h3>Getting Started</h3>
|
||||||
|
<h4>Step 1 - Design a Window</h4>
|
||||||
|
<p>
|
||||||
|
<ol>
|
||||||
|
<li>Open Glade, and create a new file
|
||||||
|
<dd>(File/New menu item)</dd>
|
||||||
|
</li>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>Click on the Window icon <img class="x" src="../thumbnails/red_star.png" height="15px" />
|
||||||
|
<dd>(leftmost item under the Toplevels tab)</dd>
|
||||||
|
<dd>
|
||||||
|
This will add a main window to your glade program.
|
||||||
|
It will be named <i>window1</i>.</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>Next, click on the Common tab in the Window Properties pane
|
||||||
|
<dd>(lower right) and scroll down a bit to the Widget Flags section.</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>Check the Visible checkbox.
|
||||||
|
<dd><em>If you don't make the main window visible,
|
||||||
|
how are you going to be able to tell if your program
|
||||||
|
is running?</em> :)</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>Save it with the extension .glade, e.g. <i>test1.glade</i></li>
|
||||||
|
</ol>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This will produce a .glade xml file which describes the interface.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You don't need to be concerned with this xml, there's no need even
|
||||||
|
to look at it, much less edit it. The sample below is provided just
|
||||||
|
to satisfy your curiosity:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="quote"><pre><code><?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.16.1 -->
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.0"/>
|
||||||
|
<object class="GtkWindow" id="window1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="title" translatable="yes">Glade Test 1</property>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface></code></pre></div>
|
||||||
|
|
||||||
|
<h4>Step 2 - Link to Euphoria</h4>
|
||||||
|
<p>
|
||||||
|
Create a Euphoria program to load and run the .xml you just created:
|
||||||
|
</p>
|
||||||
|
<div class="quote"><pre><code><em class="kw">include</em> GtkEngine.e
|
||||||
|
|
||||||
|
<em class="gtk">add</em>(builder,<em class="str">"~/demos/examples/glade/test1.glade"</em>)
|
||||||
|
|
||||||
|
<em class="gtk">main</em>()
|
||||||
|
</code></pre></div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Save this as <i>test1.ex</i>. If you keep the names the same, it will be less confusing.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h4>Step 3 - Test Run</h4>
|
||||||
|
<p><img src="../screenshots/test1.png" alt="test1" float="right" align="left" />
|
||||||
|
<br /><br />
|
||||||
|
You will <b><i><u>always</u></i></b> run from an x-terminal (mate-terminal, etc) until your program is completely finished. There is no way around this if you <i>ever</i> expect to get it completely debugged.</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Run the program:
|
||||||
|
<div class="scrn">
|
||||||
|
<tt>$> eui test1</tt>
|
||||||
|
</div>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<br clear="all" />
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<a name="adding_widgets" />
|
||||||
|
|
||||||
|
<h4>Step 4 - Adding Widgets</h4>
|
||||||
|
<p><img src="../screenshots/x2.png" alt="x2" align="right" width="400" />
|
||||||
|
<ul>
|
||||||
|
<li><em>Add a container for a menu and button to your window</em></li>
|
||||||
|
<ol>
|
||||||
|
<li>Go back to Glade, and select a container.
|
||||||
|
<dd>Box will do nicely</dd>
|
||||||
|
<dd>(see <img src="../thumbnails/green_star.png" height="15px" />in screenshot above)</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>Drag and drop it into the window
|
||||||
|
<dd>(accept the default number of items, and click Create)</dd>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<li><em>Add a standard menu to your window</em></li>
|
||||||
|
<ol>
|
||||||
|
<li>Click on File
|
||||||
|
<dd>(in the little 3-sided box under Containers, also)</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>Drop it into the top panel in the window.</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<li><em>Add a Quit button to your window</em></li>
|
||||||
|
<ol>
|
||||||
|
<li>Click on the OK button
|
||||||
|
<dd>(under the Control and Display tab)</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>Drop that into the bottom panel of the window.</li>
|
||||||
|
|
||||||
|
<li>Click on the actual button (in the window) to select it.</li>
|
||||||
|
|
||||||
|
<li>Select the General tab under Button properties
|
||||||
|
<dd>(lower right pane)</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>Scroll down to the Button Content section, click Stock Button, and from the combo box select Quit <dd>(scroll down the list)</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>Click on the Signals tab in the Button properties pane.</li>
|
||||||
|
|
||||||
|
<li>Select the <i>clicked</i> signal]
|
||||||
|
<dd>where it says <Type here>, enter Quit <em>-- no quotes please</em></dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>Be sure to hit enter or click on something else
|
||||||
|
<dd>(so that your typed entry will be saved. <em>-- this is a quirk of Glade</em>)</dd>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<li><em>Save your work</em>
|
||||||
|
<ul>
|
||||||
|
<li>Ctl-s, File/Save, or click on the "save the current project" toolbar icon.</li>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<img src="../screenshots/test2.png" alt="test2" align="right" />
|
||||||
|
You'll now have a window with a fairly complete menu and a functioning Quit button.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<i>But wait!</i><br />The button works, but the File/Quit menu item doesn't!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Let's fix that:
|
||||||
|
<ul>
|
||||||
|
<li>In Glade, click on the File menu item on your new window
|
||||||
|
<dd>
|
||||||
|
<dfn>(not the Glade File menu, <u>your</u> new menu)</dfn>
|
||||||
|
</dd>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>This will select menuitem1 in the upper right Glade pane</li>
|
||||||
|
<li>Click the arrow to open the submenu (menu1)</li>
|
||||||
|
<li>Click its arrow to expand the actual menu items</li>
|
||||||
|
<li>Select imagemenuitem5
|
||||||
|
(That will be <u>your</u> File/Quit menu item.)
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>From the Menu Item Properties pane <dfn>(lower right)</dfn> select the Signals tab.</li>
|
||||||
|
<li>Select the activate signal, and as you did with the Quit button, type in Quit.</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Now your File menu Quit option will...erm.. quit.</p>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
<h4>Step 5 - Connecting Euphoria Functions</h4>
|
||||||
|
<p>
|
||||||
|
Let's add some actual Euphoria code next. Follow the steps directly above, but this time click on
|
||||||
|
the Help menu item, and expand the list so that you can select imagemenuitem10 (Help/About).
|
||||||
|
<ul>
|
||||||
|
<li>In the Signals tab, select activate and type in help_me (again, no quotes, hit enter)</li>
|
||||||
|
<li>Save your work, and run the program again.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>In your terminal you should see something like:</p>
|
||||||
|
|
||||||
|
<div class="scrn">
|
||||||
|
<tt><pre>
|
||||||
|
-----------------------------------------------
|
||||||
|
-- Undeclared function in test1.glade
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
global function help_me()
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
</pre></tt></div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
What to do? Copy the function prototype and paste it into your Euphoria program.
|
||||||
|
Then edit it to look like the one below:
|
||||||
|
</p><img src="../screenshots/test3.png" alt="test3" align="right" float="left" />
|
||||||
|
|
||||||
|
<div class="quote" style="width:50%"><pre><em> --------------------------</em>
|
||||||
|
<em class="kw"><b> global</b> function</em> help_me()
|
||||||
|
<em> --------------------------</em>
|
||||||
|
<em class="gtk"> Info</em>(,,<em class="str">"About","My fine program!"</em>)
|
||||||
|
<em class="kw"> return</em> 1
|
||||||
|
<em class="kw"> end function</em>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Run it again, and click on the Help/About menu item. Note that your program is still only
|
||||||
|
7 lines of code.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<br clear="all" />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<hr />
|
||||||
|
<a href="StartingGlade2.html">On to topic two</a>
|
||||||
|
<hr />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The Bear,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>Updated for EuGTK version 4.11.11, Sept 1, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
208
eugtk/examples/documentation/StartingGlade2.html
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Starting Glade - Chap. 2</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h2>Using Glade</h2>
|
||||||
|
|
||||||
|
<img src="../screenshots/x3.png" alt="glade" align="right" width="400" />
|
||||||
|
|
||||||
|
<h3>Linking more functions</h3>
|
||||||
|
<h4>Opening a file</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Use Glade to select the File/Open menu item, which will be named imagemenuitem2<br />
|
||||||
|
<i><small><em>(note that you are free to change the name of any item by typing the new name
|
||||||
|
into the ID: entry on the General tab for that item.</small></i>
|
||||||
|
</em></p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Let's do so, and change this to the more meaningful name: <code>file_open</code>
|
||||||
|
(as usual, no quotes).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Now select the Signals tab, and set the <i>activate</i> handler to be <code>open_file</code>
|
||||||
|
(ok, so I'm not being very original, too bad :p)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Click the Save the Current Project toolbutton, and run your program again.
|
||||||
|
In your terminal you should see something resembling:
|
||||||
|
<div class="scrn"><tt><pre>
|
||||||
|
-------------------------------------------------
|
||||||
|
-- Undeclared function in test1.glade
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
global function open_file()
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
</pre></tt></div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You should have expected that. Copy this template, paste it into your Eu program,
|
||||||
|
and fill in the blank.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>For this program, you'll also have to
|
||||||
|
add <tt><em class="kw">include</em> GtkFileSelector.e</tt> to your program.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="quote"></p><tt><pre>
|
||||||
|
<em class="kw">include</em> GtkEngine.e
|
||||||
|
<em class="kw">include</em> GtkFileSelector.e
|
||||||
|
|
||||||
|
<em class="gtk">add</em>(builder,<em class="str">"~/demos/examples/glade/test1.glade"</em>)
|
||||||
|
|
||||||
|
<em class="gtk">main</em>()
|
||||||
|
|
||||||
|
<em>---------------------------</em>
|
||||||
|
<em class="kw"><b>global</b> function</em> help_me()
|
||||||
|
<em>---------------------------</em>
|
||||||
|
<em class="kw">return</em> <em class="gtk">Info</em>(,,<em class="str">"About","My fine program!"</em>)
|
||||||
|
<em class="kw">end function</em>
|
||||||
|
|
||||||
|
<em>----------------------------</em>
|
||||||
|
<em class="kw"><b>global</b> function</em> open_file()
|
||||||
|
<em>----------------------------</em>
|
||||||
|
<em class="kw">object</em> fname = fileselector:Open(<em class="str">"*.ex"</em>)
|
||||||
|
<em class="kw">if sequence</em>(fname) <em class="kw">then</em>
|
||||||
|
<em class="gtk">Info</em>(,,<em class="str">"You Selected"</em>,fname)
|
||||||
|
<em class="kw">end if</em>
|
||||||
|
<em class="kw">return</em> 1
|
||||||
|
<em class="kw">end function</em>
|
||||||
|
</pre></tt>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Click on a file, and you should see the filename displayed in
|
||||||
|
a neat pop-up box.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<img src="../screenshots/glade_test_1.png" alt="glade test 1" align="right" width="500" />
|
||||||
|
<h3>Adding Widgets</h3>
|
||||||
|
<h4>Containers</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If you recall, the original Box<img class="x" src="../thumbnails/green_star.png" alt="green star" height="15px;" /> we added as the first item in our window had
|
||||||
|
3 'divisions'. We filled the first (top) with a menu, and the 3rd (bottom) with
|
||||||
|
a button. The middle one was left empty, and so it doesn't show at all.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Let's add some things to the middle.
|
||||||
|
We can't put more than one item in there; try it, you'll see.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We'll need a container if we want more than one thing there, so choose another
|
||||||
|
Box <img class="x" src="../thumbnails/green_star.png" alt="green star" height="15px;" />,
|
||||||
|
drop it into the empty middle space, change number of items to 2, and click create.
|
||||||
|
The default orientation is vertical, which won't do for this particular demo, so change it
|
||||||
|
to horizontal.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Into the left-hand panel of the Box we just added, drop an image container. It's the little house with the yellow roof in the Control and Display section of the left-hand toolbar. <img src="../thumbnails/little_house.png" alt="little house" align="top" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
In the right-hand panel, drop a label container. It's also in the Control and Display section. Under Appearance/Label: type in some text. Use markup if you like, and click the Use Markup checkbox.
|
||||||
|
Save your work, you should do this frequently.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src="../screenshots/test5.png" alt="test5" align="right" />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
What about the image?
|
||||||
|
We'll need to pick one, so click on the little missing image
|
||||||
|
icon on your program's window, and choose one of the following:
|
||||||
|
<ul>
|
||||||
|
<li>A stock id from the drop-down combo</li>
|
||||||
|
<li>An icon name<dd>face-cool, for example</dd></li>
|
||||||
|
<li>A file
|
||||||
|
<dd>Choose one from the file selector on the right.</dd>
|
||||||
|
<dd>(You'll find that if you use an image loaded from a file,
|
||||||
|
the image must be in the same folder as your program,
|
||||||
|
otherwise it's difficult, but not impossible,
|
||||||
|
for your program to find it at runtime.)
|
||||||
|
</em></dd>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Run the program again, and note that no changes or additions or adjustments were required to the 12 lines of Euphoria source code.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<br clear="all" />
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<img src="../screenshots/test6.png" alt="Calendar" align="right" width="500px" />
|
||||||
|
<p>
|
||||||
|
Suppose we want an image more pleasing than the one above?
|
||||||
|
Just change the open_file function a bit:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<div class="quote"><pre><code> <em>-----------------------------</em>
|
||||||
|
<em class="kw"><b> global</b> function</em> open_file()
|
||||||
|
<em> -----------------------------</em>
|
||||||
|
<em class="gtk"> fileselector:filters</em> = {<em class="str">"image"</em>}
|
||||||
|
<em class="kw" > object</em> newfile = <em class="gtk">fileselector:Open</em>(<em class="str">"*"</em>)
|
||||||
|
<em class="kw"> if sequence</em>(newfile) <em class="kw">then</em>
|
||||||
|
<em class="gtk"> set</em>(<em class="str">"image1","from file"</em>,newfile)
|
||||||
|
<em class="kw"> end if</em>
|
||||||
|
<em class="kw"> return</em> 1
|
||||||
|
<em class="kw"> end function</em>
|
||||||
|
</code></pre></div>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Just click on the image you prefer. I like this one!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
<h3>In Conclusion</h3>
|
||||||
|
<h4>Chapters 3...99</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Building more complex objects such as TreeViews, ListViews, etc. with Glade will involve some experimenting.
|
||||||
|
Explaining these in detail (using words) would require a whole book, which, like most such
|
||||||
|
books, would cost $99.00 plus tax, and would bore you half to death.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
So, if you really feel that you can't handle it on your own from here, start saving your $99.00 (plus tax) for the book. You might have a long wait.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>But frankly, Glade doesn't save any time when creating these objects, since the process is somewhat tedious. You can achieve the same outcome by writing just a few
|
||||||
|
lines of code with an ordinary text editor, cutting and pasting from demo programs where applicable. Try it - this isn't rocket science!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The Bear,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>Updated for EuGTK version 4.11.11, Sept 1, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
153
eugtk/examples/documentation/bear.html
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<head>
|
||||||
|
<title>Bear Docs</title>
|
||||||
|
<style>
|
||||||
|
div.hint {
|
||||||
|
display: block;
|
||||||
|
border: thin solid black;
|
||||||
|
padding: 8px;
|
||||||
|
font-size: small;
|
||||||
|
background-image: linear-gradient(180deg, cornsilk,skyblue);
|
||||||
|
border-radius: 15px;
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
width=80%;}
|
||||||
|
|
||||||
|
div.hdr {
|
||||||
|
display: block;
|
||||||
|
background-image: linear-gradient(180deg, cornsilk, skyblue);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.quote {
|
||||||
|
display: block;
|
||||||
|
margin: 5px;
|
||||||
|
padding: 5px;
|
||||||
|
border: thin solid black;
|
||||||
|
background-image: linear-gradient(180deg, ivory,honeydew);
|
||||||
|
font-size: small;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.quote dd {font-size: smaller;}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="hdr">
|
||||||
|
<h2><hr />The Bear Help file<hr /></h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<figure style="float:right; border:solid thin black; border:none; width="100%">
|
||||||
|
<a href="images/bear0.png">
|
||||||
|
<img src="images/bear0.png" alt="bear" width="100%" style="margin-left:0;" /></a>
|
||||||
|
<figcaption>
|
||||||
|
<small><i> The BEAR can even view Bear videos!</i></small>
|
||||||
|
</a>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<br clear="all" />
|
||||||
|
|
||||||
|
<h4>Browser Controls</h4>
|
||||||
|
<img src="images/bear1.png" />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To open a page from the web, click the Network button. A dialog box
|
||||||
|
will appear for you to type in a web address: http://OpenEuphoria.org,
|
||||||
|
for example. This button will be disabled if you are not on a network.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
To open a local file (.html or otherwise), click the Local button. In most cases,
|
||||||
|
the file type will be automatically recognized and placed into the appropriate
|
||||||
|
window.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/hint.png" alt="hint" width="100px" align="left" float="right" />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The sourcecode editor does <i><b>not</b></i> automatically 'track' the
|
||||||
|
current web page being viewed. If you want to edit the current web page
|
||||||
|
.html, you <b>must</b> click on the Edit button in the Browser toolbar!</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<h4>Source Controls</h4>
|
||||||
|
|
||||||
|
<img src="images/bear3.png" />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Click New or Open to create or edit a text file (Euphoria source code, for example).
|
||||||
|
If the file extension is .ex, then the Execute button in the Source toolbar
|
||||||
|
will be enabled; clicking on it will run <i>a temporary copy</i> of the program in the Source pane.
|
||||||
|
If you are satisfied with the way the temporary copy ran, just click on the Save or SaveAs buttons
|
||||||
|
to write the updated code to disk.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src="images/bear4.png" />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The Execute button will be disabled if the code being edited is not
|
||||||
|
a Euphoria program, but the Save and SaveAs buttons will function to save
|
||||||
|
text, including .html that you may have modified. If the file is .html, then
|
||||||
|
the WebView will be reloaded to show the updated web page.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="quote">
|
||||||
|
<h4>Preferences</h4>
|
||||||
|
<p>
|
||||||
|
Options for the source code editor are:
|
||||||
|
<ul>
|
||||||
|
<li>Set Editor Font<dd> (only monospace fonts are shown in the
|
||||||
|
font dialog, since this is primarily for editing source and html
|
||||||
|
code)</dd></li>
|
||||||
|
<li>Use Line Numbers</li>
|
||||||
|
<li>Spaces and Tabs<dd>Make whitespace characters visible</dd></li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<b>Navigating</b>
|
||||||
|
<p>
|
||||||
|
In order to more easily edit html source code, you can highlight
|
||||||
|
words or a phrase in the web view, and select 'copy' from the pop-up menu.
|
||||||
|
Then click on the Find button in the Web Page control panel.
|
||||||
|
This will try to scroll the editor
|
||||||
|
pane to find the matching word(s).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Avoid clicking on text that
|
||||||
|
includes markup, such as <i>italics</i> or <b>bold</b>, as those won't match a text search.
|
||||||
|
Neither will markup items such as & < >, etc.,
|
||||||
|
or hidden markup such as links.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>This scheme doesn't always work perfectly,
|
||||||
|
(sometimes not at all, try clicking on the find button again),
|
||||||
|
but it's certainly
|
||||||
|
better than nothing! If you know of a better way, please let me know!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The <a href="../BEAR.ex">Bear</a>,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Updated for EuGTK version 4.11.11, Aug 15, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
277
eugtk/examples/documentation/dialogs.html
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
|
||||||
|
<! DOCTYPE html>
|
||||||
|
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>EuGTK Dialogs</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<img src="../thumbnails/gtk-logo-rgb.gif"><alt="GTK LOGO"></img>
|
||||||
|
<img src="../thumbnails/mongoose.png"><alt="mongoose"></img>
|
||||||
|
<img src="../thumbnails/gnome-run.png"alt="gnome-run" align="right" />
|
||||||
|
|
||||||
|
<h2><hr />EuGTK 4.12.0</h2>
|
||||||
|
<h3>Built-in Dialogs</h3><hr />
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<div class="hdr">Quick Links:</div>
|
||||||
|
<a href="#creating"><button>Creating</button></a>
|
||||||
|
<a href="#modal"><button>Modal Dialogs</button></a>
|
||||||
|
<a href="#nonmodal"><button>Non-modal Dialogs</button></a>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div class="hdr">Other Files:</div>
|
||||||
|
<a href="README.html"><button>README</button></a>
|
||||||
|
<a href="HowItWorks.html"><button>How EuGTK Works</button></a>
|
||||||
|
<a href="guide_a.html"><button>Alphabetical guide</button></a>
|
||||||
|
<a href="printing.html"><button>Printing</button></a>
|
||||||
|
<a href="pango_markup.html"><button>Markup</button></a>
|
||||||
|
<a href="treeviews.html"><button>ListView/TreeView</button></a>
|
||||||
|
<a href="ServerHelp.html"><button>Web Server</button></a>
|
||||||
|
<a href="functions.html"><button>Quick Function List</button></a>
|
||||||
|
<a href="Glade.html"><button>Glade GUI Builder</button></a>
|
||||||
|
<a href="platforms.html"><button>Platforms</button></a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<table border="0">
|
||||||
|
<tr><th colspan="1">Built-in Dialogs</th></tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="6">
|
||||||
|
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/hint.png" alt="hint" width="100px" align="left" float="right" />
|
||||||
|
<p><b>New:</b><br />
|
||||||
|
An easy-to-use Custom dialog, and <a href="#nonmodal">non-modal dialogs</a>!
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
There are five pre-built <a href="#modal">modal dialogs</a> in EuGTK, which you can use
|
||||||
|
in your own programs to save time and typing, while making your program
|
||||||
|
code much easier to read and maintain. They require only one line of code,
|
||||||
|
whereas using GTK's Dialogs or MessageDialogs can require many lines of code. There's also a non-modal dialog.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Dialogs have a title, a <i>primary text</i> item, a <i>secondary text</i> item,
|
||||||
|
plus one or more buttons.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Note that each dialog has different default titles, icons and buttons.
|
||||||
|
The primary and secondary text however, must be supplied by the programmer.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Dialogs appearance and contents can be changed by exercising various options. See 8 below.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
All defaults can be overridden when creating a dialog. The
|
||||||
|
parameters to the dialog are shown below. All are optional.<br />
|
||||||
|
<ol>
|
||||||
|
<li>Parent of the dialog
|
||||||
|
<dd>If you want the dialog to use the parent window's titlebar icon (and window theme allows), put the parent's handle here</dd></li>
|
||||||
|
|
||||||
|
<li>Title appearing on the titlebar
|
||||||
|
<dd>If omitted, title will be the type of dialog, e.g. Info, Error, Warning, or Question</dd></li>
|
||||||
|
|
||||||
|
<li>Primary text
|
||||||
|
<dd>Will be bold if there is secondary text, use markup if you wish</dd></li>
|
||||||
|
|
||||||
|
<li>Secondary text
|
||||||
|
<dd>Will be smaller than primary text, use markup if you wish</dd></li>
|
||||||
|
|
||||||
|
<li>Button set
|
||||||
|
<dd>Leave empty to use the default button set,</dd>
|
||||||
|
<dd>or use GTK_BUTTONS_ enums to change button set.</dd>
|
||||||
|
<dd>NULL (0) in this slot means don't use any buttons!</dd></li>
|
||||||
|
|
||||||
|
<li>Dialog icon
|
||||||
|
<dd>A GtkImage, GdkPixbuf, path to an image file, or name of stock or theme icon,
|
||||||
|
will override the default dialog icon with a custom image.</dd>
|
||||||
|
<dd>NULL in this slot means don't use a dialog icon.</dd>
|
||||||
|
<dd>Leave empty to use default Info, Warn, Error, Question icons</dd></li>
|
||||||
|
|
||||||
|
<li>Titlebar Icon
|
||||||
|
<dd>Name of icon, this overrides icon set by dialog.</dd>
|
||||||
|
<dd>NULL here means use parent's icon.</dd>
|
||||||
|
<dd>Leave empty to use default Info, Warn, Error, Question icons</dd>
|
||||||
|
<dd><em>Note: some themes refuse to show an icon on the titlebar.</em></dd></li>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<li>Modality
|
||||||
|
<dd>MODAL/NONMODAL</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>Addon
|
||||||
|
<small><em>new in EuGTK 4.10</em></small>
|
||||||
|
<dd>You can pass the handle to a widget here,
|
||||||
|
and the widget will be added to the dialog.
|
||||||
|
The widget can, of course, be a container which
|
||||||
|
may contain several items. See example on the right,
|
||||||
|
which adds a GtkTextView widget to the
|
||||||
|
standard Info dialog.</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>X position
|
||||||
|
<small><em>new in EuGTK 4.11</em></small>
|
||||||
|
<dd>You can pass an x position for the dialog, following the addon option</dd>
|
||||||
|
</li>
|
||||||
|
<li>Y position
|
||||||
|
<small><em>new in EuGTK 4.11</em></small>
|
||||||
|
<dd>You can pass a y position for the dialog, following the X option</dd>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><img src="../screenshots/info.png" alt="info dialog" title="Info dialog" /></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><img src="../screenshots/error.png" alt="error dialog" title="Error dialog" /></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><img src="../screenshots/warn.png" alt="warn dialog" title="Warn dialog" /></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><img src="../screenshots/question.png" alt="question dialog" title="Question dialog" /></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><img src="../screenshots/test92.png" alt="custom dialog"
|
||||||
|
title = "Custom dialog" width="300" align="right" /></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<a name="creating" />
|
||||||
|
|
||||||
|
|
||||||
|
<h3><hr />Creating the dialogs<hr /></h3>
|
||||||
|
<p>
|
||||||
|
<ul>
|
||||||
|
<li><i>result</i> = <b>Info(</b><i><small> [parent]</small></i>,<i><small> [title]</small></i>, "Primary Text", "Secondary Text",<br /> <i><small>[button type], [dialog icon], [titlebar icon], [modal], [addon], [x pos], [y pos]</small></i><b>)</b></li>
|
||||||
|
<li><i>result</i> = <b>Error(</b><i><small> [parent]</small></i>,<i><small> [title]</small></i>, "Primary Text", "Secondary Text",<br /> <i><small>[button type], [dialog icon], [titlebar icon], [modal], [addon], [x pos], [y pos]</small></i><b>)</b></li>
|
||||||
|
<li><i>result</i> = <b>Warn(</b><i><small> [parent]</small></i>,<i><small> [title]</small></i>, "Primary Text", "Secondary Text",<br /> <i><small>[button type], [dialog icon], [titlebar icon], [modal], [addon], [x pos], [y pos]</small></i><b>)</b></li>
|
||||||
|
<li><i>result</i> = <b>Question(</b><i><small> [parent]</small></i>,<i><small> [title]</small></i>, "Primary Text", "Secondary Text",<br /> <i><small>[button type], [dialog icon], [titlebar icon], [modal], [addon], [x pos], [y pos]</small></i><b>)</b></li>
|
||||||
|
<li><i>result</i> = <b>Custom(</b><i><small> [parent]</small></i>,<i><small> [title]</small></i>, "Primary Text", "Secondary Text",<br /> <i><small>[button type], [dialog icon], [titlebar icon], [modal], [addon], [x pos], [y pos]</small></i><b>)</b></li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Primary and Secondary text can be marked up as desired. <i><small>[optional]</small></i> parameters can be left empty,
|
||||||
|
defaults will be used.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="modal" />
|
||||||
|
|
||||||
|
<h3><hr />Modal Dialogs<hr /></h3>
|
||||||
|
<p>Modal dialogs lock you out of doing other things until you reply to them, then return various values when dismissed via button clicks
|
||||||
|
or the titlebar 'close' button. These values are:<br />
|
||||||
|
<ul>
|
||||||
|
<li>MB_ABORT (-4) when dialog is closed using the titlebar 'close' button <b>[X]</b></li>
|
||||||
|
<li>MB_OK (-5) when <b><u>O</u>K</b> button is clicked</li>
|
||||||
|
<li>MB_CANCEL (-6) when <b><u>C</u>ancel</b> button is clicked</li>
|
||||||
|
<li>MB_CLOSE (-7) when <b><u>C</u>lose</b> button is clicked</li>
|
||||||
|
<li>MB_YES (-8) when the <b><u>Y</u>es</b> button is clicked</li>
|
||||||
|
<li>MB_NO (-9) when the <b><u>N</u>o</b> button is clicked</li>
|
||||||
|
<li>MB_APPLY (-10)</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="nonmodal" />
|
||||||
|
|
||||||
|
|
||||||
|
<h3><hr />Non-modal dialogs<hr /></h3>
|
||||||
|
<p>
|
||||||
|
All the above built-in dialogs are by default <u>modal</u>, in that they capture the program focus until
|
||||||
|
they are dismissed. This is probably appropriate for most notification purposes. For places where
|
||||||
|
you need non-modal dialogs which you can leave on the screen while you work on
|
||||||
|
other windows in the same program, you'll have to do this a different way.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<i>Why,</i> you ask?
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Because the reason for leaving dialogs on the screen is so they can
|
||||||
|
they interact with your code, perhaps
|
||||||
|
changing items in other windows in response to changes in dialog options.
|
||||||
|
I can't predict what those options and connections might be, so I can't provide a ready-to-use dialog.
|
||||||
|
You might start with a basic GtkDialog, and build one up yourself, but this can be a lot of work, so I've
|
||||||
|
added a pre-built Custom dialog with options.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="nonmodal" />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
A non-modal dialog needs to be able to trigger actions <i>before</i> closing,
|
||||||
|
since it can remain on the screen for as long as the user wants.
|
||||||
|
Therefore, the dialog's buttons must be connected to user-written functions
|
||||||
|
prior to adding them to the dialog.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
To add buttons to a Custom dialog, use the following syntax:
|
||||||
|
<code><pre>
|
||||||
|
<em>-- for one button</em>
|
||||||
|
<em class="kw">object</em> btn = {{<em class="str">"gtk-ok"</em>,say,<em class="str">"OK"</em>}} <em>-- say is the call_back to your function Say(), and "OK" is text to send to the function.</em>
|
||||||
|
|
||||||
|
<em>-- or, for more than one</em>
|
||||||
|
<em class="kw">object</em> btns = {
|
||||||
|
{<em class="str">"gtk-ok"</em>,say,<em class="str">"OK"</em>},
|
||||||
|
{<em class="str">"gtk-cancel"</em>}, <em>-- any button not provided with a call_back will be used to cancel the dialog (regardless of what the button caption says)</em>
|
||||||
|
{<em class="str">"gtk-quit","Quit"</em>} <em>-- this does the obvious, killing the whole program, probably not something you'd want to do from a non-modal dialog!</em>
|
||||||
|
}
|
||||||
|
</pre></code></p>
|
||||||
|
|
||||||
|
Next, you put the btn or btns array as the 5<sup>th</sup> parameter passed to the dialog constructor:
|
||||||
|
<pre><code> <em class="gtk">Custom</em>(win,<em class="str">"Fonts Help","Instructions"</em>,help_text,<em class='blue'><u><b>btns</b></u></em>)
|
||||||
|
</code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Most often, you will want to add some control(s) other than buttons to a non-modal dialog, for example, one
|
||||||
|
or more color chooser buttons, or a font chooser, etc., or perhaps some scrolling text or an image.
|
||||||
|
These would look out of place if they were added to the button area of a dialog.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To add these to the dialog's content area, create the item and pass the handle of this item as the Addon (9<sup>th</sup>) parameter to the dialog.
|
||||||
|
If you need several, pack them into a container and pass the handle of the container. See <a href="../test200.ex">test200.ex</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
It is best to limit the use of non-modal dialogs, since they tend to clutter up the screen. If you're using lots of these,
|
||||||
|
you are most likely doing something wrong. Menu options, sidebars, or moveable panes are often better substitutes.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The <a href="README.html#bear">Bear</a>,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Updated for EuGTK version 4.12.0, Sept 15, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
BIN
eugtk/examples/documentation/favicon.ico
Normal file
After Width: | Height: | Size: 21 KiB |
253
eugtk/examples/documentation/functions.html
Normal file
@ -0,0 +1,253 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>EuGTK Internals</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<heading>
|
||||||
|
<img src="../thumbnails/gtk-logo-rgb.gif" alt="GTK LOGO" />
|
||||||
|
<img src="../thumbnails/mongoose.png" alt="mongoose" />
|
||||||
|
<img src="../thumbnails/gnome-run.png"alt="gnome-run" align="right" />
|
||||||
|
|
||||||
|
<h2> <hr />EuGTK 4.12.0<hr /> </h2>
|
||||||
|
<h3>Quick Function List</h3>
|
||||||
|
</heading>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<div class="hdr">Quick Links</div>
|
||||||
|
<a href="#functions"><button>Functions</button></a>
|
||||||
|
<a href="#utilities"><button>Utilities</button></a>
|
||||||
|
<a href="#constants"><button>Constants</button></a>
|
||||||
|
<a href="#identifiers"><button>Identifiers</button></a>
|
||||||
|
<a href="#misc"><button>Other</button></a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<div class="hdr">Other Files:</div>
|
||||||
|
<a href="HowItWorks.html"><button>How EuGTK Works</button></a>
|
||||||
|
<a href="README.html"><button>README</button></a>
|
||||||
|
<a href="guide_a.html"><button>Alphabetical Guide</button></a>
|
||||||
|
<a href="dialogs.html"><button>Built-in EuGTK Dialogs</button></a>
|
||||||
|
<a href="treeviews.html"><button>ListView/TreeView widgets</button></a>
|
||||||
|
<a href="pango_markup.html"><button>Markup</button></a>
|
||||||
|
<a href="printing.html"><button>Printing</button></a>
|
||||||
|
<a href="ServerHelp.html"><button>Web Server</button></a>
|
||||||
|
<a href="Glade.html"><button>Glade GUI Builder</button></a>
|
||||||
|
<a href="platforms.html"><button>Platforms</button></a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<a name="functions" />
|
||||||
|
<h3><hr />Public functions ~ commonly-used<hr /></h3>
|
||||||
|
<ul>
|
||||||
|
<li>create() <dfn>returns handle to newly-created widget:<em> win = create(GtkWindow)</em></dfn></li>
|
||||||
|
<li>set() <dfn>sets a property for a widget: <em>set(win,"background","blue")</em></dfn></li>
|
||||||
|
<li>get() <dfn>gets a property: <em>? get(win,"background")</em></dfn></li>
|
||||||
|
<li>add() <dfn>adds a widget to a container: <em>add(win,panel)</em>; spaces divided equally</dfn></li>
|
||||||
|
<li>pack_start() <dfn> adds at top/left</dfn></li>
|
||||||
|
<li>pack_end() <dfn> adds at bottom/right</dfn></li>
|
||||||
|
<li>show() <dfn>show a widget: <em>show(btn)</em></dfn></li>
|
||||||
|
<li>show_all() <dfn>show a container and all items contained within: <em>show_all(win)</em></dfn></li>
|
||||||
|
<li>hide() <dfn>hide a widget: <em>hide(btn)</em></dfn></li>
|
||||||
|
<li>hide_all() <dfn>hide a container and all items contained within: <em>hide_all(win)</em></dfn></li>
|
||||||
|
<li>connect() <dfn>connect a signal to a Eu function: <em>connect(btn1,"clicked","FooBar",33)</em> Note: connect() returns a sigid, usually ignored unless you plan to disconnect.</dfn></li>
|
||||||
|
<li>disconnect() <dfn>disconnect a signal: <em>disconnect(btn1,sigid)</em></dfn></li>
|
||||||
|
<li>main() <dfn>start the GTK main processing loop: <em>main()</em></dfn></li>
|
||||||
|
<li>requires() <dfn>pop up an Error dialog if not available: <em>requires("3.10","GtkRevealer")</em></dfn></li>
|
||||||
|
<li>destroy() <dfn>destroy a widget: <em>destroy(win)</em></dfn></li>
|
||||||
|
<li>unpack() <dfn>convert data attached to a control back into format usable by Euphoria: <em>unpack(data)</em></dfn></li>
|
||||||
|
<li>show_uri() <dfn>call default handler for uri (file, http, etc...): <em>show_uri("http://gtk.org")</em></dfn></li>
|
||||||
|
<li>"Quit" <dfn>global call to shut down the GTK main processing loop: <em>connect(win,"destroy","Quit")</em></dfn></li>
|
||||||
|
<li> pointer() <dfn>obtains a handle, a.k.a. pointer, to an object loaded from Glade
|
||||||
|
<em>constant win = pointer("help:window1")</em></dfn></li>
|
||||||
|
<li>_() <dfn>shorthand for call_back(routine_id()), links signals to local functions, no global declarations required</dfn></li>
|
||||||
|
<li>$... <dfn>shorthand for signal links e.g. $destroy=Quit</dfn></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
See <a href="HowItWorks.html">HowItWorks</a> for details on the above functions, you will use some of them frequently!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<p> See also: <a href="HowItWorks.html#settings"> settings</a></p>
|
||||||
|
|
||||||
|
<a name="utilities" />
|
||||||
|
<h3><hr />Utility functions ~ sometimes used<hr /></h3>
|
||||||
|
<h5>General functions</h5>
|
||||||
|
<ul>
|
||||||
|
<li> has_icon(name) <dfn>returns TRUE if named icon exists in current theme</dfn></li>
|
||||||
|
<li> list_icons() <dfn>returns a {list} of all icon names in current theme</dfn></li>
|
||||||
|
<li> valid_icon({list}) <dfn>given a list of possible icon names, returns handle to an image made from first valid name</dfn> </li>
|
||||||
|
<li> valid_icon_name({list}) <dfn>given a list of possible icon names, returns first valid name</dfn> </li>
|
||||||
|
<li> icon_info(handle) <dfn>returns a sequence: pointer to info struct, name, path, size, scale</dfn></li>
|
||||||
|
<li> class_name(handle) <dfn>returns the classname from a widget handle: <em>display(classname(win))</em> => "GtkWindow" </dfn></li>
|
||||||
|
<li> class_id(handle) <dfn>returns the enumerated class for the handle: <em>if classid(win) = GtkWindow then ...</em> </dfn></li>
|
||||||
|
<li> object_name(handle) <dfn>returns name if object has a name, -nil- otherwise</dfn></li>
|
||||||
|
<li> register(handle,class) <dfn>registers handle as a class: <em>register(win,GtkWindow)</em> hardly ever needed.</dfn></li>
|
||||||
|
<li> to_sequence(GList) <dfn>converts a glist pointer back into a Eu sequence: <em>rarely used!</em></dfn></li>
|
||||||
|
<li> to_rgba(str) <dfn>converts a color description to a pointer: <em>? to_rgba("skyblue")</em></dfn></li>
|
||||||
|
<li> from_rgba(ptr) <dfn>converts a color pointer into <em>"rgb(r,g,b)"</em> or <em>"rgba(r,g,b,a)"</em></dfn></li>
|
||||||
|
<li> pixbuf_formats() <dfn>returns a list of implemented formats for pixbuf loader</dfn></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<h5>Settings</h5>
|
||||||
|
<ul>
|
||||||
|
<li>settings:Save()</li>
|
||||||
|
<li>settings:Load()</li>
|
||||||
|
<li>settings:Add()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<h5>Events</h5>
|
||||||
|
<ul>
|
||||||
|
<li> events:id <dfn>returns unique event id: <em>? events:id(event)</em></dfn></li>
|
||||||
|
<li> events:xy <dfn> returns location of event</dfn></li>
|
||||||
|
<li> events:axes </li>
|
||||||
|
<li> events:time </li>
|
||||||
|
<li> events:state</li>
|
||||||
|
<li> events:window</li>
|
||||||
|
<li> events:device</li>
|
||||||
|
<li> events:clicks <dfn>returns # of mouse clicks in event</dfn></li>
|
||||||
|
<li> events:scroll_dir</li>
|
||||||
|
<li> events:key <dfn>returns keypressed value</dfn></li>
|
||||||
|
<li> events:button <dfn>returns mouse button 1..3 when given an event:
|
||||||
|
<em>? events:button(event)</em></dfn></li>
|
||||||
|
<li> events:pending <dfn>used when multitasking</dfn></li>
|
||||||
|
<li> events:main_iteration </li>
|
||||||
|
<li> events:main_iteration_do </li>
|
||||||
|
</ul)
|
||||||
|
</ul></ul>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<h5>Networking</h5>
|
||||||
|
<ul>
|
||||||
|
<li> networked <dfn> returns TRUE if your computer is part of a network</dfn></li>
|
||||||
|
<li> inet_connected <dfn> returns TRUE if internet could be reached</dfn></li>
|
||||||
|
<li> get_net_address <dfn> returns 127.0.0.1 or your current ip</dfn></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p> See <a href="../GtkEvents.e"> events</a></p>
|
||||||
|
|
||||||
|
<a name="constants" />
|
||||||
|
<h3><hr />Exported constants ~ available if you need them<hr /></h3>
|
||||||
|
|
||||||
|
<img src="../screenshots/test0.png" alt="test0 screenshot" title="Test0 demonstrates most of these!" align="right" width="50%" />
|
||||||
|
|
||||||
|
<ul class="constants">
|
||||||
|
<li>version<dfn> EuGTK version: <em> "4.11.8"</em></dfn></li>
|
||||||
|
<li>release<dfn> EuGTK release date: <em>"Aug 1, 2014"</em></dfn></li>
|
||||||
|
<li>copyright<dfn> EuGTK copyright: <em> "(c) 2015 by Irv Mullins"</em></dfn></li>
|
||||||
|
<li>major_version<dfn> for GTK 3.10.1: <em>3</em></dfn></li>
|
||||||
|
<li>minor_version<dfn> for GTK 3.10.1: <em>10</em></dfn></li>
|
||||||
|
<li>micro_version<dfn> for GTK 3.10.1: <em>1</em></dfn></li>
|
||||||
|
<li>user_name<dfn> The user logged-in: <em> irv </em></dfn></li>
|
||||||
|
<li>real_name<dfn> Full name: <em> Irv Mullins</em></dfn></li>
|
||||||
|
<li>host_name<dfn> host name of computer: <em> Mint17</em></dfn></li>
|
||||||
|
<li>host_addr <dfn> host address: <em>192.168.1.100</em></li>
|
||||||
|
<li>home_dir<dfn> logged-in user's home: <em> /home/irv</em></dfn></li>
|
||||||
|
<li>temp_dir<dfn> user's temp dir: <em> /tmp</em></dfn></li>
|
||||||
|
<li>curr_dir<dfn> user's currently-logged into directory </dfn></li>
|
||||||
|
<li>conf_dir<dfn> user's config directory <em> /home/irv/.conf</em></dfn></li>
|
||||||
|
<li>runt_dir<dfn> user's runtime directory <em> /run/user/1000</em></dfn></li>
|
||||||
|
<li>prg_name<dfn> current program <em> test0.ex</em></dfn></li>
|
||||||
|
<li>os_name <dfn><em>Linux</em></dfn></li>
|
||||||
|
<li>os_distro <dfn><em> Mint 17</em></dfn></li>
|
||||||
|
<li>os_version <dfn><em>3.13.0-24-generic</em></dfn></li>
|
||||||
|
<li>os_comp <dfn><em>#46-Ubuntu SMP Thu Apr 10...</em></dfn></li>
|
||||||
|
<li>os_arch <dfn><em>x86_64</em></dfn> </li>
|
||||||
|
<li>os_term <dfn><em>xterm</em></dfn></li>
|
||||||
|
<li>os_shell <dfn><em>/bin/bash</em></dfn></li>
|
||||||
|
<li>eu_version <dfn> version string: <em>"4.1.0"</em></dfn></li>
|
||||||
|
<li>eu_revision <dfn> revision # <em>6318</em></dfn></li>
|
||||||
|
<li>eu_date <dfn>date compiled</dfn></li>
|
||||||
|
<li>today <dfn>date program started</dfn></li>
|
||||||
|
<li>start_time <dfn>time program started</dfn></li>
|
||||||
|
<br />
|
||||||
|
<li>def_lang <dfn>default language <em>en-us</em></dfn></li>
|
||||||
|
<br />
|
||||||
|
<li>CMD1 <dfn>command_line[1] <em>e.g. eui</em></dfn></li>
|
||||||
|
<li>CMD2 <dfn>command_line[2] <em>e.g. /home/irv/demos/test1.ex</em></dfn></li>
|
||||||
|
<br />
|
||||||
|
<li>LGPL<dfn> Text of the Lesser General Public License</dfn></li>
|
||||||
|
<li>stock_list<dfn> List of GTK stock items - soon to be deprecated!</dfn></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<em>Note 1:</em> these constants are generated when EuGTK starts up, and are available in two different forms:
|
||||||
|
<ul>
|
||||||
|
<li>As individual constants</li>
|
||||||
|
<li>As key/value pairs in the gtk:info structure,
|
||||||
|
provided mainly for convenience when displaying them:
|
||||||
|
<code> display("[{prg_name}]",gtk:info)</code></li>
|
||||||
|
</ul>
|
||||||
|
See <a href="../test0.ex">test0</a> for an example.
|
||||||
|
<br /><br />
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3><hr />Other Stuff<hr /></h3>
|
||||||
|
|
||||||
|
<a name="identifiers" />
|
||||||
|
<b>Identifiers</b>
|
||||||
|
<p>Below are unique identifiers used to specify storage types in List/Tree models, not only do these control how the value
|
||||||
|
is stored, but also how it is displayed:
|
||||||
|
<ul>
|
||||||
|
<li>gINT <dfn>Store and display as an integer (rounds floats down)</dfn></li>
|
||||||
|
<li>gDBL <dfn>Store and display as a double</dfn></li>
|
||||||
|
<li>gSTR <dfn>Store and display as a string</dfn></li>
|
||||||
|
<li>gPTR <dfn>Generic pointer - seldom used</dfn></li>
|
||||||
|
<li>gFLT <dfn>Displays with six digits following the decimal point</dfn></li>
|
||||||
|
<li>gBOOL <dfn>anything other than 0 displays TRUE, 0 displays FALSE</dfn></li>
|
||||||
|
<li>gPIX <dfn>Stores handle to a pixbuf, displays that image</dfn></li>
|
||||||
|
<li>gCOMBO <dfn>Stores handle to a GtkComboBox</dfn></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Unique identifiers below save space in method prototypes;
|
||||||
|
programmer may use them when calling the three user functions which follow.
|
||||||
|
<ul>
|
||||||
|
<li>P <dfn>= C_POINTER expected parameter is a pointer</dfn></li>
|
||||||
|
<li>I <dfn>= C_INT expected parameter is an integer</dfn></li>
|
||||||
|
<li>S <dfn>= E_OBJECT expected parameter is a string</dfn></li>
|
||||||
|
<li>B <dfn>= C_BYTE expected parameter is boolean</dfn></li>
|
||||||
|
<li>D <dfn>= C_DOUBLE expected parameter is a double</dfn></li>
|
||||||
|
<li>F <dfn>= C_FLOAT expected parameter is a floating-point value</dfn></li>
|
||||||
|
<li>A <dfn>= E_SEQUENCE expected parameter is an array</dfn></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<a name="misc" />
|
||||||
|
<b>User functions</b>
|
||||||
|
<p>While mostly used internally by EuGTK, they may be useful
|
||||||
|
when testing or when implementing GTK methods which haven't been added to EuGTK.
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>gtk_func<dfn> Example:<code> <em>gtk_func("gtk_label_set_text",{P},{allocate_string("Hello")})</em></code></dfn></li>
|
||||||
|
<li>gtk_str_func<dfn> Example:<code><em> puts(1,gtk_str_func("gtk_label_get_text",{P},{lbl})</em></code></dfn></li>
|
||||||
|
<li>gtk_proc<dfn> Example:<code><em> gtk_proc("gtk_widget_hide",{P},{win})</em></code></dfn></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The <a href="README.html#bear">Bear</a>,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Updated for EuGTK version 4.12.0, Sept 15, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
1558
eugtk/examples/documentation/guide_a.html
Normal file
BIN
eugtk/examples/documentation/images/bear0.png
Normal file
After Width: | Height: | Size: 691 KiB |
BIN
eugtk/examples/documentation/images/bear1.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
eugtk/examples/documentation/images/bear2.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
eugtk/examples/documentation/images/bear3.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
eugtk/examples/documentation/images/bear4.png
Normal file
After Width: | Height: | Size: 230 KiB |
267
eugtk/examples/documentation/pango_markup.html
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Pango Markup</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<heading>
|
||||||
|
<img src="../thumbnails/gtk-logo-rgb.gif" alt="gtk logo" />
|
||||||
|
<img src="../thumbnails/mongoose.png" alt="mongoose" />
|
||||||
|
<a href="../test5.ex" alt="test5" title="click me" >
|
||||||
|
<img src="../screenshots/test5.jpg" alt="test5" title="test5" align="right" />
|
||||||
|
</a>
|
||||||
|
<h2>EuGTK 4.12.0</h2><h1>Pango Markup</h1>
|
||||||
|
<hr />
|
||||||
|
</heading>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<div class="hdr">Other Files:</div>
|
||||||
|
<a href="README.html"><button>README</button></a>
|
||||||
|
<a href="HowItWorks.html"><button>How EuGTK Works</button></a>
|
||||||
|
<a href="guide_a.html"><button>Alphabetical Guide</button></a>
|
||||||
|
<a href="dialogs.html"><button>Built-in Dialogs</button></a>
|
||||||
|
<a href="treeviews.html"><button>ListView/TreeView</button></a>
|
||||||
|
<a href="printing.html"><button>Printing</button></a>
|
||||||
|
<a href="ServerHelp.html"><button>Web Server</button></a>
|
||||||
|
<a href="functions.html"><button>Quick Function List</button></a>
|
||||||
|
<a href="Glade.html"><button>Glade GUI Builder</button></a>
|
||||||
|
<a href="platforms.html"><button>Platforms</button></a>
|
||||||
|
<br />
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<a name="markup" />
|
||||||
|
<h3>Markup</h3>
|
||||||
|
<p>
|
||||||
|
While you can set text font, size and style for most Gtk widgets using normal
|
||||||
|
method calls, this affects <i>all</i> text displayed by that widget.
|
||||||
|
Changing only selected portions of the text cannot be done that way.
|
||||||
|
Instead, we can use a subset of HTML to embed changes within
|
||||||
|
the text string.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<small><i>Quote from the Pango Docs (formatting added)</i></small>
|
||||||
|
|
||||||
|
<div class="quote">
|
||||||
|
<blockquote>
|
||||||
|
<h3>Pango Text Attribute Markup Language</h3>
|
||||||
|
<p>
|
||||||
|
Frequently, you want to display some text to the user with attributes applied
|
||||||
|
to part of the text (for example, you might want bold or italicized words).
|
||||||
|
With the base Pango interfaces, you could create a PangoAttrList and apply
|
||||||
|
it to the text; the problem is that you'd need to apply attributes to some
|
||||||
|
numeric range of characters, for example "characters 12-17." This is broken
|
||||||
|
from an internationalization standpoint; once the text is translated, the
|
||||||
|
word you wanted to italicize could be in a different position.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The solution is to include the text attributes in the string to be translated.
|
||||||
|
Pango provides this feature with a small markup language...
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
A simple example of a marked-up string might be:
|
||||||
|
"<span foreground='blue' size='x-large'>Blue text</span> is <i>cool</i>!"
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Pango uses #GMarkup to parse this language, which means that XML features such as numeric
|
||||||
|
character entities such as &#169; for © can be used too.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The root tag of a marked-up document is <markup>, but pango_parse_markup()
|
||||||
|
allows you to omit this tag, so you will most likely never need to use it.
|
||||||
|
The most general markup tag is <span>, then there are some convenience tags.
|
||||||
|
<span> has the following attributes:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<table class="testing" border="1">
|
||||||
|
<tr><th colspan="2">Attributes</th></tr>
|
||||||
|
<tr>
|
||||||
|
<td>font, font_desc</td>
|
||||||
|
<td>A font description string, such as "Sans Italic 12".
|
||||||
|
See pango_font_description_from_string() for a description of the format of the
|
||||||
|
string representation . Note that any other span attributes will override this
|
||||||
|
description. So if you have "Sans Italic" and also a style="normal" attribute,
|
||||||
|
you will get Sans normal, not italic.</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>font_family, face</td>
|
||||||
|
<td>A font family name</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>font_size, size</td>
|
||||||
|
<td>Font size in 1024ths of a point, or one of the absolute sizes 'xx-small',
|
||||||
|
'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', or one of the
|
||||||
|
relative sizes 'smaller' or 'larger'. If you want to specify a absolute size,
|
||||||
|
it's usually easier to take advantage of the ability to specify a partial font
|
||||||
|
description using 'font'; you can use font='12.5' rather than size='12800'</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>font_style, style</td>
|
||||||
|
<td>One of 'normal', 'oblique', 'italic'</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>font_weight, weight</td>
|
||||||
|
<td>One of 'ultralight', 'light', 'normal', 'bold', 'ultrabold', 'heavy',
|
||||||
|
or a numeric weight</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>font_variant, variant</td>
|
||||||
|
<td>One of 'normal' or 'smallcaps'</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>font_stretch, stretch</td>
|
||||||
|
<td>One of 'ultracondensed', 'extracondensed', 'condensed', 'semicondensed',
|
||||||
|
'normal', 'semiexpanded', 'expanded', 'extraexpanded', 'ultraexpanded'</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>foreground, fgcolor, color</td>
|
||||||
|
<td>An RGB color specification such as '#00FF00' or a color name such as 'red'</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>background, bgcolor</td>
|
||||||
|
<td>An RGB color specification such as '#00FF00' or a color name such as 'red'</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>underline</td>
|
||||||
|
<td>One of 'none', 'single', 'double', 'low', 'error'</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>underline_color</td>
|
||||||
|
<td>The color of underlines; an RGB color specification such as '#00FF00' or a
|
||||||
|
color name such as 'red'</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>rise</td>
|
||||||
|
<td>Vertical displacement, in Pango units. Can be negative for subscript, positive
|
||||||
|
for superscript.</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>strikethrough</td>
|
||||||
|
<td>'true' or 'false' whether to strike through the text</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>strikethrough_color</td>
|
||||||
|
<td>The color of strikethrough lines; an RGB color specification such as '#00FF00'
|
||||||
|
or a color name such as 'red'</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>fallback</td>
|
||||||
|
<td>'true' or 'false' whether to enable fallback. If disabled, then characters
|
||||||
|
will only be used from the closest matching font on the system. No fallback will
|
||||||
|
be done to other fonts on the system that might contain the characters in the text.
|
||||||
|
Fallback is enabled by default. Most applications should not disable fallback.</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>lang</td>
|
||||||
|
<td>A language code, indicating the text language</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>letter_spacing</td>
|
||||||
|
<td>Inter-letter spacing in 1024ths of a point.</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>gravity</td>
|
||||||
|
<td>One of 'south', 'east', 'north', 'west', 'auto'.</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>gravity_hint</td>
|
||||||
|
<td>One of 'natural', 'strong', 'line'.</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">The following convenience tags are provided:</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><b></td>
|
||||||
|
<td>Bold</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><big></td>
|
||||||
|
<td>Makes font relatively larger, equivalent to <span size="larger"></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><i></td>
|
||||||
|
<td>Italic</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><s></td>
|
||||||
|
<td>Strikethrough</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><sub></td>
|
||||||
|
<td>Subscript</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><sup></td>
|
||||||
|
<td>Superscript</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><small></td>
|
||||||
|
<td>Makes font relatively smaller, equivalent to <span size="smaller"></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><tt></td>
|
||||||
|
<td>Monospace font</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><u></td>
|
||||||
|
<td>Underline</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The <a href="README.html#bear">Bear</a>,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Updated for EuGTK version 4.12.0, Sept 15, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
141
eugtk/examples/documentation/platforms.html
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>EuGTK Platforms</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<img src="../thumbnails/gtk-logo-rgb.gif" alt="GTK LOGO" />
|
||||||
|
<img src="../thumbnails/mongoose.png" alt="mongoose" />
|
||||||
|
<a href="../screenshots/Windows.png">
|
||||||
|
<figure style="float:right; border:thin solid black;">
|
||||||
|
<img src="../screenshots/Windows.png" alt="Windows 7" width="400px" />
|
||||||
|
<figcaption><small><i> EuGTK running on Windows 7</i></small></figcaption>
|
||||||
|
</figure>
|
||||||
|
</a>
|
||||||
|
<h2>EuGTK 4.12.0</h2>
|
||||||
|
<h2>Platforms</h2>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<div class="hdr">Other Files:</div>
|
||||||
|
<a href="README.html"><button>README</button></a>
|
||||||
|
<a href="HowItWorks.html"><button>How EuGTK Works</button></a>
|
||||||
|
<a href="guide_a.html"><button>Alphabetical Guide</button></a>
|
||||||
|
<a href="dialogs.html"><button>Built-in EuGTK Dialogs</button></a>
|
||||||
|
<a href="treeviews.html"><button>ListView/TreeView widgets</button></a>
|
||||||
|
<a href="pango_markup.html"><button>Markup</button></a>
|
||||||
|
<a href="printing.html"><button>Printing</button></a>
|
||||||
|
<a href="ServerHelp.html"><button>Web Server</button></a>
|
||||||
|
<a href="functions.html"><button>Quick Function List</button></a>
|
||||||
|
<a href="Glade.html"><button>Glade GUI Builder</button></a>
|
||||||
|
<br />
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<b>EuGTK is native for Linux</b><br />
|
||||||
|
Most modern Linux distros come with GTK3 already installed. If not, you can usually
|
||||||
|
install the GTK3 libraries easily with your package manager (apt-get or similar).
|
||||||
|
No special setup or configuration steps are involved.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<b>EuGTK is also reported to work with OS X™</b>. First, install MacPorts, and
|
||||||
|
then the GTK3 library with this command:
|
||||||
|
<code>sudo port install gtk3</code>
|
||||||
|
That should eventually install the library to /opt/local/lib/libgtk-3.dylib.
|
||||||
|
I cannot test this, since I have no computer running OSX, but Pete Eberlein's
|
||||||
|
cross-platform Euphoria editor WEE runs on OS X using EuGTK for the user interface.
|
||||||
|
That's a pretty good test.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<b>EuGTK works with Windows™,</b> more or less, starting with version 4.9.0!
|
||||||
|
I have only tested this on Windows 7, 64-bit, as I have no other version of Windows
|
||||||
|
available.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>You'll need the GTK3 dll's for Windows; download them from
|
||||||
|
the download page at <a href="https://github.com/tschoonj/GTK-for-
|
||||||
|
Windows-Runtime-Environmane-Installer">https://github.com/tschoonj/GTK-for-
|
||||||
|
Windows-Runtime-Environmane-Installer</a>. Be sure to chose the correct
|
||||||
|
set, either 32-bit or 64-bit, and make sure you are running the matching version of
|
||||||
|
Euphoria (32-bit or 64-bit). I use Euphoria 4.0.1 beta 2, which seems to work fine.
|
||||||
|
Mixing 32 and 64 bit software is sure to cause strange problems, such as reports that
|
||||||
|
dll's can't be found, even though they are right there in plain sight.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Once you've installed the GTK3 package, you'll need to download some
|
||||||
|
Windows-compatible <a href="">icons</a>. Unzip these and put them in
|
||||||
|
C:/ProgramData/icons.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><b>EuGTK programs may run on <i>any</i> platform.</b><br />
|
||||||
|
You can even run EuGTK programs on a remote client (anything that has an HTML5 web
|
||||||
|
browser, including tablets, phones, etc.), by using broadway on the server.
|
||||||
|
Clients do not need EuGTK, Euphoria, or GTK to be installed.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The Broadway server can be downloaded using apt-get, or your package manager,
|
||||||
|
and it also comes 'stock' with the latest Mint 18, and perhaps some other distros as well.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This is still experimental, but most of the demos in this package work ok
|
||||||
|
with a web browser, and some work when browsing with a tablet. Probably the
|
||||||
|
demo programs need to listen for 'motion' events (swipes, etc) to get these
|
||||||
|
working fully, or perhaps the browsers on my tablet aren't up-to-date with HTML5?
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If you create a 'batch' Eu program, as shown below, you can start the broadway
|
||||||
|
server, and open a firefox page with your EuGTK program running
|
||||||
|
in the browser:<br />
|
||||||
|
<code><pre>
|
||||||
|
<em>-- name this go.ex
|
||||||
|
-- then start your program with:
|
||||||
|
-- eui go test1 (where test1 is the program to run)</em>
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
object cmd = command_line()
|
||||||
|
system(sprintf("firefox %s:8080 & broadwayd & ",{inet_address()}),0)
|
||||||
|
setenv("GDK_BACKEND","broadway")
|
||||||
|
system(sprintf("%s %s",{cmd[1],cmd[3]}),0)
|
||||||
|
system("killall broadwayd",0)
|
||||||
|
</pre></code>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<figure style="float:right; border:thin solid black;">
|
||||||
|
<img src="../screenshots/broadway.png" alt="Broadway" />
|
||||||
|
<figcaption> <small>Three EuGTK demos running in a Firefox™ window</small>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<br clear="all" />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The <a href="README.html#bear">Bear</a>,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Updated for EuGTK version 4.12.0, Sept 15, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
327
eugtk/examples/documentation/printing.html
Normal file
@ -0,0 +1,327 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>EuGTK Printing</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<heading>
|
||||||
|
<img src="../thumbnails/gtk-logo-rgb.gif" alt="gtk logo" />
|
||||||
|
<img src="../thumbnails/mongoose.png" alt="mongoose" />
|
||||||
|
<a href="../test150.ex" alt="test150" title="click me" >
|
||||||
|
<figure style="float:right; border:solid thin black;">
|
||||||
|
<img src="../screenshots/test150.jpg" alt="test150" title="test150" width="400px" align="right" />
|
||||||
|
</a>
|
||||||
|
<figcaption><small><i> GtkPrinter</i></small></figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<h2><hr />EuGTK 4.12.0</h2>
|
||||||
|
<h3>GtkPrinter support functions</h3>
|
||||||
|
|
||||||
|
</heading>
|
||||||
|
|
||||||
|
<br clear="all" />
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<div class="hdr">Quick Links:</div>
|
||||||
|
<a href="#setup"><button>Setup</button></a>
|
||||||
|
<a href="#printing"><button>Printing</button></a>
|
||||||
|
<a href="#connecting"><button>Connecting</button></a>
|
||||||
|
<a href="#calling"><button>Calling print functions</button></a>
|
||||||
|
<a href="#headers"><button>Custom headers & footers</button></a>
|
||||||
|
<a href="#progress"><button>ProgressBar</button></a>
|
||||||
|
<a href="#custom"><button>Custom Tabs</button></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br /><br />
|
||||||
|
|
||||||
|
<div class="hdr">Other Files:</div>
|
||||||
|
<a href="README.html"><button>README</button></a>
|
||||||
|
<a href="HowItWorks.html"><button>How EuGTK Works</button></a>
|
||||||
|
<a href="guide_a.html"><button>Alphabetical Guide</button></a>
|
||||||
|
<a href="dialogs.html"><button>Built-in Dialogs</button></a>
|
||||||
|
<a href="pango_markup.html"><button>Markup</button></a>
|
||||||
|
<a href="treeviews.html"><button>ListView/TreeView</button></a>
|
||||||
|
<a href="ServerHelp.html"><button>Web Server</button></a>
|
||||||
|
<a href="functions.html"><button>Quick Function List</button></a>
|
||||||
|
<a href="Glade.html"><button>Glade GUI Builder</button></a>
|
||||||
|
<a href="platforms.html"><button >Platforms</button></a>
|
||||||
|
<br />
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<a name="intro" />
|
||||||
|
<h3><hr />Introduction<hr /></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This include adds very easy-to-use printing capabilities to
|
||||||
|
EuGTK; most printing tasks require only one or two extra lines
|
||||||
|
of code.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
It offers the ability to print documents on physical
|
||||||
|
printers as well as to print them as .pdf or .ps
|
||||||
|
(postscript), and perhaps .svg files, depending upon the
|
||||||
|
hardware and software installed on your pc.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="setup" />
|
||||||
|
|
||||||
|
<h3><hr>Setup<hr></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
When printing, font size, lines-per-page, and page length
|
||||||
|
must be taken into account.
|
||||||
|
Obviously, the larger the font, the fewer lines will fit
|
||||||
|
on a given page.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
By default (on Linux), GtkPrinter.e will print using an Ubuntu Mono 8pt. font and print
|
||||||
|
62 lines per 8.5x11 inch (na_letter) page or 84 lines on 8.5x14 (na_legal) paper.
|
||||||
|
Other paper sizes and orientations are available from the pop-up printer dialog,
|
||||||
|
and these should also be computed automatically, as long as the font isn't changed.
|
||||||
|
Try <a href="../test190.ex">test190</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Other fonts may not work so well with the default lines_per_page settings. They often take up more (or less) space, both vertically
|
||||||
|
and horizontally, than the same size Ubuntu Mono font. For these, you must set lines_per_page manually.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Example 1:
|
||||||
|
<pre>
|
||||||
|
<em class="gtk">printer:font</em> = <em class="str">"Ubuntu mono 10"</em>
|
||||||
|
<em class="gtk">printer:lines_per_page</em> = 65
|
||||||
|
</pre>
|
||||||
|
Example 2:
|
||||||
|
<pre>
|
||||||
|
<em class="gtk">printer:font</em> = <em class="str">"Purisa 12"</em>
|
||||||
|
<em class="gtk">printer:lines_per_page</em> = 34
|
||||||
|
</pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Some options,
|
||||||
|
like the paper size and orientation, can also be changed by selections in
|
||||||
|
the pop-up printer dialogs. When paper size or orientation is changed via
|
||||||
|
the pop-up dialog, the auto_lpp will adjust for those. If you're specifying
|
||||||
|
fonts manually, or auto_lpp is FALSE, you'll have to set these in advance.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Your program can override <i>many</i> other settings exported by GtkPrinter.e,
|
||||||
|
some of the most useful being:
|
||||||
|
<ul class="small">
|
||||||
|
<li>Customized page headers and/or footers
|
||||||
|
<dfn>(see <a href="#headers">headers</a>)</dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>paper_name
|
||||||
|
<dfn>default is us_letter,
|
||||||
|
see <a href="../resources/papersizes.txt">resources/papersizes.txt</a></dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>lines_per_page <dfn>default is 58</dfn></li>
|
||||||
|
|
||||||
|
<li>use_line_numbers <dfn>default is TRUE</dfn></li>
|
||||||
|
|
||||||
|
<li>use_color <dfn>default is TRUE;
|
||||||
|
currently, only prints Eu comments in red</dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>font <dfn>the usual font description: e.g. "Courier 12", or "Georgia bold 16"...</dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>show_progress <dfn>default is TRUE, see <a href="#progress">progress bar</a></dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>orientation <dfn>portrait, landscape </dfn></li>
|
||||||
|
|
||||||
|
<li>quality <dfn>draft, etc.</dfn></li>
|
||||||
|
|
||||||
|
<li>number_up <dfn>print 2-up or 4-up on a single sheet</dfn></li>
|
||||||
|
|
||||||
|
<li>number_up_layout <dfn>see GTK docs</dfn></li>
|
||||||
|
|
||||||
|
<li>Margins <dfn>top_margin, left_margin, etc.; default is .25 inch</dfn></li>
|
||||||
|
|
||||||
|
<li>units <dfn>default is GTK_UNIT_INCH</dfn></li>
|
||||||
|
|
||||||
|
<li>scale <dfn>default is 100%</dfn></li>
|
||||||
|
|
||||||
|
<li>n_pages <dfn>max number of pages to print, defaults to full document</dfn></li>
|
||||||
|
|
||||||
|
<li>order <dfn>0 = normal (first to last page), 1 = reverse (last to first)</dfn></li>
|
||||||
|
|
||||||
|
<li>name <dfn>printer name</dfn></li>
|
||||||
|
|
||||||
|
<li>plaintext <dfn>set to TRUE to print text containing < or > or & chars</dfn></li>
|
||||||
|
|
||||||
|
<li>wrap_at <dfn>default is 0 (no wrap)</dfn></li>
|
||||||
|
|
||||||
|
<li>tabs <dfn>replace each tab with spaces or other chars, default is 2 spaces</dfn></li>
|
||||||
|
|
||||||
|
<li>jobname <dfn>shown in printer queue, defaults to filename and job #</dfn></li>
|
||||||
|
|
||||||
|
<li>track_status <dfn>default is TRUE</dfn></li>
|
||||||
|
|
||||||
|
<li>settings_file <dfn>filename to save print job settings to.
|
||||||
|
<dd><em>-- this is <u>not</u> the same as the GtkSettings ini file!</em></dd></dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>setup_file <dfn>see the GTK docs</dfn></li>
|
||||||
|
|
||||||
|
<li>parent <dfn>pass the main window handle here [optional]</dfn></li>
|
||||||
|
|
||||||
|
<li>action <dfn>one of the following enums:</dfn>
|
||||||
|
<dfn>GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG
|
||||||
|
<dd><em>-- show printer setup dialog, then print (this is the default)</em></dd></dfn>
|
||||||
|
<dfn>GTK_PRINT_OPERATION_ACTION_PRINT
|
||||||
|
<dd><em>-- print without showing any dialogs</em></dd></dd>
|
||||||
|
<dd>GTK_PRINT_OPERATION_ACTION_PREVIEW
|
||||||
|
<dd><em>-- preview only, without dialogs, don't print</em></dd></dd>
|
||||||
|
<dd>GTK_PRINT_OPERATION_ACTION_EXPORT
|
||||||
|
<dd><em>-- write a pdf to [export_file] without dialogs</em></dd></dd>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>export_file <dfn>name to use for .pdf file </dfn></li>
|
||||||
|
|
||||||
|
<li>confirm <dfn>pop up a dialog when job is complete, default is FALSE</dfn></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
Be sure to use the <i>printer:</i> namespace when modifying the above variables.
|
||||||
|
Certain other things, such as selecting a range of pages to print, or
|
||||||
|
putting a job on hold, can only be done by the user in the print setup
|
||||||
|
dialogs at this time.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="printing" />
|
||||||
|
<h3><hr>Printing<hr></h3>
|
||||||
|
<p>
|
||||||
|
Adding print capability to your program is actually pretty easy. There are two main options:
|
||||||
|
<ol>
|
||||||
|
<li>Print from a disk file</li>
|
||||||
|
<li>Print from in-line or generated text</li>
|
||||||
|
</ol>
|
||||||
|
And, there are two ways to start the print process:
|
||||||
|
<ol>
|
||||||
|
<li>Connect the print_file or print_text function to a button, and attach the filename or text as the button's data item</li>
|
||||||
|
<li>Call the exported function PrintFile() or PrintText()</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<a name="connecting" />
|
||||||
|
<h3><hr>Connecting to buttons<hr></h3>
|
||||||
|
<p>
|
||||||
|
Often, you can save a lot of typing by simply connecting a call to print_file or
|
||||||
|
print_text to a button, followed by the file name, file handle or text to print as the data item:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><pre><code> <em class="kw">constant</em> btn1 = <em class="gtk">create</em>(GtkButton,<em class="str">"gtk-print"</em>,print_file,<em class="str">"~/demos/GtkEngine.e"</em>)<em>-- default title will be GtkEngine.e</em>
|
||||||
|
<em class="kw">constant</em> btn2 = <em class="gtk">create</em>(GtkButton,<em class="str">"gtk-print"</em>,print_text,LGPL)
|
||||||
|
<em class="kw">constant</em> btn3 = <em class="gtk">create</em>(GtkButton,<em class="str">"gtk-print"</em>,print_file,fn) <em>-- using a Eu file handle to a previously opened file</em></code></pre>See <a href="../test189.ex">test189</a> and <a href="../test190.ex">test190</a> for various ways to call these functions.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="calling" />
|
||||||
|
<h3><hr>Calling via function calls<hr></h3>
|
||||||
|
<p>
|
||||||
|
If you call the print routines via a normal function call, you have the option to add
|
||||||
|
a page title to appear in the header.<pre><code> <em class="gtk">PrintFile</em>(<em class="str">"~/demos/GtkEngine.e"</em>) <em>-- default title will be "GtkEngine.e"</em>
|
||||||
|
<em class="gtk">PrintFile</em>(<em class="str">"License Terms","~/demos/license.txt"</em>) <em>-- title will be "License Terms"</em></code></pre>
|
||||||
|
|
||||||
|
See <a href="../test189.ex">test189</a> and <a href="../test190.ex">test190</a> for various ways to call these functions.<pre><code> <em class="gtk">PrintText</em>(<em class="str">""</em>,LGPL) <em>-- no title</em>
|
||||||
|
<em class="gtk">PrintText</em>(<em class="str">"Lesser General Public License"</em>,LGPL) <em>-- prints "Lesser General Public License" as the title</em>
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
See <a href="../test191.ex">test191</a> to see how to print direct to a .pdf file.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="headers" />
|
||||||
|
<h3><hr>Headers and Footers<hr></h3>
|
||||||
|
<p>
|
||||||
|
You may wish to override the default page header and/or footer formats.<br />
|
||||||
|
Headers and footers are printed using text:format(), so you can choose what info shows
|
||||||
|
and in what order by using square brackets.<br />For example:
|
||||||
|
<pre><code> <em class="gtk">printer:header</em> = <em class="str">""</em> <em> -- no header</em>
|
||||||
|
<em class="gtk">printer:header</em> = <em class="str">"Title: <b>[1]</b> User: [9]\n\n"</em> <em>-- prints page title (bold) and user name</em></code></pre>
|
||||||
|
The numbers in the format box or boxes in the header or footer will be replaced with: <br />
|
||||||
|
<ol class="small">
|
||||||
|
<li>page title <dfn>heading for all pages, unless there's a subtitle</dfn></li>
|
||||||
|
<li>page subtitle <dfn>heading to use on pages after pg 1</dfn></li>
|
||||||
|
<li>file name </li>
|
||||||
|
<li>short name <dfn>file name w/o path</dfn></li>
|
||||||
|
<li>current page number</li>
|
||||||
|
<li>n_pages printed</li>
|
||||||
|
<li>n_copies requested</li>
|
||||||
|
<li>today's date in date_format</li>
|
||||||
|
<li>user name</li>
|
||||||
|
<li>real name</li>
|
||||||
|
<li>font name used for this print job</li>
|
||||||
|
<li>file length (bytes) <dfn>for named files only</dfn></li>
|
||||||
|
<li>file timestamp <dfn>for named files only</dfn></li>
|
||||||
|
<li>export filename <dfn>for pdf files</dfn></li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
You can use these in any order and combined with other text as you wish.
|
||||||
|
If you define custom headers or footers, be sure to end the header string, and begin the footer string, with one or two '\n' to separate them from the body text!<br />
|
||||||
|
You may use any of the normal <a href="pango_markup.html">markup</a> tokens in the header and footer, including font and color specifications.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src="../screenshots/header1.png" alt="header" />
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
If you use custom headers or footers, be <i>sure</i> to declare them <i>after</i> you call
|
||||||
|
<code> show_all(mainwindow)</code>. This way, they won't be accessed until after the GTK engine has been fully initialized. Of course, if you print from
|
||||||
|
a Eu function you have written, you can declare the header and/or footer formats at the start of the function. They won't be set until
|
||||||
|
the function is called.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The current date display format can be changed by overriding printer:date_format.The format is the same as used in std/datetime.e.</p>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="progress" />
|
||||||
|
<h3><hr>Progress Bar<hr></h3>
|
||||||
|
<p>
|
||||||
|
There's a ready-to use progressbar exported by GtkPrinter.e. To use it,
|
||||||
|
just add it in the appropriate place on your window or dialog:
|
||||||
|
<br />
|
||||||
|
<tt><pre>
|
||||||
|
<em class="gtk">pack</em>(panel,printer:progress)
|
||||||
|
</pre></tt>
|
||||||
|
The progressbar will be updated automatically. Sometimes it's nice to hide the progressbar until printing begins.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="custom" />
|
||||||
|
<h3><hr>Custom Tabs<hr></h3>
|
||||||
|
<p>
|
||||||
|
You can construct a custom tab and page which will be added to the print dialog.
|
||||||
|
To do so, you will need to override 3 variables in GtkPrinter.e.
|
||||||
|
<ol>
|
||||||
|
<li><i>custom_tab_label</i></li>
|
||||||
|
<li><i>custom_tab_func</i>
|
||||||
|
<dl><small>A call_back to your function which creates and returns the handle to a container (GtkBox) with one or more controls embedded.<br />This will be the contents of your added page.</small></dl></li>
|
||||||
|
<li><i>custom_tab_hook</i>
|
||||||
|
<dl><small>A call_back to a function which retrieves the settings from your embedded controls and applies them as appropriate.</small></dl></li>
|
||||||
|
</ol>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The <a href="README.html#bear">Bear</a>,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Updated for EuGTK version 4.12.0, Sept 15, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
107
eugtk/examples/documentation/style.css
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
|
||||||
|
body {margin-right: 10px; margin-left: 10px;}
|
||||||
|
|
||||||
|
h3 {color: blue;}
|
||||||
|
img {margin-right: 10px;}
|
||||||
|
p.small {font-size: small; font-style: italic;}
|
||||||
|
|
||||||
|
em {color: red;}
|
||||||
|
em.kw {color: blue;}
|
||||||
|
em.gtk {color: magenta; }
|
||||||
|
em.str {color: green;}
|
||||||
|
em.black {color: black;}
|
||||||
|
em.blue {color: blue;}
|
||||||
|
em.green {color: green;}
|
||||||
|
em.brown {color: brown; font-style: normal;}
|
||||||
|
em.orange {color: orange;}
|
||||||
|
|
||||||
|
button {margin-bottom: 5px; background-color: #A6F583;}
|
||||||
|
b.x {background-color: #A6F583;}
|
||||||
|
|
||||||
|
figure {background-color: #EFEFEB;}
|
||||||
|
|
||||||
|
table {margin: 10px;}
|
||||||
|
th {background-color: #FCFAC7;}
|
||||||
|
tr.note {background-color: yellow;}
|
||||||
|
tr.subtitle {font-size: smaller;}
|
||||||
|
td {
|
||||||
|
background-color: #F2F9FA;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
font-size: smaller;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.eucode {background-color: #F2F9FA;}
|
||||||
|
td.emphasis {background-color: #FBF00A;}
|
||||||
|
td.note {background-color: yellow;}
|
||||||
|
td.ba {background-color: cyan;}
|
||||||
|
td.bb {background-color: skyblue;}
|
||||||
|
td.bc {background-color: #A3FCA3;}
|
||||||
|
|
||||||
|
ol li {margin-bottom: 10px;}
|
||||||
|
ul li {margin-bottom: 5px;}
|
||||||
|
ul.small {font-size: small;}
|
||||||
|
ol.small {font-size: small;}
|
||||||
|
|
||||||
|
dfn {font-size: small; color: blue;}
|
||||||
|
dd {font-size: smaller;}
|
||||||
|
|
||||||
|
div.hdr {
|
||||||
|
display: block;
|
||||||
|
padding:3px;
|
||||||
|
border:none;
|
||||||
|
background: skyblue;
|
||||||
|
color:yellow;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.hint {
|
||||||
|
display: block;
|
||||||
|
border: thin solid black;
|
||||||
|
padding: 8px;
|
||||||
|
font-size: small;
|
||||||
|
border-radius: 20px;
|
||||||
|
margin-left: 20px;
|
||||||
|
margin-right: 20px;
|
||||||
|
background-color: #D9F9E4;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.quote {
|
||||||
|
display: block;
|
||||||
|
border: 1px dashed black;
|
||||||
|
padding: 5px;
|
||||||
|
background: #F0F0F0;
|
||||||
|
margin: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.scrn {
|
||||||
|
display: block;
|
||||||
|
border: 2px solid green;
|
||||||
|
padding: 4px;
|
||||||
|
font-size: 12pt;
|
||||||
|
color: #00FF00;
|
||||||
|
background-color: black;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.urgent {
|
||||||
|
display: block;
|
||||||
|
border: 4px dashed red;
|
||||||
|
padding: 4px;
|
||||||
|
margin: 4px;
|
||||||
|
font-size: 12pt;
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {margin-left: 5px; margin-bottom: 5px;}
|
||||||
|
img.x {margin:0px;}
|
||||||
|
|
||||||
|
figure {margin-left: 2px; margin-bottom: 2px;}
|
||||||
|
figcaption {background-color: #F2F2F2;}
|
||||||
|
footer {font-size: smaller;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
496
eugtk/examples/documentation/treeviews.html
Normal file
@ -0,0 +1,496 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>TreeView/ListView</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<img src="../thumbnails/gtk-logo-rgb.gif"><alt="GTK LOGO"></img>
|
||||||
|
<img src="../thumbnails/mongoose.png"><alt="mongoose"></img>
|
||||||
|
<a href="../test33.ex">
|
||||||
|
<img src="../screenshots/test33.jpg" alt="test33.jpg" title="test33" align="right" />
|
||||||
|
</a>
|
||||||
|
<h2><hr />EuGTK 4.12.0</h2>
|
||||||
|
<h3>ListViews / TreeViews</h2>
|
||||||
|
<hr>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<br clear="all" />
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<div class="hdr">Quick Links:</div>
|
||||||
|
<a href="#overview"><button>Overview</button></a>
|
||||||
|
<a href="#model"><button>Models</button></a>
|
||||||
|
<a href="#columns"><button>Columns</button></a>
|
||||||
|
<a href="#renderers"><button>Cell Renderers</button></a>
|
||||||
|
<a href="#signals"><button>Signals</button></a>
|
||||||
|
<a href="#retrieving"><button>Retrieving Data</button></a>
|
||||||
|
<a href="#floats"><button>Formatting Data</button></a>
|
||||||
|
<a href="#functions"><button>New Functions!</button></a>
|
||||||
|
<a href="#syntax"><button>New Easy Syntax!</button></a>
|
||||||
|
<br />
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<div class="hdr">Other Files:</div>
|
||||||
|
<a href="README.html"><button>README</button></a>
|
||||||
|
<a href="HowItWorks.html"><button>How EuGTK Works</button></a>
|
||||||
|
<a href="guide_a.html"><button>Alphabetical guide to GTK widgets</button></a>
|
||||||
|
<a href="dialogs.html"><button>Built-in EuGTK Dialogs</button></a>
|
||||||
|
<a href="pango_markup.html"><button>Markup</button></a>
|
||||||
|
<a href="printing.html"><button>Printing Engine</button></a>
|
||||||
|
<a href="ServerHelp.html"><button>Web Server</button></a>
|
||||||
|
<a href="functions.html"><button>Quick Function List</button></a>
|
||||||
|
<a href="Glade.html"><button>Glade GUI Builder</button></a>
|
||||||
|
<a href="platforms.html"><button>Platforms</button></a>
|
||||||
|
<br />
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<a name="#overview" /><h3><hr />ListView/TreeView Overview<hr /></h3>
|
||||||
|
<p>
|
||||||
|
Gtk TreeViews and Listviews are used to display one or more columns of data in
|
||||||
|
a scrollable, sortable, reorderable table format.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>GTK3 uses the Model/View/Controller scheme for organizing and
|
||||||
|
displaying data.
|
||||||
|
<ul>
|
||||||
|
<li><i>In theory,</i> this is more versatile, allowing you to display
|
||||||
|
the same data in various forms simultaneously.</li>
|
||||||
|
<li><i>In reality,</i> you rarely need to do this sort of thing, and when you do, you probably know an easier way.</li>
|
||||||
|
<li><i>In practice,</i> this MVC design makes even simple lists mind-bogglingly difficult to
|
||||||
|
understand and use.</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Don't let this deter you, however, because EuGTK handles all the twiddling with iterators
|
||||||
|
and paths, etc. that make using the List/TreeViews so difficult. You can accomplish almost anything you need to do
|
||||||
|
by cutting and pasting from example code, thereby getting some programming done instead of
|
||||||
|
sitting there wondering <i>"what <u>were</u> they thinking?"</i>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3><hr />Getting Started<hr /></h3>
|
||||||
|
<p>
|
||||||
|
The first step will be to create a model in which to store your data.
|
||||||
|
The model can be thought of as a table with one or more rows of data,
|
||||||
|
arranged in one or more columns,
|
||||||
|
where each column contains one specific <i>type</i> of data.</p>
|
||||||
|
<p>
|
||||||
|
A model is not unlike a Euphoria sequence. Take, for example, the
|
||||||
|
following:
|
||||||
|
<code><pre><em class="kw">sequence</em> students { <em>-- name, age, amt due</em>
|
||||||
|
{<em class="str">"Sam Smith"</em>,<em class="brown"> 15, 19.95</em>},
|
||||||
|
{<em class="str">"Sue Jones"</em>, <em class="brown">14, 12.99</em>},
|
||||||
|
$<em> -- etc...</em>
|
||||||
|
}</pre>
|
||||||
|
</code>
|
||||||
|
In the above, col 1 contains strings, col 2 contains integers, col 3 contains floats.
|
||||||
|
Your model must mirror the number and types of
|
||||||
|
data in the sequence to be used.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="model" /><h3><hr />Models<hr /></h3>
|
||||||
|
<p>
|
||||||
|
There are two kinds of model which come
|
||||||
|
pre-built with GTK, plus others you can supposedly devise, if you believe the GTK docs!
|
||||||
|
- Let's stick with the two easy ones:<br />
|
||||||
|
<ul>
|
||||||
|
<li>GtkListStore</li>
|
||||||
|
<li>GtkTreeStore</li>
|
||||||
|
</ul>
|
||||||
|
You'll have noted that, just to make things even more confusing, GTK decided to call the
|
||||||
|
list model a ListStore, and the tree model a TreeStore. So we might as well give our Euphoria
|
||||||
|
object variable the name <i>store</i>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Creating your model a.k.a. store is easy, you just need to specify a data type
|
||||||
|
for each of the columns to match the type of data to be stored there.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
For the example Euphoria sequence shown above, (students) we do this:
|
||||||
|
<code><pre>
|
||||||
|
<em class="kw">constant</em> store = <em class="gtk">create</em>(GtkListStore,{gSTR,gINT,gFLT}) <em>-- name, age, amt due</em>
|
||||||
|
</pre></code>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Note: by specifying a data type for each column, you are not only indicating what type of data
|
||||||
|
can be stored there, but also describing the way you want the data to look. IOW, you might
|
||||||
|
define the "name" column as gINT, but that would result in the name column displaying
|
||||||
|
the pointers to the students name strings, rather than the names in readable form.
|
||||||
|
Likewise, gINT, gFLT, and gDBL result in different ways to display the same numeric
|
||||||
|
contents.
|
||||||
|
<i>Note: EuGTK implements a 'convenience' here for numbers: see <a href="#floats">floats</a>.</i>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Next, you need to load the model with your data:
|
||||||
|
|
||||||
|
This can be done in one <i>swell foop</i> by simply typing:
|
||||||
|
<pre><code> <em class="gtk">set</em>(store,<em class="str">"data"</em>,students)</code></pre>
|
||||||
|
|
||||||
|
<a name="columns" /><h3><hr />Columns<hr /></h3>
|
||||||
|
<p>
|
||||||
|
TreeView columns are created as you might expect.<br /><small>
|
||||||
|
Note: there are no ListView columns, everything uses a TreeViewColumn.</small><br />
|
||||||
|
<pre><code> <em class="kw">constant</em> col1 = <em class="gtk">create</em>(GtkTreeViewColumn) <em>-- no params needed</em></code></pre>
|
||||||
|
Each column will display a "vertical slice" of your Eu sequence.</p>
|
||||||
|
<p>
|
||||||
|
You do <i>not</i> need to define a column for each column of data in your original Eu sequence.
|
||||||
|
Only create a column for each item you want to <i>see</i> in the listview.
|
||||||
|
In addition, the columns do <i>not</i> have to be in the same order as the original
|
||||||
|
Eu sequence. You can specify which column in the store is to provide the values to
|
||||||
|
be displayed in each column. See <a href="#connecting"> connecting</a> below.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="renderers" /><h3><hr />Cell Renderers<hr /></h3>
|
||||||
|
<p>
|
||||||
|
In order to be able to display the data, each column must have a cell renderer associated with it.
|
||||||
|
Every cell in a given column displays the same <i>type</i> of data: string, integer, or float,
|
||||||
|
but using individual <i>values</i> which are gotten from the 'model' attached to the view.
|
||||||
|
<p>
|
||||||
|
Cell renderers are created by:
|
||||||
|
<pre><code> <em class="kw">constant</em> rend1 = <em class="gtk">create</em>(GtkCellRendererText) <em>-- no params needed</em></code></pre>
|
||||||
|
Where the renderer can be one of several types.<br />
|
||||||
|
<ul class="small">
|
||||||
|
<li>GtkCellRendererText</li>
|
||||||
|
<li>GtkCellRendererPixbuf</li>
|
||||||
|
<li>GtkCellRendererProgress</li>
|
||||||
|
<li>GtkCellRendererSpin</li>
|
||||||
|
<li>GtkCellRendererToggle</li>
|
||||||
|
<li>GtkCellRendererCombo</li>
|
||||||
|
</ul>
|
||||||
|
As you can see, the names indicate different ways to display the data from the model.
|
||||||
|
For example, the CellRendererText will display strings, integers, or floats in human-readable form,
|
||||||
|
i.e. alpha-numeric characters, while the CellRendererProgress will display percentages as a variable-length bar.</p>
|
||||||
|
The CellRendererToggle displays boolean values as a check-box, CellRendererSpin displays a potentially
|
||||||
|
changeable numeric value, and a CellRendererPixbuf displays an image when given the handle to a GdkPixbuf.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/hint.png" alt="hint" width="100px" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
Some cell renderers, such as text, toggle, and spin, can be made 'editable', so that the
|
||||||
|
user can edit strings or modify values. Be aware however: edits are <i><b>NOT</b></i> automatically
|
||||||
|
saved to the underlying model. You have to write routines to do this when necessary.
|
||||||
|
Refer to <a href="../test33.ex"> test33</a> and <a href="../test35.ex"> test35</a> for examples of
|
||||||
|
how to make a renderer editable, and how to update the model to reflect the edited data.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You will always create a column and a renderer together, and pack the renderer into the
|
||||||
|
column. It is possible to pack more than one renderer into a single column.
|
||||||
|
<pre><code> <em class="kw">constant</em> col1 = <em class="gtk">create</em>(GtkTreeViewColumn)
|
||||||
|
<em class="gtk">set</em>(col1,<em class="str">"title","Name"</em>) <em>-- you may set some properties of the column</em>
|
||||||
|
|
||||||
|
<em class="kw">constant</em> rend1 = <em class="gtk">create</em>(GtkCellRendererText)
|
||||||
|
<em class="gtk">set</em>(rend1,<em class="str">"font","Courier 8"</em>) <em>-- you may set some properties of the renderer, these affect the entire column</em>
|
||||||
|
<em class="gtk">set</em>(col1,<em class="str">"pack start"</em>,rend1) <em>-- and finally, add the renderer to the column!</em>
|
||||||
|
|
||||||
|
</code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="connecting" />
|
||||||
|
|
||||||
|
<h3><hr />Connecting data to column renderers<hr /></h3>
|
||||||
|
<p>
|
||||||
|
Next, you need to associate each column in the view with the column in the model where it
|
||||||
|
will find its data.
|
||||||
|
Of course, it can't be this easy. Instead, you have to tell the column to tell its
|
||||||
|
cell renderer where to find the data:<br />
|
||||||
|
<pre><code> <em class="gtk">set</em>(col1,<em class="str">"add attribute"</em>,rend1,<em class="str">"text"</em>,1)</code></pre>
|
||||||
|
Which means: col1 should get the text to be displayed by its cell renderer (rend1) from column #1 of the model.
|
||||||
|
In the example, this would be the name of the student.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Often you may have more data in your Eu sequence - and hence, in your model - than you wish to display,
|
||||||
|
and/or you may want to display the columns in a different order than they appear in the original sequence.
|
||||||
|
This "add attribute" call allows you to control that.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
'Text' is only one attribute that the GtkCellRendererText has to offer; some of the others are
|
||||||
|
'markup', 'background', 'foreground', 'language', 'font', etc. By now, you won't be surprised to find that these
|
||||||
|
aren't called attributes by the GTK docs, instead you'll find them listed under Properties for
|
||||||
|
the various GtkCellRenderers.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<i><b>But wait, there's more!</b></i>
|
||||||
|
<p>
|
||||||
|
Just to keep things from getting boring, there are two ways to set an attribute a.k.a. property for a cell renderer.
|
||||||
|
The first, as shown below, is to tell the column to tell the renderer where to get its background for this particular
|
||||||
|
cell.
|
||||||
|
Let's assume col# 2 of the model contains color names, perhaps a different color for
|
||||||
|
each row in the list:<br />
|
||||||
|
<pre><code> <em class="gtk">set</em>(col1,<em class="str">"add attribute"</em>,rend1,<em class="str">"background"</em>,2)</code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
On the other hand, suppose you tell the cell renderer <i>directly</i> to set a property.
|
||||||
|
This will affect <i>all</i> cells in the column which contains that renderer. This is done
|
||||||
|
as follows:
|
||||||
|
<pre><code> <em class="gtk">set</em>(rend1,<em class="str">"background","skyblue"</em>) <em>-- entire column will have a sky blue background</em>
|
||||||
|
<em class="gtk">set</em>(rend1,<em class="str">"size-points"</em>,36) <em>-- and all text in that column will be 36 points</em>
|
||||||
|
</code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="#finish" /><h3><hr />Finally<hr /></h3>
|
||||||
|
<p>
|
||||||
|
Now you only have to create a GtkTreeView to hold the columns.<br /><small>
|
||||||
|
(Here again, there is no GtkListView, everything uses a GtkTreeView)</small><br />
|
||||||
|
<pre><code> <em class="kw">constant</em> tv = <em class="gtk">create</em>(GtkTreeView)
|
||||||
|
<em class="gtk">set</em>(tv,<em class="str">"rules hint"</em>,<em class="kw">TRUE</em>) <em>-- set some appearance options for the tree view:</em>
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
Then tell it which model it should use to obtain its data; and append the column(s):
|
||||||
|
<pre><code> <em class="gtk">set</em>(tv,<em class="str">"model"</em>,store)
|
||||||
|
<em class="gtk">set</em>(tv,<em class="str">"append columns"</em>,{col1...})
|
||||||
|
</code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
And, more often than not, you'll add the view to a scrolled window and viewport, which keeps long
|
||||||
|
lists from extending past the bottom of the screen.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="signals" /><h3><hr />Signals<hr /></h3>
|
||||||
|
<p>
|
||||||
|
The normal signal to connect to is "row-activated", which will select
|
||||||
|
a row when it is double-clicked or a row is highlighted and the <enter> key is pressed.
|
||||||
|
<pre><code> <em class="gtk">connect</em>(tv,<em class="str">"row-activated"</em>,<em class="kw">call_back</em>(<em class="kw">routine_id</em>(<em class="str">"Foo"</em>)))
|
||||||
|
</code></pre>
|
||||||
|
If you are using GTK version 3.8 or above, you can choose to activate on a
|
||||||
|
single click by setting the following:
|
||||||
|
<pre><code> <em class="gtk">set</em>(tv,<em class="str">"activate on single click"</em>,<em class="kw">TRUE</em>)
|
||||||
|
</code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="syntax" /><h3><hr />Easy Syntax! <small>~ new in EuGTK 4.11.2</small><hr /></h3>
|
||||||
|
<p>
|
||||||
|
Below is the code needed to produce a listview; it isn't such a big deal, as you can see.
|
||||||
|
Refer to the simple <a href="../test3.ex">test3.ex</a> demo,
|
||||||
|
and the overly-fancy <a href="../test33.ex">test33.ex</a> demo.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><code><pre><em class="kw">constant</em> store = <em class="gtk">create</em>(GtkListStore,{gSTR,gSTR,gSTR}) <em> -- describe type of data to be stored in each column;</em>
|
||||||
|
|
||||||
|
<em class="gtk">set</em>(store,<em class="str">"data"</em>,{ <em> -- here's the data;</em>
|
||||||
|
{<em class="str">"Apple", "doz"</em>,5.00},
|
||||||
|
{<em class="str">"Cherry","lb"</em>, 3.69}, <em>-- note: 3rd column is numeric,</em>
|
||||||
|
{<em class="str">"Lime", "ea"</em>, .99}, <em>-- but will automatically be converted</em>
|
||||||
|
{<em class="str">"Orange","ea"</em>, 0.79}, <em>-- to a string by the store</em>
|
||||||
|
{<em class="str">"Banana","lb"</em>, 1.89}
|
||||||
|
})
|
||||||
|
|
||||||
|
<em class="kw">constant</em> scroller = <em class="gtk">create</em>(GtkScrolledWindow)
|
||||||
|
<em class="gtk">pack</em>(panel,scroller,<em class="kw">TRUE,TRUE</em>)
|
||||||
|
|
||||||
|
<em class="kw">constant</em> tv = <em class="gtk">create</em>(GtkTreeView,{
|
||||||
|
{<em class="str">"model"</em>,store},
|
||||||
|
{<em class="str">"connect","row-activated"</em>,_(<em class="str">"ShowChoice"</em>)}}) <em>-- see function below</em>
|
||||||
|
<em class="gtk">add</em>(scroller,tv)
|
||||||
|
|
||||||
|
<em class="kw">constant</em>
|
||||||
|
col1 = <em class="gtk">create</em>(GtkColumn,<em class="str">"title=Name,type=text,text=1,sort_column_id=1"</em>),
|
||||||
|
col2 = <em class="gtk">create</em>(GtkColumn,<em class="str">"title=Quantity,type=text,text=2"</em>),
|
||||||
|
col3 = <em class="gtk">create</em>(GtkColumn,<em class="str">"title=Price,type=text,text=3,sort_column_id=3"</em>)
|
||||||
|
|
||||||
|
<em class="gtk">set</em>(tv,<em class="str">"append columns"</em>,{col1,col2,col3})
|
||||||
|
|
||||||
|
<em class="kw">constant</em> selection = get(tv,<em class="str">"selection"</em>)
|
||||||
|
|
||||||
|
<em>---------------------</em>
|
||||||
|
<em class="kw">function</em> ShowChoice() <em>-- our function to handle selections</em>
|
||||||
|
<em>---------------------</em>
|
||||||
|
<em class="kw">object</em> choice = <em class="gtk">get</em>(selection,<em class="str">"selected row data"</em>)
|
||||||
|
<em class="gtk">Info</em>(,,choice[1],<em class="kw">format</em>(<em class="str">"Price: $[3] per [2]"</em>,choice))
|
||||||
|
<em class="kw">return</em> 1
|
||||||
|
<em class="kw">end function</em>
|
||||||
|
</pre></code>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="functions" /><h3><hr />Functions <small>~ new in EuGTK 4.8.7</small><hr /></h3>
|
||||||
|
<p>
|
||||||
|
Please don't bother trying to figure out the GTK docs when it comes to using a list or tree view.<br /> You'll find yourself
|
||||||
|
...<i> lost in an endless maze of twisty
|
||||||
|
passages... </i>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The stock GtkListView/GtkTreeView scheme is rediculously complex, and nearly impossible to understand.
|
||||||
|
With this version of EuGTK, I have implemented easier ways to deal with these things.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
After you create a ListView model, you can load it with an ordinary Euphoria sequence<em>*</em>
|
||||||
|
and manipulate it using familiar calls. Note that there is no direct connection between the Eu
|
||||||
|
data sequence and the list view store, so changing the Eu sequence does not change the list view,
|
||||||
|
or vice-versa. To keep the two in sync, you must update as appropriate. See the <a href="#hint2">hint</a> below.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><code><pre>
|
||||||
|
<em class="kw">constant</em> store = <em class="gtk">create</em>(GtkListStore,{gSTR,gSTR,gFLT})
|
||||||
|
|
||||||
|
<em class="kw">sequence</em> customers = {<em>-- first, last, balance due</em>
|
||||||
|
{<em class="str">"Sue","Jones"</em>,40.95},
|
||||||
|
{<em class="str">"Ralph","Wiggums"</em>,29.44}}
|
||||||
|
|
||||||
|
<em class="kw">sequence</em> new_cust = {<em class="str">"Ferd","Merkle"</em>,12.50}</pre>
|
||||||
|
<ul>
|
||||||
|
<li>Working with entire contents as Eu Sequence</li>
|
||||||
|
<dd><em class="gtk">set</em>(<i>store</i>,<em class="str">"data"</em>,<i>customers</i>) <em>-- store Eu sequence to listview</em></dd>
|
||||||
|
<dd><em class="gtk">get</em>(<i>store</i>,<em class="str">"data"</em>) <em>-- retrieve listview data as Eu sequence</em></dd>
|
||||||
|
<dd><em class="gtk">set</em>(<i>store</i>,<em class="str">"clear"</em>) <em>-- clear listview, does not affect original Eu sequence</em></dd>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<li>Working with individual rows</li>
|
||||||
|
<dd><em class="gtk">get</em>(<i>selection</i>,<em class="str">"selected row"</em>) <em>-- returns integer row number</em></dd>
|
||||||
|
<dd><em class="gtk">get</em>(<i>selection</i>,<em class="str">"selected rows"</em>) -- <em> returns sequence of row numbers: {2,6,23}</em></dd>
|
||||||
|
|
||||||
|
<a name="hint2"></a>
|
||||||
|
<dd><em class="gtk">set</em>(<i>store</i>,<em class="str">"append row"</em>,<i>new_cust</i>) <em>-- add to bottom of list, invalid if view is sorted</em></dd>
|
||||||
|
<dd><em class="gtk">set</em>(<i>store</i>,<em class="str">"prepend row"</em>,<i>new_cust</i> <em>-- add to top of list, invalid if view is sorted</em></dd>
|
||||||
|
<dd><em class="gtk">set</em>(<i>store</i>,<em class="str">"insert row"</em>,<i>new_cust</i>,pos#) <em>-- add at pos, invalid if view is sorted</em></li>
|
||||||
|
<dd><em class="gtk">set</em>(<i>store</i>,<em class="str">"remove row"</em>,row#)</dd>
|
||||||
|
<dd><em class="gtk">set</em>(<i>store</i>,<em class="str">"replace row"</em>,row#,new_cust) <em>-- replace row or list of selected rows with new data</em></dd>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/hint.png" alt="hint" width="100px" align="left" float="right" />
|
||||||
|
<p>The above <em class="gtk">set</em>() calls actually <u>return</u>
|
||||||
|
the modified data, which you can ignore,
|
||||||
|
or use to sync the modified data to disk, if you wish, whenever data is changed.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Working with a single row/column</li>
|
||||||
|
<dd><em class="gtk">set</em>(<i>store</i>,<em class="str">"col data"</em>,row#,col#,data)</dd>
|
||||||
|
<dd><em class="gtk">get</em>(<i>store</i>,<em class="str">"col data"</em>,row#,col#)</dd>
|
||||||
|
<br />
|
||||||
|
<li>Other functions</li>
|
||||||
|
<dd><em class="gtk">set</em>(<i>store</i>,<em class="str">"swap"</em>,row_a,row_b) <em>-- trade places. row_a and row_b are integer row numbers</em></dd>
|
||||||
|
<dd><em class="gtk">set</em>(<i>store</i>,<em class="str">"move before"</em>,row_a,row_b) <em> -- only valid if view is unsorted</em></dd>
|
||||||
|
<dd><em class="gtk">set</em>(<i>store</i>,<em class="str">"move after"</em>,row_a,row_b) <em>-- only valid if view is unsorted</em></dd>
|
||||||
|
<dd><em class="blue">NOTE: the above return the modified sequence, could be used to save updates to disk, etc.</em></dd>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<li>Information functions</li>
|
||||||
|
<dd><em class="gtk">get</em>(<i>store</i>,<em class="str">"n rows"</em>) <em>-- returns current number of rows in model</em></dd>
|
||||||
|
<dd><em class="gtk">get</em>(<i>store</i>,<em class="str">"n cols"</em>) <em>-- returns number of columns in model</em></dd>
|
||||||
|
<dd><em class="gtk">get</em>(<i>store</i>,<em class="str">"is sorted"</em>)</dd>
|
||||||
|
<dd><em class="gtk">get</em>(<i>store</i>,<em class="str">"sort column id"</em>) <em>-- 1..n</em></dd>
|
||||||
|
<dd><em class="gtk">get</em>(<i>store</i>,<em class="str">"sort order"</em>) <em>-- 0 = ascending, 1 = descending</em></dd>
|
||||||
|
<dd><em class="blue">NOTE: sort order is only valid if "is sorted" = TRUE</em></dd>
|
||||||
|
</ul>
|
||||||
|
</code>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><em>* </em>
|
||||||
|
Eu sequences must be conformant - IOW, each column must contain one consistent type of data:
|
||||||
|
if the first column contains strings, then all entries in column one must be strings, if a column contains numbers, for example,
|
||||||
|
age or balance due, then all entries in that column should be numbers.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Each view column can have an optional sort column id - this tells the view column which column in the model (store) contains the value to use in the sort.
|
||||||
|
In practical terms, this means that you could tell column #1 (names) that it should be sorted based on the value in #3 (amt_due).
|
||||||
|
You may also want to make the TreeView's headers clickable, so the user can sort each column when desired.
|
||||||
|
You can also, thru code, tell the model to sort itself by column and direction:
|
||||||
|
<pre><code> <em class="gtk">set</em>(store,<em class="str">"sort column id"</em>,3,GTK_SORT_ASCENDING)
|
||||||
|
<em>-- instead of an integer column #, you can use:</em>
|
||||||
|
<em>-- GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID (-2) = no sorting</em>
|
||||||
|
<em>-- sort directions are, as you would expect: GTK_SORT_ASCENDING | GTK_SORT_DESCENDING </em>
|
||||||
|
</code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You can also write your own custom sorting function, and tell the TreeView to use that function.
|
||||||
|
See the GTK docs on GtkTreeSortable for a prototype (GtkTreeIterCompareFunc) you can use when writing your
|
||||||
|
Euphoria function.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="retrieving" /><h3><hr />Retrieving data<hr /></h3>
|
||||||
|
To get the full data set back as a Euphoria sequence, just use:
|
||||||
|
<pre><code> <em class="gtk">get</em>(store,<em class="str">"data"</em>)</code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To get the <i>selected</i> data back from a ListView/TreeView, you must first obtain a GtkSelection object
|
||||||
|
from the view. Normally, this can be done at the time the view is created:
|
||||||
|
<pre><code> <em class="kw">constant</em> selection = <em class="gtk">get</em>(tv,<em class="str">"selection"</em>) <em>-- this tracks the changing selection(s)</em>
|
||||||
|
<em class="gtk">set</em>(selection,<em class="str">"mode"</em>,GTK_SELECTION_SINGLE)</code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Then, you can get the data contained in the selected row if selection mode is
|
||||||
|
GTK_SELECTION_SINGLE or GTK_SELECTION_BROWSE;
|
||||||
|
or rows, if selection mode is GTK_SELECTION_MULTIPLE.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre><code> <em class="kw">object</em> rowlist = <em class="gtk">get</em>(selection,<em class="str">"selected rows"</em>) <em>-- this returns a Eu sequence of one or more integers, e.g. {3} or {1,3,5,6}</em>
|
||||||
|
<em class="kw">object</em> data
|
||||||
|
<em class="kw">for</em> i = 1 <em class="kw">to length</em>(rowlist) <em class="kw">do</em>
|
||||||
|
data = <em class="gtk">get</em>(store,<em class="str">"row data"</em>,rowlist[i]) <em>-- use each row # to get the row's data</em>
|
||||||
|
<em>-- here, you do something with that data...</em></code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Sometimes, it's convenient get the contents of a single cell in a row by calling:
|
||||||
|
<pre><code> data = <em class="gtk">get</em>(store,<em class="str">"col data"</em>,row,2) <em>-- where 2 is the column# </em></code></pre>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The above instructions apply primarily to CellRendererText renderers.
|
||||||
|
Lists using other types of CellRenderers require different methods to retrieve the contents/results of a selection.
|
||||||
|
Please refer to the <a href="guide_a.html#c">alphabetical guide</a>, the GTK docs on CellRenderer properties, and the respective demos.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name="floats" /><h3><hr />Floats<hr /></h3>
|
||||||
|
<a href="../test194.ex">
|
||||||
|
<img src="../screenshots/test194.jpg" alt="test194" align="left" float="left" />
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<p><br />
|
||||||
|
The default display format for floating point numbers (gFLT) used in ListViews will probably not
|
||||||
|
be what you want - there will be too many digits following the decimal point.
|
||||||
|
In order to fix this, you can connect your own cell data function formatting routine.
|
||||||
|
See <a href="../test66.ex"> test66</a> for an example of how to do this.<br /><br />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<br clear="all" />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
As a convenience, another way to handle common values with 2 decimal points
|
||||||
|
is to declare the column as gSTR, but to pass atoms or integers.
|
||||||
|
No cell data formatting function is needed for this special case.</p>
|
||||||
|
<img src="../screenshots/test3.jpg" alt="test3" />
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The <a href="README.html#bear">Bear</a>,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Updated for EuGTK version 4.12.0, Sept 15, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
1
eugtk/examples/eu.cfg
Normal file
@ -0,0 +1 @@
|
|||||||
|
~/demos
|
11
eugtk/examples/examples/.httpd.css
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
-- ====================================================================
|
||||||
|
-- Styling for the remote display is set here;
|
||||||
|
-- ====================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
button {width: 100%;}
|
||||||
|
button.dir {background-color: skyblue;}
|
||||||
|
button.html {background-color: orange;}
|
||||||
|
|
||||||
|
body {background-image: linear-gradient(180deg, yellow, blue); background-repeat: no-repeat;)
|
118
eugtk/examples/examples/README.html
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>README</title>
|
||||||
|
<link rel="stylesheet" href="../documentation/style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<img src="../thumbnails/gtk-logo-rgb.gif" alt="GTK Logo" />
|
||||||
|
<img src="../thumbnails/mongoose.png" alt="OpenEuphoria Logo" />
|
||||||
|
|
||||||
|
<h2>EuGTK 4.11.7</h2>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<h3>This folder contains some more-complex examples</h3>
|
||||||
|
|
||||||
|
<p>Click on the link below the picture to view the source code.</p>
|
||||||
|
|
||||||
|
<figure style="float:left; border:solid thin black;">
|
||||||
|
<img src="../screenshots/worldflags.jpg" alt="worldflags.ex" height="250px" />
|
||||||
|
<figcaption><a href="worldflags.ex">World Flags</a> <small>test your memory</small></figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<figure style="float: left; border:solid thin black;">
|
||||||
|
<img src="../screenshots/hangman.jpg" alt="hangman.ex" height="250px" />
|
||||||
|
<figcaption><a href="hangman.ex">Hangman</a> <small>guess the word game</small></figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<figure style="float: left; border:solid thin black;">
|
||||||
|
<img src="../screenshots/passwords.png" alt="passwords" height="250px" />
|
||||||
|
<figcaption><a href="passwords.ex">Password Generator <small>requires apg</small></a></figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<figure style="float: left; border:solid thin black;">
|
||||||
|
<img src="../screenshots/webserver.png" alt="webserver" width="350px" />
|
||||||
|
<figcaption><a href="webserver.ex">Web Server</a></figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<figure style="float: left; border:solid thin black;">
|
||||||
|
<a href="../screenshots/webkit_test.png" title="Click to see a larger version" />
|
||||||
|
<img src="../screenshots/webkit_test.png" alt="webkit" height="250px" />
|
||||||
|
</a>
|
||||||
|
<figcaption><a href="webkit.ex">Webkit</a> <small>build your own browser!</small></figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<figure style="float: left; border:solid thin black;">
|
||||||
|
<img src="../screenshots/Resistor Color Codes.png" alt="color codes" />
|
||||||
|
<figcaption><a href="color_codes.ex">Color codes</a></figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<figure style="float: left; border:solid thin black;">
|
||||||
|
<a href="../screenshots/icons2.png" title="Click to see a larger version" />
|
||||||
|
<img src="../screenshots/icons.png" alt="icons" height="250px" />
|
||||||
|
</a>
|
||||||
|
<figcaption><a href="icons.ex">Icon Viewer</a></figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<figure style="float: left; border:solid thin black;">
|
||||||
|
<a href="../screenshots/browser.png" title="Click to see a larger version" />
|
||||||
|
<img src="../screenshots/browser.png" alt="browser" height="250px" />
|
||||||
|
</a>
|
||||||
|
<figcaption><a href="../browser.ex">Eu Browser</a></figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<figure style="float: left; border:solid thin black;">
|
||||||
|
<a href="../screenshots/leaktest.png" title="Click to see a larger version" />
|
||||||
|
<img src="../screenshots/leaktest.png" alt="leaktest" height="350px" />
|
||||||
|
</a>
|
||||||
|
<figcaption><a href="../examples/leak.ex">Leak Test</a></figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<br clear="all" />
|
||||||
|
|
||||||
|
<h3>Utilities</h3>
|
||||||
|
<p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="audio_converter.ex">Audio Converter</a>
|
||||||
|
<dfn>convert between various audio formats; requires ffmpeg</dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><a href="base_converter.ex">Convert numbers</a>
|
||||||
|
<dfn>convert between Gray, binary, hex, decimal bases</dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><a href="talk.ex">Talk</a>
|
||||||
|
<dfn>give your computer a voice (more than one, actually); requires spd-say</dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><a href="xpm_to_eu_include.ex">xpm_to_eu_include</a>
|
||||||
|
<dfn>Convert xpm data to an image as a Euphoria include file</dfn>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The <a href="README.html#bear">Bear</a>,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Updated for EuGTK version 4.11.10 June 15, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
193
eugtk/examples/examples/audio_converter.ex
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
--# Converts audio file formats, requires <b>ffmpeg</b>!
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
-- formats handled are in the constant x below.
|
||||||
|
-- You can, of course, add more formats if you want.
|
||||||
|
-- Put the default input format first on the list,
|
||||||
|
-- and the default output format last, so you won't
|
||||||
|
-- have to select them each time you run this program.
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include GtkEvents.e
|
||||||
|
include std/sort.e
|
||||||
|
include std/task.e
|
||||||
|
include std/os.e
|
||||||
|
|
||||||
|
constant x = {"wma","wav","ogg","mp3"}
|
||||||
|
|
||||||
|
object folder, files
|
||||||
|
|
||||||
|
constant win = create(GtkWindow)
|
||||||
|
connect(win,"destroy","Quit")
|
||||||
|
set(win,"border width",10)
|
||||||
|
set(win,"default size",600,250)
|
||||||
|
set(win,"position",GTK_WIN_POS_CENTER)
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,VERTICAL)
|
||||||
|
add(win,panel)
|
||||||
|
|
||||||
|
constant top = create(GtkBox,HORIZONTAL)
|
||||||
|
pack(panel,top)
|
||||||
|
|
||||||
|
constant path = create(GtkFileChooserButton, -- select music folder;
|
||||||
|
"Select a folder",GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
|
||||||
|
connect(path,"current-folder-changed","LoadList")
|
||||||
|
set(path,"tooltip text","Select a music folder")
|
||||||
|
pack(top,path,TRUE,TRUE)
|
||||||
|
|
||||||
|
constant extension1 = create(GtkComboBoxText) -- input file format;
|
||||||
|
for i = 1 to length(x) do
|
||||||
|
set(extension1,"append text",x[i])
|
||||||
|
end for
|
||||||
|
set(extension1,"tooltip text","Select input format")
|
||||||
|
set(extension1,"active",1)
|
||||||
|
pack(top,extension1)
|
||||||
|
|
||||||
|
constant extension2 = create(GtkComboBoxText) -- output file format;
|
||||||
|
for i = 1 to length(x) do
|
||||||
|
set(extension2,"append text",x[i])
|
||||||
|
end for
|
||||||
|
set(extension2,"tooltip text","Select output format")
|
||||||
|
set(extension2,"active",length(x))
|
||||||
|
pack(top,extension2)
|
||||||
|
|
||||||
|
constant scroller = create(GtkScrolledWindow)
|
||||||
|
pack(panel,scroller,TRUE,TRUE)
|
||||||
|
|
||||||
|
constant store = create(GtkListStore,{gSTR,gINT,gINT}) -- file list;
|
||||||
|
|
||||||
|
constant tv = create(GtkTreeView)
|
||||||
|
add(scroller,tv)
|
||||||
|
set(tv,"hover selection",TRUE)
|
||||||
|
set(tv,"headers clickable",TRUE)
|
||||||
|
set(tv,"rules hint",TRUE)
|
||||||
|
set(tv,"model",store)
|
||||||
|
|
||||||
|
constant selection = get(tv,"selection")
|
||||||
|
set(selection,"mode",GTK_SELECTION_BROWSE)
|
||||||
|
|
||||||
|
constant col1 = create(GtkTreeViewColumn)
|
||||||
|
constant ren1 = create(GtkCellRendererText)
|
||||||
|
set(col1,"title","Filename")
|
||||||
|
set(col1,"pack start",ren1)
|
||||||
|
set(col1,"add attribute",ren1,"markup",1)
|
||||||
|
set(col1,"sort column id",1)
|
||||||
|
set(tv,"append column",col1)
|
||||||
|
|
||||||
|
constant col2 = create(GtkTreeViewColumn)
|
||||||
|
constant ren2 = create(GtkCellRendererToggle)
|
||||||
|
set(col2,"title","Converted")
|
||||||
|
set(col2,"pack start",ren2)
|
||||||
|
set(col2,"add attribute",ren2,"active",2)
|
||||||
|
set(tv,"append column",col2)
|
||||||
|
|
||||||
|
constant box = create(GtkButtonBox),
|
||||||
|
btn1 = create(GtkButton,"gtk-quit","Quit"),
|
||||||
|
btn2 = create(GtkButton,"gtk-help","Help"),
|
||||||
|
btn3 = create(GtkButton,"gtk-ok","Convert")
|
||||||
|
set(box,"margin top",10)
|
||||||
|
set(btn1,"tooltip text","Click to exit")
|
||||||
|
set(btn2,"tooltip text","Click for help")
|
||||||
|
set(btn3,"tooltip text","Click to start conversion")
|
||||||
|
add(box,{btn1,btn2,btn3})
|
||||||
|
pack(panel,-box)
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
|
||||||
|
if system_exec("which ffmpeg",0) != 0 then
|
||||||
|
set(btn3,"sensitive",FALSE)
|
||||||
|
Warn(win,"Error","Cannot find ffmpeg program","Please install one!")
|
||||||
|
end if
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
------------------------------------------
|
||||||
|
global function LoadList()
|
||||||
|
------------------------------------------
|
||||||
|
object ext_in = get(extension1,"active")
|
||||||
|
folder = get(path,"filename")
|
||||||
|
ext_in = x[ext_in]
|
||||||
|
|
||||||
|
files = dir(folder & "/*." & ext_in)
|
||||||
|
if atom(files) then return -1 end if
|
||||||
|
|
||||||
|
files = sort(vslice(files,1))
|
||||||
|
set(store,"clear")
|
||||||
|
set(store,"data",files)
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
global function Convert()
|
||||||
|
---------------------------
|
||||||
|
atom iter
|
||||||
|
object in, out,
|
||||||
|
ext1 = x[get(extension1,"active")],
|
||||||
|
ext2 = x[get(extension2,"active")],
|
||||||
|
parameters = " -ab 128k "
|
||||||
|
|
||||||
|
switch ext2 do
|
||||||
|
case "ogg" then parameters = " -acodec libvorbis -ab 128k "
|
||||||
|
case "mp3" then parameters = " -acodec libmp3lame -ab 128k "
|
||||||
|
end switch
|
||||||
|
|
||||||
|
set(path,"sensitive",FALSE)
|
||||||
|
set(extension1,"sensitive",FALSE)
|
||||||
|
set(extension2,"sensitive",FALSE)
|
||||||
|
set(tv,"scroll to point",0,1)
|
||||||
|
|
||||||
|
for i = 1 to length(files) do
|
||||||
|
in = filebase(files[i])
|
||||||
|
out = filebase(files[i])
|
||||||
|
iter = get(store,"iter from string",sprintf("%d",i-1))
|
||||||
|
|
||||||
|
set(store,"col data",iter,1,
|
||||||
|
sprintf("<span color='red'>%s.%s</span>",{in,ext1}))
|
||||||
|
while events:pending() do
|
||||||
|
main_iteration()
|
||||||
|
end while
|
||||||
|
|
||||||
|
system_exec(sprintf("ffmpeg -y -i \"%s/%s.%s\" %s \"%s/%s.%s\"\n",
|
||||||
|
{folder,in,ext1,parameters,folder,out,ext2}),0)
|
||||||
|
|
||||||
|
set(store,"col data",iter,1,
|
||||||
|
sprintf("<span color='darkgreen'>%s.%s</span>",{out,ext2}))
|
||||||
|
|
||||||
|
set(store,"col data",iter,2,"active",TRUE)
|
||||||
|
set(tv,"scroll to point",0,(i-1)*25)
|
||||||
|
while events:pending() do
|
||||||
|
main_iteration()
|
||||||
|
end while
|
||||||
|
end for
|
||||||
|
|
||||||
|
set(path,"sensitive",TRUE)
|
||||||
|
set(extension1,"sensitive",TRUE)
|
||||||
|
set(extension2,"sensitive",TRUE)
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
global function Help()
|
||||||
|
------------------------------------------------------------
|
||||||
|
return Info(win,"Audio Converter", "Converts audio files","""
|
||||||
|
_____to/from your choice of output formats
|
||||||
|
<span font-size='smaller'>
|
||||||
|
It does <i>not</i> overwrite the original,
|
||||||
|
just creates a copy in the new format,
|
||||||
|
unless the input and output filenames are the same.
|
||||||
|
|
||||||
|
Run this program from an x-term
|
||||||
|
if you want to monitor the ffmpeg progress.
|
||||||
|
|
||||||
|
Select a directory in the box at top,
|
||||||
|
and the input and output formats using the drop-down
|
||||||
|
options on the right.</span>"""
|
||||||
|
)
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
||||||
|
|
159
eugtk/examples/examples/base_converter.ex
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
|
||||||
|
---------------------------------------------------------------
|
||||||
|
--# Gray code/Decimal/Hex/Octal/Binary conversion program
|
||||||
|
-- I needed a Gray code generator, and it just kept growing!
|
||||||
|
-- Run with -d CODE to display Gray code table on console
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include std/console.e
|
||||||
|
include std/convert.e
|
||||||
|
include std/sequence.e
|
||||||
|
|
||||||
|
-- change MAX_BIN_DIGITS to suit yourself; the bigger the number,
|
||||||
|
-- the longer it takes to generate a Gray code list;
|
||||||
|
constant MAX_BIN_DIGITS = 16
|
||||||
|
|
||||||
|
-- compute largest number possible given max_bin_digits:
|
||||||
|
constant MAX_NUM = power(2,MAX_BIN_DIGITS) -1
|
||||||
|
|
||||||
|
constant -- define max # of digits allowed in inputs;
|
||||||
|
DMAX = length(format("[]",MAX_NUM)),
|
||||||
|
BMAX = length(format("[B]",MAX_NUM)),
|
||||||
|
HMAX = length(format("[X]",MAX_NUM)),
|
||||||
|
OMAX = length(sprintf("%o",MAX_NUM))
|
||||||
|
|
||||||
|
constant -- allowable sets of chars (used to filter out unwanted key presses)
|
||||||
|
BINNUM = {{'0','1'}},
|
||||||
|
DECNUM = {{'0','9'}},
|
||||||
|
OCTNUM = {{'0','7'}},
|
||||||
|
HEXNUM = {{'0','9'},{'A','F'},{'a','f'}}
|
||||||
|
|
||||||
|
constant msg = "1. Enter a value in any box \n2. press enter"
|
||||||
|
constant docs = sprintf("<u><b>Converter</b></u>\n\nConverts numbers between 0 and %d",MAX_NUM)
|
||||||
|
|
||||||
|
enum BIN = 2, DEC = 10, HEX = #F, OCT = 8
|
||||||
|
|
||||||
|
---------------------------------------------------------------
|
||||||
|
-- Generate Gray code table using the manual (pencil & paper)
|
||||||
|
-- method, 'cause it's easy to code and I flunked calculus ;)
|
||||||
|
---------------------------------------------------------------
|
||||||
|
object Gray = {"0","1"}
|
||||||
|
|
||||||
|
for i = 1 to MAX_BIN_DIGITS-1 do
|
||||||
|
Gray = Gray & reverse(Gray) -- {"0","1","1","0"}
|
||||||
|
for j = 1 to length(Gray) do
|
||||||
|
if j <= length(Gray)/2 then
|
||||||
|
Gray[j] = "0" & Gray[j] -- prepend "0" to first half,
|
||||||
|
else
|
||||||
|
Gray[j] = "1" & Gray[j] -- prepend "1" to second half
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
end for
|
||||||
|
|
||||||
|
ifdef CODE then -- display code table on terminal;
|
||||||
|
for i = 1 to length(Gray) do
|
||||||
|
printf(1,"%d %s\n",{i-1,Gray[i]})
|
||||||
|
end for
|
||||||
|
end ifdef
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------------
|
||||||
|
-- Build GUI
|
||||||
|
--------------------------------------------------------------------------------------
|
||||||
|
constant win = create(GtkWindow,
|
||||||
|
"title=Code Converter,size=120x150,border=20,position=1,$destroy=Quit")
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,"orientation=VERTICAL")
|
||||||
|
add(win,panel)
|
||||||
|
|
||||||
|
constant lbl1 = create(GtkLabel)
|
||||||
|
set(lbl1,"markup",docs)
|
||||||
|
add(panel,lbl1)
|
||||||
|
|
||||||
|
constant
|
||||||
|
inpGray = BuildInput("Gray",BIN,MAX_BIN_DIGITS),
|
||||||
|
inpDec = BuildInput("Decimal",DEC,DMAX),
|
||||||
|
inpHex = BuildInput("Hex",HEX,HMAX),
|
||||||
|
inpOct = BuildInput("Octal",OCT,OMAX),
|
||||||
|
inpBin = BuildInput("Binary",BIN,BMAX)
|
||||||
|
|
||||||
|
set(inpGray,"tooltip text","Accepts binary digits 1 or 0")
|
||||||
|
set(inpDec,"tooltip text","Accepts decimal digits 0-9, max 65,535")
|
||||||
|
set(inpHex,"tooltip text","Accepts hex digits 0-9,A-F, max FFFF")
|
||||||
|
set(inpOct,"tooltip text","Accepts octal digits 0-7, max 177777")
|
||||||
|
set(inpBin,"tooltip text","Accepts binary digits 1 or 0")
|
||||||
|
|
||||||
|
constant lbl2 = create(GtkLabel)
|
||||||
|
add(panel,lbl2)
|
||||||
|
set(lbl2,"markup",msg)
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
main()
|
||||||
|
|
||||||
|
--------------------------------------------------------------
|
||||||
|
function BuildInput(sequence caption,integer base,integer max)
|
||||||
|
--------------------------------------------------------------
|
||||||
|
object lbl = create(GtkLabel,caption)
|
||||||
|
object inp = create(GtkEntry)
|
||||||
|
set(inp,"font","Courier Bold 16")
|
||||||
|
set(inp,"size request",100,40)
|
||||||
|
object buf = get(inp,"buffer")
|
||||||
|
set(buf,"max length",max)
|
||||||
|
connect(buf,"inserted-text",call_back(routine_id("FilterBase")),base)
|
||||||
|
connect(inp,"activate",call_back(routine_id("UpdateDisplay")))
|
||||||
|
add(panel,{lbl,inp})
|
||||||
|
return inp
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
function UpdateDisplay(atom ctl)
|
||||||
|
--------------------------------------------------
|
||||||
|
object buf = get(ctl,"buffer")
|
||||||
|
object val = get(buf,"text")
|
||||||
|
object dec = 0
|
||||||
|
|
||||||
|
set(lbl2,"markup",msg)
|
||||||
|
|
||||||
|
switch ctl do -- convert from ctl's base to decimal value;
|
||||||
|
case inpDec then dec = to_number(val)
|
||||||
|
case inpHex then dec = to_number(sprintf("#%s",{val}))
|
||||||
|
case inpOct then dec = to_number(sprintf("@%s",{val}))
|
||||||
|
case inpBin then dec = to_number(sprintf("!%s",{val}))
|
||||||
|
case inpGray then
|
||||||
|
val = pad_head(val,MAX_BIN_DIGITS,'0')
|
||||||
|
dec = find(val,Gray)-1
|
||||||
|
end switch
|
||||||
|
|
||||||
|
if dec > MAX_NUM then
|
||||||
|
set(lbl2,"markup","<span color='red'>Warning - number too large!</span>")
|
||||||
|
|
||||||
|
else -- update the number in all input fields, converting dec to base as needed;
|
||||||
|
set(inpGray,"text",Gray[dec+1])
|
||||||
|
set(inpDec,"text",format("[]",dec))
|
||||||
|
set(inpHex,"text",format("[X]",dec))
|
||||||
|
set(inpOct,"text",sprintf("%o",dec))
|
||||||
|
set(inpBin,"text",format("[B]",dec))
|
||||||
|
end if
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
----------------------------------------------------------------------------------------
|
||||||
|
function FilterBase(atom buf, integer pos, object char, integer n, integer base)
|
||||||
|
----------------------------------------------------------------------------------------
|
||||||
|
object txt = get(buf,"text")
|
||||||
|
|
||||||
|
char = peek_string(char)
|
||||||
|
|
||||||
|
switch base do -- if char entered isn't valid for base, delete it.
|
||||||
|
case BIN then if not char_test(char,BINNUM) then set(buf,"delete text",pos,1) end if
|
||||||
|
case OCT then if not char_test(char,OCTNUM) then set(buf,"delete text",pos,1) end if
|
||||||
|
case DEC then if not char_test(char,DECNUM) then set(buf,"delete text",pos,1) end if
|
||||||
|
case HEX then if not char_test(char,HEXNUM) then set(buf,"delete text",pos,1) end if
|
||||||
|
end switch
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
||||||
|
|
118
eugtk/examples/examples/browser.ex
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
|
||||||
|
----------------------------------------------------------------------------------
|
||||||
|
--# A simple file browser/runner;
|
||||||
|
----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include std/sort.e
|
||||||
|
include std/datetime.e -- using this requires us to namespace gtk: functions
|
||||||
|
|
||||||
|
chdir(login)
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,"size=750x550,border=10,$destroy=Quit")
|
||||||
|
gtk:set(win,"title","EuGTK Browser - " & login)
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,"orientation=VERTICAL")
|
||||||
|
gtk:add(win,panel)
|
||||||
|
|
||||||
|
constant lbl = create(GtkLabel,
|
||||||
|
"markup='<small>Use <i>alt-f</i> to search, <i><enter></i> or double-click to run!</small>'")
|
||||||
|
gtk:add(panel,lbl)
|
||||||
|
|
||||||
|
constant store = create(GtkListStore,{gSTR,gSTR,gINT,gSTR,gINT,gSTR})
|
||||||
|
|
||||||
|
constant tv = create(GtkTreeView,{
|
||||||
|
{"model",store},
|
||||||
|
{"reorderable",TRUE},
|
||||||
|
{"headers clickable",TRUE},
|
||||||
|
{"set grid lines",GTK_TREE_VIEW_GRID_LINES_BOTH},
|
||||||
|
{"rules hint",TRUE}})
|
||||||
|
|
||||||
|
constant cols = { -- below is a new way to define cols and renderers in 1 line;
|
||||||
|
create(GtkColumn,"title=Name,type=text,text=1,sort_column_id=2"), --[1]
|
||||||
|
create(GtkColumn,"title=Size,type=text,text=3,sort_column_id=3"),
|
||||||
|
create(GtkColumn,"title=Date,type=text,text=4,sort_column_id=5"), --[2]
|
||||||
|
create(GtkColumn,"title=Description,type=text,markup=6,sort_column_id=6")
|
||||||
|
}
|
||||||
|
--[1] filename in col[1] is sorted by number in col[2]
|
||||||
|
--[2] date shown in col[4] is sorted on unix date in col[5]
|
||||||
|
|
||||||
|
gtk:add(tv,cols)
|
||||||
|
|
||||||
|
constant selection = gtk:get(tv,"selection")
|
||||||
|
set(selection,"mode",GTK_SELECTION_MULTIPLE)
|
||||||
|
|
||||||
|
constant scroller = create(GtkScrolledWindow)
|
||||||
|
pack(panel,scroller,TRUE,TRUE,10)
|
||||||
|
gtk:add(scroller,tv)
|
||||||
|
|
||||||
|
constant box = create(GtkButtonBox)
|
||||||
|
pack_end(panel,box)
|
||||||
|
|
||||||
|
constant btn = create(GtkButton,"gtk-quit","Quit")
|
||||||
|
gtk:add(box,btn)
|
||||||
|
|
||||||
|
-- load file list;
|
||||||
|
object files = dir("*.ex")
|
||||||
|
|
||||||
|
-- convert dates to usable format;
|
||||||
|
files = apply(files,routine_id("convert_date"))
|
||||||
|
files = apply(files,routine_id("convert_filename"))
|
||||||
|
|
||||||
|
-- load files into listview;
|
||||||
|
gtk:set(store,"data",files)
|
||||||
|
|
||||||
|
-- set up handlers;
|
||||||
|
gtk:set(tv,"rules hint",TRUE)
|
||||||
|
gtk:set(tv,"columns autosize")
|
||||||
|
gtk:set(tv,"search column",6)
|
||||||
|
gtk:set(tv,"search equal func",_("search_func"))
|
||||||
|
connect(tv,"row-activated","show_choice")
|
||||||
|
gtk:set(store,"sort column id",2,GTK_SORT_ASCENDING) -- default startup sort;
|
||||||
|
|
||||||
|
-- run the program!
|
||||||
|
show_all(win)
|
||||||
|
main()
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
function convert_filename(object f, object junk) -- allow 'natural' sort order;
|
||||||
|
------------------------------------------------
|
||||||
|
object tmp = io:read_lines(f[1])
|
||||||
|
for i = 1 to length(tmp) do
|
||||||
|
if match("--#",tmp[i]) =1 then
|
||||||
|
f[6] = tmp[i][5..$]
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
f[1] = filebase(f[1]) -- drop extension, build index of #s;
|
||||||
|
object x = filter(f[1],"out",{'0','9'},"[]")
|
||||||
|
object n = filter(f[1],"in",{'0','9'},"[]")
|
||||||
|
f[2] = x & pad_head(n,10,'0')
|
||||||
|
return f
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------------
|
||||||
|
function convert_date(object a, object b) -- convert dates to unix for sorting;
|
||||||
|
-----------------------------------------
|
||||||
|
object dt = datetime:new(a[4],a[5],a[6]) -- convert eu dir() date to datetime;
|
||||||
|
a[5] = to_unix(dt) -- store as UNIX timestamp for sorting purposes;
|
||||||
|
a[4] = datetime:format(dt,"%b %d %Y") -- store human-readable date for display;
|
||||||
|
a[6] = "?"
|
||||||
|
return a
|
||||||
|
end function
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
function search_func(atom mdl, integer col, object key, atom iter, object data)
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
key = lower(peek_string(key)) -- key is passed as pointer to string
|
||||||
|
data = get(mdl,"value",iter,6) -- value from col 6 of liststore (description)
|
||||||
|
return not match(key,lower(data)) -- find word anywhere in description, 0 = found
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
global function show_choice()
|
||||||
|
-----------------------
|
||||||
|
integer row = gtk:get(selection,"selected row")
|
||||||
|
object f = gtk:get(store,"col data",row,1)
|
||||||
|
system("eui " & f,0) -- run it;
|
||||||
|
return 1
|
||||||
|
end function
|
1053
eugtk/examples/examples/clown.e
Normal file
185
eugtk/examples/examples/color_codes.ex
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
--# Resistor color codes;
|
||||||
|
-- Note: some GTK themes have a bug which adds space around images,
|
||||||
|
-- so the resistor image may appear to be 'sliced up'.
|
||||||
|
-- This can be fixed by using css to set image padding to 0.
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include std/locale.e
|
||||||
|
include std/convert.e
|
||||||
|
include std/filesys.e
|
||||||
|
|
||||||
|
object resistor -- an array of images
|
||||||
|
|
||||||
|
object valdisp = create(GtkLabel)
|
||||||
|
|
||||||
|
constant colors1 = { -- color bands;
|
||||||
|
"Black","Brown","Red","Orange","Yellow",
|
||||||
|
"Green","Blue","Violet","Gray","White"
|
||||||
|
},
|
||||||
|
-- multipliers;
|
||||||
|
colors2 = colors1 & {"Silver","Gold"},
|
||||||
|
|
||||||
|
-- tolerance;
|
||||||
|
colors3 = {"Gold","Silver","None"},
|
||||||
|
|
||||||
|
-- formatting string for value display;
|
||||||
|
tolerance = {" +/- 5%"," +/- 10%"," +/- 20%"},
|
||||||
|
|
||||||
|
-- location of the color band images;
|
||||||
|
wp = canonical_path("~/demos/resources/colorcode/")
|
||||||
|
|
||||||
|
constant tens = create(GtkComboBoxText)
|
||||||
|
for i = 2 to length(colors1) do
|
||||||
|
gtk:set(tens,"append text",colors1[i])
|
||||||
|
end for
|
||||||
|
|
||||||
|
constant ones = create(GtkComboBoxText)
|
||||||
|
for i = 1 to length(colors1) do
|
||||||
|
gtk:set(ones,"append text",colors1[i])
|
||||||
|
end for
|
||||||
|
|
||||||
|
constant mult = create(GtkComboBoxText)
|
||||||
|
for i = 1 to length(colors2) do
|
||||||
|
gtk:set(mult,"append text",colors2[i])
|
||||||
|
end for
|
||||||
|
|
||||||
|
constant tol = create(GtkComboBoxText)
|
||||||
|
for i = 1 to length(colors3) do
|
||||||
|
gtk:set(tol,"append text",colors3[i])
|
||||||
|
end for
|
||||||
|
gtk:set(tol,"active",1)
|
||||||
|
|
||||||
|
constant update = call_back(routine_id("Update"))
|
||||||
|
|
||||||
|
connect(tens,"changed",update)
|
||||||
|
connect(ones,"changed",update)
|
||||||
|
connect(mult,"changed",update)
|
||||||
|
connect(tol,"changed",update)
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,{
|
||||||
|
{"title","Resistor Color Codes"},
|
||||||
|
{"position",GTK_WIN_POS_CENTER},
|
||||||
|
{"border width",10},
|
||||||
|
{"resizable",FALSE},
|
||||||
|
{"icon","~/demos/thumbnails/mongoose.png"},
|
||||||
|
{"connect","destroy","Quit"}})
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,VERTICAL)
|
||||||
|
add(win,panel)
|
||||||
|
|
||||||
|
-- this creates a composite image of a resistor;
|
||||||
|
resistor = repeat(0,5)
|
||||||
|
resistor[1] = create(GtkImage,wp & "leftend.jpg")
|
||||||
|
resistor[2] = create(GtkImage,wp & "bar.jpg")
|
||||||
|
resistor[3] = create(GtkImage,wp & "bar.jpg")
|
||||||
|
resistor[4] = create(GtkImage,wp & "bar.jpg")
|
||||||
|
resistor[5] = create(GtkImage,wp & "end1.jpg")
|
||||||
|
|
||||||
|
constant top = create(GtkBox)
|
||||||
|
add(panel,top)
|
||||||
|
add(top,resistor)
|
||||||
|
|
||||||
|
constant bot = create(GtkBox)
|
||||||
|
add(panel,bot)
|
||||||
|
pack(bot,{tens,ones,mult,tol})
|
||||||
|
|
||||||
|
constant css = create(GtkCssProvider,"GtkImage {padding:0;}")
|
||||||
|
|
||||||
|
valdisp = create(GtkEntry)
|
||||||
|
add(panel,valdisp)
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
main()
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
function Format(integer t, integer o, integer m, integer p)
|
||||||
|
-----------------------------------------------------------
|
||||||
|
-- a utility to correctly format the value displayed;
|
||||||
|
object vs
|
||||||
|
atom v = 0
|
||||||
|
object prec = "", fmt = "[1] [2] [3] ([4] ~ [5] [2])"
|
||||||
|
|
||||||
|
integer i
|
||||||
|
object min_v, max_v, var, suffix
|
||||||
|
|
||||||
|
vs = sprintf("%d%d",{t,o})
|
||||||
|
|
||||||
|
if m < 1 then
|
||||||
|
v = to_number(vs)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if m > 0 and m < 10 then
|
||||||
|
vs &= repeat('0',m)
|
||||||
|
v = to_number(vs)
|
||||||
|
end if
|
||||||
|
|
||||||
|
if m = 10 then
|
||||||
|
v = to_number(vs)/10
|
||||||
|
end if
|
||||||
|
|
||||||
|
if m = 11 then
|
||||||
|
v = to_number(vs)/100
|
||||||
|
end if
|
||||||
|
|
||||||
|
if p > -1 then
|
||||||
|
prec = tolerance[p]
|
||||||
|
switch p do
|
||||||
|
case 3 then var = v * 0.20
|
||||||
|
case 2 then var = v * 0.10
|
||||||
|
case 1 then var = v * 0.05
|
||||||
|
end switch
|
||||||
|
min_v = v - var
|
||||||
|
max_v = v + var
|
||||||
|
end if
|
||||||
|
|
||||||
|
if v >= 1e6 then
|
||||||
|
return format(fmt,{v/1e6,"Meg Ω",prec,number(min_v/1e6),number(max_v/1e6)})
|
||||||
|
|
||||||
|
elsif v >= 1000 then
|
||||||
|
return format(fmt,{v/1000,"K Ω",prec,number(min_v/1000),number(max_v/1000)})
|
||||||
|
|
||||||
|
else
|
||||||
|
return format(fmt,{v,"Ω",prec,number(min_v),number(max_v)})
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
function Update() -- called when values chg
|
||||||
|
--------------------------------------------------
|
||||||
|
integer t,o,m,p
|
||||||
|
|
||||||
|
-- get selections from combo boxes,
|
||||||
|
t = gtk:get(tens,"active")
|
||||||
|
o = gtk:get(ones,"active") -1
|
||||||
|
m = gtk:get(mult,"active") -1
|
||||||
|
p = gtk:get(tol,"active")
|
||||||
|
|
||||||
|
-- set resistor color bands to match entered values;
|
||||||
|
if t > 0 then
|
||||||
|
gtk:set(resistor[2],"from file",sprintf(wp & "bar%d.jpg",t))
|
||||||
|
end if
|
||||||
|
|
||||||
|
if o > 0 then
|
||||||
|
gtk:set(resistor[3],"from file",sprintf(wp & "bar%d.jpg",o))
|
||||||
|
end if
|
||||||
|
|
||||||
|
if m > 0 then
|
||||||
|
gtk:set(resistor[4],"from file",sprintf(wp & "bar%d.jpg",m))
|
||||||
|
end if
|
||||||
|
|
||||||
|
if p > 0 then
|
||||||
|
gtk:set(resistor[5],"from file",sprintf(wp & "end%d.jpg",p))
|
||||||
|
end if
|
||||||
|
|
||||||
|
-- display value in text form;
|
||||||
|
if t > 0 and o > 0 and m > 0 then
|
||||||
|
gtk:set(valdisp,"text",Format(t,o,m,p))
|
||||||
|
end if
|
||||||
|
|
||||||
|
return 0
|
||||||
|
end function
|
68
eugtk/examples/examples/colornames.ex
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
--# displays the x-color names and samples;
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
constant xcolors = canonical_path("~/demos/resources/xcolors.txt")
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,{
|
||||||
|
{"icon","~/demos/thumbnails/preferences-color.svg"},
|
||||||
|
{"default size",400,800},
|
||||||
|
{"position",GTK_WIN_POS_CENTER}})
|
||||||
|
connect(win,"destroy","Quit")
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,VERTICAL)
|
||||||
|
add(win,panel)
|
||||||
|
|
||||||
|
constant scroller = create(GtkScrolledWindow)
|
||||||
|
pack(panel,scroller,TRUE,TRUE)
|
||||||
|
|
||||||
|
constant rend1 = create(GtkCellRendererText),
|
||||||
|
col1 = create(GtkTreeViewColumn,{
|
||||||
|
{"pack start",rend1},
|
||||||
|
{"title","Name"},
|
||||||
|
{"sort column id",1},
|
||||||
|
{"add attribute",rend1,"text",1}})
|
||||||
|
|
||||||
|
constant rend2 = create(GtkCellRendererText),
|
||||||
|
col2 = create(GtkTreeViewColumn,{
|
||||||
|
{"pack start",rend2},
|
||||||
|
{"title","Color"},
|
||||||
|
{"add attribute",rend2,"background",1}})
|
||||||
|
|
||||||
|
constant store = create(GtkListStore,{gSTR,gSTR,gINT})
|
||||||
|
|
||||||
|
sequence names = read_lines(xcolors)
|
||||||
|
set(store,"data",names)
|
||||||
|
|
||||||
|
constant tv = add(scroller,create(GtkTreeView,{
|
||||||
|
{"model",store},
|
||||||
|
{"headers clickable",TRUE},
|
||||||
|
{"grid lines",GTK_TREE_VIEW_GRID_LINES_BOTH},
|
||||||
|
{"append columns",{col1,col2}}}))
|
||||||
|
|
||||||
|
constant
|
||||||
|
btn1 = create(GtkButton,"gtk-quit","Quit"),
|
||||||
|
btn2 = create(GtkButton,"gtk-refresh","Restore")
|
||||||
|
set(btn2,"tooltip text","Restore original (unsorted) order")
|
||||||
|
|
||||||
|
constant box = add(panel,create(GtkButtonBox,{
|
||||||
|
{"layout",GTK_BUTTONBOX_SPREAD},
|
||||||
|
{"margin top",10},
|
||||||
|
{"margin bottom",10}}))
|
||||||
|
add(box,{btn1,btn2})
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
main()
|
||||||
|
|
||||||
|
-------------------------
|
||||||
|
global function Restore() -- returns list to original order
|
||||||
|
-------------------------
|
||||||
|
set(store,"clear")
|
||||||
|
set(store,"sort column id",UNSORTED)
|
||||||
|
set(store,"data",names)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
1
eugtk/examples/examples/eu.cfg
Normal file
@ -0,0 +1 @@
|
|||||||
|
~/demos
|
154
eugtk/examples/examples/hangman.ex
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
--# Turn over the letters and guess the word game.
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
-- if you don't see yellow and green letters as you click on them,
|
||||||
|
-- try changing your theme - mint doesn't show 'em, most others do.
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include GtkEvents.e
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
-- variables;
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
integer max_tries, ct = 0
|
||||||
|
|
||||||
|
sequence words = read_lines(locate_file("resources/words.txt"))
|
||||||
|
|
||||||
|
object avail, blanks, current_word
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
-- interface;
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
constant win = create(GtkWindow, -- the main window;
|
||||||
|
"border=10,position=1,$destroy=Quit,$key-press-event=LetterSelected")
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,1)
|
||||||
|
add(win,panel)
|
||||||
|
|
||||||
|
constant display = create(GtkLabel) -- for word being guessed;
|
||||||
|
set(display,"font","bold 24")
|
||||||
|
add(panel,display)
|
||||||
|
|
||||||
|
constant lbl1 = create(GtkLabel,"Guess the word") -- for status;
|
||||||
|
set(lbl1,"font","8")
|
||||||
|
add(panel,lbl1)
|
||||||
|
|
||||||
|
constant grid = create(GtkGrid) -- to display button set;
|
||||||
|
add(panel,grid)
|
||||||
|
set(grid,"row spacing",2)
|
||||||
|
set(grid,"column spacing",1)
|
||||||
|
|
||||||
|
object letters = series('a',1,26) -- build an array of buttons;
|
||||||
|
integer x = 1, y = 3, z = 0
|
||||||
|
|
||||||
|
for i = 1 to length(letters) do -- load the letter button grid;
|
||||||
|
letters[i] = create(GtkButton,sprintf("_%s",letters[i]),"LetterSelected",letters[i])
|
||||||
|
set(letters[i],"border",0) set(letters[i],"margin",0)
|
||||||
|
set(grid,"attach",letters[i],x,y,1,1)
|
||||||
|
x += 1
|
||||||
|
if x > 13 then -- move to next line;
|
||||||
|
x = 1 y += 1
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
|
||||||
|
new_word() -- on startup, get a random word and initialize counters;
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
main()
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
procedure new_word() -- selects a random word, resets available letters;
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
current_word = words[rand(length(words))]
|
||||||
|
avail = series('a',1,32,'+') -- set of {'a'...'z'}
|
||||||
|
blanks = repeat('_',length(avail)) -- to hide unguessed letters;
|
||||||
|
ct = 0 -- number of tries;
|
||||||
|
max_tries = 2 * length(current_word)-- number of tries allowed;
|
||||||
|
|
||||||
|
set(display,"markup",FormatWord(current_word))
|
||||||
|
|
||||||
|
for i = 1 to length(letters) do -- reset colors;
|
||||||
|
set(letters[i],"background","white")
|
||||||
|
set(letters[i],"sensitive",TRUE)
|
||||||
|
end for
|
||||||
|
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
global function LetterSelected(atom ctl, atom event) -- event handler;
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
integer key
|
||||||
|
|
||||||
|
-- this function is linked to both keypresses and button clicks,
|
||||||
|
-- so we first need to determine which happened;
|
||||||
|
|
||||||
|
if is_in_range(event,{'a','z'}) then key = event -- button was clicked;
|
||||||
|
else key = events:key(event) -- was keyboard input;
|
||||||
|
end if
|
||||||
|
|
||||||
|
if is_in_list(key,avail) then -- if in set of unused letters
|
||||||
|
ct += 1 -- new guess counts;
|
||||||
|
set(letters[key-'a'+1],"sensitive",FALSE) -- used
|
||||||
|
|
||||||
|
if find(key,current_word) > 0 then
|
||||||
|
set(letters[key-'a'+1],"background","green") -- used in word
|
||||||
|
else
|
||||||
|
set(letters[key-'a'+1],"background","yellow")-- not in word
|
||||||
|
end if
|
||||||
|
|
||||||
|
avail = remove_all(key,avail) -- remove the letter from available set;
|
||||||
|
|
||||||
|
set(display,"markup",FormatWord(current_word))
|
||||||
|
|
||||||
|
if ct > max_tries then -- too many tries, give up;
|
||||||
|
if Question(win,"Sorry",
|
||||||
|
sprintf("The word was <span color='red'>%s</span>",{current_word}),
|
||||||
|
"Play again?") = MB_YES then
|
||||||
|
new_word()
|
||||||
|
else abort(0)
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
function FormatWord(object word) -- handles display and testing for a win;
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
object result = ""
|
||||||
|
|
||||||
|
set(lbl1,"text",sprintf("%d letter word,\n%d guesses left.",
|
||||||
|
{length(current_word),max_tries-ct}))
|
||||||
|
|
||||||
|
-- change 'unguessed' letters to underscores,
|
||||||
|
-- using the still un-tried letters remaining;
|
||||||
|
word = transmute(word,avail,blanks)
|
||||||
|
|
||||||
|
-- add spaces between letters (looks better!);
|
||||||
|
for i = 1 to length(word) do
|
||||||
|
result &= word[i] & ' '
|
||||||
|
end for
|
||||||
|
|
||||||
|
-- if no hidden letters are left, the puzzle is solved!
|
||||||
|
if not find('_',word) then
|
||||||
|
set(display,"markup",sprintf("<span color='green'>%s</span>",{result}))
|
||||||
|
|
||||||
|
if Question(win,"Congratulations!",current_word,
|
||||||
|
sprintf("You guessed it in %d tries!\nYour score is %d\nPlay again?",
|
||||||
|
{ct,100*(length(current_word)/ct)})) = MB_YES then
|
||||||
|
new_word()
|
||||||
|
return FormatWord(current_word)
|
||||||
|
else
|
||||||
|
Info(win,"Thanks!","Thanks","Please play again sometime")
|
||||||
|
abort(0)
|
||||||
|
end if
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
return result
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
403
eugtk/examples/examples/httpd.ex
Executable file
@ -0,0 +1,403 @@
|
|||||||
|
--====================================================================--
|
||||||
|
--# A modified version of Euphoria's httpd.ex by RDS
|
||||||
|
|
||||||
|
-- Httpd.ex can be run stand-alone started from a command line %>eui httpd
|
||||||
|
-- If needed parameters aren't supplied, a usage message will be printed.
|
||||||
|
-- It can also be called from an Eu program using system_exec()
|
||||||
|
-- with parameters and flags included in the command line.
|
||||||
|
--====================================================================--
|
||||||
|
|
||||||
|
--This library is free software; you can redistribute it
|
||||||
|
--and/or modify it under the terms of the GNU Lesser General
|
||||||
|
--Public License as published by the Free Software Foundation;
|
||||||
|
--either version 2 of the License, or (at your option) any later
|
||||||
|
--version.
|
||||||
|
|
||||||
|
--This library is distributed in the hope that it will be useful,
|
||||||
|
--but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
--See the GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
--You should have received a copy of the GNU Lesser General Public
|
||||||
|
--License along with this library; if not, write to the Free Software
|
||||||
|
--Foundation, Inc., 59 Temple Pl, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
include std/socket.e as sock
|
||||||
|
include std/text.e
|
||||||
|
include std/types.e
|
||||||
|
include std/sort.e
|
||||||
|
include std/convert.e
|
||||||
|
include std/sequence.e
|
||||||
|
include std/io.e
|
||||||
|
include std/os.e
|
||||||
|
include std/math.e
|
||||||
|
include std/net/url.e
|
||||||
|
include std/console.e
|
||||||
|
include std/filesys.e
|
||||||
|
include std/datetime.e
|
||||||
|
include std/map.e as m
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
-- END STYLING
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
object server_log = 0, show_hidden = 0, sort_listing = 0, show_request = 0
|
||||||
|
object bind_addr = "127.0.0.1:8080"
|
||||||
|
object doc_root = "."
|
||||||
|
object image_width = "600px"
|
||||||
|
|
||||||
|
m:map mime_types = m:new()
|
||||||
|
|
||||||
|
sequence typs = { -- you may need to add additional types here;
|
||||||
|
{ "htm", "text/html" },
|
||||||
|
{ "html", "text/html" },
|
||||||
|
{ "css", "text/css" },
|
||||||
|
{ "png", "image/png" },
|
||||||
|
{ "jpg", "image/jpeg" },
|
||||||
|
{ "jpeg", "image/jpeg" },
|
||||||
|
{ "gif", "image/gif" },
|
||||||
|
{ "bmp", "image/bmp" },
|
||||||
|
{ "png", "image/png" },
|
||||||
|
{ "svg", "image/svg+xml" },
|
||||||
|
{ "xpm", "image/x-xpixmap"},
|
||||||
|
{ "wma", "audio/x-ms-wma"},
|
||||||
|
{ "wav", "audio/x-wave"},
|
||||||
|
{ "ogg", "audio/x-vorbis+ogg"},
|
||||||
|
{ "mov", "video/quicktime"},
|
||||||
|
{ "vob", "video/mpeg"},
|
||||||
|
{ "mp3", "audio/mpeg"},
|
||||||
|
{ "mp4", "video/mp4"},
|
||||||
|
{ "mpeg", "video/mpeg"},
|
||||||
|
{ "mpg", "video/mpeg"},
|
||||||
|
{ "pdf", "application/pdf"},
|
||||||
|
{ "zip", "application/zip"},
|
||||||
|
$
|
||||||
|
}
|
||||||
|
|
||||||
|
for i = 1 to length(typs) do
|
||||||
|
m:put(mime_types, typs[i][1], typs[i][2])
|
||||||
|
end for
|
||||||
|
|
||||||
|
constant RESPONSE_STRING = """
|
||||||
|
HTTP/1.0 %d
|
||||||
|
Content-Type: %s
|
||||||
|
Connection: close
|
||||||
|
Content-length: %d
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
constant ERROR_404 = """
|
||||||
|
<html>
|
||||||
|
<head><title>404 Not Found</title></head>
|
||||||
|
<body>
|
||||||
|
<h1>404 Not Found</h1>
|
||||||
|
<h3>Sorry!</h3>
|
||||||
|
<p>
|
||||||
|
%s was not found on this server.
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
function SortDirectoriesFirst(object a, object b)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
return compare(b[2],a[2])
|
||||||
|
end function
|
||||||
|
atom directories_first = routine_id("SortDirectoriesFirst")
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
function SortIgnoreCase(object a, object b)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
return compare(upper(a),upper(b))
|
||||||
|
end function
|
||||||
|
atom ignore_case = routine_id("SortIgnoreCase")
|
||||||
|
|
||||||
|
|
||||||
|
-- Styled objects;
|
||||||
|
constant style_header = """<tr class="hdr"><th class="hdr" colspan="4">%s</th></tr>"""
|
||||||
|
constant style_listing = """<td class="list"><a href='%s'><button class="list">%s</button></a></td>"""
|
||||||
|
constant style_directory = """<td class="dir"><a href='%s/'><button class="dir">%s</button></a></td>"""
|
||||||
|
constant style_html = """<td class="html"><a href='%s'><button class="html">%s</button></a></td>"""
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
function create_index(sequence path) -- builds an html index on-the-fly
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
sequence data = sprintf("""
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Eu Server</title>
|
||||||
|
<style type = "text/css">
|
||||||
|
button {width: 100%%;}
|
||||||
|
button.dir {background-color: skyblue;}
|
||||||
|
button.html {background-color: orange;}
|
||||||
|
body {background-image: linear-gradient(180deg, yellow, blue); background-repeat: no-repeat;)
|
||||||
|
</style>
|
||||||
|
<link rel="stylesheet" type="text/css" href="%s.httpd.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
""",{path})
|
||||||
|
|
||||||
|
object files = dir(path), name, tmp
|
||||||
|
|
||||||
|
integer ct = 1
|
||||||
|
|
||||||
|
if atom(files) then return 0 end if
|
||||||
|
|
||||||
|
if sort_listing then
|
||||||
|
files = custom_sort(ignore_case,files)
|
||||||
|
files = custom_sort(directories_first,files)
|
||||||
|
end if
|
||||||
|
|
||||||
|
data &= "\n<table>\n"
|
||||||
|
|
||||||
|
data &= sprintf(style_header,{path})
|
||||||
|
|
||||||
|
for i = 1 to length(files) do
|
||||||
|
|
||||||
|
name = files[i][D_NAME]
|
||||||
|
|
||||||
|
if show_hidden = 0 then
|
||||||
|
if name[1] = '.' then continue end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
if find('d', files[i][D_ATTRIBUTES]) then
|
||||||
|
data &= sprintf(style_directory,{name,name})
|
||||||
|
data &= "\n\t"
|
||||||
|
else
|
||||||
|
tmp = name
|
||||||
|
tmp = split(tmp,'.')
|
||||||
|
if length(tmp) > 1 then
|
||||||
|
tmp = tmp[1]
|
||||||
|
else
|
||||||
|
tmp = name
|
||||||
|
end if
|
||||||
|
-- try to deal with accented chars : ò, for example, in song titles
|
||||||
|
for n = 1 to length(tmp) do
|
||||||
|
if tmp[n] = 195 then
|
||||||
|
tmp = tmp[1..n-1] & sprintf("&#%d;",{tmp[n+1]+64}) & tmp[n+2..$]
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
if match("htm",lower(fileext(name))) then
|
||||||
|
data &= sprintf(style_html,{url:encode(name),name})
|
||||||
|
else
|
||||||
|
data &= sprintf(style_listing, {url:encode(name),name})
|
||||||
|
end if
|
||||||
|
data &= "\n\t"
|
||||||
|
end if
|
||||||
|
|
||||||
|
if remainder(ct,4)=0 then
|
||||||
|
data &= "</tr>\n<tr>"
|
||||||
|
end if
|
||||||
|
ct += 1
|
||||||
|
|
||||||
|
end for
|
||||||
|
|
||||||
|
data &= "</table>\n</body></html>"
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------------
|
||||||
|
procedure handle_request(sock:socket server, sequence client, sequence doc_root=".")
|
||||||
|
------------------------------------------------------------------------------------
|
||||||
|
sock:socket client_sock = client[1]
|
||||||
|
sequence client_addr = client[2]
|
||||||
|
object command,path,content_type,fileinfo,data
|
||||||
|
object request = sock:receive(client_sock,0)
|
||||||
|
object req_time = datetime:format(datetime:now_gmt(),"%Y/%m/%d %H:%M:%S ")
|
||||||
|
integer fn, fo, len, fsize, result_code
|
||||||
|
object fname=0, t1 = 0, t2 = 0
|
||||||
|
|
||||||
|
if atom(request) then
|
||||||
|
return
|
||||||
|
else
|
||||||
|
request = split(request,"\r\n")
|
||||||
|
if show_request then
|
||||||
|
if string(server_log) then
|
||||||
|
append_lines(server_log,request)
|
||||||
|
else
|
||||||
|
display(request)
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
if length(request) >= 1 then
|
||||||
|
command = request[1]
|
||||||
|
end if
|
||||||
|
|
||||||
|
if length(request) >= 2 then
|
||||||
|
path = request[2]
|
||||||
|
end if
|
||||||
|
|
||||||
|
t1 = split(command,' ')
|
||||||
|
t1 = url:decode(t1[2])
|
||||||
|
|
||||||
|
object a = split(doc_root,'/')
|
||||||
|
object b = split(t1,'/')
|
||||||
|
object c = {}
|
||||||
|
|
||||||
|
for i = 1 to length(b) do
|
||||||
|
if i > length(a) then
|
||||||
|
c = b[i..$]
|
||||||
|
exit
|
||||||
|
end if
|
||||||
|
if equal(a[i],b[i]) then
|
||||||
|
else
|
||||||
|
c = b[i..$]
|
||||||
|
exit
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
|
||||||
|
fname = join(a,'/') & '/' & join(c,'/')
|
||||||
|
|
||||||
|
-- for logging;
|
||||||
|
fsize = file_length(fname)
|
||||||
|
|
||||||
|
if string(server_log) then
|
||||||
|
append_lines(server_log,
|
||||||
|
{text:format("[] [] [] []",{req_time,client_addr,fname,fsize})})
|
||||||
|
else
|
||||||
|
display("[] [] [] []",{req_time,client_addr,fname,fsize})
|
||||||
|
end if
|
||||||
|
|
||||||
|
-- we need to handle directories and files differently;
|
||||||
|
|
||||||
|
switch file_type(fname) do
|
||||||
|
|
||||||
|
case 0 then
|
||||||
|
result_code = 404
|
||||||
|
content_type = "text/html"
|
||||||
|
data = sprintf(ERROR_404,{filename(fname)})
|
||||||
|
|
||||||
|
sock:send(client_sock, sprintf(RESPONSE_STRING, {
|
||||||
|
result_code, content_type, length(data)}), 0)
|
||||||
|
sock:send(client_sock, data, 0)
|
||||||
|
|
||||||
|
case 1 then
|
||||||
|
data = read_file(fname)
|
||||||
|
content_type = m:get(mime_types,lower(fileext(fname)),"text/plain")
|
||||||
|
result_code = 200
|
||||||
|
if not equal("ex",fileext(fname)) then
|
||||||
|
sock:send(client_sock, sprintf(RESPONSE_STRING, {
|
||||||
|
result_code, content_type, length(data)}), 0)
|
||||||
|
end if
|
||||||
|
sock:send(client_sock, data, 0)
|
||||||
|
|
||||||
|
|
||||||
|
case 2 then
|
||||||
|
data = create_index(fname)
|
||||||
|
content_type = "text/html"
|
||||||
|
result_code = 200
|
||||||
|
|
||||||
|
sock:send(client_sock, sprintf(RESPONSE_STRING, {
|
||||||
|
result_code, content_type, length(data)}), 0)
|
||||||
|
sock:send(client_sock, data, 0)
|
||||||
|
|
||||||
|
end switch
|
||||||
|
|
||||||
|
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
function server()
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
sequence args = command_line(), starttime
|
||||||
|
|
||||||
|
if length(args) = 2 then
|
||||||
|
show_usage()
|
||||||
|
end if
|
||||||
|
|
||||||
|
display(args)
|
||||||
|
|
||||||
|
integer n_tries = 20
|
||||||
|
integer i = 3
|
||||||
|
while i < length(args) do
|
||||||
|
switch args[i] do
|
||||||
|
case "-h" then show_hidden = 1
|
||||||
|
case "-s" then sort_listing = 1
|
||||||
|
case "-r" then show_request = 1
|
||||||
|
case "-t" then n_tries = to_number(args[i+1])
|
||||||
|
case "-bind" then bind_addr = args[i+1] i += 1
|
||||||
|
case "-root" then doc_root = args[i+1] i += 1
|
||||||
|
case "-log" then server_log = args[i+1] i += 1
|
||||||
|
case else -- fail on invalid option;
|
||||||
|
printf(1,"Unknown option: %s\n",{args[i]})
|
||||||
|
show_usage()
|
||||||
|
abort(1)
|
||||||
|
end switch
|
||||||
|
i += 1
|
||||||
|
end while
|
||||||
|
|
||||||
|
integer ct = 1
|
||||||
|
label "retry"
|
||||||
|
|
||||||
|
chdir(doc_root)
|
||||||
|
|
||||||
|
sock:socket server = sock:create(sock:AF_INET, sock:SOCK_STREAM, 0)
|
||||||
|
|
||||||
|
if sock:bind(server,bind_addr) != sock:OK then -- retry a few times;
|
||||||
|
printf(1,"Could not bind %s, error=%d try=%d\n",
|
||||||
|
{bind_addr, sock:error_code(),ct})
|
||||||
|
sleep(2)
|
||||||
|
ct += 1
|
||||||
|
if ct >= n_tries then -- fail after too many tries;
|
||||||
|
printf(1,"Failed to bind []\n",{bind_addr})
|
||||||
|
if string(server_log) then
|
||||||
|
append_lines(server_log,
|
||||||
|
{sprintf("Failed to bind %s\n",{bind_addr}),
|
||||||
|
sprintf("Tried %d times",ct)})
|
||||||
|
end if
|
||||||
|
abort(ct)
|
||||||
|
end if
|
||||||
|
goto "retry"
|
||||||
|
end if
|
||||||
|
|
||||||
|
starttime = datetime:format(datetime:now_gmt(),"%Y/%m/%d %H:%M:%S ")
|
||||||
|
|
||||||
|
printf(1,"Listening for request on %s\n",{bind_addr})
|
||||||
|
if string(server_log) then
|
||||||
|
append_lines(server_log,
|
||||||
|
{sprintf("-----SERVER STARTED %s",{starttime}),
|
||||||
|
sprintf("-----Listening for request on %s",{bind_addr})})
|
||||||
|
end if
|
||||||
|
|
||||||
|
while sock:listen(server,10) = sock:OK do
|
||||||
|
object client = sock:accept(server)
|
||||||
|
if sequence(client) then
|
||||||
|
handle_request(server,client,doc_root)
|
||||||
|
sock:close(client[1])
|
||||||
|
end if
|
||||||
|
end while
|
||||||
|
|
||||||
|
sock:close(server)
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
procedure show_usage()
|
||||||
|
----------------------
|
||||||
|
puts(1, `
|
||||||
|
|
||||||
|
Usage: httpd.ex
|
||||||
|
-bind ip_address:port
|
||||||
|
-root document_root
|
||||||
|
[-h show_hidden files]
|
||||||
|
[-s sort listing]
|
||||||
|
[-r show full request in log]
|
||||||
|
[-t number of tries to obtain port]
|
||||||
|
[-log name of log file]
|
||||||
|
short options must come before long options
|
||||||
|
`)
|
||||||
|
|
||||||
|
puts(1,"\n")
|
||||||
|
abort(0)
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
server()
|
||||||
|
------------------------
|
||||||
|
--© 2014 by Irv Mullins
|
||||||
|
------------------------
|
641
eugtk/examples/examples/icon_E.e
Normal file
@ -0,0 +1,641 @@
|
|||||||
|
|
||||||
|
namespace e
|
||||||
|
|
||||||
|
-- exports e:icon
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
constant e_xpm = {
|
||||||
|
"176 250 379 2",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #000001",
|
||||||
|
"@ c #000102",
|
||||||
|
"# c #000103",
|
||||||
|
"$ c #000204",
|
||||||
|
"% c #000205",
|
||||||
|
"& c #000306",
|
||||||
|
"* c #000307",
|
||||||
|
"= c #000408",
|
||||||
|
"- c #000409",
|
||||||
|
"; c #00050A",
|
||||||
|
"> c #00050B",
|
||||||
|
", c #00060C",
|
||||||
|
"' c #00060D",
|
||||||
|
") c #00070E",
|
||||||
|
"! c #00070F",
|
||||||
|
"~ c #000810",
|
||||||
|
"{ c #000811",
|
||||||
|
"] c #000912",
|
||||||
|
"^ c #000913",
|
||||||
|
"/ c #000A14",
|
||||||
|
"( c #000A15",
|
||||||
|
"_ c #000B16",
|
||||||
|
": c #000B17",
|
||||||
|
"< c #000C18",
|
||||||
|
"[ c #000C19",
|
||||||
|
"} c #000D1A",
|
||||||
|
"| c #000D1B",
|
||||||
|
"1 c #000E1C",
|
||||||
|
"2 c #000E1D",
|
||||||
|
"3 c #000F1E",
|
||||||
|
"4 c #000F1F",
|
||||||
|
"5 c #001020",
|
||||||
|
"6 c #001021",
|
||||||
|
"7 c #001122",
|
||||||
|
"8 c #001123",
|
||||||
|
"9 c #001224",
|
||||||
|
"0 c #001225",
|
||||||
|
"a c #001326",
|
||||||
|
"b c #001327",
|
||||||
|
"c c #001428",
|
||||||
|
"d c #001429",
|
||||||
|
"e c #01152A",
|
||||||
|
"f c #01152B",
|
||||||
|
"g c #01162C",
|
||||||
|
"h c #01162D",
|
||||||
|
"i c #01172E",
|
||||||
|
"j c #01172F",
|
||||||
|
"k c #011830",
|
||||||
|
"l c #011831",
|
||||||
|
"m c #011932",
|
||||||
|
"n c #011933",
|
||||||
|
"o c #011A34",
|
||||||
|
"p c #011A35",
|
||||||
|
"q c #011B36",
|
||||||
|
"r c #011B37",
|
||||||
|
"s c #011C38",
|
||||||
|
"t c #011C39",
|
||||||
|
"u c #011D3A",
|
||||||
|
"v c #011D3B",
|
||||||
|
"w c #011E3C",
|
||||||
|
"x c #011E3D",
|
||||||
|
"y c #011F3E",
|
||||||
|
"z c #01203F",
|
||||||
|
"A c #012040",
|
||||||
|
"B c #012141",
|
||||||
|
"C c #012142",
|
||||||
|
"D c #012243",
|
||||||
|
"E c #012244",
|
||||||
|
"F c #012345",
|
||||||
|
"G c #012346",
|
||||||
|
"H c #012447",
|
||||||
|
"I c #012448",
|
||||||
|
"J c #012549",
|
||||||
|
"K c #01254A",
|
||||||
|
"L c #01264B",
|
||||||
|
"M c #01264C",
|
||||||
|
"N c #01274D",
|
||||||
|
"O c #01274E",
|
||||||
|
"P c #01284F",
|
||||||
|
"Q c #012850",
|
||||||
|
"R c #012951",
|
||||||
|
"S c #012952",
|
||||||
|
"T c #022A53",
|
||||||
|
"U c #022A54",
|
||||||
|
"V c #022B55",
|
||||||
|
"W c #022B56",
|
||||||
|
"X c #022C57",
|
||||||
|
"Y c #022C58",
|
||||||
|
"Z c #022D59",
|
||||||
|
"` c #022D5A",
|
||||||
|
" . c #022E5B",
|
||||||
|
".. c #022E5C",
|
||||||
|
"+. c #022F5D",
|
||||||
|
"@. c #022F5E",
|
||||||
|
"#. c #02305F",
|
||||||
|
"$. c #023060",
|
||||||
|
"%. c #023161",
|
||||||
|
"&. c #023162",
|
||||||
|
"*. c #023263",
|
||||||
|
"=. c #023264",
|
||||||
|
"-. c #023365",
|
||||||
|
";. c #023366",
|
||||||
|
">. c #023467",
|
||||||
|
",. c #023569",
|
||||||
|
"'. c #02356A",
|
||||||
|
"). c #02366B",
|
||||||
|
"!. c #02366C",
|
||||||
|
"~. c #02376D",
|
||||||
|
"{. c #02376E",
|
||||||
|
"]. c #02386F",
|
||||||
|
"^. c #023870",
|
||||||
|
"/. c #023468",
|
||||||
|
"(. c #023971",
|
||||||
|
"_. c #023972",
|
||||||
|
":. c #023A74",
|
||||||
|
"<. c #023B75",
|
||||||
|
"[. c #023B76",
|
||||||
|
"}. c #023C77",
|
||||||
|
"|. c #023C78",
|
||||||
|
"1. c #023D79",
|
||||||
|
"2. c #023A73",
|
||||||
|
"3. c #023D7A",
|
||||||
|
"4. c #023E7B",
|
||||||
|
"5. c #023E7C",
|
||||||
|
"6. c #023F7D",
|
||||||
|
"7. c #033F7D",
|
||||||
|
"8. c #03407E",
|
||||||
|
"9. c #03407F",
|
||||||
|
"0. c #034180",
|
||||||
|
"a. c #034181",
|
||||||
|
"b. c #034283",
|
||||||
|
"c. c #034384",
|
||||||
|
"d. c #034385",
|
||||||
|
"e. c #034486",
|
||||||
|
"f. c #034487",
|
||||||
|
"g. c #034588",
|
||||||
|
"h. c #034589",
|
||||||
|
"i. c #03468A",
|
||||||
|
"j. c #034282",
|
||||||
|
"k. c #03468B",
|
||||||
|
"l. c #03478D",
|
||||||
|
"m. c #03488E",
|
||||||
|
"n. c #03488F",
|
||||||
|
"o. c #034990",
|
||||||
|
"p. c #034991",
|
||||||
|
"q. c #034A92",
|
||||||
|
"r. c #034A93",
|
||||||
|
"s. c #03478C",
|
||||||
|
"t. c #034B94",
|
||||||
|
"u. c #034B95",
|
||||||
|
"v. c #034C96",
|
||||||
|
"w. c #034C97",
|
||||||
|
"x. c #034D98",
|
||||||
|
"y. c #034D99",
|
||||||
|
"z. c #034E9A",
|
||||||
|
"A. c #034E9B",
|
||||||
|
"B. c #034F9D",
|
||||||
|
"C. c #03509E",
|
||||||
|
"D. c #03509F",
|
||||||
|
"E. c #0351A0",
|
||||||
|
"F. c #0351A1",
|
||||||
|
"G. c #0352A2",
|
||||||
|
"H. c #0352A3",
|
||||||
|
"I. c #034F9C",
|
||||||
|
"J. c #070707",
|
||||||
|
"K. c #080707",
|
||||||
|
"L. c #080708",
|
||||||
|
"M. c #070807",
|
||||||
|
"N. c #070708",
|
||||||
|
"O. c #070808",
|
||||||
|
"P. c #080808",
|
||||||
|
"Q. c #080807",
|
||||||
|
"R. c #0B0C0B",
|
||||||
|
"S. c #0B0C0C",
|
||||||
|
"T. c #0B0B0B",
|
||||||
|
"U. c #0C0C0B",
|
||||||
|
"V. c #0B0B0C",
|
||||||
|
"W. c #0C0B0B",
|
||||||
|
"X. c #0C0B0C",
|
||||||
|
"Y. c #0C0C0C",
|
||||||
|
"Z. c #0F0F0F",
|
||||||
|
"`. c #0F0F10",
|
||||||
|
" + c #0F100F",
|
||||||
|
".+ c #131313",
|
||||||
|
"++ c #131312",
|
||||||
|
"@+ c #131212",
|
||||||
|
"#+ c #131213",
|
||||||
|
"$+ c #121313",
|
||||||
|
"%+ c #121213",
|
||||||
|
"&+ c #121312",
|
||||||
|
"*+ c #171616",
|
||||||
|
"=+ c #161717",
|
||||||
|
"-+ c #171617",
|
||||||
|
";+ c #171716",
|
||||||
|
">+ c #161617",
|
||||||
|
",+ c #171717",
|
||||||
|
"'+ c #161716",
|
||||||
|
")+ c #161616",
|
||||||
|
"!+ c #1A1A1B",
|
||||||
|
"~+ c #1A1A1A",
|
||||||
|
"{+ c #1B1B1A",
|
||||||
|
"]+ c #1A1B1A",
|
||||||
|
"^+ c #1B1A1A",
|
||||||
|
"/+ c #1A1B1B",
|
||||||
|
"(+ c #1B1A1B",
|
||||||
|
"_+ c #1B1B1B",
|
||||||
|
":+ c #1E1E1E",
|
||||||
|
"<+ c #1E1E1F",
|
||||||
|
"[+ c #1E1F1E",
|
||||||
|
"}+ c #1F1E1E",
|
||||||
|
"|+ c #222222",
|
||||||
|
"1+ c #212222",
|
||||||
|
"2+ c #222221",
|
||||||
|
"3+ c #222122",
|
||||||
|
"4+ c #212122",
|
||||||
|
"5+ c #212221",
|
||||||
|
"6+ c #222121",
|
||||||
|
"7+ c #212121",
|
||||||
|
"8+ c #252626",
|
||||||
|
"9+ c #262526",
|
||||||
|
"0+ c #262525",
|
||||||
|
"a+ c #252525",
|
||||||
|
"b+ c #262626",
|
||||||
|
"c+ c #252625",
|
||||||
|
"d+ c #262625",
|
||||||
|
"e+ c #252526",
|
||||||
|
"f+ c #1E1F1F",
|
||||||
|
"g+ c #2A2929",
|
||||||
|
"h+ c #292929",
|
||||||
|
"i+ c #2A2A29",
|
||||||
|
"j+ c #292A2A",
|
||||||
|
"k+ c #29292A",
|
||||||
|
"l+ c #2A2A2A",
|
||||||
|
"m+ c #292A29",
|
||||||
|
"n+ c #2E2D2D",
|
||||||
|
"o+ c #2D2D2D",
|
||||||
|
"p+ c #2D2D2E",
|
||||||
|
"q+ c #2D2E2D",
|
||||||
|
"r+ c #2E2E2D",
|
||||||
|
"s+ c #2D2E2E",
|
||||||
|
"t+ c #1F1E1F",
|
||||||
|
"u+ c #313131",
|
||||||
|
"v+ c #313130",
|
||||||
|
"w+ c #303130",
|
||||||
|
"x+ c #2A292A",
|
||||||
|
"y+ c #343434",
|
||||||
|
"z+ c #353535",
|
||||||
|
"A+ c #353534",
|
||||||
|
"B+ c #343435",
|
||||||
|
"C+ c #353434",
|
||||||
|
"D+ c #343534",
|
||||||
|
"E+ c #303131",
|
||||||
|
"F+ c #393839",
|
||||||
|
"G+ c #393938",
|
||||||
|
"H+ c #383839",
|
||||||
|
"I+ c #393838",
|
||||||
|
"J+ c #383938",
|
||||||
|
"K+ c #313231",
|
||||||
|
"L+ c #353435",
|
||||||
|
"M+ c #3C3C3C",
|
||||||
|
"N+ c #3D3D3C",
|
||||||
|
"O+ c #2E2D2E",
|
||||||
|
"P+ c #1F1F1E",
|
||||||
|
"Q+ c #1F1F1F",
|
||||||
|
"R+ c #403F40",
|
||||||
|
"S+ c #404040",
|
||||||
|
"T+ c #3C3C3D",
|
||||||
|
"U+ c #383939",
|
||||||
|
"V+ c #343535",
|
||||||
|
"W+ c #323131",
|
||||||
|
"X+ c #303031",
|
||||||
|
"Y+ c #444344",
|
||||||
|
"Z+ c #414040",
|
||||||
|
"`+ c #404140",
|
||||||
|
" @ c #3C3D3C",
|
||||||
|
".@ c #3D3C3D",
|
||||||
|
"+@ c #100F0F",
|
||||||
|
"@@ c #0572E2",
|
||||||
|
"#@ c #0571E0",
|
||||||
|
"$@ c #0570DD",
|
||||||
|
"%@ c #056FDB",
|
||||||
|
"&@ c #056ED9",
|
||||||
|
"*@ c #056CD6",
|
||||||
|
"=@ c #056BD4",
|
||||||
|
"-@ c #056AD2",
|
||||||
|
";@ c #0469CF",
|
||||||
|
">@ c #0468CD",
|
||||||
|
",@ c #0467CB",
|
||||||
|
"'@ c #0466C9",
|
||||||
|
")@ c #0465C7",
|
||||||
|
"!@ c #0464C5",
|
||||||
|
"~@ c #0463C3",
|
||||||
|
"{@ c #0462C2",
|
||||||
|
"]@ c #0461C0",
|
||||||
|
"^@ c #0461BF",
|
||||||
|
"/@ c #0460BD",
|
||||||
|
"(@ c #045FBC",
|
||||||
|
"_@ c #045EBB",
|
||||||
|
":@ c #045EBA",
|
||||||
|
"<@ c #045DB9",
|
||||||
|
"[@ c #045DB8",
|
||||||
|
"}@ c #045CB7",
|
||||||
|
"|@ c #045CB6",
|
||||||
|
"1@ c #045BB5",
|
||||||
|
"2@ c #045BB4",
|
||||||
|
"3@ c #045AB3",
|
||||||
|
"4@ c #045AB2",
|
||||||
|
"5@ c #0459B0",
|
||||||
|
"6@ c #0458AF",
|
||||||
|
"7@ c #0457AD",
|
||||||
|
"8@ c #0456AB",
|
||||||
|
"9@ c #0455A9",
|
||||||
|
"0@ c #0354A6",
|
||||||
|
"a@ c #313232",
|
||||||
|
"b@ c #0570DE",
|
||||||
|
"c@ c #056FDC",
|
||||||
|
"d@ c #056DD7",
|
||||||
|
"e@ c #0466CA",
|
||||||
|
"f@ c #0465C8",
|
||||||
|
"g@ c #0464C6",
|
||||||
|
"h@ c #0463C4",
|
||||||
|
"i@ c #0460BE",
|
||||||
|
"j@ c #0459B1",
|
||||||
|
"k@ c #0458AE",
|
||||||
|
"l@ c #0454A7",
|
||||||
|
"m@ c #0353A5",
|
||||||
|
"n@ c #056DD8",
|
||||||
|
"o@ c #056CD5",
|
||||||
|
"p@ c #056BD3",
|
||||||
|
"q@ c #0469D0",
|
||||||
|
"r@ c #0462C1",
|
||||||
|
"s@ c #0457AC",
|
||||||
|
"t@ c #0456AA",
|
||||||
|
"u@ c #0353A4",
|
||||||
|
"v@ c #393939",
|
||||||
|
"w@ c #056AD1",
|
||||||
|
"x@ c #0468CE",
|
||||||
|
"y@ c #0455A8",
|
||||||
|
"z@ c #313031",
|
||||||
|
"A@ c #383838",
|
||||||
|
"B@ c #056EDA",
|
||||||
|
"C@ c #0467CC",
|
||||||
|
"D@ c #100F10",
|
||||||
|
"E@ c #0571DF",
|
||||||
|
"F@ c #0573E3",
|
||||||
|
"G@ c #0572E1",
|
||||||
|
"H@ c #3C3D3D",
|
||||||
|
"I@ c #40403F",
|
||||||
|
"J@ c #444444",
|
||||||
|
"K@ c #434444",
|
||||||
|
"L@ c #444343",
|
||||||
|
"M@ c #484748",
|
||||||
|
"N@ c #434344",
|
||||||
|
"O@ c #484847",
|
||||||
|
"P@ c #484747",
|
||||||
|
"Q@ c #444443",
|
||||||
|
"R@ c #474848",
|
||||||
|
"S@ c #4C4B4C",
|
||||||
|
"T@ c #484848",
|
||||||
|
"U@ c #474747",
|
||||||
|
"V@ c #4B4C4B",
|
||||||
|
"W@ c #4B4B4B",
|
||||||
|
"X@ c #474847",
|
||||||
|
"Y@ c #4C4C4B",
|
||||||
|
"Z@ c #4F4F4F",
|
||||||
|
"`@ c #4B4B4C",
|
||||||
|
" # c #3D3D3D",
|
||||||
|
".# c #4C4B4B",
|
||||||
|
"+# c #474748",
|
||||||
|
"@# c #3D3C3C",
|
||||||
|
"## c #434343",
|
||||||
|
"$# c #2E2E2E",
|
||||||
|
"%# c #0F1010",
|
||||||
|
"&# c #10100F",
|
||||||
|
"*# c #313132",
|
||||||
|
"=# c #313030",
|
||||||
|
"-# c #121212",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + @ @ @ @ @ @ @ @ @ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @ @ @ @ @ @ @ @ @ + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # # # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ # # # # # # # # @ @ @ @ @ @ + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + @ @ @ @ # # # # $ $ $ $ $ % % % % % % % % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % % % % % % % % $ $ $ $ $ # # # # @ @ @ @ + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ @ # # # # $ $ $ % % % % % & & & & & & & * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * & & & & & & & % % % % % $ $ $ # # # # @ @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ @ # # $ $ $ % % % & & & * * * * * = = = = = = - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - = = = = = = * * * * * & & & % % % $ $ $ # # @ @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ # # $ $ $ % % & & * * * = = = - - - - ; ; ; ; ; ; > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ; ; ; ; ; ; - - - - = = = * * * & & % % $ $ $ # # @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ # # $ $ % % & & * * = = - - ; ; > > > , , , ' ' ' ' ' ' ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ' ' ' ' ' ' , , , > > > ; ; - - = = * * & & % % $ $ # # @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ # # $ $ % % & * * = = - ; ; > > , ' ' ) ) ) ! ! ! ~ ~ ~ ~ ~ ~ { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { ~ ~ ~ ~ ~ ~ ! ! ! ) ) ) ' ' , > > ; ; - = = * * & % % $ $ # # @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ @ # # $ $ % & & * = - - ; > , , ' ) ) ! ! ~ ~ { { ] ] ] ^ ^ ^ ^ ^ ^ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / ^ ^ ^ ^ ^ ^ ] ] ] { { ~ ~ ! ! ) ) ' , , > ; - - = * & & % $ $ # # @ @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ @ # $ $ % & & * = - ; ; > , ' ) ! ~ ~ { ] ^ ^ / / ( ( _ _ _ : : : : : : < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < : : : : : : _ _ _ ( ( / / ^ ^ ] { ~ ~ ! ) ' , > ; ; - = * & & % $ $ # @ @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # # $ $ % & * * = - ; > , ' ) ! ~ { ] ^ / ( _ _ : < < [ [ } } } | | | | | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | | | | | } } } [ [ < < : _ _ ( / ^ ] { ~ ! ) ' , > ; - = * * & % $ $ # # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . + + @ @ # # $ $ % & * = - ; > , ' ! ~ { ] ^ ( _ : < [ } } | 1 2 2 3 3 4 4 4 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 4 4 4 3 3 2 2 1 | } } [ < : _ ( ^ ] { ~ ! ' , > ; - = * & % $ $ # # @ @ + + . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ $ % & * = - ; , ' ) ~ { ] / ( _ < [ } | 2 3 4 5 5 6 7 7 8 8 9 9 0 0 0 0 0 a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a 0 0 0 0 0 9 9 8 8 7 7 6 5 5 4 3 2 | } [ < _ ( / ] { ~ ) ' , ; - = * & % $ $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ $ % & * = - > , ' ! ~ ] ^ ( _ < } | 1 3 4 5 7 8 9 0 a a b c c d d d e e e e e f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f e e e e e d d d c c b a a 0 9 8 7 5 4 3 1 | } < _ ( ^ ] ~ ! ' , > - = * & % $ $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ $ % & * = ; > , ) ~ { ^ ( : < } 1 3 4 6 8 9 a b c e f g g h i j j k k k l l l l l m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m l l l l l k k k j j i h g g f e c b a 9 8 6 4 3 1 } < : ( ^ { ~ ) , > ; = * & % $ $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . + + @ @ # # $ % & * = ; > ' ) ~ ] / ( : [ | 2 4 6 8 0 b d e g h j k l m n o o p p q q r r r r r s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s r r r r r q q p p o o n m l k j h g e d b 0 8 6 4 2 | [ : ( / ] ~ ) ' > ; = * & % $ # # @ @ + + . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ % & * = - > , ) ~ ] / _ < } 2 4 6 8 a c e g i k l n o q r s t u v w w x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x w w v u t s r q o n l k i g e c a 8 6 4 2 } < _ / ] ~ ) , > - = * & % $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & * = - > , ) ~ ] / : [ | 3 5 8 a c f h j m o q s u v x y y z A B C D D E E F F F F F G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G F F F F F E E D D C B A z y y x v u s q o m j h f c 0 8 5 3 | [ : / ] ~ ) , > - = * % % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . + + + @ # # $ % & = - ; , ) ~ ] / : [ 1 4 6 9 b e h j m p r u w y z B D E G H I J K K L M M M N N N N N N O O O O O O O O N N N N N N N N N N N N N N N N N N N N M M M M L L L K K J I H G F D C A y x v t r o m j g d b 9 6 3 1 [ : / ] ~ ) , ; - * & % $ # # @ + + + . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & * = ; , ' ~ ] / : [ 1 4 7 0 c f i l o r u x z B D G I K L N O P Q R S T T U U V V V V W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W V V V V U U T T S R Q P O N L J I G D B z x u r o l i f c 0 7 4 1 [ : / ] ! ' , ; = * & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . + + + @ # # $ % & = - > ' ! { / _ [ 1 4 7 0 d g j n q t x z C F H K M O Q S U V X Y Z ` . .....+.+.+.+.+.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.+.+.+.+.+..... . .` Z Y X V U S Q O M K H F C z x t q n j g c 0 7 4 1 [ _ ^ { ! ' > - = & % $ # # @ + + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & * - ; , ) ~ ^ ( < | 3 7 0 d g k o s v y B F I L O R U W Y ` ..@.#.$.%.&.*.=.=.-.-.;.;.;.;.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.;.;.;.;.-.-.=.=.*.&.%.$.#.@...` Y W U R O L I F B y v s o k g d 0 7 3 | < ( ^ ~ ) , ; - * & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % * = ; > ' ~ ] ( : | 3 6 0 d g k o s x A D H L P S V Y .@.$.&.=.;.>.,.'.).!.~.~.{.{.].].].].^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.].].].].{.{.~.~.!.).'.,.>.;.=.&.$.@. .Y V S P L H D z w s o k g d 0 6 3 } : ( ] ! ' > - = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + + @ # $ % & * - ; , ) { ^ _ [ 2 5 9 c g k o t x A F J N R V Z ..#.&.-./.'.!.{.^.(._.:.<.<.[.}.}.}.|.|.|.|.|.|.1.1.1.1.1.1.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.}.[.[.<.:.:.2._.^.].~.).,.>.=.&.#. .Y U Q N I E A x s o k g c 9 5 1 [ _ ^ { ) , ; - * & % $ # @ + + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & = - > ' ~ ] ( < | 4 8 b f j o s x B F K P T X .#.*.>.'.~.^._.:.[.|.3.4.5.6.7.8.8.9.9.0.0.0.0.0.0.0.a.a.a.a.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.9.9.8.8.8.7.6.5.4.3.1.}.<.2.(.].!.,.;.&.#. .X S O J F A x s n j f a 7 4 | < ( ] ~ ' > - = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + @ # # $ & * = ; , ) { / : } 2 6 0 e i n s w A F K P U Z @.&.;.'.{.(.:.}.3.5.8.9.a.b.c.d.e.f.f.g.g.h.h.h.h.h.h.h.i.i.i.i.i.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.g.g.g.g.f.f.e.e.d.c.b.j.0.9.7.5.1.}.:.^.~.,.-.%.+.Y U P K F A w r m i d 0 6 2 } _ ^ { ) , ; = * % $ # # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + @ # $ % & * - > ' ! ] ( < 1 4 9 c g l q v z F K P V ` #.=./.~.(.<.1.5.8.a.c.e.g.i.k.l.m.n.n.o.p.p.p.q.q.q.q.q.q.r.r.r.r.r.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.p.p.p.p.o.o.n.n.m.l.s.i.h.f.d.b.0.7.4.|.:.^.!./.*.@.Z U P J E z v q l g b 8 4 | < ( ] ! ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & = ; , ) ~ ^ _ } 2 6 a e j o u y D J P U ` #.-.'.].:.|.5.9.b.e.h.s.m.o.q.t.u.v.w.x.y.y.z.z.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.z.z.z.z.z.z.z.z.z.z.y.y.y.y.x.x.w.v.v.t.r.q.o.m.s.i.f.c.a.8.4.}._.~.,.*.@.Z T O I D y t o j e 0 6 2 [ _ ^ ~ ) > - = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ @ # $ % * = ; , ! { / < | 4 8 c h m r x B H N T Z #.-.'.^.<.3.7.j.e.i.l.o.r.u.x.z.A.B.C.D.E.F.F.G.G.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.G.G.G.G.G.G.G.G.G.G.F.F.F.F.E.E.D.C.B.I.A.y.x.v.t.p.m.k.g.c.0.6.|.2.{.,.*.+.Y S M G A w q l g b 8 4 | : / { ) , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ # # % & * - > ' ! ] ( [ 2 6 0 e j o u z F L R X +.*.'.].J.J.J.K.J.L.M.N.L.O.J.L.M.O.L.K.K.P.Q.N.O.Q.L.P.Q.N.M.L.Q.Q.N.N.Q.M.P.Q.K.J.Q.J.L.P.K.P.P.N.P.J.N.M.K.N.O.J.J.J.Q.L.N.L.N.Q.O.M.L.L.P.M.L.P.O.J.Q.N.P.J.{./.&...W Q K E y t o i d 0 5 1 < ( ] ! ' > - * & $ # # @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ # $ % & = - > ) ~ ^ _ } 3 7 b g l r x C I O V .&./.].<.J.R.S.T.R.U.T.T.V.V.V.V.T.W.R.U.R.T.X.T.V.T.R.V.W.V.X.S.R.W.T.X.S.T.X.V.T.V.T.T.V.T.T.R.T.T.X.V.T.T.Y.V.W.T.U.T.T.R.R.T.V.T.T.R.T.W.W.V.T.V.T.V.S.W.S.M.2.!.;.$.` T N H A v q k f a 7 2 } _ ^ ~ ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + + @ # $ % & = ; , ) { / < | 4 9 d i o t y F L S Z #.;.~.:.3.Q.W.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.`.Z. +Z.Z.Z. +Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.T.L.}.(.'.=.+.X Q J D y s m h c 8 4 | : / { ) , ; = & % $ # @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ @ # $ % * = ; , ! ] ( < 1 6 0 e k q w B I O V ..*.'.(.|.8.N.W.Z..+++@+#+$+%+.+.+&+.+#+.+#+.+%+%+++$+++.+$+.+.+#+++#+@+.+.+.+.+++.+.+.+.+#+.+.+++#+.+$+.+$+++#+++.+%+.+.+.+%+.+.+.+.+.+.+#+++#+.+@+.+++.+#+.+Z.V.P.4.<.{.>.$.Z T M F z u o i d 9 5 | < / { ) , ; = & % $ # @ + + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ' ! ] _ [ 2 7 b g l r y D K R Y #.;.{.<.5.j.L.W.Z.$+*+=+-+;+>+,+-+;+'+)+,+*+'+,+'+)+;+;+,+)+-+-+;+=+;+=+,+;+*+=+;+;+>+,+=+,+,+*+>+'+-+,+,+)+'+,+,+=+;+-+;+)+'+;+,+-+)+=+'+,+'+'+,+=+,+'+;+=+.+Z.T.O.7.|.(.'.*...V O H B v p k e 0 6 1 < ( ] ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # # $ & * - > ' ~ ^ _ } 3 8 c h n t z G N U .*.'._.1.9.e.J.T.Z.++;+!+~+~+!+{+]+^+/+!+]+(+^+!+^+_+]+^+^+^+/+]+{+_+^+/+^+!+^+/+]+^+~+~+(+~+~+]+~+!+{+!+/+]+!+/+~+~+]+{+/+]+!+]+_+!+^+~+~+]+{+/+{+~+!+~+!+)+.+`.R.Q.a.4.:.~.;.@.X Q J C x r l f a 6 2 [ ( ] ! ' ; - * % $ # @ @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & * - > ) { / : | 4 9 d j p v B H P W @.-.~.:.5.b.i.Q.R.Z..+'+^+:+:+:+:+:+<+[+[+}+:+:+:+[+:+:+:+:+:+:+:+:+:+:+:+:+[+:+:+:+:+:+:+:+<+:+:+:+:+:+:+[+[+:+:+[+:+<+:+:+<+:+:+}+}+:+:+:+<+<+[+:+:+:+<+~+=+.+Z.T.K.b.6.[.]./.$.Z S L E y s m g b 7 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & = ; , ) { / < 1 5 0 e k q w C J R Y $./.].}.8.e.l.L.W.Z..+*+]+:+|+|+|+|+|+|+|+1+1+|+|+|+2+|+3+2+1+|+|+|+|+4+|+|+3+3+3+|+|+3+3+5+|+6+2+|+|+1+1+3+2+|+|+|+|+|+1+|+|+3+|+4+3+7+5+|+|+|+|+|+|+|+:+!+,+&+Z.T.N.d.8.|.(.,.&.` T M F y t n h c 8 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & = ; , ! { ( < 1 6 a f l r y E L S ` &.'._.3.a.h.o.M.T.Z..+=+{+:+1+8+9+0+a+b+b+c+c+d+8+e+8+8+d+e+9+d+0+0+9+8+0+0+0+d+a+d+8+a+d+b+d+d+b+c+c+8+8+c+a+9+b+0+d+a+c+8+9+b+8+8+d+d+8+d+b+8+c+0+d+|+f+~+,+.+Z.V.P.f.0.1._.'.*. .U N G z t n h c 8 3 } _ ^ ~ ' > - * & $ # # @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & = ; , ! ] ( [ 2 7 b g m s y F M U ..=.!.:.5.c.k.r.Q.R.Z..+=+/+:+1+c+g+h+h+i+j+j+k+h+h+k+k+l+g+h+m+m+h+h+i+g+h+i+l+h+j+m+k+h+h+g+m+l+m+m+h+h+h+h+i+k+l+k+m+g+h+j+g+m+g+m+k+h+h+m+m+g+j+j+0+|+:+!+;+#+Z.T.J.g.a.3.2.).=...V N G z u o i c 8 4 } : ^ ~ ' > - * & % # # @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % * = ; ' ! ] ( [ 3 7 b h n t z G O W @.;.{.[.8.e.m.v.P.V.Z..+;+!+:+|+0+g+n+o+n+o+n+o+o+p+q+o+o+p+o+o+o+o+o+o+o+n+o+o+n+o+o+p+o+o+o+o+r+p+o+q+o+q+o+n+o+o+s+p+q+o+o+o+o+p+o+o+o+p+o+o+n+o+l+b+|+[+^+,+.+Z.R.N.g.a.4.2.!.=...V O G A u o i d 8 4 | : ^ ~ ) > - * & % # # @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % * = ; ' ! ] _ } 3 8 c i o u A H P X #.>.^.|.9.g.o.x.P.T.Z..+*+~+t+|+9+h+o+u+u+v+u+u+w+u+u+u+u+v+u+u+v+u+u+o+i+m+g+m+m+i+g+j+i+h+g+m+l+l+g+k+x+h+g+j+i+x+x+m+k+g+h+g+k+j+h+g+i+i+i+m+k+j+l+9+|+:+!+)+$+Z.R.L.g.a.4.2.!.=...V O G A u o i c 8 4 | : ^ ~ ) > - * & % # # @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + @ @ # $ % * - > ' ~ ^ _ } 3 8 c i o v B I Q Y $.,.(.3.a.i.q.z.Q.T.Z..+,+/+:+|+a+h+o+u+y+z+z+z+z+A+z+A+B+C+D+D+D+u+q+h+b+8+9+9+b+b+8+8+b+9+d+9+b+9+a+d+d+c+b+b+b+9+b+b+9+9+8+b+b+d+9+b+8+b+b+d+b+9+9+b+2+:+^+,+++Z.S.Q.g.a.4.2.).=...V N G z u o i c 8 4 } : ^ ~ ' > - * & $ # # @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ % * - > ' ~ ^ _ } 4 9 d j p w C J R Z &.'.2.4.b.k.t.I.M.W.Z.&+;+~+}+|+8+j+o+E+z+F+G+H+G+G+F+I+G+J+F+z+K+n+l+b+|+|+|+|+|+2+2+|+|+1+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+2+|+2+|+2+|+|+|+|+|+|+|+|+|+|+|+:+/+*+.+`.U.L.f.0.1._.'.*. .U N G z t n h c 8 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ % * - > ' ~ ^ : | 4 9 d j q w C K S ` &.).:.5.c.l.u.B.Q.T.Z..+,+]+:+1+a+i+o+u+L+I+M+M+M+M+M+N+M+F+A+u+O+x+b+|+:+:+:+:+:+[+[+:+}+}+:+[+t+:+[+t+:+P+Q+:+:+:+<+:+[+P+:+:+[+:+<+:+:+:+:+<+:+t+:+}+f+[+^+,+.+Z.U.Q.e.8.|.(.,.&.` T M F y t n h c 8 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ' ~ ^ : | 4 9 e k q x D L T .*.!.<.7.d.m.v.D.M.Y.Z.@+'+~+:+|+8+m+p+u+L+G+M+R+S+S+S+T+U+V+W+o+x+c+|+<+^+/+~+{+!+{+!+/+]+_+~+(+]+^+]+]+~+/+~+~+^+^+!+]+/+~+!+(+_+]+!+^+{+(+{+^+(+!+]+!+^+]+!+;+.+`.V.L.c.7.}.]./.%.Z S L E y s m g b 7 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ' ~ ^ : | 5 0 e k q x D L T .=.~.<.7.e.n.w.D.J.W.Z..+,+/+:+|+b+k+o+X+V+J+M+S+Y+Z+N+U+z+u+o+i+b+|+:+(+;+-+-+*+=+>+,+,+>+=+'+;+=+'+>+,+>+=+-+,+-+,+-+=+=+,+,+;+-+'+'+;+,+>+>+,+'+;+=+,+'+-+)+=+.+`.T.N.j.5.<.{.;.#.Y R K D x r l f a 7 2 [ ( ] ! ' ; - * % $ # @ @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) ~ / : | 5 0 e k r y E M U ..-.~.[.8.f.o.x.F.P.X.Z..+;+^+[+|+9+h+o+u+z+J+N+S+`+ @G+V+u+q+h+b+|+<+~+=+.+$+&+$+++#+#+$+.+.+#+++.+#+.+.+.+.+$+.+$+.+.+++.+.+&+.+.+$+#+.+.+$+#+.+.+$+++.+.+.+.+.+$+Z.T.M.0.3.2.!.=.+.W P I C w q k f a 6 2 [ ( ] ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) ~ / : | 5 0 f l r y E M U +.-.{.}.9.g.o.y.F.Q.X.Z..+=+]+[+|+9+h+q+u+y+H+.@S+T+I+z+K+p+g+d+|+:+~+=+@+Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.+@Z.Z.`.Z.Z.Z.+@Z.Z.Z.Z.Z.Z.Z.Z.+@Z.Z.Z.Z.Z.Z. + +Z.+@Z.Z.+@Z.Z.Z.W.O.7.}.^.,.&. .U N H A v p j e 0 5 1 < / { ! , ; = & % $ # @ + + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / : 1 5 0 f l r y F M V +.;.{.}.9.g.p.z.G.J.T.Z.#+'+/+:+|+e+h+o+u+L+U+M+M+F+z+K+o+j+b+|+[+^+>+#+Z.W.S.S.X.T.Y.Y.V.W.T.R.R.T.U.X.U.T.R.T.T.U.R.T.T.T.V.U.W.S.U.R.T.W.X.R.T.S.W.R.T.T.T.R.V.R.R.V.N.4.:.{.>.$.Z S L F y t n i d 9 4 | : / { ) , ; = & % $ # @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 0 f l r y F N V +.;.].}.9.g.p.z.G.N.R.Z..+;+~+}+3+b+g+n+u+V+F+M+I+L+u+r+x+b+|+:+]+>+.+`.T.L.P.O.J.P.Q.M.N.P.O.M.P.K.J.L.N.M.Q.P.M.M.K.N.P.M.O.Q.L.N.N.K.O.L.K.L.P.O.L.N.L.Q.N.P.J.Q.K.J.K.|._.).=.@.X Q J D y s m h b 8 3 } : ^ ~ ) > - = & % $ # @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 0 f l s y F N V +.;.].|.0.h.q.z.H.K.V.Z..+,+_+}+|+9+h+o+E+z+G+G+L+u+o+x+9+|+<+]+*+.++@T.Q.@@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@^@/@(@(@_@:@<@<@[@}@|@1@2@3@4@5@6@7@8@9@0@H.E.I.x.t.n.i.d.9.4.:.{./.%. .U O H B w q k f a 7 2 [ _ ^ ~ ' > - * & % # # @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 0 f l s y F N V +.;.].|.0.h.q.z.H.M.R.Z..+;+^+:+|+b+h+o+u+A+H+F+z+a@n+m+b+|+:+(+,+#+Z.W.L.#@b@c@&@d@=@-@;@>@e@f@g@h@{@]@i@/@(@_@:@<@[@}@|@1@2@3@4@j@5@6@k@7@8@9@l@m@G.D.I.y.u.o.s.f.j.6.}.(.).-.#.Y S L F z u o j e 0 6 1 [ ( ] ! ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 a f l s y F N V @.;.].|.0.h.q.A.H.P.Y.Z.&+,+{+<+1+e+h+q+u+L+I+U+z+u+O+j+b+2+:+^+*+.+Z.T.N.#@$@%@n@o@p@q@>@,@f@g@~@r@^@/@(@_@<@}@|@1@2@3@4@j@5@6@k@7@s@8@t@9@l@m@H.F.C.A.x.u.p.l.g.b.8.3.:.{./.&...W P J D y s n h c 9 4 | < / { ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y F N V @.>.].|.0.h.q.A.u@N.W.Z.#+'+~+P+2+8+m+p+u+B+G+v@V+u+p+l+b+6+:+(+=+.+Z.R.P.b@c@&@*@p@w@x@,@f@g@~@]@i@(@_@<@}@1@2@3@j@5@6@k@7@s@8@t@9@y@l@0@m@H.F.D.B.z.x.u.p.l.h.d.0.5.}.(.).;.$.Z T N H B w r l g b 8 3 | : / { ) , ; = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y F N V @.>.].|.0.h.q.A.u@J.W.Z.$+,+~+:+3+d+h+n+z@A+A@v@z+u+o+h+e+|+:+/+,+.+Z.S.P.$@B@d@=@w@;@C@'@g@~@]@i@(@:@[@|@2@4@5@6@k@s@8@t@9@y@l@0@0@u@H.G.F.D.B.A.y.w.t.p.l.i.e.a.7.1.:.{./.*.+.X R L F z u p k f a 6 2 } _ ^ ~ ) > - = & % $ # @ + + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y G N W @.>.^.1.a.i.r.I.u@N.X.Z..+)+]+:+|+b+g+o+u+V+I+F+z+u+o+k+b+|+:+~+-+.+Z.W.J.$@B@d@=@w@>@e@)@h@r@i@(@:@[@1@3@j@5@k@s@8@t@9@l@0@m@u@u@H.F.E.D.C.I.z.x.v.t.p.m.i.f.b.8.4.[.(.!.;.$.` V P J D y t n i d 0 5 1 [ ( ] ~ ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y G N W @.>.^.1.a.i.r.I.u@N.V.Z.#+*+^+}+|+8+x+o+u+z+F+J+z+u+o+l+d+|+<+!+>+++Z.U.L.%@&@o@-@;@C@'@!@{@^@(@_@[@1@3@j@6@7@8@t@y@l@0@m@u@H.G.F.E.D.B.I.A.y.w.u.r.p.m.k.g.c.0.6.|.2.{.,.=.@.Y T N H B x r m h c 9 5 1 < ( ] ! ' > - * & $ # # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y G N W @.>.^.1.a.i.r.I.u@Q.T.Z.++;+~+:+|+0+m+o+E+V+U+v@z+W+o+g+8+|+[+~+*+.+D@T.P.%@n@o@w@x@,@f@h@r@i@(@<@|@2@j@6@7@8@9@y@0@m@u@H.G.F.E.D.C.I.A.z.y.w.u.r.p.n.s.h.d.j.8.4.[.(.!.>.&...X R L F A v q l g b 8 4 | : / { ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@L.S.Z.&+-+~+:+|+d+x+o+u+y+A@F+L+W+p+j+b+|+<+!+*+.+Z.W.Q.B@d@=@w@>@e@g@~@]@/@_@[@1@4@5@k@8@9@y@0@m@H.G.F.E.D.C.B.I.z.y.x.w.u.r.p.n.l.i.f.b.0.6.1.:.^.).-.$. .V P K E z u p k f a 7 3 } : / { ) , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@J.W.Z..+*+~+<+2+8+x+o+u+L+A@v@z+u+q+j+0+|+:+]+=+.+Z.V.K.B@d@p@q@>@'@g@~@^@(@:@}@2@j@6@7@8@9@l@m@u@G.F.E.D.C.B.I.A.y.x.w.v.t.q.o.m.k.h.e.j.9.5.|.2.{.,.=.#.Z U O J D y t o j e a 6 2 } _ ^ ~ ) , ; = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@O.R.Z..+,+^+:+|+d+x+p+u+y+J+v@A+u+q+l+c+|+}+~+,+.+Z.R.L.B@d@p@q@>@'@g@~@^@(@:@}@2@j@6@7@8@9@l@m@u@G.F.E.D.C.B.I.z.y.x.w.u.t.q.o.m.k.g.d.j.8.4.}.2.{.,.=.@.Z T O I C y t n i e 0 6 2 [ _ ^ ~ ) > - = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@Q.U.Z..+,+/+:+|+0+j+o+E+A+I+v@z+u+p+g+b+|+f+~+*+.+`.S.J.B@d@p@q@>@'@g@~@^@(@:@}@2@j@6@7@8@9@l@m@u@G.F.E.D.C.B.A.z.y.x.w.u.t.q.o.l.k.g.d.j.8.4.}._.~./.*.@.Y T N H C x s n i d 0 5 2 [ _ ^ ~ ' > - = & % $ # @ + + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@N.V.Z.++*+(+:+|+9+h+o+u+z+v@v@V+u+s+i+c+|+f+(+;+.+ +S.K.B@d@=@w@>@e@g@~@]@/@_@[@1@4@5@k@8@9@y@0@u@H.G.F.E.C.B.I.A.z.y.x.v.t.r.o.m.s.h.e.j.8.4.}._.{.,.*.@.Y T N H C x s n i d 9 5 1 [ ( ] ~ ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@K.W.Z..+)+(+:+|+c+i+o+u+z+U+v@z+u+o+l+d+|+:+^+,+$+Z.S.Q.%@n@o@w@x@,@f@h@r@i@(@<@|@2@j@6@7@8@9@y@0@m@u@H.F.E.D.C.B.I.A.y.x.v.t.q.o.l.i.f.b.0.6.|.2.].,.=.#.Z T O I C y s n i d 0 5 1 [ ( ] ~ ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@N.V.Z.++-+^+[+|+b+j+p+u+y+I+F+z+u+r+j+b+|+:+]+=+.+Z.V.Q.%@&@o@-@;@C@'@!@{@^@(@_@[@1@3@j@6@7@8@t@y@l@0@u@H.G.F.E.D.C.B.A.z.x.v.t.p.n.s.g.d.a.7.1.<.^.'.-.#.` U O I D y s n i d 0 5 1 [ ( ] ~ ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@O.T.Z..+>+~+:+|+a+x+o+E+z+G+v@A+u+p+m+b+|+:+~+,+.+Z.V.M.$@B@d@=@w@>@e@)@h@r@i@(@:@[@1@3@j@6@k@s@8@t@y@l@0@m@u@H.G.F.D.C.I.A.y.v.t.p.m.k.f.b.9.4.[.(.!.;.%. .V P J D y t o j e 0 6 2 [ _ ] ~ ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@J.X.Z.$+-+~+:+|+0+i+o+E+L+J+A@z+u+o+g+9+|+:+^+;+.+Z.T.K.b@%@n@o@-@;@C@'@g@~@r@i@(@:@[@|@2@4@5@6@k@s@8@t@9@y@l@0@m@u@G.F.D.B.A.y.w.t.p.l.h.d.a.6.|.2.{./.&...W Q K E z u o j e 0 6 2 [ _ ^ ~ ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@N.R.+@.+,+(+:+2+9+h+o+u+V+A@v@z+u+q+l+8+|+:+/+;+$+Z.R.L.E@c@B@d@=@w@x@,@'@g@~@r@i@(@_@<@}@|@2@3@j@5@6@k@7@s@8@t@9@l@0@m@H.F.D.B.z.w.t.o.s.g.c.9.4.[.^.'.=.@.Y S M G A v p k f a 7 2 } _ ^ ~ ) > - = & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@K.V.+@.+-+~+:+|+8+g+s+E+A+v@G+L+u+n+i+9+|+<+]+=+$+`.V.O.#@b@%@&@*@p@q@x@,@f@g@h@r@^@/@(@_@<@[@|@1@2@3@4@j@5@6@7@s@8@t@y@l@m@H.E.B.A.w.t.o.k.f.j.7.|._.!.;.$.` T N H B w q l g b 7 3 } _ ^ ~ ) > - = & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@Q.V.Z..+>+~+:+1+d+m+o+u+D+U+F+L+u+n+l+b+|+Q+!+,+.+Z.R.N.@@E@$@B@n@o@p@q@x@,@'@)@h@{@]@^@/@(@_@:@<@}@|@1@2@3@4@j@5@6@k@s@t@y@0@u@F.C.A.w.r.m.i.d.9.4.<.].,.&...V P J C x r m h c 8 4 | : / { ) , ; = & % $ # @ + + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@Q.V.Z.#+*+^+}+|+d+x+o+u+V+I+U+z+u+r+k+c+1+:+^+,+.+Z.T.N.F@G@E@c@B@d@o@-@q@x@C@'@)@!@h@{@]@^@i@(@(@_@:@<@[@}@|@1@2@3@j@5@k@s@t@l@m@F.C.z.v.q.l.g.j.6.}.(.).=.@.X Q K E y s n h c 8 4 | : / { ) , ; = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@L.T.Z..+>+!+:+|+d+x+p+u+z+H+M+F+A+K+o+i+8+|+:+_+,+.+Z.V.O.K.M.J.J.P.J.P.P.L.P.K.P.O.L.N.K.L.Q.P.K.N.Q.K.P.L.Q.N.L.Q.Q.Q.O.J.Q.Q.Q.O.L.O.P.Q.P.L.L.L.3.:.~.>.$.Z T M F z u o i d 9 5 1 < / { ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@O.W. +.+;+(+:+3+d+x+o+u+z+H+M+T+v@V+u+n+g+9+3+}+^+,+#+Z.T.W.W.W.T.T.R.T.T.T.W.V.R.T.T.W.T.V.T.T.S.W.W.T.R.T.R.T.R.R.T.V.T.Y.V.R.W.T.V.R.T.T.X.W.R.Q.6.[.^.,.&. .U N H A v p j e 0 5 1 < ( ] ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@P.T.Z.$+,+~+<+1+e+i+o+u+z+H+T+S+H@v@C+u+p+k+b+|+<+!+=+@+Z.Z.Z.Z.`.+@Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.+@Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z. +Z.Z.Z.Z.Z.Z.Z.U.L.8.1._.).=.+.W P I C w q k f a 6 2 [ ( ] ! ' ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@J.R.Z..+,+^+:+|+c+h+o+u+C+I+M+S+S+M+v@L+u+r+h+b+2+t+~+;+.+.+.+++.+.+.+@+.+.+.+.+.+.+&+++.+$+&+$+.+.+.+$+#+$+$+++.+.+$+.+&+.+#+#+&+.+.+.+.+&+.+Z.T.O.a.4.:.~.;.#.Y Q K D x r l g a 7 2 [ _ ] ! ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@N.T.Z..+*+!+:+|+0+i+o+u+L+H+M+S+Y+S+N+A@V+u+o+g+8+|+:+]+*+-+'+-+-+>+;+,+-+,+*+;+,+,+*+=+;+'+)+>+*+,+=+=+)+>+*+)+'+*+;+,+;+,+=+'+=+>+>+,+)+'+.+Z.T.O.b.6.[.].>.$.Z S L E y s m g b 7 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@J.R.Z.$+)+]+:+|+d+h+o+u+L+F+M+I@J@K@S+M+F+z+u+q+i+a+|+}+{+~+]+!+~+^+~+^+(+~+{+^+~+^+!+{+]+^+~+~+(+~+]+{+]+/+~+]+/+!+^+~+~+!+(+_+~+_+(+/+{+;+.+Z.R.N.d.8.|.^.,.&.` T M F y t n h c 8 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@K.W.+@.+=+^+:+|+d+h+o+u+B+A@M+S+L@M@J@S+T+v@z+u+o+j+9+|+:+:+<+:+:+:+:+:+:+:+:+:+}+:+:+:+}+f+<+:+:+:+:+:+:+:+:+<+:+:+[+:+t+:+:+:+:+<+:+:+^+,+.+Z.R.O.f.0.1._.).*...U N G z u n i c 8 4 } : ^ ~ ' > - * & % # # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@M.T.Z.++'+~+:+|+d+k+n+u+L+A@ @S+N@O@P@Q@S+M+H+A+u+s+j+b+3+|+|+5+2+|+|+5+3+3+2+|+|+|+2+|+|+1+6+4+6+3+1+|+|+|+1+3+|+|+1+2+|+|+|+1+2+|+|+<+^+;+.+ +T.K.g.a.4.2.).=...V O G A u o i d 9 4 | : ^ ~ ) > - * & % # # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@K.T.Z.@+;+~+:+1+0+k+o+u+D+I+ @S+L@R@S@T@J@S+T+U+A+z@p+m+d+e+e+b+c+d+8+9+0+e+a+9+b+b+d+d+d+e+9+d+b+a+9+d+d+e+b+9+b+9+9+8+a+8+e+9+b+8+|+P+/+*+.+Z.X.Q.h.j.4.:.!.=.+.V O H A u o i d 9 4 | : ^ ~ ) > - * & % # # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@K.R. +.+'+]+:+|+b+x+o+u+z+H+M+S+J@U@V@W@T@N@S+M+F+B+u+q+h+j+j+m+h+g+k+x+g+h+h+m+g+g+k+l+x+i+i+l+h+g+x+h+j+h+j+k+k+m+x+g+m+h+g+m+x+9+2+:+!+'+.+Z.T.M.h.j.5.:.~.-.+.W O H A v o i d 9 4 | : / ~ ) > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@L.W.Z.%+;+^+[+|+b+h+p+u+D+A@M+S+L@X@Y@Z@Y@O@J@S+M+J+A+u+o+o+p+o+o+o+o+n+o+o+o+o+o+o+o+n+o+o+o+o+o+o+o+p+o+o+n+o+n+o+o+o+o+o+o+o+x+b+|+:+/+-+.+Z.V.J.h.j.5.:.!.-.+.W O H A v o i d 9 4 | : / ~ ) > - * & % # # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@O.W.Z.#+,+{+[+|+d+h+q+u+A+I+M+S+J@P@`@S@M@J@S+ @U+z+u+o+i+k+j+j+j+j+m+j+j+k+j+i+m+l+g+i+g+h+h+g+h+h+x+g+x+m+i+i+l+m+h+j+k+l+x+x+l+c+|+:+~+-+.+Z.U.M.h.j.4.:.!.=.+.V O H A u o i d 9 4 | : ^ ~ ) > - * & % # # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@N.T.+@.+;+!+:+|+9+m+o+u+z+F+ #S+J@T@.#O@J@S+M+H+V+u+p+g+b+8+9+b+0+9+8+e+d+c+b+c+d+b+d+b+8+b+b+b+b+9+b+b+b+b+c+b+b+8+c+b+b+d+b+9+b+9+|+<+(+-+.+Z.R.Q.g.a.4.2.).=...V O G A u o i d 8 4 | : ^ ~ ) > - * & % # # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@M.W.Z..+-+{+:+|+9+h+p+u+z+F+M+S+J@T@+#J@`+@#U+z+u+o+k+b+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+1+1+2+|+|+|+|+|+|+|+3+|+|+|+|+|+|+:+~+*+++Z.R.L.e.9.1._.'.*. .U N G z t n h c 8 3 } : ^ ~ ' > - * & $ # # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@Q.U.Z.$+-+~+:+3+b+i+o+u+B+J+M+S+##M@J@Z+ @I+B+u+n+k+b+|+<+}+}+}+:+:+<+:+:+t+:+:+:+:+:+:+:+:+[+}+<+<+:+:+P+:+<+[+<+[+:+<+:+[+:+:+:+:+:+:+{+-+#+D@T.Q.d.8.|.^.,.&.` T M F y t n h c 8 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@N.U.Z..+;+~+:+3+d+l+o+u+L+A@T+I@J@J@S+ @v@L+u+n+h+9+|+[+~+]+/+^+/+~+^+!+]+!+^+~+~+{+~+^+!+(+]+!+!+]+^+]+/+{+~+(+{+~+^+]+(+{+^+{+^+(+~+(+_+,+#+`.V.N.j.5.<.{.>.$.Y R K D y s m g b 7 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@L.U.+@.+'+{+:+|+0+h+o+u+B+F+M+I@Y+S+H@G+z+u+q+j+8+|+<+]+,+=+-+-+*+)+-+-+*+'+*+;+,+*+,+)+-+-+,+,+*+,+'+,+>+>+*+;+,+;+=+*+'+,+*+-+-+,+;+,+=+-+.+Z.T.K.0.3.2.!.-.@.X Q J C x r l f a 6 2 [ ( ] ! ' > - * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@L.W.Z.&+*+!+}+|+b+i+o+u+z+J+M+I@S+N+A@z+u+$#j+b+|+:+{+>+#+@+%+.+$+%+$+&+.+.+.+.+$+.+#+.+.+.+++++.+.+.+$+++.+.+.+.+.+.+.+.+.+.+.+.+.+#+++.+.+.+Z.R.Q.7.|.(.'.*...V O H B w q k e 0 6 1 [ ( ] ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@N.X.`.#+=+]+}+|+8+k+o+u+A+G+@#S+N+A@V+u+o+k+8+|+:+]+=+#+ +Z. +Z.Z.Z.Z.Z.Z.Z.Z.%#Z.Z.Z.`.+@Z.`.Z.Z.Z. +Z.&#+@+@`.Z.`.+@ +`.Z.Z.Z.Z.Z.Z. +Z.Z.Z.Z.W.P.4.<.{.>.$.` T M G z u o j d 9 5 1 < ( { ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@P.T.Z.#+=+^+:+1+b+l+o+u+D+A@ @N+U+z+u+q+j+b+|+:+]+>+%+Z.T.S.S.R.R.S.U.T.W.V.R.V.R.V.V.R.T.T.T.W.Y.V.S.R.S.X.T.V.W.T.T.R.U.V.T.R.R.R.T.W.T.R.W.T.Y.Q.|.(.).=.@.X R K E y t n h c 9 4 | : / { ) , ; = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@Q.V.Z..+,+/+<+1+a+g+n+u+z+I+M+v@B+u+p+g+8+|+[+^+*+.+Z.V.L.K.P.J.Q.L.P.M.K.Q.Q.N.O.M.L.Q.O.K.P.O.Q.P.N.P.Q.L.N.M.P.Q.O.N.M.Q.K.Q.K.M.L.O.J.J.M.J.O.M.:.{./.%. .V O I C x r l g b 8 3 } : ^ ~ ) , ; = & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@M.T.Z..+'+^+:+|+9+m+p+u+B+J+G+L+*#o+i+9+|+t+~+*+&++@T.Q.E@$@B@d@=@-@;@C@'@)@h@r@^@/@(@:@[@|@1@3@4@j@5@6@k@7@s@8@9@y@l@m@u@G.E.B.A.x.t.p.l.h.c.9.4.[.^.'.=.@.Y S M G A v p k f a 6 2 } _ ^ ~ ' > - = & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@L.V.Z.$+-+^+:+|+b+m+n+u+z+A@G+z+u+O+g+9+|+:+/+=+.+Z.V.K.b@%@n@o@-@;@C@'@g@~@r@i@(@:@[@|@2@4@5@6@k@s@8@t@9@y@l@0@m@H.G.F.D.B.A.y.v.r.o.l.h.d.0.6.|.2.~.>.&...W Q K E y t o j e 0 6 2 [ ( ] ~ ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@P.W.Z.++,+~+}+1+9+h+O+u+L+J+v@z+u+s+k+b+|+}+~+-+.+`.T.Q.%@&@o@-@;@C@'@!@{@^@(@_@[@1@3@j@6@7@8@t@y@l@0@u@H.G.F.E.D.C.I.A.y.x.v.r.p.m.k.g.c.0.6.|.:.].,.=.@.Z T N H C x s m h c 9 5 1 < ( ] ! ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@K.R.Z.$+,+/+}+|+e+h+p+u+C+J+U+L+u+o+j+8+|+:+!+=+.+Z.X.J.&@*@p@q@C@'@!@{@^@(@<@|@3@j@k@s@t@y@0@u@H.F.E.D.C.I.A.z.y.x.w.u.t.q.o.m.s.h.e.b.9.6.1.:.^.).;.%. .W Q L F A v q l g b 8 4 | < / { ! , ; - * & $ # # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@P.R.Z..+-+]+<+|+9+i+o+E+B+A@A@A+u+n+x+0+|+<+]+,+.+Z.V.L.d@=@w@>@'@g@{@i@(@[@1@4@6@s@9@l@m@G.F.D.B.I.z.y.x.w.v.u.r.q.p.o.m.l.k.h.e.c.a.8.5.|.:.^.!.>.&.+.Y T N I D y t o j f a 7 3 } : / { ) , ; = * & $ # # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@P.T.Z..+-+^+:+1+9+i+n+u+L+J+A@z+u+O+x+b+|+:+_+>+.+Z.T.P.*@-@x@,@)@~@^@(@<@1@4@k@8@y@m@H.E.C.I.z.y.w.v.t.r.q.p.o.n.m.s.k.i.g.e.c.j.0.7.4.|.:.(.~./.=.#. .W R L G B x s n i e 0 6 2 } : ^ { ) , ; = * % $ # # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@N.T.Z..+'+~+:+|+8+k+o+u+L+A@F+z+u+O+x+8+|+}+/+-+$+D@R.O.=@w@>@'@!@r@/@:@|@3@6@8@y@m@G.D.B.A.y.w.u.r.q.p.n.m.l.s.k.i.h.f.e.c.b.a.9.6.4.|.<._.{.'.;.&.+.Z U P K F A w r m h d 0 6 2 } _ ^ { ) , ; = * % $ # # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@L.T.Z..+,+~+:+|+b+l+o+=#D+J+F+z+u+O+h+e+|+t+~+-+.+Z.W.L.p@;@,@)@~@i@_@}@3@6@8@y@u@F.C.A.y.v.t.q.o.n.l.s.k.h.g.f.e.d.c.b.a.0.8.6.4.1.}.:.(.{.).>.*.#. .W R N I D y u q l h c 9 5 2 [ _ ^ ~ ) , ; = * % $ # # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@O.T.Z..+)+!+:+|+b+g+o+v+D+I+I+z+u+$#j+8+|+[+(+,+.+Z.R.N.-@x@e@!@r@/@:@1@j@7@9@0@G.D.I.y.v.t.p.n.m.s.i.h.g.f.d.c.b.j.a.0.9.7.6.4.1.}.:._.].!.,.-.%.+.Z V Q M H C y u p l g c 9 5 1 [ _ ^ ~ ) , ; = * & $ # # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@O.R.Z..+)+]+<+|+e+k+o+u+A+H+v@z+u+s+x+8+|+P+/+,+.+Z.V.K.q@C@f@h@]@(@[@2@6@8@l@u@E.B.y.v.t.p.n.l.k.h.g.e.d.c.b.j.a.9.8.7.6.5.3.|.}.:._.^.~.'.>.*.$...Y U P L G C y t p k g c 9 5 1 [ _ ^ { ) , ; = * & $ $ # @ + + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@N.T.Z.++>+~+:+2+e+m+r+u+L+J+v@L+u+p+l+9+|+:+!+)+++Z.U.N.q@C@)@~@^@_@}@4@k@t@0@G.C.A.x.u.q.n.l.k.h.f.e.c.b.j.a.0.9.8.7.5.4.3.|.}.<.2.(.{.!.,.;.&.#. .X T P K G B y t p k g c 9 5 2 [ _ ^ { ) , ; - * & % $ # @ + + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@P.T.Z.#+-+]+:+1+b+x+o+E+C+U+U+z+*#r+j+8+|+:+/+-+.+Z.U.L.;@,@)@~@i@_@|@4@k@9@m@F.C.z.w.t.p.n.s.i.g.e.d.b.j.a.0.9.8.7.6.5.3.1.|.[.:.2.^.{.).,.;.&.#. .X T P L G C y u p l h d 0 6 2 } : / { ! ' > - * & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@J.T.Z..+'+(+<+|+b+k+p+u+C+J+I+z+u+r+m+b+|+}+^+-+.+Z.T.Q.;@,@)@{@i@:@|@j@7@9@m@F.B.y.v.r.o.m.k.h.f.e.c.b.a.0.9.8.7.6.5.4.3.|.}.[.:._.^.{.)./.;.&.#. .Y U P L H C y u q m h d 0 6 3 } : / ] ! ' > - = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@M.T.Z.$+-+]+:+|+9+m+o+u+z+F+G+z+u+p+i+b+|+:+/+=+.+Z.T.K.;@,@)@~@i@_@|@4@k@9@m@F.C.z.w.t.p.n.s.i.g.e.d.c.j.a.0.9.8.7.6.5.4.3.|.}.<.2.(.].~.'.>.=.$.+.Z V R N I E z w r n j e a 8 4 | < ( ] ~ ) > ; = * % $ # # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@L.W. +.+'+!+:+|+8+j+n+u+V+I+A@z+u+p+h+8+2+:+!+'+$+Z.T.K.q@C@)@~@^@_@}@4@k@t@0@G.C.A.x.u.q.n.l.k.h.f.e.d.b.j.a.0.9.8.7.6.5.4.3.|.}.<.2.(.{.).,.-.&.#. .X T O K G B x t o k g c 9 5 1 [ _ ^ { ) , ; = * & % $ # @ + + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@P.T.Z..+,+!+:+|+c+h+$#u+z+I+G+L+u+o+m+b+|+:+{+,+$+`.T.M.q@C@f@h@]@(@[@2@6@8@l@u@E.B.y.v.t.p.n.l.k.h.g.e.d.c.b.j.a.0.9.8.7.6.5.3.1.}.<.2.^.{.)./.=.%.+.Z V R M I D y v q m h d 0 6 3 } : / { ! ' > - * & % $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y G O W @.>.^.1.a.i.r.I.u@N.U.Z.#+-+^+}+3+b+g+o+u+L+A@F+A+u+o+h+b+|+[+~+-+$+Z.T.L.-@x@e@!@r@/@:@1@j@7@9@0@G.D.I.y.v.t.q.o.m.s.k.h.g.f.e.d.c.b.j.a.0.9.8.6.5.3.|.[.:.(.{.)./.=.$...Y T P K G B x t o j f b 8 4 1 < ( ] ~ ' > - = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y G N W @.>.^.1.a.i.r.I.u@P.T.Z..+,+{+<+|+8+j+r+u+C+U+G+z+u+n+m+8+|+<+(+,+.++@R.J.p@;@,@)@~@i@_@}@3@6@8@y@u@F.C.A.y.v.t.q.o.n.l.s.k.i.h.g.f.e.d.c.b.j.a.0.8.6.4.1.}.:.(.{.).>.*.#. .W S N I D z v q l h d 0 6 2 [ _ ^ { ) , ; = * & $ # # @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y G N W @.>.^.1.a.i.r.I.u@P.W.Z..+)+~+:+|+e+i+O+u+z+F+G+z+u+o+k+8+|+}+(+>+.+Z.T.N.=@w@>@'@!@r@/@:@|@3@6@8@y@m@G.D.B.A.y.w.u.t.q.p.o.n.m.l.s.k.i.h.g.f.e.d.b.a.9.7.5.1.[.2.].).>.*.#.` V R M H C y t o j f a 7 3 | < / ] ! ' > - * & % $ # @ + + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y G N W @.>.^.1.a.i.r.I.u@P.T.Z.$+*+~+:+2+e+k+o+E+L+v@A@z+u+q+h+8+|+<+~+*+.+Z.T.Q.*@-@x@,@)@~@^@(@<@1@4@k@8@y@m@H.E.C.I.z.y.w.v.u.t.r.q.p.o.n.m.l.s.k.i.h.f.d.b.a.9.6.3.}.2.].).>.&.@.Z U P K E z v q l h c 9 5 1 [ _ ^ ~ ' > - = & % $ # @ @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y F N V @.>.].|.0.h.q.A.H.P.V.Z..+=+~+:+|+b+h+o+u+z+I+v@z+u+p+h+8+|+:+{+)+.+Z.T.N.d@p@q@C@'@!@{@i@_@[@1@4@6@s@9@l@u@G.F.D.B.I.A.z.x.x.w.v.u.t.r.q.p.o.n.m.s.i.g.e.b.a.8.4.|.:.^.).>.&.+.Y S N I C y t o j e a 7 3 } : / { ) , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y F N V @.>.].|.0.h.q.A.H.P.S.Z..+'+~+:+|+0+h+o+z@z+v@v@L+u+o+h+b+|+:+]+=+.+Z.T.Q.&@*@-@;@C@f@!@{@i@(@<@|@3@5@k@s@t@y@0@u@H.F.E.D.C.B.B.I.A.z.y.x.w.v.u.r.q.o.m.s.h.e.b.0.6.1.<.^.).;.%...W R L G A w q l h c 8 4 1 < ( ] ! ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 a f l s y F N V @.;.].|.0.h.q.A.H.J.W.Z.&+*+/+[+|+e+x+o+u+V+U+F+L+u+s+i+b+|+}+^+>+#+Z.S.O.%@n@o@-@;@,@f@!@{@^@(@:@[@1@3@j@6@7@8@t@y@l@0@m@u@H.G.G.F.E.D.C.B.I.A.y.x.v.t.p.n.s.h.d.a.7.3.<.^.).-.$.` U P J D y t o j e 0 6 2 [ _ ^ ~ ' > - = & % $ # @ + + + . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 0 f l s y F N V +.;.].|.0.h.q.z.H.P.T.Z.$+-+^+<+|+d+x+n+u+z+v@v@A+K+q+l+b+|+:+~+,+#+Z.T.P.c@B@d@=@w@x@,@f@!@~@]@/@(@:@}@1@2@4@5@6@k@7@s@8@t@9@y@l@l@0@m@u@H.G.F.D.C.I.y.w.t.p.m.i.e.j.8.3.<.].'.=.@.Y S M G A w q l g b 8 3 } : / { ) , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 0 f l s y F N V +.;.].|.0.h.q.z.H.K.T.Z..+*+/+:+|+b+m+o+z@V+A@G+z+u+q+l+9+|+}+!+*+.+Z.U.J.b@%@&@*@p@w@x@,@f@g@~@r@^@(@_@:@[@|@1@2@4@j@5@6@6@k@7@s@s@8@t@9@y@l@0@u@H.F.C.I.y.v.r.n.k.f.j.7.1.2.{./.&...V P J D y s n i d 9 5 1 < ( ] ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 0 f l r y F N V +.;.].}.9.g.p.z.G.M.R.Z.$+>+]+:+|+8+h+o+v+L+G+ @I+L+u+o+k+9+|+}+{+>+.++@R.Q.N.N.Q.P.O.M.L.P.M.K.Q.M.O.P.N.K.J.N.L.M.O.P.Q.M.K.P.Q.Q.Q.O.L.K.N.P.N.K.O.J.K.J.O.L.O.L.J.J.K.P.J._.!.;.#.Z S M G A v p k e a 6 2 [ _ ] ~ ' > - * & % # # @ + + . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / : 1 5 0 f l r y F M V +.;.{.}.9.g.p.z.G.N.T.+@++)+]+:+1+0+x+p+u+B+I+M+M+U+A+u+r+j+c+|+:+_+,+++Z.Y.T.T.Y.S.T.W.T.T.S.S.W.W.T.T.T.W.R.W.R.V.T.T.S.W.U.R.T.V.R.U.R.S.W.S.T.T.T.T.R.T.W.U.T.W.R.T.T.T.N.[.^.,.*...V P I C x r l g b 7 3 } _ ^ ~ ) > - = & % $ # @ + + . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) ~ / : | 5 0 f l r y E M U +.-.{.}.9.g.o.y.F.J.X.Z.++,+~+:+|+8+k+p+E+z+v@M+I@M+v@z+u+p+g+b+|+:+(+*+.+Z.Z.`.Z.Z.Z.Z.Z.Z. +Z.Z.Z.Z.Z.Z.+@Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z. +Z. ++@Z.Z.Z.Z.Z.Z.Z.Z.Z.U.P.1.2.!.;.#.Y R L E y t n h c 8 4 | : / { ) , ; = & % $ # @ + + . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) ~ / : | 5 0 e k r y E M U ..-.~.[.8.f.o.x.F.L.X.Z..+-+{+:+|+b+i+o+u+L+G+M+I@S+ @F+V+u+o+l+8+|+:+/+*+.+@+#+.+#+.+#+.+.+.+.+.+.+++.+.+.+$+@+.+.+&+.+.+.+.+.+.+++&+.+.+#+#+#+$+.+.+$+++.+.+.+.+.+.+.++@W.P.6.[.^.,.&. .U N G A u p j e 0 5 1 < / { ! , ; = & % $ # @ @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ' ~ ^ : | 5 0 e k q x D L T .=.~.<.7.e.n.w.D.K.U. +#+,+/+:+2+a+m+o+u+z+v@ @S+N@S+M+G+z+u+n+x+8+|+:+!+;+=+-+;+,+,+;+-+*+,+'+>+*+,+=+>+)+,+-+;+=+*+)+)+,+;+=+,+)+;+,+=+)+>+)+;+-+>+;+,+-+;+=+)+;+;+#+Z.V.P.9.1._.).=.+.W P I B w q k f a 6 1 [ ( ] ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ' ~ ^ : | 4 9 e k q x D L T .*.!.<.7.d.m.v.D.J.S.Z..+'+~+:+2+9+h+O+u+L+v@ @I@S+S+S+T+v@L+u+n+j+b+|+:+~+{+^+]+!+(+^+!+~+(+{+^+^+!+^+{+]+/+!+~+!+!+]+^+(+~+/+!+~+^+~+!+]+^+^+!+^+~+~+~+!+^+~+]+~+=+.+Z.W.P.a.5.<.~.;.#.Y Q K D x r l g a 7 2 [ ( ] ! ' > - * % $ # @ @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ % * - > ' ~ ^ : | 4 9 d j q w C K S ` &.).:.5.c.l.u.B.M.T.Z..+,+_+:+|+8+m+o+z@z+I+M+@#.@@#H@T+T+v@z+u+p+i+b+5+:+:+:+:+[+:+<+:+:+:+:+:+:+:+:+:+:+:+:+[+:+:+:+:+[+:+[+:+:+:+:+:+:+:+:+:+:+<+}+:+:+:+:+:+{+=+.+ +T.N.c.7.}.]./.%.Z S L E y s m g b 7 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ % * - > ' ~ ^ _ } 4 9 d j p w C J R Z &.'.2.4.b.k.t.I.L.T.+@.+*+~+:+2+d+h+q+u+D+H+v@v@A@H+H+H+I+v@H+z+u+q+g+c+|+2+1+1+2+|+|+|+|+|+|+|+|+|+|+|+|+|+4+|+|+3+|+|+3+2+|+|+|+|+|+1+|+3+1+|+|+|+1+6+2+|+|+[+{+,+.+Z.R.K.e.9.|.(.,.&.` T M F y t n h c 8 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + @ @ # $ % * - > ' ~ ^ _ } 3 8 c i o v B I Q Y $.,.(.3.a.i.q.z.M.V.+@%+,+^+<+|+a+j+n+u+V+z+z+z+z+A+z+z+z+L+z+z+z+E+o+x+b+d+9+8+b+a+8+a+8+b+9+8+9+9+0+9+b+c+9+d+8+9+e+e+c+a+9+8+b+0+c+0+0+b+9+0+9+8+d+9+0+d+|+[+_+=+#++@T.N.f.9.1._.'.*. .U N G z t n h c 8 3 } _ ^ ~ ' > - * & $ # # @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % * = ; ' ! ] _ } 3 8 c i o u A H P X #.>.^.|.9.g.o.x.J.S.Z..+)+!+:+|+b+h+o+u+u+u+W+u+u+u+u+K+u+u+u+u+u+*#u+p+h+j+x+i+h+x+g+g+h+h+k+g+h+g+j+x+g+h+l+k+g+x+h+j+i+m+m+x+m+h+g+i+k+k+k+h+x+m+m+x+h+e+|+:+/+=+$+Z.T.P.f.0.3._.).*...U N G z u n i c 8 4 } : ^ ~ ' > - * & $ # # @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % * = ; ' ! ] ( [ 3 7 b h n t z G O W @.;.{.[.8.e.m.v.P.W.Z..+'+_+}+1+a+j+p+n+o+s+q+r+o+o+q+q+q+o+q+o+o+q+p+p+p+p+o+o+o+o+n+s+o+o+o+o+o+o+o+o+o+o+p+n+n+q+o+o+q+o+q+o+n+o+n+q+q+o+q+o+n+o+o+o+m+b+|+}+{+'+.++@T.J.f.0.3._.).*...U N G z u n i c 8 4 } : ^ ~ ' > - * & $ # # @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & = ; , ! ] ( [ 2 7 b g m s y F M U ..=.!.:.5.c.k.r.L.X.Z..+'+{+:+|+d+h+l+j+h+j+g+i+l+m+i+j+i+i+h+h+g+h+k+k+x+x+m+l+i+j+x+i+x+k+k+h+h+j+k+x+g+g+m+g+m+j+m+x+g+m+j+i+l+j+i+x+g+k+x+i+m+h+m+i+i+c+|+:+{+=+-#Z.T.Q.f.0.3._.).*...U N G z u n i c 8 4 } : ^ ~ ' > - * & $ # # @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & = ; , ! { ( < 1 6 a f l r y E L S ` &.'._.3.a.h.o.O.W.Z.#+)+]+:+|+0+b+c+d+b+8+c+8+b+8+b+d+9+9+b+9+0+b+e+b+b+8+b+b+b+b+b+8+b+c+9+b+b+d+b+8+b+b+a+9+b+b+8+b+e+9+e+9+b+b+8+9+8+b+b+b+b+b+b+b+9+b+|+:+]+;+#+ +U.L.e.9.1.(.'.&. .U M F z t n h c 8 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & = ; , ) { / < 1 5 0 e k q w C J R Y $./.].}.8.e.l.J.S.Z.-#-+(+:+2+|+|+|+|+|+|+|+2+|+|+1+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+3+2+|+|+|+|+|+3+3+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+3+|+|+|+|+|+|+|+[+]+=+.+Z.T.Q.d.8.}.^.,.%.` T M F y t m h b 8 3 } _ ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & * - > ) { / : | 4 9 d j p v B H P W @.-.~.:.5.j.i.N.W.Z.#+-+_+:+:+:+[+}+:+}+}+P+:+}+:+<+:+}+:+[+[+<+P+[+:+:+:+:+P+:+:+:+}+:+:+}+t+f+:+:+}+}+[+:+:+:+[+<+:+:+:+:+:+:+:+:+:+:+<+:+P+:+:+:+[+}+P+}+:+_+,++++@T.O.b.6.[.{.>.$.Z R K E y s m g b 7 3 [ _ ] ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # # $ & * - > ' ~ ^ _ } 3 8 c h n t z G N U .*.'._.1.9.e.N.W.Z.#+-+(+(+!+_+!+(+]+]+]+~+~+!+/+(+{+(+/+{+^+{+]+]+!+]+^+!+{+!+^+~+~+^+]+]+{+{+!+]+]+{+^+~+_+_+~+{+^+]+]+]+~+/+(+{+^+~+/+!+!+~+^+~+/+/+]+^+!+{+,+.+Z.U.M.0.3.2.!.-.@.X Q J C x r l f a 6 2 [ ( ] ! ' ; = * % $ # @ @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ' ! ] _ [ 2 7 b g l r y D K R Y #.;.{.<.5.j.P.V.Z..+>+=+>+=+>+;+=+,+,+,+=+=+;+,+*+,+=+=+'+,+*+=+>+,+;+>+,+'+;+=+;+'+,+;+)+=+=+'+,+'+,+,+;+,+*+-+*+;+'+,+,+=+'+'+'+*+;+)+;+,+;+,+>+-+'+=+,+,+>+=+#+Z.W.M.7.|.(.'.*...V O H B v p k e 0 6 1 < ( ] ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ @ # $ % * = ; , ! ] ( < 1 6 0 e k q w B I O V ..*.'.(.|.8.Q.S.Z..+.+#+#+@+++.+++&+.+$+&+&+.+&+#+#+.+$+.+.+.+$+$+$+.+.+$+.+.+++#+++.+.+.+.+.+.+&+.+.+.+++.+.+#+.+.+.+$+.+.+.+.+.+$+.+%+++.+$+++.+.+.+.+.+.+++.+.+Z.T.N.3.:.~.>.$.Z S M F z u o i d 9 5 | < / { ) , ; = & % $ # @ + + + . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + + @ # $ % & = ; , ) { / < | 4 9 d i o t y F L S Z #.;.~.:.3.J.T.Z. +Z.Z.Z.Z.Z. +Z.Z.D@`.Z.Z.Z.Z.Z.Z.Z.Z.Z.`.+@Z.Z.Z. +Z.Z.Z.Z.Z. + +Z.Z.Z.Z.`.+@+@Z.Z.+@Z. ++@`.Z.Z.&#Z.Z.Z.Z.Z.Z.Z.Z.Z.+@Z.Z.Z.Z.Z.+@`.Z.Z.Z. +Z.Z.W.J.}.^.'.*.+.W Q J D y s m h c 8 3 } : ^ { ) , - = & % $ # @ + + . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ # $ % & = - > ) ~ ^ _ } 3 7 b g l r x C I O V .&./.].<.O.T.V.T.R.R.W.T.T.U.W.T.T.T.V.W.T.X.R.V.V.S.V.U.S.T.V.T.T.T.V.R.V.W.R.W.V.T.S.S.U.U.T.T.U.V.T.V.W.U.W.V.W.T.X.V.V.V.W.R.W.R.V.V.R.T.T.R.T.X.R.T.T.X.V.V.W.O.2.!.;.$.` T N H A v q k f a 7 2 } _ ^ ~ ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ # # % & * - > ' ! ] ( [ 2 6 0 e j o u z F L R X +.*.'.].Q.M.M.J.P.O.L.N.Q.K.Q.M.O.Q.L.K.K.K.K.L.P.Q.O.J.J.Q.P.O.M.Q.L.P.P.N.P.L.Q.K.K.N.P.N.K.J.L.M.Q.J.N.O.P.P.J.O.M.L.Q.L.J.N.M.O.J.K.Q.K.O.Q.J.K.M.N.M.K.N.J.N.Q.{./.&...W Q K E y t o i d 0 5 1 < ( ] ! ' > - * & $ # # @ + + . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ @ # $ % * = ; , ! { / < | 4 8 c h m r x B H N T Z #.-.'.^.<.3.7.j.e.i.l.o.r.u.x.z.A.B.C.D.E.F.F.G.G.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.G.G.G.G.G.G.G.G.G.G.G.G.F.F.F.F.E.E.D.C.B.I.A.y.x.v.t.p.m.k.g.c.0.6.|.2.{.,.*.+.Y S M G A w q l g b 8 4 | : / { ) , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & = ; , ) ~ ^ _ } 2 6 a e j o u y D J P U ` #.-.'.].:.|.5.9.b.e.h.s.m.o.q.t.u.v.w.x.y.y.z.z.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.z.z.z.z.z.z.z.z.z.z.z.z.y.y.y.y.x.x.w.v.v.t.r.q.o.m.s.i.f.c.a.8.4.}._.~.,.*.@.Z T O I D y t o j e 0 6 2 [ _ ^ ~ ) > - = & % $ # @ @ + + . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + @ # $ % & * - > ' ! ] ( < 1 4 9 c g l q v z F K P V ` #.=./.~.(.<.1.5.8.a.c.e.g.i.k.l.m.n.n.o.p.p.p.q.q.q.q.q.q.r.r.r.r.r.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.p.p.p.p.o.o.n.n.m.l.s.i.h.f.d.b.0.7.4.|.:.^.!./.*.@.Z U P J E z v q l g b 8 4 | < ( ] ! ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + @ # # $ & * = ; , ) { / : } 2 6 0 e i n s w A F K P U Z @.&.;.'.{.(.:.}.3.5.8.9.a.b.c.d.e.f.f.g.g.h.h.h.h.h.h.h.i.i.i.i.i.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.g.g.g.g.f.f.e.e.d.c.b.j.0.9.7.5.1.}.:.^.~.,.-.%.+.Y U P K F A w r m i d 0 6 2 } _ ^ { ) , ; = * % $ # # @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & = - > ' ~ ] ( < | 4 8 b f j o s x B F K P T X .#.*.>.'.~.^._.:.[.|.3.4.5.6.7.8.8.9.9.0.0.0.0.0.0.0.a.a.a.a.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.9.9.8.8.8.7.6.5.4.3.1.}.<.2.(.].!.,.;.&.#. .X S O J F A x s n j f a 7 4 | < ( ] ~ ' > - = & % $ # @ @ + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + + @ # $ % & * - ; , ) { ^ _ [ 2 5 9 c g k o t x A F J N R V Z ..#.&.-./.'.!.{.^.(._.:.<.<.[.}.}.}.|.|.|.|.|.|.1.1.1.1.1.1.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.}.[.[.<.:.:.2._.^.].~.).,.>.=.&.#. .Y U Q N I E A x s o k g c 9 5 1 [ _ ^ { ) , ; - * & % $ # @ + + + . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % * = ; > ' ~ ] ( : | 3 6 0 d g k o s x A D H L P S V Y .@.$.&.=.;.>.,.'.).!.~.~.{.{.].].].].^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.].].].].{.{.~.~.!.).'.,.>.;.=.&.$.@. .Y V S P L H D z w s o k g d 0 6 3 } : ( ] ! ' > - = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & * - ; , ) ~ ^ ( < | 3 7 0 d g k o s v y B F I L O R U W Y ` ..@.#.$.%.&.*.=.=.-.-.;.;.;.;.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.;.;.;.;.-.-.=.=.*.&.%.$.#.@...` Y W U R O L I F B y v s o k g d 0 7 3 | < ( ^ ~ ) , ; - * & % $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . + + + @ # # $ % & = - > ' ! { / _ [ 1 4 7 0 d g j n q t x z C F H K M O Q S U V X Y Z ` . .....+.+.+.+.+.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.+.+.+.+.+..... . .` Z Y X V U S Q O M K H F C z x t q n j g c 0 7 4 1 [ _ ^ { ! ' > - = & % $ # # @ + + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & * = ; , ' ~ ] / : [ 1 4 7 0 c f i l o r u x z B D G I K L N O P Q R S T T U U V V V V W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W V V V V U U T T S R Q P O N L J I G D B z x u r o l i f c 0 7 4 1 [ : / ] ! ' , ; = * & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . + + + @ # # $ % & = - ; , ) ~ ] / : [ 1 4 6 9 b e h j m p r u w y z B D E G H I J K K L M M M N N N N N N O O O O O O O O N N N N N N N N N N N N N N N N N N N N N N M M M M L L L K J J I H G F D C A y x v t r o m j g d b 9 6 3 1 [ : / ] ~ ) , ; - * & % $ # # @ + + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & * = - > , ) ~ ] / : [ | 3 5 8 a c f h j m o q s u v x y y z A B C D D E E F F F F F G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G F F F F F E E D D C B A z y y x v u s q o m j h f c 0 8 5 3 | [ : / ] ~ ) , > - = * % % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ % & * = - > , ) ~ ] / _ < } 2 4 6 8 a c e g i k l n o q r s t u v w w x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x w w v u t s r q o n l k i g e c a 8 6 4 2 } < _ / ] ~ ) , > - = * & % $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . + + @ @ # # $ % & * = ; > ' ) ~ ] / ( : [ | 2 4 6 8 0 b d e g h j k l m n o o p p q q r r r r r s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s r r r r r q q p p o o n m l k j h g e d b 0 8 6 4 2 | [ : ( / ] ~ ) ' > ; = * & % $ # # @ @ + + . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ $ % & * = ; > , ) ~ { ^ ( : < } 1 3 4 6 8 9 a b c e f g g h i j j k k k l l l l l m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m l l l l l k k k j j i h g g f e c b a 9 8 6 4 3 1 } < : ( ^ { ~ ) , > ; = * & % $ $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ $ % & * = - > , ' ! ~ ] ^ ( _ < } | 1 3 4 5 7 8 9 0 a a b c c d d d e e e e e f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f e e e e e d d d c c b a a 0 9 8 7 5 4 3 1 | } < _ ( ^ ] ~ ! ' , > - = * & % $ $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ $ % & * = - ; , ' ) ~ { ] / ( _ < [ } | 2 3 4 5 5 6 7 7 8 8 9 9 0 0 0 0 0 a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a 0 0 0 0 0 9 9 8 8 7 7 6 5 5 4 3 2 | } [ < _ ( / ] { ~ ) ' , ; - = * & % $ $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . + + @ @ # # $ $ % & * = - ; > , ' ! ~ { ] ^ ( _ : < [ } } | 1 2 2 3 3 4 4 4 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 4 4 4 3 3 2 2 1 | } } [ < : _ ( ^ ] { ~ ! ' , > ; - = * & % $ $ # # @ @ + + . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # # $ $ % & * * = - ; > , ' ) ! ~ { ] ^ / ( _ _ : < < [ [ } } } | | | | | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | | | | | } } } [ [ < < : _ _ ( / ^ ] { ~ ! ) ' , > ; - = * * & % $ $ # # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ @ # $ $ % & & * = - ; ; > , ' ) ! ~ ~ { ] ^ ^ / / ( ( _ _ _ : : : : : : < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < : : : : : : _ _ _ ( ( / / ^ ^ ] { ~ ~ ! ) ' , > ; ; - = * & & % $ $ # @ @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ @ # # $ $ % & & * = - - ; > , , ' ) ) ! ! ~ ~ { { ] ] ] ^ ^ ^ ^ ^ ^ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / ^ ^ ^ ^ ^ ^ ] ] ] { { ~ ~ ! ! ) ) ' , , > ; - - = * & & % $ $ # # @ @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ # # $ $ % % & * * = = - ; ; > > , ' ' ) ) ) ! ! ! ~ ~ ~ ~ ~ ~ { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { ~ ~ ~ ~ ~ ~ ! ! ! ) ) ) ' ' , > > ; ; - = = * * & % % $ $ # # @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ # # $ $ % % & & * * = = - - ; ; > > > , , , ' ' ' ' ' ' ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ' ' ' ' ' ' , , , > > > ; ; - - = = * * & & % % $ $ # # @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ # # $ $ $ % % & & * * * = = = - - - - ; ; ; ; ; ; > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ; ; ; ; ; ; - - - - = = = * * * & & % % $ $ $ # # @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ @ # # $ $ $ % % % & & & * * * * * = = = = = = - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - = = = = = = * * * * * & & & % % % $ $ $ # # @ @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ @ # # # # $ $ $ % % % % % & & & & & & & * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * & & & & & & & % % % % % $ $ $ # # # # @ @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + @ @ @ @ # # # # $ $ $ $ $ % % % % % % % % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % % % % % % % % $ $ $ $ $ # # # # @ @ @ @ + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # # # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ # # # # # # # # @ @ @ @ @ @ + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + @ @ @ @ @ @ @ @ @ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @ @ @ @ @ @ @ @ @ + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
export constant icon = create(GtkImage,xpm_to_pixbuf(e_xpm))
|
||||||
|
------------------------------------------------------------------------------
|
544
eugtk/examples/examples/icon_I.e
Normal file
@ -0,0 +1,544 @@
|
|||||||
|
|
||||||
|
namespace i
|
||||||
|
|
||||||
|
-- exports i:icon
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
constant i_xpm = {
|
||||||
|
"130 250 282 2",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #010100",
|
||||||
|
"@ c #020200",
|
||||||
|
"# c #030300",
|
||||||
|
"$ c #040400",
|
||||||
|
"% c #050500",
|
||||||
|
"& c #060500",
|
||||||
|
"* c #070600",
|
||||||
|
"= c #080700",
|
||||||
|
"- c #090800",
|
||||||
|
"; c #0A0900",
|
||||||
|
"> c #0B0A00",
|
||||||
|
", c #0C0A00",
|
||||||
|
"' c #0D0B00",
|
||||||
|
") c #0E0C00",
|
||||||
|
"! c #0F0D00",
|
||||||
|
"~ c #100E00",
|
||||||
|
"{ c #110F00",
|
||||||
|
"] c #120F00",
|
||||||
|
"^ c #131000",
|
||||||
|
"/ c #141100",
|
||||||
|
"( c #151200",
|
||||||
|
"_ c #161300",
|
||||||
|
": c #171400",
|
||||||
|
"< c #181400",
|
||||||
|
"[ c #191500",
|
||||||
|
"} c #1A1600",
|
||||||
|
"| c #1B1700",
|
||||||
|
"1 c #1C1800",
|
||||||
|
"2 c #1D1900",
|
||||||
|
"3 c #1E1A00",
|
||||||
|
"4 c #1F1A00",
|
||||||
|
"5 c #201B00",
|
||||||
|
"6 c #211C00",
|
||||||
|
"7 c #221D00",
|
||||||
|
"8 c #231E00",
|
||||||
|
"9 c #241F00",
|
||||||
|
"0 c #251F00",
|
||||||
|
"a c #262000",
|
||||||
|
"b c #272100",
|
||||||
|
"c c #282200",
|
||||||
|
"d c #292300",
|
||||||
|
"e c #2A2401",
|
||||||
|
"f c #2B2401",
|
||||||
|
"g c #2C2501",
|
||||||
|
"h c #2D2601",
|
||||||
|
"i c #2E2701",
|
||||||
|
"j c #2F2801",
|
||||||
|
"k c #302901",
|
||||||
|
"l c #312901",
|
||||||
|
"m c #322A01",
|
||||||
|
"n c #332B01",
|
||||||
|
"o c #342C01",
|
||||||
|
"p c #352D01",
|
||||||
|
"q c #362E01",
|
||||||
|
"r c #372E01",
|
||||||
|
"s c #382F01",
|
||||||
|
"t c #393001",
|
||||||
|
"u c #3A3101",
|
||||||
|
"v c #3C3301",
|
||||||
|
"w c #3D3401",
|
||||||
|
"x c #3E3401",
|
||||||
|
"y c #3E3501",
|
||||||
|
"z c #3F3601",
|
||||||
|
"A c #403701",
|
||||||
|
"B c #423901",
|
||||||
|
"C c #433901",
|
||||||
|
"D c #443A01",
|
||||||
|
"E c #453B01",
|
||||||
|
"F c #463C01",
|
||||||
|
"G c #413801",
|
||||||
|
"H c #473D01",
|
||||||
|
"I c #483E01",
|
||||||
|
"J c #4A3F01",
|
||||||
|
"K c #4B4001",
|
||||||
|
"L c #4C4101",
|
||||||
|
"M c #4D4201",
|
||||||
|
"N c #493E01",
|
||||||
|
"O c #4E4301",
|
||||||
|
"P c #4F4301",
|
||||||
|
"Q c #514501",
|
||||||
|
"R c #524601",
|
||||||
|
"S c #534702",
|
||||||
|
"T c #544802",
|
||||||
|
"U c #554902",
|
||||||
|
"V c #3B3201",
|
||||||
|
"W c #504401",
|
||||||
|
"X c #574A02",
|
||||||
|
"Y c #594C02",
|
||||||
|
"Z c #5A4D02",
|
||||||
|
"` c #5B4E02",
|
||||||
|
" . c #5C4E02",
|
||||||
|
".. c #5D4F02",
|
||||||
|
"+. c #584B02",
|
||||||
|
"@. c #5F5102",
|
||||||
|
"#. c #605202",
|
||||||
|
"$. c #625302",
|
||||||
|
"%. c #635402",
|
||||||
|
"&. c #645502",
|
||||||
|
"*. c #655602",
|
||||||
|
"=. c #665702",
|
||||||
|
"-. c #685802",
|
||||||
|
";. c #6A5A02",
|
||||||
|
">. c #6B5B02",
|
||||||
|
",. c #6C5C02",
|
||||||
|
"'. c #6D5D02",
|
||||||
|
"). c #695902",
|
||||||
|
"!. c #6E5D02",
|
||||||
|
"~. c #705F02",
|
||||||
|
"{. c #726102",
|
||||||
|
"]. c #736202",
|
||||||
|
"^. c #746302",
|
||||||
|
"/. c #756302",
|
||||||
|
"(. c #766402",
|
||||||
|
"_. c #786602",
|
||||||
|
":. c #7A6802",
|
||||||
|
"<. c #7B6802",
|
||||||
|
"[. c #7C6902",
|
||||||
|
"}. c #7D6A02",
|
||||||
|
"|. c #7D6B03",
|
||||||
|
"1. c #716002",
|
||||||
|
"2. c #7F6D03",
|
||||||
|
"3. c #816E03",
|
||||||
|
"4. c #826F03",
|
||||||
|
"5. c #847103",
|
||||||
|
"6. c #857203",
|
||||||
|
"7. c #6F5E02",
|
||||||
|
"8. c #776502",
|
||||||
|
"9. c #7E6C03",
|
||||||
|
"0. c #877303",
|
||||||
|
"a. c #897503",
|
||||||
|
"b. c #8A7603",
|
||||||
|
"c. c #8C7803",
|
||||||
|
"d. c #8D7803",
|
||||||
|
"e. c #796702",
|
||||||
|
"f. c #887403",
|
||||||
|
"g. c #8B7703",
|
||||||
|
"h. c #8E7903",
|
||||||
|
"i. c #907B03",
|
||||||
|
"j. c #927D03",
|
||||||
|
"k. c #937D03",
|
||||||
|
"l. c #947E03",
|
||||||
|
"m. c #0B0B0B",
|
||||||
|
"n. c #0A0A0B",
|
||||||
|
"o. c #0A0B0A",
|
||||||
|
"p. c #0B0A0B",
|
||||||
|
"q. c #0B0A0A",
|
||||||
|
"r. c #0A0B0B",
|
||||||
|
"s. c #0A0A0A",
|
||||||
|
"t. c #101010",
|
||||||
|
"u. c #100F10",
|
||||||
|
"v. c #10100F",
|
||||||
|
"w. c #0F0F10",
|
||||||
|
"x. c #0F1010",
|
||||||
|
"y. c #100F0F",
|
||||||
|
"z. c #151515",
|
||||||
|
"A. c #151415",
|
||||||
|
"B. c #1B1A1A",
|
||||||
|
"C. c #1A1A1B",
|
||||||
|
"D. c #1A1B1A",
|
||||||
|
"E. c #1B1A1B",
|
||||||
|
"F. c #1A1A1A",
|
||||||
|
"G. c #0B0B0A",
|
||||||
|
"H. c #20201F",
|
||||||
|
"I. c #1F1F20",
|
||||||
|
"J. c #201F20",
|
||||||
|
"K. c #1F201F",
|
||||||
|
"L. c #201F1F",
|
||||||
|
"M. c #1F2020",
|
||||||
|
"N. c #1F1F1F",
|
||||||
|
"O. c #867203",
|
||||||
|
"P. c #252524",
|
||||||
|
"Q. c #252424",
|
||||||
|
"R. c #252425",
|
||||||
|
"S. c #252525",
|
||||||
|
"T. c #242524",
|
||||||
|
"U. c #242525",
|
||||||
|
"V. c #161515",
|
||||||
|
"W. c #564902",
|
||||||
|
"X. c #5E5002",
|
||||||
|
"Y. c #2A2A2A",
|
||||||
|
"Z. c #2A292A",
|
||||||
|
"`. c #0F100F",
|
||||||
|
" + c #2F302F",
|
||||||
|
".+ c #302F2F",
|
||||||
|
"++ c #2F2F2F",
|
||||||
|
"@+ c #30302F",
|
||||||
|
"#+ c #1A1B1B",
|
||||||
|
"$+ c #151516",
|
||||||
|
"%+ c #343535",
|
||||||
|
"&+ c #343435",
|
||||||
|
"*+ c #353535",
|
||||||
|
"=+ c #353434",
|
||||||
|
"-+ c #353435",
|
||||||
|
";+ c #353534",
|
||||||
|
">+ c #302F30",
|
||||||
|
",+ c #837003",
|
||||||
|
"'+ c #3A3A3A",
|
||||||
|
")+ c #393A3A",
|
||||||
|
"!+ c #3A393A",
|
||||||
|
"~+ c #393A39",
|
||||||
|
"{+ c #2F3030",
|
||||||
|
"]+ c #202020",
|
||||||
|
"^+ c #968003",
|
||||||
|
"/+ c #3F3F3F",
|
||||||
|
"(+ c #675802",
|
||||||
|
"_+ c #988203",
|
||||||
|
":+ c #444444",
|
||||||
|
"<+ c #444445",
|
||||||
|
"[+ c #9A8303",
|
||||||
|
"}+ c #444544",
|
||||||
|
"|+ c #4A4949",
|
||||||
|
"1+ c #49494A",
|
||||||
|
"2+ c #2A2B2A",
|
||||||
|
"3+ c #9C8503",
|
||||||
|
"4+ c #393939",
|
||||||
|
"5+ c #494A49",
|
||||||
|
"6+ c #4F4F4F",
|
||||||
|
"7+ c #4A4A49",
|
||||||
|
"8+ c #444545",
|
||||||
|
"9+ c #403F40",
|
||||||
|
"0+ c #3A3A39",
|
||||||
|
"a+ c #2F2F30",
|
||||||
|
"b+ c #957F03",
|
||||||
|
"c+ c #9D8603",
|
||||||
|
"d+ c #3F3E3F",
|
||||||
|
"e+ c #4F4F4E",
|
||||||
|
"f+ c #9E8703",
|
||||||
|
"g+ c #343534",
|
||||||
|
"h+ c #4E4E4F",
|
||||||
|
"i+ c #4A494A",
|
||||||
|
"j+ c #3F3F40",
|
||||||
|
"k+ c #8F7A03",
|
||||||
|
"l+ c #978103",
|
||||||
|
"m+ c #9F8703",
|
||||||
|
"n+ c #2A2A29",
|
||||||
|
"o+ c #454544",
|
||||||
|
"p+ c #4A4A4A",
|
||||||
|
"q+ c #454444",
|
||||||
|
"r+ c #403F3F",
|
||||||
|
"s+ c #A08803",
|
||||||
|
"t+ c #0F0F0F",
|
||||||
|
"u+ c #4E4F4E",
|
||||||
|
"v+ c #998203",
|
||||||
|
"w+ c #A18903",
|
||||||
|
"x+ c #4F4E4E",
|
||||||
|
"y+ c #2A2A2B",
|
||||||
|
"z+ c #917C03",
|
||||||
|
"A+ c #A28A03",
|
||||||
|
"B+ c #494949",
|
||||||
|
"C+ c #242425",
|
||||||
|
"D+ c #4E4F4F",
|
||||||
|
"E+ c #806D03",
|
||||||
|
"F+ c #A38B03",
|
||||||
|
"G+ c #454545",
|
||||||
|
"H+ c #3F4040",
|
||||||
|
"I+ c #9B8403",
|
||||||
|
"J+ c #494A4A",
|
||||||
|
"K+ c #3F403F",
|
||||||
|
"L+ c #2B2A2A",
|
||||||
|
"M+ c #A48C03",
|
||||||
|
"N+ c #1B1B1B",
|
||||||
|
"O+ c #4F4E4F",
|
||||||
|
"P+ c #303030",
|
||||||
|
"Q+ c #1B1B1A",
|
||||||
|
"R+ c #39393A",
|
||||||
|
"S+ c #343434",
|
||||||
|
"T+ c #454445",
|
||||||
|
"U+ c #151615",
|
||||||
|
"V+ c #3A3939",
|
||||||
|
"W+ c #3E3F3F",
|
||||||
|
"X+ c #40403F",
|
||||||
|
"Y+ c #2A2B2B",
|
||||||
|
"Z+ c #151514",
|
||||||
|
"`+ c #3F3F3E",
|
||||||
|
" @ c #4E4E4E",
|
||||||
|
".@ c #141515",
|
||||||
|
"+@ c #242424",
|
||||||
|
"@@ c #161516",
|
||||||
|
"#@ c #404040",
|
||||||
|
"$@ c #292A2A",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + @ @ @ @ @ @ @ @ @ @ @ @ + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + @ @ @ @ @ @ @ @ @ @ @ # # # # # # @ @ @ @ @ @ @ @ @ @ @ + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # # # # # # # # # # # # # # # # # # # @ @ @ @ @ @ + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + @ @ @ @ # # # # $ $ $ $ $ % % % % % % % % % % % % % % % % % % $ $ $ $ $ # # # # @ @ @ @ + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ @ # # # # $ $ $ % % % % % & & & & & & & & & & & & & & & & % % % % % $ $ $ # # # # @ @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ @ # # $ $ $ % % % & & & & * * * * = = = = = = = = = = = = * * * * & & & & % % % $ $ $ # # @ @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ # # $ $ $ % % & & * * * = = = - - - - - ; ; ; ; ; ; ; ; - - - - - = = = * * * & & % % $ $ $ # # @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ # # $ $ % % & & * * = = - - ; ; > > > , , , , , , , , , , , , , , > > > ; ; - - = = * * & & % % $ $ # # @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ # # $ $ % % & * * = = - ; ; > > , , ' ' ) ) ) ! ! ! ! ! ! ! ! ! ! ) ) ) ' ' , , > > ; ; - = = * * & % % $ $ # # @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ @ # # $ $ % & & * = - - ; > , , ' ) ) ! ! ~ ~ { { { { ] ] ] ] ] ] { { { { ~ ~ ! ! ) ) ' , , > ; - - = * & & % $ $ # # @ @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ @ # $ $ % & & * = - ; ; > , ' ) ! ~ ~ { ] ] ^ / / / ( ( ( ( ( ( ( ( ( ( / / / ^ ] ] { ~ ~ ! ) ' , > ; ; - = * & & % $ $ # @ @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # # $ $ % & * * = - ; > , ' ) ! ~ { ] ^ / ( _ _ : : < < [ [ [ [ [ [ [ [ < < : : _ _ ( / ^ ] { ~ ! ) ' , > ; - = * * & % $ $ # # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . + + @ @ # # $ $ % & * = - ; > , ' ! ~ { ] ^ / _ : < [ [ } | 1 1 2 2 2 2 3 3 2 2 2 2 1 1 | } [ [ < : _ / ^ ] { ~ ! ' , > ; - = * & % $ $ # # @ @ + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ $ % & * = - ; , ' ) ~ { ] / ( _ < [ } | 1 2 3 4 5 5 6 6 7 7 7 7 7 7 6 6 5 5 4 3 2 1 | } [ < _ ( / ] { ~ ) ' , ; - = * & % $ $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ $ % & * = - > , ' ! ~ ] ^ ( _ < [ | 1 3 4 5 6 7 8 9 0 0 a a a b b a a a 0 0 9 8 7 6 5 4 3 1 | [ < _ ( ^ ] ~ ! ' , > - = * & % $ $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ $ % & * = ; > , ) ~ { ^ ( : < } 1 3 4 6 8 9 0 b c d e f f g g h h h h g g f f e d c b 0 9 8 6 4 3 1 } < : ( ^ { ~ ) , > ; = * & % $ $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . + + @ @ # # $ % & * = ; > ' ) ~ ] / ( : [ | 2 4 6 8 0 b d e g h i j k l l m m m m m m l l k j i h g e d b 0 8 6 4 2 | [ : ( / ] ~ ) ' > ; = * & % $ # # @ @ + + . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ % & * = - > , ) ~ ] / _ < } 2 4 6 8 a c e g i j l n o p q r s s s t t s s s r q p o n l j i g e c a 8 6 4 2 } < _ / ] ~ ) , > - = * & % $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & * = - > , ) ~ ] / : [ | 3 5 8 0 c e h j l o q r t u v w x y y z z z z y y x w v u t r q o l j h e c 0 8 5 3 | [ : / ] ~ ) , > - = * & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . + + + @ # # $ % & = - ; , ) ~ ] / : [ 1 4 6 9 b e h j m p r t v x y A B C D E E F F F F E E D C B A y x v t r p m j h e b 9 6 4 1 [ : / ] ~ ) , ; - = & % $ # # @ + + + . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & * = ; , ' ~ ] / : [ 1 4 7 0 c f i l o r u w y G C E H I J K L M M M M M M L K J I H E C G y w u r o l i f c 0 7 4 1 [ : / ] ~ ' , ; = * & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . + + + @ # # $ % & = - > ' ! { / _ [ 1 4 7 0 d g j n q t w z B D H N L O P Q R S T T U U T T S R Q P O L N H D B z w t q n j g d 0 7 4 1 [ _ / { ! ' > - = & % $ # # @ + + + . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & * - ; , ) ~ ^ ( < | 3 7 0 d g k o s V y G E I K O W S U X Y Z ` ......... .` Z Y X U S W O K I E G y V s o k g d 0 7 3 | < ( ^ ~ ) , ; - * & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % * = ; > ' ~ ] ( : | 3 6 0 d g k o s v z C H K O R U +.Z ..@.#.$.%.&.*.*.*.*.&.%.$.#.@...Z +.U R O K H C z v s o k g d 0 6 3 | : ( ] ~ ' > ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + + @ # $ % & * - ; , ) { ^ _ [ 2 5 9 c g k o t w A E N M Q U +. .@.$.&.=.-.;.>.,.'.'.'.'.,.>.;.-.=.&.$.@. .+.U Q M N E A w t o k g c 9 5 2 [ _ ^ { ) , ; - * & % $ # @ + + + . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & = - > ' ~ ] ( < | 4 8 b f j o s w G E J P S X ` @.%.=.).,.!.~.{.].^././././.^.].{.~.!.,.).=.%.@.` X S P J E G w s o j f b 8 4 | < ( ] ~ ' > - = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + @ # # $ & * = ; , ) { / : } 2 6 0 e i n s v A E J P T Y ..$.=.;.'.~.].(._.:.<.[.}.|.|.}.[.<.:._.(.].~.'.;.=.$...Y T P J E A v s n i e 0 6 2 } : / { ) , ; = * & $ # # @ + + . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + @ # $ % & * - > ' ! ] ( < 1 4 9 c g l q V z E J P U Z @.&.-.,.1.^._.<.}.2.3.4.5.5.6.6.5.5.4.3.2.}.<._.^.1.,.-.&.@.Z U P J E z V q l g c 9 4 1 < ( ] ! ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & = ; , ) ~ ^ _ } 2 6 a e j o u y C N P T Z @.*.;.7.].8.<.9.3.5.0.a.b.c.d.d.d.d.c.b.a.0.5.3.9.<.8.].7.;.*.@.Z T P N C y u o j e a 6 2 } _ ^ ~ ) , ; = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ @ # $ % * = ; , ! { / < | 4 8 c h m r w G H M S Y @.&.;.7.^.e.|.3.6.f.g.h.i.j.k.l.l.l.l.k.j.i.h.g.f.6.3.|.e.^.7.;.&.@.Y S M H G w r m h c 8 4 | < / { ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ # # % & * - > ' ! ] ( [ 2 6 0 e j o u z E K Q X ..%.).7.m.n.o.p.q.r.o.m.r.n.m.r.m.r.o.n.s.n.s.s.r.m.p.n.p.q.r.q.7.).%...X Q K E z u o j e 0 6 2 [ ( ] ! ' > - * & % # # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ # $ % & = - > ) ~ ^ _ } 3 7 b g l r w B I O U ` $.-.!./.r.t.u.t.v.t.w.u.v.x.t.y.u.v.t.t.t.x.t.u.t.t.x.u.t.w.t.o./.!.-.$.` U O I B w r l g b 7 3 } _ ^ ~ ) > - = & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + + @ # $ % & = ; , ) { / < | 4 9 d i o t y E K R Y @.=.'.].:.p.u.z.z.z.z.z.A.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.t.n.:.].'.=.@.Y R K E y t o i d 9 4 | < / { ) , ; = & % $ # @ + + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ @ # $ % * = ; , ! ] ( < 1 6 0 e k q v G I O U .%.;.1._.|.p.t.z.B.C.D.D.E.F.C.F.F.D.D.B.F.C.B.F.F.B.F.B.F.F.z.t.G.|._.1.;.%. .U O I G v q k e 0 6 1 < ( ] ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ' ! ] _ [ 2 7 b g l r x C J Q +.@.=.!./.[.4.n.x.z.F.H.I.J.J.J.J.K.L.H.J.I.M.M.K.N.M.I.J.N.N.F.z.v.s.4.[./.!.=.@.+.Q J C x r l g b 7 2 [ _ ] ! ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # # $ & * - > ' ~ ^ _ } 3 8 c h n t z F M T ` %.;.1.e.2.O.s.w.z.F.K.P.Q.R.P.S.R.S.S.S.R.S.S.T.S.U.P.P.Q.M.F.V.t.n.O.2.e.1.;.%.` T M F z t n h c 8 3 } _ ^ ~ ' > - * & $ # # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & * - > ) { / : | 4 9 d j p V G H P W.X.*.'.^.[.4.b.G.t.z.B.L.U.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Z.Y.Y.Y.Y.Y.S.M.F.z.t.o.b.4.[.^.'.*.X.W.P H G V p j d 9 4 | : / { ) > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & = ; , ) { / < 1 5 0 e k q v B N Q +.#.-.7.8.9.O.d.n.`.A.F.L.R.Y. +.+ +++++++++++@+++++++.+++Y.P.J.#+$+t.m.d.O.9.8.7.-.#.+.Q N B v q k e 0 5 1 < / { ) , ; = & % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & = ; , ! { ( < 1 6 a f l r x D K R Z $.;.{.:.3.a.i.n.t.z.B.J.S.Y.++%+%+&+*+=+-+%+;+=+;+=+=+>+Y.S.H.#+z.x.G.i.a.3.:.{.;.$.Z R K D x r l f a 6 1 < ( { ! , ; = & % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & = ; , ! ] ( [ 2 7 b g m s y E L T .&.,.^.[.,+g.k.r.y.z.B.K.S.Y.++%+'+)+'+'+!+'+'+'+!+~+=+{+Y.S.]+C.z.`.m.k.g.,+[.^.,.&. .T L E y s m g b 7 2 [ ( ] ! , ; = & % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % * = ; ' ! ] ( [ 3 7 b h n t z F O W.X.=.!.(.9.O.h.^+G.w.z.D.L.R.Y.@+-+)+/+/+/+/+/+/+/+/+'+%+ +Y.P.L.E.z.`.m.^+h.O.9.(.!.=.X.W.O F z t n h b 7 3 [ ( ] ! ' ; = * % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % * = ; ' ! ] _ } 3 8 c i o u A H P X @.(+~._.2.f.i._+o.u.z.C.L.U.Y.>+-+)+/+:+:+<+<+:+<+/+'+*+ +Y.S.]+F.z.v.p._+i.f.2._.~.(+@.X P H A u o i c 8 3 } _ ] ! ' ; = * % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + @ @ # $ % * - > ' ~ ^ _ } 3 8 c i o V G I W +.#.).1.:.3.b.j.[+q.t.z.B.I.S.Y.++&+'+/+}+|+|+1+1+:+/+'+&+++2+P.H.D.z.u.o.[+j.b.3.:.1.).#.+.W I G V o i c 8 3 } _ ^ ~ ' > - * % $ # @ @ + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ % * - > ' ~ ^ _ } 4 9 d j p v B N Q Y $.;.].<.,+g.l.3+n.x.z.F.N.U.Y..+-+4+/+:+5+6+6+7+8+9+0+%+a+2+S.H.B.z.v.s.3+l.g.,+<.].;.$.Y Q N B v p j d 9 4 } _ ^ ~ ' > - * % $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ % * - > ' ~ ^ : | 4 9 d j q v B J R Z $.>.^.[.5.d.b+c+o.x.z.F.M.T.Y.++=+'+d+<+5+e+6+1+:+/+'+;+ +Y.S.M.F.z.u.G.c+b+d.5.[.^.>.$.Z R J B v q j d 9 4 | : ^ ~ ' > - * % $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ' ~ ^ : | 4 9 e k q w C K S ` %.,./.|.6.h.^+f+m.w.z.C.J.S.Y..+g+'+/+<+7+h+6+i+8+j+'+=+a+Y.S.I.F.z.x.p.f+^+h.6.|./.,.%.` S K C w q k e 9 4 | : ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ' ~ ^ : | 5 0 e k q w C K S ` &.'./.|.O.k+l+m+p.v.z.C.N.R.n+++-+'+/+o+1+6+6+p+q+r+'+;+.+Y.S.N.F.$+u.m.m+l+k+O.|./.'.&.` S K C w q k e 0 5 | : ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) ~ / : | 5 0 e k r x D L T .*.'.(.9.0.i._+s+q.t+z.F.H.S.Y.a+&+)+/+<+i+u+6+7+q+j+'+*+++Y.S.N.B.z.u.p.s+_+i.0.9.(.'.*. .T L D x r k e 0 5 | : / ~ ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) ~ / : | 5 0 f l r x D L T ..*.!.8.2.f.i.v+w+s.x.z.D.M.T.Y..+*+!+/+8+|+x+6+i+q+r+'+=+++y+U.N.C.z.u.o.w+v+i.f.2.8.!.*...T L D x r l f 0 5 | : / ~ ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / : 1 5 0 f l r x E L U ..=.!.8.2.f.z+[+A+q.t.z.B.]+S.Y.a+-+!+/+}+B+h+6+i+}+/+'+g+a+Y.S.I.F.z.t.q.A+[+z+f.2.8.!.=...U L E x r l f 0 5 1 : / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 0 f l r x E M U ..=.7.8.2.f.z+[+A+r.u.z.B.K.C+Y.++;+0+/+:+B+D+6+7+:+/+'+%+>+Y.S.K.F.z.v.s.A+[+z+f.2.8.7.=...U M E x r l f 0 5 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 0 f l s y E M U ..=.7._.E+a.j.[+F+p.`.z.F.L.Q.n+.+;+~+/+q+|+D+6+p+G+H+)+-+a+Y.S.]+D.z.v.o.F+[+j.a.E+_.7.=...U M E y s l f 0 5 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 0 f l s y E M U ..=.7._.E+a.j.[+F+G.`.z.F.I.U.Y.a+*+4+/+:+B+D+6+p+}+/+'+;+>+Y.S.M.C.z.t.n.F+[+j.a.E+_.7.=...U M E y s l f 0 5 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 a f l s y E M U X.=.7._.E+a.j.I+F+G.t.z.C.L.S.Y..+;+)+/+}+J+e+6+p+}+/+'+;+{+Y.S.N.B.z.t.G.F+I+j.a.E+_.7.=.X.U M E y s l f a 5 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y E M U X.(+7._.E+a.j.I+F+r.u.z.B.L.P.Y..+%+'+/+<+|+6+6+p+:+K+'+;+@+L+R.H.D.V.x.G.F+I+j.a.E+_.7.(+X.U M E y s l f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y E M U X.(+7._.E+a.j.I+F+p.t.z.D.H.U.Y.a+=+'+/+}+7+6+6+i+q+K+'+*+a+Y.P.]+F.z.v.n.F+I+j.a.E+_.7.(+X.U M E y s l f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y F M W.X.(+~.e.3.b.k.3+M+m.`.z.N+M.U.Y..+%+!+/+:+B+u+6+7+:+/+'+*+a+y+S.H.C.z.t.G.M+3+k.b.3.e.~.(+X.W.M F y s l f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y F M W.X.(+~.e.3.b.k.3+M+s.t.z.D.]+R.Y.++%+'+/+<+B+6+6+|+:+9+'+&+++Y.S.J.F.z.t.r.M+3+k.b.3.e.~.(+X.W.M F y s l f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y F M W.X.(+~.e.3.b.k.3+M+n.t.z.F.K.S.Y. +&+0+/+}+7+O+6+p+<+j+'+;+P+Y.Q.I.D.z.u.q.M+3+k.b.3.e.~.(+X.W.M F y s l f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+n.x.z.Q+K.S.Y.{+=+)+/+:+7+6+6+B+8+/+'+;+.+Y.S.I.F.$+v.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+m.v.z.F.H.S.Y.++&+0+/+:+5+O+6+J+:+j+'+g+a+Y.S.J.F.z.w.m.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+o.t.z.D.]+P.Y.>+&+!+/+q+5+O+6+p+8+K+R+%+++Y.S.J.B.$+v.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+n.u.z.C.M.S.Y.++*+'+/+:+B+e+6+i+o+r+'+*+@+L+S.M.F.z.u.n.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+q.t.z.F.M.U.Y.>+*+)+/+q+|+h+6+7+8+/+'+%+@+Y.P.]+F.z.v.m.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+n.t.z.F.I.U.Y. +-+'+/+:+B+6+6+i+}+/+'+S+a+Y.S.N.#+z.`.m.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+o.`.z.F.J.S.Y. +%+0+/+q+5+6+6+p+T+r+'+=+ +Y.S.L.C.z.t.q.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+o.t.z.F.J.U.Y.++&+'+/+:+|+6+6+B+q+j+'+*+ +Y.P.K.#+U+v.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+p.t.z.D.H.C+Y..+&+V+/+:+7+6+6+J+q+/+)+g+a+y+S.L.C.z.t.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+G.t.z.F.I.C+Y.>+S+R+/+:+p+e+6+1+o+r+'+-+ +Y.S.K.F.z.u.m.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+G.w.z.F.J.S.Y.++%+'+/+:+i+u+6+p+8+/+'+g+ +2+S.I.F.z.t.q.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+q.v.z.F.]+U.Y. +&+V+/+:+p+D+6+p+:+r+'+S+@+2+S.]+D.z.t.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+p.t.z.D.K.S.Y.++g+'+/+:+5+u+6+7+o+K+'+&+a+Y.P.J.C.z.x.n.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+r.x.z.F.H.S.Y.++;+'+W+o+|+6+6+B+<+X+'+*+P+Y+P.J.F.z.x.p.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+s.u.z.F.L.U.Y. +=+V+/+q+5+D+6+5+}+/+!+;+a+Y.S.N.D.z.x.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+r.u.Z+F.N.P.Y. +S+'+`+T+5+6+6+i+o+r+V+*+@+Y.P.]+D.z.t.q.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+s.x.z.D.M.S.Y. +=+~+/+:+|+O+6+1+:+r+'+%+{+y+S.H.N+z.v.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+r.t.z.D.N.T.Z.++-+0+/+}+i+6+6+1+G+/+'+-+{+Y.S.L.C.z.t.n.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+p.t.z.F.J.Q.Y. +g+V+/+:+5+6+6+i+8+r+'+*+++Y.U.]+C.V.u.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+r.t.Z+#+H.S.Y.++=+'+/+:+B+6+6+p+8+r+'+;+++Y.C+]+F.z.t.s.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+p.t.z.#+I.T.Y..+=+'+`+<+J+ @6+p+q+X+'+*+.+Y.U.J.D.z.t.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+q.`.z.F.]+P.Y. +*+'+/+}+i+O+6+7+<+/+'+S+.+Y.S.H.N+z.x.r.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+G.t.z.F.M.P.Y.++*+R+/+:+|+O+6+p+}+j+'+*+ +Y.P.L.D.z.u.n.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+m.t..@Q+J.Q.Y.++&+'+/+}+J+h+6+p+q+H+'+g+{+L+S.K.B.z.x.r.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+o.t.z.B.I.S.Y.++-+0+/+q+1+6+6+7+}+r+0+%+>+Y.R.M.D.$+y.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+r.x.z.D.K.R.Y.++g+~+/+q+1+6+6+J+q+/+)+%+ +Y.C+H.E.V.v.q.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+n.t.z.F.H.+@Y..+*+'+/+<+7+O+6+J+}+/+'+*+a+L+R.J.F.z.x.s.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+q.v.z.D.H.S.Y. +&+!+/+:+1+D+6+i+G+/+'+%+>+Y.S.J.C.z.x.m.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+n.t.z.F.K.U.Y. +&+)+/+:+1+6+6+5+}+K+'+;+.+y+S.J.E.z.t.r.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+m.v.z.F.J.U.Y.++%+!+/+:+J+6+6+i+o+/+0+%+a+Y.R.M.F.$+x.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+s.v.z.Q+L.S.Y.++%+!+/+q+5+D+6+p+8+/+'+;+a+Y.R.J.Q+z.u.p.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+r.t.z.C.J.S.Y.++=+V+/+:+J+6+6+7+8+j+'+%+++y+S.M.F.@@t.p.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+s.t.z.B.N.T.Y..+=+)+/+}+B+6+6+J+:+#@'+*+.+y+R.J.B.@@v.q.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+r.t.z.B.H.S.Y.++;+)+/+:+7+ @6+p+8+/+'+-+++Y+S.K.E.$+v.G.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+q.t.z.C.I.S.Y.++S+'+/+q+1+ @6+p+q+j+'+;+ +2+S.]+F.z.t.q.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+o.x.z.F.I.T.Y..+g+0+/+:+J+6+6+J+:+j+'+-+.+Y.P.L.F.z.t.p.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+o.t.z.B.I.P.Y..+S+~+/+}+5+h+6+J+T+r+'+*+@+Y.R.L.B.z.t.m.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+o.v.z.F.M.S.Y.a+*+!+/+:+i+D+6+|+o+r+!+%+a+Y.Q.K.B.z.t.s.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+o.v.z.N+J.P.Y.++S+V+/+:+1+x+6+5+8+r+'+*+@+Y.S.I.C.z.y.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+p.x.z.C.L.R.Y.++&+!+/+<+i+h+6+p+:+/+0+g+.+Y+R.N.Q+z.t.m.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+p.v.z.F.J.T.Y.++S+)+/+o+p+6+6+J+G+/+'+-+@+Y.S.]+B.V.v.m.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+s.u.z.F.N.S.Y.++%+)+/+:+7+6+6+p+q+/+'+-+a+Y.S.L.#+z.t.n.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+n.x.z.D.J.C+Y.++=+~+/+<+|+6+6+i+}+/+'+%+>+Y.S.M.N+z.t.p.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+m.x.z.F.K.P.Y.++=+)+/+<+i+O+6+J+T+/+0+%+++2+S.]+C.z.t.G.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+s.x.z.#+L.S.Y.++S+)+/+:+B+x+6+p+8+H+!+%+@+y+S.K.#+z.t.o.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+n.v.z.E.]+Q.Y.++%+'+/+:+B+x+6+p+q+j+'+&+++Y.P.M.N+z.u.m.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+G.x.z.D.J.S.$@++%+'+/+}+J+u+6+i+}+K+'+%+++Y.R.]+#+z.t.n.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+s.v.z.F.]+R.Y. +*+'+/+:+|+D+6+7+}+/+'+*+.+Y.S.J.B.z.x.n.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+p.x.z.F.L.P.Y..+g+R+/+:+J+6+6+p+<+X+0+-+a+Y.S.J.B.z.x.p.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+o.t.z.B.M.R.Y.@+&+'+/+:+i+6+6+J+<+/+'+&+.+Y.P.]+F.z.t.r.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f m s y F O W.X.(+~.e.3.b.k.3+M+o.t.z.B.M.Q.Y.a+&+'+/+<+5+6+6+7+q+/+'+*+a+Y.S.M.C.z.t+q.M+3+k.b.3.e.~.(+X.W.O F y s m f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y F M W.X.(+~.e.3.b.k.3+M+m.`.z.F.K.U.Y.++-+V+/+:+|+x+6+i+:+r+'+;+a+L+S.H.B.z.v.o.M+3+k.b.3.e.~.(+X.W.M F y s l f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y F M W.X.(+~.e.3.b.k.3+M+G.u.z.F.H.P.$@++&+!+/+:+7+6+6+1+8+/+'+-+a+Y.S.J.C.z.t.s.M+3+k.b.3.e.~.(+X.W.M F y s l f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y F M W.X.(+~.e.3.b.k.3+M+n.w.z.F.H.S.Y..+-+V+/+q+i+6+6+J+8+r+'+-+.+Y.S.]+B.z.v.G.M+3+k.b.3.e.~.(+X.W.M F y s l f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y E M U X.(+7._.E+a.j.I+F+r.t.z.F.N.S.Y.++&+)+/+:+B+O+6+J+T+/+'+%+{+Y.S.L.F.z.w.m.F+I+j.a.E+_.7.(+X.U M E y s l f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 6 a f l s y E M U X.(+7._.E+a.j.I+F+n.t.z.B.K.U.Y.>+*+R+/+:+7+6+6+B+8+r+'+*+{+Y.C+M.D.z.u.q.F+I+j.a.E+_.7.(+X.U M E y s l f a 6 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 a f l s y E M U X.=.7._.E+a.j.I+F+o.t.z.B.M.R.Y.a+=+!+/+:+1+6+6+J+:+/+'+*+.+Y.P.H.F.z.u.o.F+I+j.a.E+_.7.=.X.U M E y s l f a 5 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 0 f l s y E M U ..=.7._.E+a.j.[+F+q.v.z.F.H.U.Y.++*+)+/+:+i+6+6+J+o+j+'+*+a+Y.S.]+F.z.t.p.F+[+j.a.E+_.7.=...U M E y s l f 0 5 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 0 f l s y E M U ..=.7._.E+a.j.[+F+G.u.z.F.I.P.Y.++%+'+/+T+J+6+6+J+<+K+'+*+ +Y.R.J.B.z.u.p.F+[+j.a.E+_.7.=...U M E y s l f 0 5 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / < 1 5 0 f l r x E M U ..=.7.8.2.f.z+[+A+o.u.z.F.K.T.Y.++;+)+/+}+i+h+6+i+G+/+'+-+P+Y.U.L.B.z.u.m.A+[+z+f.2.8.7.=...U M E x r l f 0 5 1 < / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) { / : 1 5 0 f l r x E L U ..=.!.8.2.f.z+[+A+G.v.z.D.M.S.Y.++S+R+/+:+i+ @6+p+G+/+'+&+.+L+P.N.B.z.t.m.A+[+z+f.2.8.!.=...U L E x r l f 0 5 1 : / { ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) ~ / : | 5 0 f l r x D L T ..*.!.8.2.f.i.v+w+o.x.z.F.M.U.Y.++%+!+/+8+7+x+6+p+}+r+0+;+++Y.U.N.E.z.t.n.w+v+i.f.2.8.!.*...T L D x r l f 0 5 | : / ~ ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ) ~ / : | 5 0 e k r x D L T .*.'.(.9.0.i._+s+s.t.z.C.N.U.Y.++S+V+/+:+p+O+6+i+q+K+'+-+ +y+S.J.F.V.t.s.s+_+i.0.9.(.'.*. .T L D x r k e 0 5 | : / ~ ) > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ' ~ ^ : | 5 0 e k q w C K S ` &.'./.|.O.k+l+m+r.t.z.F.K.S.Y.++&+)+/+:+5+D+6+p+}+j+'+-+.+Y.S.J.B.z.t.q.m+l+k+O.|./.'.&.` S K C w q k e 0 5 | : ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ' ~ ^ : | 4 9 e k q w C K S ` %.,./.|.6.h.^+f+p.t.z.F.H.U.Y.a+%+)+/+:+1+6+6+1+T+/+'+*+.+y+P.J.Q+z.u.n.f+^+h.6.|./.,.%.` S K C w q k e 9 4 | : ^ ~ ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ % * - > ' ~ ^ : | 4 9 d j q v B J R Z $.>.^.[.5.d.b+c+q.t.z.F.M.P.Y. +;+'+/+}+B+x+6+p+}+/+'+-+P+L+S.H.C.z.t.r.c+b+d.5.[.^.>.$.Z R J B v q j d 9 4 | : ^ ~ ' > - * % $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . + + @ @ # $ % * - > ' ~ ^ _ } 4 9 d j p v B N Q Y $.;.].<.,+g.l.3+o.t.z.D.K.S.Y.++;+~+`+:+i+O+6+5+:+9+'+-+++Y.S.H.#+z.x.o.3+l.g.,+<.].;.$.Y Q N B v p j d 9 4 } _ ^ ~ ' > - * % $ # @ @ + + . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + @ @ # $ % * - > ' ~ ^ _ } 3 8 c i o V G I W +.#.).1.:.3.b.j.[+s.v.z.F.N.S.Y.++%+~+/+o+5+7+p+p+:+/+'+%+ +Y.S.L.F.z.t.m.[+j.b.3.:.1.).#.+.W I G V o i c 8 3 } _ ^ ~ ' > - * % $ # @ @ + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % * = ; ' ! ] _ } 3 8 c i o u A H P X @.(+~._.2.f.i._+m.x.z.F.N.T.Y.{+=+R+/+}+:+:+8+G+T+r+'+*+++2+S.]+D.z.t.q._+i.f.2._.~.(+@.X P H A u o i c 8 3 } _ ] ! ' ; = * % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % * = ; ' ! ] ( [ 3 7 b h n t z F O W.X.=.!.(.9.O.h.^+s.t.z.B.]+S.Y.a+;+'+W+K+K+/+/+/+/+r+'+;+{+Y.S.]+B.z.x.n.^+h.O.9.(.!.=.X.W.O F z t n h b 7 3 [ ( ] ! ' ; = * % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & = ; , ! ] ( [ 2 7 b g m s y E L T .&.,.^.[.,+g.k.p.t.z.#+H.P.Y.a+S+0+'+'+0+'+'+'+'+'+'+-+.+L+U.]+F.z.x.n.k.g.,+[.^.,.&. .T L E y s m g b 7 2 [ ( ] ! , ; = & % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & = ; , ! { ( < 1 6 a f l r x D K R Z $.;.{.:.3.a.i.G.v.A.D.K.S.Y.++-+g+-+&+;+=+*+%+*+-+=+*+P+L+R.J.F.z.t.G.i.a.3.:.{.;.$.Z R K D x r l f a 6 1 < ( { ! , ; = & % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & = ; , ) { / < 1 5 0 e k q v B N Q +.#.-.7.8.9.O.d.p.t.z.Q+I.S.Y.++.+++ + +++++@+>+ +.+a+@+ +2+S.N.F.z.t.r.d.O.9.8.7.-.#.+.Q N B v q k e 0 5 1 < / { ) , ; = & % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # $ % & * - > ) { / : | 4 9 d j p V G H P W.X.*.'.^.[.4.b.n.x.z.#+K.R.Y.Y.Y.Y.Y.Y.Y.Y.2+Y.2+y+Y.Y.Y.2+S.I.#+z.t.m.b.4.[.^.'.*.X.W.P H G V p j d 9 4 | : / { ) > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ # # $ & * - > ' ~ ^ _ } 3 8 c h n t z F M T ` %.;.1.e.2.O.o.u.z.F.J.S.P.S.U.S.S.S.R.U.T.U.U.R.R.R.S.S.S.]+F.z.x.G.O.2.e.1.;.%.` T M F z t n h c 8 3 } _ ^ ~ ' > - * & $ # # @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ @ # $ & * - > ' ! ] _ [ 2 7 b g l r x C J Q +.@.=.!./.[.4.G.t.z.D.K.N.H.J.L.L.M.H.L.I.N.H.N.M.M.M.L.J.I.]+E.z.t.p.4.[./.!.=.@.+.Q J C x r l g b 7 2 [ _ ] ! ' > - * & $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + @ @ # $ % * = ; , ! ] ( < 1 6 0 e k q v G I O U .%.;.1._.|.p.t+z.F.N+D.F.F.B.#+F.C.Q+F.Q+C.C.C.F.F.B.B.F.#+C.z.t.G.|._.1.;.%. .U O I G v q k e 0 6 1 < ( ] ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . + + + @ # $ % & = ; , ) { / < | 4 9 d i o t y E K R Y @.=.'.].:.s.t.z.z.z.z.z.V.z.z.z.z.z.z.z.z.$+z.z.z.z.z.z.$+z.U+t.r.:.].'.=.@.Y R K E y t o i d 9 4 | < / { ) , ; = & % $ # @ + + + . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ # $ % & = - > ) ~ ^ _ } 3 7 b g l r w B I O U ` $.-.!./.n.t.t.t.t.u.v.v.t.x.x.t.u.t.x.u.v.x.t.x.t.`.v.t.t.t.t.s./.!.-.$.` U O I B w r l g b 7 3 } _ ^ ~ ) > - = & % $ # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ # # % & * - > ' ! ] ( [ 2 6 0 e j o u z E K Q X ..%.).7.n.n.G.q.G.p.m.o.r.s.o.p.m.m.n.q.s.n.q.o.o.q.p.G.G.s.o.r.7.).%...X Q K E z u o j e 0 6 2 [ ( ] ! ' > - * & % # # @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ @ # $ % * = ; , ! { / < | 4 8 c h m r w G H M S Y @.&.;.7.^.e.|.3.6.f.g.h.i.j.k.l.l.l.l.k.j.i.h.g.f.6.3.|.e.^.7.;.&.@.Y S M H G w r m h c 8 4 | < / { ! , ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & = ; , ) ~ ^ _ } 2 6 a e j o u y C N P T Z @.*.;.7.].8.<.9.3.5.0.a.b.c.d.d.d.d.c.b.a.0.5.3.9.<.8.].7.;.*.@.Z T P N C y u o j e a 6 2 } _ ^ ~ ) , ; = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + @ # $ % & * - > ' ! ] ( < 1 4 9 c g l q V z E J P U Z @.&.-.,.1.^._.<.}.2.3.4.5.5.6.6.5.5.4.3.2.}.<._.^.1.,.-.&.@.Z U P J E z V q l g c 9 4 1 < ( ] ! ' > - * & % $ # @ + + . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + @ # # $ & * = ; , ) { / : } 2 6 0 e i n s v A E J P T Y ..$.=.;.'.~.].(._.:.<.[.}.|.|.}.[.<.:._.(.].~.'.;.=.$...Y T P J E A v s n i e 0 6 2 } : / { ) , ; = * & $ # # @ + + . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & = - > ' ~ ] ( < | 4 8 b f j o s w G E J P S X ` @.%.=.).,.!.~.{.].^././././.^.].{.~.!.,.).=.%.@.` X S P J E G w s o j f b 8 4 | < ( ] ~ ' > - = & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . + + + @ # $ % & * - ; , ) { ^ _ [ 2 5 9 c g k o t w A E N M Q U +. .@.$.&.=.-.;.>.,.'.'.'.'.,.>.;.-.=.&.$.@. .+.U Q M N E A w t o k g c 9 5 2 [ _ ^ { ) , ; - * & % $ # @ + + + . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % * = ; > ' ~ ] ( : | 3 6 0 d g k o s v z C H K O R U +.Z ..@.#.$.%.&.*.*.*.*.&.%.$.#.@...Z +.U R O K H C z v s o k g d 0 6 3 | : ( ] ~ ' > ; = * % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & * - ; , ) ~ ^ ( < | 3 7 0 d g k o s V y G E I K O W S U X Y Z ` ......... .` Z Y X U S W O K I E G y V s o k g d 0 7 3 | < ( ^ ~ ) , ; - * & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . + + + @ # # $ % & = - > ' ! { / _ [ 1 4 7 0 d g j n q t w z B D H N L O P Q R S T T U U T T S R Q P O L N H D B z w t q n j g d 0 7 4 1 [ _ / { ! ' > - = & % $ # # @ + + + . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & * = ; , ' ~ ] / : [ 1 4 7 0 c f i l o r u w y G C E H I J K L M M M M M M L K J I H E C G y w u r o l i f c 0 7 4 1 [ : / ] ~ ' , ; = * & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . + + + @ # # $ % & = - ; , ) ~ ] / : [ 1 4 6 9 b e h j m p r t v x y A B C D E E F F F F E E D C B A y x v t r p m j h e b 9 6 4 1 [ : / ] ~ ) , ; - = & % $ # # @ + + + . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . + + @ @ # $ % & * = - > , ) ~ ] / : [ | 3 5 8 0 c e h j l o q r t u v w x y y z z z z y y x w v u t r q o l j h e c 0 8 5 3 | [ : / ] ~ ) , > - = * & % $ # @ @ + + . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ % & * = - > , ) ~ ] / _ < } 2 4 6 8 a c e g i j l n o p q r s s s t t s s s r q p o n l j i g e c a 8 6 4 2 } < _ / ] ~ ) , > - = * & % $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . + + @ @ # # $ % & * = ; > ' ) ~ ] / ( : [ | 2 4 6 8 0 b d e g h i j k l l m m m m m m l l k j i h g e d b 0 8 6 4 2 | [ : ( / ] ~ ) ' > ; = * & % $ # # @ @ + + . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ $ % & * = ; > , ) ~ { ^ ( : < } 1 3 4 6 8 9 0 b c d e f f g g h h h h g g f f e d c b 0 9 8 6 4 3 1 } < : ( ^ { ~ ) , > ; = * & % $ $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ $ % & * = - > , ' ! ~ ] ^ ( _ < [ | 1 3 4 5 6 7 8 9 0 0 a a a b b a a a 0 0 9 8 7 6 5 4 3 1 | [ < _ ( ^ ] ~ ! ' , > - = * & % $ $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # $ $ % & * = - ; , ' ) ~ { ] / ( _ < [ } | 1 2 3 4 5 5 6 6 7 7 7 7 7 7 6 6 5 5 4 3 2 1 | } [ < _ ( / ] { ~ ) ' , ; - = * & % $ $ # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . + + @ @ # # $ $ % & * = - ; > , ' ! ~ { ] ^ / _ : < [ [ } | 1 1 2 2 2 2 3 3 2 2 2 2 1 1 | } [ [ < : _ / ^ ] { ~ ! ' , > ; - = * & % $ $ # # @ @ + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ # # $ $ % & * * = - ; > , ' ) ! ~ { ] ^ / ( _ _ : : < < [ [ [ [ [ [ [ [ < < : : _ _ ( / ^ ] { ~ ! ) ' , > ; - = * * & % $ $ # # @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ @ # $ $ % & & * = - ; ; > , ' ) ! ~ ~ { ] ] ^ / / / ( ( ( ( ( ( ( ( ( ( / / / ^ ] ] { ~ ~ ! ) ' , > ; ; - = * & & % $ $ # @ @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + @ @ @ # # $ $ % & & * = - - ; > , , ' ) ) ! ! ~ ~ { { { { ] ] ] ] ] ] { { { { ~ ~ ! ! ) ) ' , , > ; - - = * & & % $ $ # # @ @ @ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ # # $ $ % % & * * = = - ; ; > > , , ' ' ) ) ) ! ! ! ! ! ! ! ! ! ! ) ) ) ' ' , , > > ; ; - = = * * & % % $ $ # # @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ # # $ $ % % & & * * = = - - ; ; > > > , , , , , , , , , , , , , , > > > ; ; - - = = * * & & % % $ $ # # @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ # # $ $ $ % % & & * * * = = = - - - - - ; ; ; ; ; ; ; ; - - - - - = = = * * * & & % % $ $ $ # # @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ @ # # $ $ $ % % % & & & & * * * * = = = = = = = = = = = = * * * * & & & & % % % $ $ $ # # @ @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ @ @ @ # # # # $ $ $ % % % % % & & & & & & & & & & & & & & & & % % % % % $ $ $ # # # # @ @ @ @ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + @ @ @ @ # # # # $ $ $ $ $ % % % % % % % % % % % % % % % % % % $ $ $ $ $ # # # # @ @ @ @ + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # # # # # # # # # # # # # # # # # # # @ @ @ @ @ @ + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + @ @ @ @ @ @ @ @ @ @ @ # # # # # # @ @ @ @ @ @ @ @ @ @ @ + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + @ @ @ @ @ @ @ @ @ @ @ @ + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
export constant icon = create(GtkImage,xpm_to_pixbuf(i_xpm))
|
||||||
|
------------------------------------------------------------------------------
|
1041
eugtk/examples/examples/icon_P.e
Normal file
224
eugtk/examples/examples/icons.ex
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
|
||||||
|
---------------------------------------------------------------
|
||||||
|
--# Categorize, search, and display available icons.
|
||||||
|
-- tooltip for each icon displays the actual file path to that icon.
|
||||||
|
---------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include std/sort.e
|
||||||
|
include std/wildcard.e
|
||||||
|
include std/datetime.e
|
||||||
|
|
||||||
|
constant docs = {
|
||||||
|
`<b><u>Themed Icons</u></b>
|
||||||
|
|
||||||
|
Select an icon category below, then click OK,
|
||||||
|
or enter a search string in the box at bottom,
|
||||||
|
and click Find or hit enter.
|
||||||
|
`,
|
||||||
|
|
||||||
|
`Enter a search string here,
|
||||||
|
hit enter or click the find button`,
|
||||||
|
|
||||||
|
`
|
||||||
|
---------------------------------------------------------
|
||||||
|
-- NOTE: this file will be regenerated when you --
|
||||||
|
-- run icons.ex, and will probably show different --
|
||||||
|
-- icons from the ones I've listed here, since they --
|
||||||
|
-- vary depending upon the window theme in use. --
|
||||||
|
---------------------------------------------------------
|
||||||
|
|
||||||
|
`}
|
||||||
|
|
||||||
|
-- load current icons in default theme;
|
||||||
|
atom theme = create(GtkIconTheme)
|
||||||
|
object contexts = get(theme,"list contexts")
|
||||||
|
|
||||||
|
-- write icon names to a text file for later reference;
|
||||||
|
atom fn = open(locate_file("resources/themeicons.txt"),"w")
|
||||||
|
puts(fn,docs[3])
|
||||||
|
puts(fn,datetime:format(datetime:now(),"Generated %A %B %d, %Y "))
|
||||||
|
printf(fn,"by %s on %s\n\n",{user_name,host_name})
|
||||||
|
object icons = repeat(0,length(contexts))
|
||||||
|
for i = 1 to length(contexts) do
|
||||||
|
contexts[i] &= 0
|
||||||
|
icons[i] = sort(get(theme,"list icons",contexts[i]))
|
||||||
|
contexts[i] = {contexts[i],length(icons[i])}
|
||||||
|
printf(fn,"Context: %s\n\t%d Icons:\n",contexts[i])
|
||||||
|
for n = 1 to length(icons[i]) do
|
||||||
|
printf(fn,"\t\t %s\n",{icons[i][n]})
|
||||||
|
end for
|
||||||
|
puts(fn,"\n")
|
||||||
|
end for
|
||||||
|
close(fn)
|
||||||
|
|
||||||
|
constant iconwin = create(GtkWindow,{ -- window for display of icons;
|
||||||
|
{"default size", 640,600},
|
||||||
|
{"deletable",FALSE},
|
||||||
|
{"type hint",GDK_WINDOW_TYPE_HINT_MENU},
|
||||||
|
{"position",GTK_WIN_POS_CENTER},
|
||||||
|
{"icon","emblem-system"}})
|
||||||
|
|
||||||
|
constant iconpanel = create(GtkBox,VERTICAL)
|
||||||
|
gtk:add(iconwin,iconpanel)
|
||||||
|
|
||||||
|
constant iscroller = create(GtkScrolledWindow)
|
||||||
|
pack(iconpanel,iscroller,TRUE,TRUE)
|
||||||
|
|
||||||
|
constant iv = create(GtkIconView,{
|
||||||
|
{"text column",1},
|
||||||
|
{"pixbuf column",2},
|
||||||
|
{"item width",90},
|
||||||
|
{"columns",4},
|
||||||
|
{"tooltip column",3}})
|
||||||
|
gtk:add(iscroller,iv)
|
||||||
|
|
||||||
|
constant istore = create(GtkListStore,{gSTR,gPIX,gSTR}) -- icon list;
|
||||||
|
set(iv,"model",istore)
|
||||||
|
|
||||||
|
constant mainwin = create(GtkWindow,{ -- main window;
|
||||||
|
{"title","System Icons"},
|
||||||
|
{"default size",300,400},
|
||||||
|
{"border width",10},
|
||||||
|
{"move",0,0},
|
||||||
|
{"icon","emblem-system"},
|
||||||
|
{"connect","destroy",_("Bail")}})
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,VERTICAL)
|
||||||
|
gtk:add(mainwin,panel)
|
||||||
|
|
||||||
|
constant lbl = create(GtkLabel)
|
||||||
|
set(lbl,"markup",docs[1])
|
||||||
|
gtk:add(panel,lbl)
|
||||||
|
|
||||||
|
object catstore = create(GtkListStore,{gSTR,gINT}) -- category list;
|
||||||
|
set(catstore,"data",contexts)
|
||||||
|
|
||||||
|
constant tv = create(GtkTreeView,{
|
||||||
|
{"model",catstore},
|
||||||
|
{"margin bottom",5},
|
||||||
|
{"tooltip text","Select a category, then click the OK button"}})
|
||||||
|
pack(panel,tv,TRUE,TRUE)
|
||||||
|
|
||||||
|
constant selection = get(tv,"selection")
|
||||||
|
set(selection,"mode",GTK_SELECTION_SINGLE)
|
||||||
|
|
||||||
|
constant rend1 = create(GtkCellRendererText),
|
||||||
|
col1 = create(GtkTreeViewColumn,{
|
||||||
|
{"pack start",rend1},
|
||||||
|
{"add attribute",rend1,"text",1},
|
||||||
|
{"title","Category"}})
|
||||||
|
|
||||||
|
constant rend2 = create(GtkCellRendererText),
|
||||||
|
col2 = create(GtkTreeViewColumn,{
|
||||||
|
{"pack start",rend2},
|
||||||
|
{"add attribute",rend2,"text",2},
|
||||||
|
{"title","# of icons"}})
|
||||||
|
set(tv,"append columns",{col1,col2})
|
||||||
|
|
||||||
|
constant btn1 = create(GtkButton,"gtk-quit",_("Bail")),
|
||||||
|
btn2 = create(GtkButton,"stock_search#_Search"),
|
||||||
|
btn3 = create(GtkButton,"gtk-ok"),
|
||||||
|
btnbox = create(GtkButtonBox)
|
||||||
|
|
||||||
|
connect(btn2,"button-press-event",_("on_btn_down"))
|
||||||
|
connect(btn2,"clicked",_("Search"))
|
||||||
|
|
||||||
|
connect(btn3,"button-press-event",_("on_btn_down"))
|
||||||
|
connect(btn3,"clicked",_("DisplayIcons"))
|
||||||
|
|
||||||
|
gtk:pack(panel,-btnbox)
|
||||||
|
gtk:add(btnbox,{btn1,btn2,btn3})
|
||||||
|
set(btn1,"tooltip markup","Click to quit")
|
||||||
|
set(btn2,"tooltip markup","Click to find all icons containing search string")
|
||||||
|
set(btn3,"tooltip markup","Click to display all icons in selected category")
|
||||||
|
|
||||||
|
constant srch = create(GtkEntry,{ -- search entry;
|
||||||
|
{"tooltip text",docs[2]},
|
||||||
|
{"margin bottom",10},
|
||||||
|
{"placeholder text","Enter search string here, click find button"}})
|
||||||
|
connect(srch,"activate",_("Search"))
|
||||||
|
pack(panel,-srch)
|
||||||
|
|
||||||
|
show_all(mainwin)
|
||||||
|
main()
|
||||||
|
|
||||||
|
function on_btn_down()
|
||||||
|
set(mainwin,"cursor",GDK_WATCH)
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------------------
|
||||||
|
function DisplayIcons()
|
||||||
|
--------------------------------
|
||||||
|
atom img
|
||||||
|
atom iter = create(GtkTreeIter)
|
||||||
|
object n = get(selection,"selected row")
|
||||||
|
object cat = contexts[n][1]
|
||||||
|
object list, name, info
|
||||||
|
|
||||||
|
set(iconwin,"title",cat)
|
||||||
|
set(istore,"clear")
|
||||||
|
list = repeat({0,0,0},length(icons[n]))
|
||||||
|
for i = 1 to length(icons[n]) do
|
||||||
|
name = icons[n][i]
|
||||||
|
info = icon_info(name)
|
||||||
|
list[i][1] = name
|
||||||
|
list[i][2] = get(theme,"load icon",name,48,13,0)
|
||||||
|
if string(info[3]) then list[i][3] = info[3] else list[i][3] = name end if -- tooltip
|
||||||
|
end for
|
||||||
|
set(istore,"data",list)
|
||||||
|
show_all(iconwin)
|
||||||
|
|
||||||
|
set(mainwin,"cursor","default")
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
----------------------------------
|
||||||
|
function Search()
|
||||||
|
----------------------------------
|
||||||
|
object x = get(srch,"text")
|
||||||
|
atom img
|
||||||
|
integer ct = 0
|
||||||
|
object list = {}, name, info
|
||||||
|
|
||||||
|
if length(x) > 0 then
|
||||||
|
set(istore,"clear")
|
||||||
|
x = "*" & lower(x) & "*"
|
||||||
|
set(srch,"text",x)
|
||||||
|
|
||||||
|
for i = 1 to length(contexts) do
|
||||||
|
for j = 1 to length(icons[i]) do
|
||||||
|
name = icons[i][j]
|
||||||
|
if is_match(x,name) then
|
||||||
|
info = icon_info(name)
|
||||||
|
img = get(theme,"load icon",name,48,GTK_ICON_LOOKUP_FORCE_SIZE,0)
|
||||||
|
if string(info[3]) then
|
||||||
|
list = append(list,{name,img,info[3]}) -- tooltip
|
||||||
|
end if
|
||||||
|
ct += 1
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
end for
|
||||||
|
|
||||||
|
set(istore,"data",list)
|
||||||
|
show_all(iconwin)
|
||||||
|
set(iconwin,"title",sprintf("Search results for %s: %d found",{x,ct}))
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
set(mainwin,"cursor","default")
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------
|
||||||
|
function Bail()
|
||||||
|
------------------------
|
||||||
|
Info(mainwin,,
|
||||||
|
"The icon names for this theme\nhave been written to:",
|
||||||
|
"~/demos/resources/themeicons.txt")
|
||||||
|
Quit()
|
||||||
|
return 1
|
||||||
|
end function
|
56
eugtk/examples/examples/leak.ex
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
--# Test for memory leaks in get and set routines;
|
||||||
|
-- Run System Monitor and watch memory usage while this runs for a long time.
|
||||||
|
-- Memory usage should not change, since no new widgets are created in the loop.
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
|
||||||
|
if system_exec("which gnome-system-monitor",0) = 0 then
|
||||||
|
system("gnome-system-monitor &",0)
|
||||||
|
elsif system_exec("which mate-system-monitor",0) then
|
||||||
|
system("mate-system-monitor",0)
|
||||||
|
end if
|
||||||
|
|
||||||
|
constant docs = `<b><u>Leak Test</u></b>
|
||||||
|
This runs mate-system-monitor and then reads and
|
||||||
|
writes to a label, accessing it via widget name
|
||||||
|
(label2). Watch the memory usage, it should not
|
||||||
|
change even after running for a long time.
|
||||||
|
`
|
||||||
|
constant win = create(GtkWindow,"size=300x300,border=10,sig.destroy=Quit")
|
||||||
|
constant panel = create(GtkBox,"orientation=1,spacing=10")
|
||||||
|
constant lbl1 = create(GtkLabel) set(lbl1,"markup",docs)
|
||||||
|
constant lbl2 = create(GtkLabel,"text=`Hello World!`,name=Label2")
|
||||||
|
constant lbl3 = create(GtkLabel)
|
||||||
|
|
||||||
|
integer ct = 0
|
||||||
|
|
||||||
|
add(win,panel)
|
||||||
|
add(panel,{lbl1,lbl2,lbl3})
|
||||||
|
|
||||||
|
constant tick = create(GIdle,_("T1")) -- as fast as possible!
|
||||||
|
constant tock = create(GTimeout,1000,_("T2")) -- one second intervals
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
set(win,"move",10,10)
|
||||||
|
main()
|
||||||
|
|
||||||
|
----------------
|
||||||
|
function T1() -- tests for leaks in set and get;
|
||||||
|
----------------
|
||||||
|
ct += 1
|
||||||
|
get("Label2","text") -- access count (discarded)
|
||||||
|
set("Label2","text",sprintf("Hello World! %d",ct)) -- update count
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------
|
||||||
|
function T2()-- show max count achieved in 1 sec.
|
||||||
|
---------------
|
||||||
|
set(lbl3,"text",sprintf("%d lookups per second",ct))
|
||||||
|
ct = 0 -- reset count
|
||||||
|
return 1
|
||||||
|
end function
|
68
eugtk/examples/examples/passwords.ex
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
--# Password generator, requires <b>apg</b>
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
constant docs = `<u><b>Password Generator</b></u>
|
||||||
|
Generates 6 random passwords with pronunciation.
|
||||||
|
Hit the Generate <small><sup>(alt-G)</sup> </small> button to generate a new list.`
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,{
|
||||||
|
{"default size",300,100},
|
||||||
|
{"border width",10},
|
||||||
|
{"position",GTK_WIN_POS_CENTER},
|
||||||
|
{"icon","thumbnails/passred.png"},
|
||||||
|
{"connect","destroy","Quit"}})
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,1)
|
||||||
|
add(win,panel)
|
||||||
|
|
||||||
|
constant lbl = create(GtkLabel)
|
||||||
|
set(lbl,"markup",docs)
|
||||||
|
add(panel,lbl)
|
||||||
|
|
||||||
|
constant bkgnd = create(GtkEventBox,{
|
||||||
|
{"border width",10},
|
||||||
|
{"background",0}})
|
||||||
|
add(panel,bkgnd)
|
||||||
|
|
||||||
|
constant list = create(GtkLabel)
|
||||||
|
set(list,"foreground","#18F424")
|
||||||
|
add(bkgnd,list)
|
||||||
|
|
||||||
|
constant
|
||||||
|
btn1 = create(GtkButton,"gtk-quit","Quit"),
|
||||||
|
btn2 = create(GtkButton,"stock_repeat#_Generate","GeneratePW"),
|
||||||
|
box = create(GtkButtonBox)
|
||||||
|
pack(panel,-box)
|
||||||
|
add(box,{btn1,btn2})
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
|
||||||
|
if system_exec("which apg",0) != 0 then
|
||||||
|
Warn(win,"Error","Cannot find apg program","Please install one!")
|
||||||
|
abort(1)
|
||||||
|
else
|
||||||
|
GeneratePW()
|
||||||
|
end if
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
global function GeneratePW() -- call apg, format and display results;
|
||||||
|
------------------------------
|
||||||
|
system("apg > pw.list -a 0 -M Ncl -t",0)
|
||||||
|
object results = read_lines("pw.list")
|
||||||
|
object words = "<span color='green'> <b><u>Password</u></b> </span><span color='red3'> <b><u> Pronunciation</u></b> \n\n</span>"
|
||||||
|
for i = 1 to length(results) do
|
||||||
|
words &= format(" <b>[1]</b> <span color='red'>[2]</span> \n",split(results[i],' '))
|
||||||
|
end for
|
||||||
|
set(list,"markup",words)
|
||||||
|
set(list,"selectable",TRUE)
|
||||||
|
delete_file("pw.list")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
143
eugtk/examples/examples/talk.ex
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
--# Talk, requires <b>spd-say</b>
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
object lang = "en", speaker = "male1", speed = 0, pitch = 0
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,{
|
||||||
|
{"border width",10},
|
||||||
|
{"default size",550,300},
|
||||||
|
{"position",GTK_WIN_POS_CENTER}})
|
||||||
|
connect(win,"destroy","Quit")
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,VERTICAL)
|
||||||
|
add(win,panel)
|
||||||
|
|
||||||
|
constant input = create(GtkEntry)
|
||||||
|
set(input,"text","Type some text here, or select a language below.")
|
||||||
|
add(panel,input)
|
||||||
|
|
||||||
|
add(panel,create(GtkLabel,"- Languages - "))
|
||||||
|
|
||||||
|
constant box1 = create(GtkButtonBox),
|
||||||
|
a1 = create(GtkRadioButton,0,"English","Language",1),
|
||||||
|
a2 = create(GtkRadioButton,a1,"French","Language",2),
|
||||||
|
a3 = create(GtkRadioButton,a2,"Russian","Language",3),
|
||||||
|
a4 = create(GtkRadioButton,a3,"Afrikaans","Language",4)
|
||||||
|
add(box1,{a1,a2,a3,a4})
|
||||||
|
add(panel,box1)
|
||||||
|
|
||||||
|
constant languages = {"en","fr","ru","af","sr","fi","pt","es","it","ur",
|
||||||
|
"ko","de","is","ms","sk","sv","tr","pl","hi","oc","nn","fa","mk","ka"}
|
||||||
|
|
||||||
|
constant language = create(GtkComboBoxText)
|
||||||
|
for i = 1 to length(languages) do
|
||||||
|
set(language,"append text",languages[i])
|
||||||
|
end for
|
||||||
|
set(language,"active",1)
|
||||||
|
connect(language,"changed","Language")
|
||||||
|
add(panel,language)
|
||||||
|
|
||||||
|
add(panel,create(GtkSeparator))
|
||||||
|
add(panel,create(GtkLabel,"- Voices -"))
|
||||||
|
|
||||||
|
constant box3 = create(GtkButtonBox),
|
||||||
|
box4 = create(GtkButtonBox),
|
||||||
|
box5 = create(GtkButtonBox),
|
||||||
|
m1 = create(GtkRadioButton,0,"Male 1","Voice","male1"),
|
||||||
|
m2 = create(GtkRadioButton,m1,"Male 2","Voice","male2"),
|
||||||
|
m3 = create(GtkRadioButton,m2,"Male 3","Voice","male3"),
|
||||||
|
f1 = create(GtkRadioButton,m3,"Female 1","Voice","female1"),
|
||||||
|
f2 = create(GtkRadioButton,f1,"Female 2","Voice","female2"),
|
||||||
|
f3 = create(GtkRadioButton,f2,"Female 3","Voice","female3"),
|
||||||
|
c1 = create(GtkRadioButton,f3,"Male Child","Voice","child_male"),
|
||||||
|
c2 = create(GtkRadioButton,c1,"Female Child","Voice","child_female")
|
||||||
|
set(box3,"homogeneous",TRUE)
|
||||||
|
set(box4,"homogeneous",TRUE)
|
||||||
|
add(box3,{m1,m2,m3})
|
||||||
|
add(box4,{f1,f2,f3})
|
||||||
|
add(box5,{c1,c2})
|
||||||
|
add(panel,{box3,box4,box5})
|
||||||
|
|
||||||
|
add(panel,create(GtkSeparator))
|
||||||
|
|
||||||
|
constant lbl1 = create(GtkLabel,"- Speed -")
|
||||||
|
add(panel,lbl1)
|
||||||
|
|
||||||
|
constant Speed = create(GtkScale,HORIZONTAL,-100,100,1)
|
||||||
|
set(Speed,"value",0)
|
||||||
|
connect(Speed,"value-changed","SetSpeed")
|
||||||
|
add(panel,Speed)
|
||||||
|
|
||||||
|
constant lbl2 = create(GtkLabel,"- Pitch -")
|
||||||
|
add(panel,lbl2)
|
||||||
|
|
||||||
|
constant Pitch = create(GtkScale,HORIZONTAL,-100,100,1)
|
||||||
|
set(Pitch,"value",0)
|
||||||
|
connect(Pitch,"value-changed","SetPitch")
|
||||||
|
add(panel,Pitch)
|
||||||
|
|
||||||
|
constant box6 = create(GtkButtonBox),
|
||||||
|
btn1 = create(GtkButton,"gtk-quit","Quit"),
|
||||||
|
btn2 = create(GtkButton,"gtk-ok","Say")
|
||||||
|
add(box6,{btn1,btn2})
|
||||||
|
pack(panel,-box6)
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
|
||||||
|
if system_exec("which spd-say",0) != 0 then
|
||||||
|
Warn(win,"Error","Cannot find spd-say",
|
||||||
|
"Use apt-get or your package manager\n to install spd-say!")
|
||||||
|
abort(1)
|
||||||
|
end if
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
----------------------------------------
|
||||||
|
global function Voice(atom ctl, atom v)
|
||||||
|
----------------------------------------
|
||||||
|
if get(ctl,"active") then speaker = unpack(v)
|
||||||
|
display(speaker)
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------------------------------
|
||||||
|
global function Language(atom ctl, object l)
|
||||||
|
--------------------------------------------
|
||||||
|
if ctl = language then
|
||||||
|
l = get(ctl,"active")
|
||||||
|
else
|
||||||
|
set(language,"active",l)
|
||||||
|
end if
|
||||||
|
atom x = create(PangoLanguage,languages[l])
|
||||||
|
object ls = get(x,"to string")
|
||||||
|
object txt = get(x,"sample string")
|
||||||
|
set(input,"text",txt)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------
|
||||||
|
global function SetSpeed(atom ctl)
|
||||||
|
-----------------------------------
|
||||||
|
speed = get(ctl,"value")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------
|
||||||
|
global function SetPitch(atom ctl)
|
||||||
|
-----------------------------------
|
||||||
|
pitch = get(ctl,"value")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------
|
||||||
|
global function Say()
|
||||||
|
---------------------
|
||||||
|
object txt = get(input,"text")
|
||||||
|
system(sprintf(`spd-say -w -mnone -r%d -p%d -l%s -t%s "%s"`,{speed,pitch,lang,speaker,txt}),0)
|
||||||
|
return 1
|
||||||
|
end function
|
100
eugtk/examples/examples/task.ex
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
------------------------------------------------------------------------
|
||||||
|
--# Multi-Tasking;
|
||||||
|
--
|
||||||
|
-- This shows how to use the GtkSpinner to indicate progress while loading
|
||||||
|
-- a large file, or while doing some other lengthy process...
|
||||||
|
-- If you do not multi-task, the spinner will stop while Euphoria
|
||||||
|
-- is loading the file, which is exactly what you do NOT want to happen!
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
-- Spinner seems to be broken in Gtk3.6.4, but works fine in Gtk3.4.1 and
|
||||||
|
-- Gtk3.8.4, and later versions.
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include GtkEvents.e
|
||||||
|
include GtkFileSelector.e
|
||||||
|
|
||||||
|
include std/filesys.e
|
||||||
|
|
||||||
|
constant docs = `<u><b>Spinner & Tasks</b></u>
|
||||||
|
This uses Euphoria's multi-tasking functions.
|
||||||
|
If you run this from an x-term, you will see the lines
|
||||||
|
as they are read. Click the OK button to begin.`
|
||||||
|
|
||||||
|
constant msg1 = "<span color='red'>Reading GtkEnums.e line: %d</span>"
|
||||||
|
constant msg2 = "<span color='blue'><i><b>Done! %d lines read.</b></i></span>"
|
||||||
|
|
||||||
|
integer lc = 0 -- count lines read;
|
||||||
|
|
||||||
|
atom t1
|
||||||
|
t1 = task_create(routine_id("task1"),{})
|
||||||
|
task_schedule(t1,{0.002,1})
|
||||||
|
boolean t1_running = TRUE
|
||||||
|
|
||||||
|
label "OPEN_FILE"
|
||||||
|
integer fn = open(locate_file("GtkEnums.e"),"r") -- file to read;
|
||||||
|
if fn = -1 then
|
||||||
|
fn = fileselector:Open()
|
||||||
|
if fn < 3 then
|
||||||
|
if Question(,,"Quit?") = MB_YES then Quit() else goto "OPEN_FILE" end if
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,"border_width=10,position=1,$destroy=Quit")
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,1)
|
||||||
|
add(win,panel)
|
||||||
|
|
||||||
|
constant lbl1 = create(GtkLabel)
|
||||||
|
set(lbl1,"markup",docs)
|
||||||
|
|
||||||
|
constant lbl2 = create(GtkLabel)
|
||||||
|
constant lbl3 = create(GtkLabel)
|
||||||
|
|
||||||
|
constant spin = create(GtkSpinner)
|
||||||
|
set(spin,"size request",30,30)
|
||||||
|
|
||||||
|
add(panel,{lbl1,lbl2,spin,lbl3})
|
||||||
|
|
||||||
|
constant
|
||||||
|
btn1 = create(GtkButton,"gtk-quit","Quit"),
|
||||||
|
btn2 = create(GtkButton,"gtk-ok","StartTask"),
|
||||||
|
box = create(GtkButtonBox)
|
||||||
|
add(box,{btn1,btn2})
|
||||||
|
set(box,"margin top",15)
|
||||||
|
pack(panel,-box)
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
main()
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
procedure task1() -- this reads and displays the file;
|
||||||
|
--------------------------------------------------------
|
||||||
|
object line = {}
|
||||||
|
while not atom(line) do
|
||||||
|
lc += 1 -- increment line count
|
||||||
|
line = gets(fn) -- read the line
|
||||||
|
puts(1,line) -- display the line on terminal
|
||||||
|
task_yield()
|
||||||
|
end while
|
||||||
|
t1_running = FALSE
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
-----------------------------------------------------------------
|
||||||
|
global function StartTask() -- starts spin and yields to task1;
|
||||||
|
-----------------------------------------------------------------
|
||||||
|
set(spin,"start")
|
||||||
|
|
||||||
|
while t1_running do
|
||||||
|
main_iteration_do(1) -- VITAL! (give GTK a chance to tick the clock)
|
||||||
|
set(lbl2,"markup",sprintf(msg1,lc)) -- update # of lines read
|
||||||
|
task_yield()
|
||||||
|
end while
|
||||||
|
|
||||||
|
set(spin,"stop")
|
||||||
|
set(btn2,"sensitive",FALSE)
|
||||||
|
set(lbl2,"markup",sprintf(msg2,lc)) -- done!
|
||||||
|
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
104
eugtk/examples/examples/test_all.ex
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
--# Test all programs in ~/demos
|
||||||
|
-- Run this with an x-term so that you can see messages re: missing files;
|
||||||
|
-- It runs 5 tests at at time, starting with the number in the box.
|
||||||
|
-- After these are run, you can click the ok button to run the next 5.
|
||||||
|
|
||||||
|
-- You might be able to run as many as 40 or 50 programs at the same time,
|
||||||
|
-- depending upon memory and processor(s), but I can't recommend it,
|
||||||
|
-- since too many can 'freeze' the windows & mouse, leaving you no way
|
||||||
|
-- out but to hit the power switch!
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
integer i = 0, ct = 0, step = 10
|
||||||
|
atom tick
|
||||||
|
|
||||||
|
chdir(canonical_path("~demos"))
|
||||||
|
|
||||||
|
constant docs = `<u><b>Testall</b></u>
|
||||||
|
|
||||||
|
Runs several tests at a time, beginning with the number
|
||||||
|
in the box below. Be sure to run this program from
|
||||||
|
an x-term, so you can see any error messages.
|
||||||
|
|
||||||
|
If you are using a slow computer with low memory,
|
||||||
|
you may change the 'step' variable from 10 to a lower
|
||||||
|
number.
|
||||||
|
`
|
||||||
|
constant win = create(GtkWindow,"border=10,icon=thumbnails/mongoose.png,$destroy=Quit")
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,VERTICAL)
|
||||||
|
add(win,panel)
|
||||||
|
|
||||||
|
constant lbl1 = create(GtkLabel)
|
||||||
|
set(lbl1,"markup",docs)
|
||||||
|
add(panel,lbl1)
|
||||||
|
|
||||||
|
constant lbl2 = create(GtkLabel,{
|
||||||
|
{"font","8"},
|
||||||
|
{"markup"," Start # Step"}})
|
||||||
|
add(panel,lbl2)
|
||||||
|
|
||||||
|
constant
|
||||||
|
box = create(GtkButtonBox),
|
||||||
|
btn1 = create(GtkButton,"gtk-quit","Quit"),
|
||||||
|
btn2 = create(GtkSpinButton,0,210,1),
|
||||||
|
btn3 = create(GtkSpinButton,1,10,1),
|
||||||
|
btn4 = create(GtkButton,"gtk-ok","Start")
|
||||||
|
set(btn3,"value",10)
|
||||||
|
|
||||||
|
pack(box,{btn1,btn2,btn3,btn4})
|
||||||
|
pack(panel,-box)
|
||||||
|
set(btn2,"tooltip markup","<span color='yellow'><b><u>Start</u></b></span> Set the starting file number here")
|
||||||
|
set(btn3,"tooltip markup","<span color='yellow'><b><u>Step</u></b></span> Number of programs to start at each pass")
|
||||||
|
set(btn4,"tooltip markup","Click here to start the <span color='yellow'><b><u>next</u></b></span> set of tests")
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
global function Start()
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
i = get(btn2,"value as int")
|
||||||
|
step = get(btn3,"value as int")
|
||||||
|
tick = create(GTimeout,500,call_back(routine_id("Foo")))
|
||||||
|
puts(1,"\n")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------------
|
||||||
|
global function Foo()
|
||||||
|
--------------------------
|
||||||
|
object fn
|
||||||
|
fn = sprintf("test%d.ex",i)
|
||||||
|
set(lbl2,"text",filename(fn))
|
||||||
|
if not file_exists(fn) then
|
||||||
|
printf(1,"%s not found!\n",{filename(fn)})
|
||||||
|
set(lbl1,"text",get(lbl1,"text") & "\n" & filename(fn) & " missing!")
|
||||||
|
set(win,"background","#F8E521")
|
||||||
|
else
|
||||||
|
system_exec(sprintf("eui %s &\n",{fn}))
|
||||||
|
printf(1,"%s\n",{fn})
|
||||||
|
end if
|
||||||
|
|
||||||
|
i += 1
|
||||||
|
if i > length(dir("test*.ex")) then
|
||||||
|
Info(,,"That's all, Folks!")
|
||||||
|
abort(0)
|
||||||
|
end if
|
||||||
|
|
||||||
|
set(btn2,"value",i)
|
||||||
|
ct += 1
|
||||||
|
if ct = step then
|
||||||
|
ct = 0
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
end if
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
39
eugtk/examples/examples/test_missing.ex
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
--# finds unused test[n].ex program names
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,"title=Missing Tests,size=250x-1,border=10,position=1,$destroy=Quit")
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,VERTICAL)
|
||||||
|
add(win,panel)
|
||||||
|
|
||||||
|
constant listbox = create(GtkListBox,"margin-top=10,margin bottom=10")
|
||||||
|
add(panel,listbox)
|
||||||
|
|
||||||
|
constant box = create(GtkButtonBox)
|
||||||
|
add(box,create(GtkButton,"gtk-quit","Quit"))
|
||||||
|
pack(panel,-box)
|
||||||
|
|
||||||
|
chdir(canonical_path("~demos"))
|
||||||
|
|
||||||
|
boolean missing = FALSE
|
||||||
|
|
||||||
|
for i = 0 to 211 do
|
||||||
|
if file_exists(sprintf("test%d.ex",i)) then -- skip
|
||||||
|
else printf(1,"missing test%d.ex\n",i)
|
||||||
|
add(listbox,create(GtkLabel,sprintf("test%d.ex",i)))
|
||||||
|
missing = TRUE
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
|
||||||
|
if not missing then Info(,,"Congrats","No missing demos",,"face-cool")
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
main()
|
||||||
|
|
||||||
|
end if
|
153
eugtk/examples/examples/webkit.ex
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
--# GtkWebKit demo, views web pages (and runs Eu program)
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include GtkEvents.e
|
||||||
|
include std/net/url.e
|
||||||
|
include GtkWebKit.plugin
|
||||||
|
|
||||||
|
constant docs = """
|
||||||
|
|
||||||
|
Adds a web browser
|
||||||
|
to your EuGTK program!
|
||||||
|
|
||||||
|
This demo can display source code
|
||||||
|
as well as running *.ex programs,
|
||||||
|
just click on a link!
|
||||||
|
"""
|
||||||
|
|
||||||
|
object uri = 0
|
||||||
|
if networked() then
|
||||||
|
uri = format("http://[]:8080",{get_net_address()})
|
||||||
|
else
|
||||||
|
uri = "FILE:///"& canonical_path("~/demos/documentation/README.html")
|
||||||
|
end if
|
||||||
|
|
||||||
|
constant fmt =
|
||||||
|
`<b>Default font</b> []
|
||||||
|
<b>Monospace font</b> []
|
||||||
|
<b>Serif font</b> []
|
||||||
|
<b>Sans font</b> []
|
||||||
|
<b>Fantasy font</b> []
|
||||||
|
`
|
||||||
|
constant win = create(GtkWindow,"size=1000x800,position=1,border=10,background=grey90")
|
||||||
|
connect(win,"destroy","Quit")
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,VERTICAL)
|
||||||
|
add(win,panel)
|
||||||
|
|
||||||
|
constant view = create(WebkitWebView)
|
||||||
|
pack(panel,view,TRUE,TRUE)
|
||||||
|
|
||||||
|
constant settings = get(view,"settings")
|
||||||
|
set(settings,{
|
||||||
|
{"enable tabs to links",TRUE},
|
||||||
|
{"zoom text only",TRUE},
|
||||||
|
{"enable developer extras",TRUE},
|
||||||
|
{"enable smooth scrolling",TRUE},
|
||||||
|
{"enable_caret_browsing",TRUE},
|
||||||
|
{"draw_compositing_indicators",TRUE},
|
||||||
|
{"enable fullscreen",TRUE}, -- try these;
|
||||||
|
{"enable_resizable_text_areas",TRUE},
|
||||||
|
{"enable_spatial_navigation",TRUE},
|
||||||
|
$})
|
||||||
|
|
||||||
|
constant box = create(GtkButtonBox),
|
||||||
|
url = create(GtkEntry),
|
||||||
|
btn1 = create(GtkButton,"gtk-about",_("About")),
|
||||||
|
btn2 = create(GtkButton,"back#",_("Backward")),
|
||||||
|
btn3 = create(GtkButton,"forward#",_("Forward")),
|
||||||
|
btn4 = create(GtkButton,"gtk-quit","Quit"),
|
||||||
|
slider1 = create(GtkScale,{
|
||||||
|
{"orientation",HORIZONTAL},
|
||||||
|
{"range",50,200},
|
||||||
|
{"value",100},
|
||||||
|
{"digits",0},
|
||||||
|
{"tooltip text","Zoom Text"},
|
||||||
|
{"connect","change value",_("ScaleView")}})
|
||||||
|
pack(panel,slider1)
|
||||||
|
add(box,{btn4,url,btn2,btn3,btn1})
|
||||||
|
set(box,{
|
||||||
|
{"layout",GTK_BUTTONBOX_END},
|
||||||
|
{"child secondary",btn4,TRUE}})
|
||||||
|
pack(panel,-box)
|
||||||
|
|
||||||
|
set(url,"tooltip text","Enter URL here, hit enter.")
|
||||||
|
set(url,"width chars",80)
|
||||||
|
set(url,"text",uri)
|
||||||
|
connect(url,"activate",_("LoadURI"))
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
|
||||||
|
constant img2 = get(btn2,"image")
|
||||||
|
constant img3 = get(btn3,"image")
|
||||||
|
|
||||||
|
set(btn2,"tooltip markup","Go to previous page\n<small>(if available)</small>")
|
||||||
|
set(btn3,"tooltip markup","Go to next page\n<small>(if available)</small>")
|
||||||
|
|
||||||
|
connect(view,"load-changed",_("UpdateState"))
|
||||||
|
set(view,"load uri",uri)
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
--------------------------
|
||||||
|
function About()
|
||||||
|
--------------------------
|
||||||
|
object p = floor((get(win,"size")/2) + get(win,"position")) -- keep near center
|
||||||
|
return Info(,,"Webkit Plugin",docs,,,,,,p[1],p[2])
|
||||||
|
end function
|
||||||
|
|
||||||
|
--------------------------
|
||||||
|
function Backward()
|
||||||
|
--------------------------
|
||||||
|
set(view,"go back")
|
||||||
|
UpdateState(view,0)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-------------------------
|
||||||
|
function Forward()
|
||||||
|
-------------------------
|
||||||
|
set(view,"go forward")
|
||||||
|
UpdateState(view,0)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------
|
||||||
|
function LoadURI(atom x)
|
||||||
|
-------------------------
|
||||||
|
object uri = url:decode(get(x,"text"))
|
||||||
|
set(view,"load uri",uri)
|
||||||
|
UpdateState(view,WEBKIT_LOAD_FINISHED)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------------------------
|
||||||
|
function UpdateState(atom view, integer event)
|
||||||
|
-----------------------------------------------------
|
||||||
|
set(img2,"visible",get(view,"can go back"))
|
||||||
|
set(img3,"visible",get(view,"can go forward"))
|
||||||
|
object uri
|
||||||
|
if event = WEBKIT_LOAD_FINISHED then
|
||||||
|
uri = get(view,"uri")
|
||||||
|
set(win,"title",get(view,"title"))
|
||||||
|
uri = locate_file(url:decode(uri))
|
||||||
|
uri = uri[9..$] -- get rid of file:///
|
||||||
|
set(url,"text",uri)
|
||||||
|
if match("ex",fileext(uri)) then
|
||||||
|
system(sprintf("eui %s & ",{uri}),2) -- run in bkgnd;
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------
|
||||||
|
function ScaleView(atom ctl)
|
||||||
|
-----------------------------------
|
||||||
|
set(view,"zoom level", get(ctl,"value") / 100)
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
165
eugtk/examples/examples/webserver.ex
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
|
||||||
|
--# Webserver - GUI for httpd.ex
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include std/datetime.e
|
||||||
|
include std/net/dns.e
|
||||||
|
|
||||||
|
export constant version = "1.0"
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
-- I use this to serve music or other files to my Google Nexus tablet
|
||||||
|
-- or smart phone, so I can listen, look at photos, read documentation,
|
||||||
|
-- etc. while I work (or not :p)
|
||||||
|
|
||||||
|
-- You'll need the server connected to a router, of course,
|
||||||
|
-- otherwise, you can only serve to localhost.
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
-- try to find a working terminal to use for displaying requests;
|
||||||
|
object term = 0,
|
||||||
|
terms = {"mate-terminal","gnome-terminal","xterm",getenv("TERM")}
|
||||||
|
for i = 1 to length(terms) do
|
||||||
|
terms[i] = locate_file(terms[i])
|
||||||
|
if file_exists(terms[i]) then
|
||||||
|
term = terms[i]
|
||||||
|
exit
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
|
||||||
|
display(term)
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,{
|
||||||
|
{"border width",20},
|
||||||
|
{"default size",300,200},
|
||||||
|
{"position",GTK_WIN_POS_CENTER},
|
||||||
|
{"title"," EuGTK Web Server"},
|
||||||
|
{"icon","~/demos/thumbnails/mongoose.png"}})
|
||||||
|
connect(win,"destroy","Quit")
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,VERTICAL)
|
||||||
|
gtk:add(win,panel)
|
||||||
|
|
||||||
|
constant addrbox = create(GtkGrid)
|
||||||
|
set(addrbox,"column spacing",5)
|
||||||
|
set(addrbox,"row spacing",5)
|
||||||
|
gtk:add(panel,addrbox)
|
||||||
|
|
||||||
|
constant
|
||||||
|
lbl1 = create(GtkLabel,"IP:"),
|
||||||
|
ip = create(GtkEntry),
|
||||||
|
port = create(GtkSpinButton,8080,8090,1),
|
||||||
|
lbl3 = create(GtkLabel,"Root"),
|
||||||
|
root = create(GtkFileChooserButton),
|
||||||
|
lbl4 = create(GtkLabel,"Log file:"),
|
||||||
|
logf = create(GtkEntry),
|
||||||
|
sortf = create(GtkCheckButton,"_Sort"),
|
||||||
|
showreq = create(GtkCheckButton,"Show _Full Request"),
|
||||||
|
hidden = create(GtkCheckButton,"Show _Hidden Files"),
|
||||||
|
tailf = create(GtkCheckButton,"Tail -f")
|
||||||
|
|
||||||
|
set(ip,"text",get_net_address())
|
||||||
|
set(port,"text","8080")
|
||||||
|
set(root,"current folder",canonical_path("~/demos/documentation"))
|
||||||
|
set(root,"action",GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
|
||||||
|
set(logf,"text",".server.log")--or blank. I prefer to hide my server log file
|
||||||
|
set(sortf,"active",TRUE)
|
||||||
|
set(tailf,"active",TRUE)
|
||||||
|
|
||||||
|
set(root,"tooltip markup","Choose the base folder.\nEvery subfolder <i>below</i> this will be served")
|
||||||
|
set(sortf,"tooltip markup","Sort the directory listings")
|
||||||
|
set(showreq,"tooltip markup","Show <i>full request string</i> in logs")
|
||||||
|
set(hidden,"tooltip markup","Include hidden files in those being served")
|
||||||
|
set(tailf,"tooltip markup","Pop up a window to show active connections")
|
||||||
|
|
||||||
|
set(addrbox,"attach",lbl1,1,1,1,1)
|
||||||
|
set(addrbox,"attach",ip,2,1,1,1)
|
||||||
|
set(addrbox,"attach",port,3,1,1,1)
|
||||||
|
set(addrbox,"attach",create(GtkSeparator),1,2,4,1)
|
||||||
|
set(addrbox,"attach",lbl3,1,3,1,1)
|
||||||
|
set(addrbox,"attach",root,2,3,2,1)
|
||||||
|
set(addrbox,"attach",create(GtkSeparator),1,4,4,1)
|
||||||
|
set(addrbox,"attach",lbl4,1,5,1,1)
|
||||||
|
set(addrbox,"attach",logf,2,5,1,1)
|
||||||
|
if not atom(term) then
|
||||||
|
set(addrbox,"attach",tailf,3,5,1,1)
|
||||||
|
end if
|
||||||
|
set(addrbox,"attach",create(GtkSeparator),1,6,4,1)
|
||||||
|
set(addrbox,"attach",sortf,1,7,1,1)
|
||||||
|
set(addrbox,"attach",showreq,2,7,1,1)
|
||||||
|
set(addrbox,"attach",hidden,3,7,1,1)
|
||||||
|
|
||||||
|
constant box = create(GtkButtonBox),
|
||||||
|
btn1 = create(GtkButton,"gtk-quit","Quit"),
|
||||||
|
btn2 = create(GtkButton,"gtk-help","Help"),
|
||||||
|
btn3 = create(GtkButton,"gtk-ok","StartServer")
|
||||||
|
set(btn2,"tooltip markup","Click <i>here</i> for html help")
|
||||||
|
set(btn3,"tooltip markup","Click <b>here</b> to start the server")
|
||||||
|
set(box,"margin top",10)
|
||||||
|
gtk:add(box,{btn1,btn2,btn3})
|
||||||
|
pack(panel,-box)
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
main()
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
global function StartServer()
|
||||||
|
------------------------------
|
||||||
|
object server = canonical_path("~/demos/examples/httpd.ex")
|
||||||
|
object params = sprintf("eui %s -bind %s:%s ",
|
||||||
|
{server,
|
||||||
|
remove_all(' ',get(ip,"text")),
|
||||||
|
remove_all(' ',get(port,"text"))
|
||||||
|
})
|
||||||
|
object log = get(logf,"text")
|
||||||
|
object path = get(root,"filename")
|
||||||
|
chdir(canonical_path(path))
|
||||||
|
|
||||||
|
object exe = ""
|
||||||
|
|
||||||
|
if length(path) > 0 then
|
||||||
|
params &= sprintf("-root '%s' ",{current_dir()})
|
||||||
|
log = path & "/" & log
|
||||||
|
end if
|
||||||
|
|
||||||
|
if length(log) > 0 then
|
||||||
|
params &= sprintf("-log %s ",{log})
|
||||||
|
end if
|
||||||
|
|
||||||
|
if get(sortf,"active") then
|
||||||
|
params &= " -s "
|
||||||
|
end if
|
||||||
|
|
||||||
|
if get(hidden,"active") then
|
||||||
|
params &=" -h "
|
||||||
|
end if
|
||||||
|
|
||||||
|
if get(showreq,"active") then
|
||||||
|
params &= " -r "
|
||||||
|
end if
|
||||||
|
|
||||||
|
-- the following only tested on mate-terminal, others may need different params;
|
||||||
|
if get(tailf,"active") then
|
||||||
|
exe = sprintf(`%s -e "tail -f %s" --profile logview -t "Eu Server Log" & %s -e "%s" --tab --profile logview -t "Eu Server Status" --geometry=132x30 &`,
|
||||||
|
{term,log,term,params})
|
||||||
|
else
|
||||||
|
exe = sprintf(`%s -e "%s" &`,{term,params})
|
||||||
|
end if
|
||||||
|
|
||||||
|
display(exe)
|
||||||
|
system(exe)
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
global function Help()
|
||||||
|
-----------------------------
|
||||||
|
show_uri(sprintf("file:///%s",
|
||||||
|
{canonical_path("~/demos/documentation/ServerHelp.html")}))
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------
|
||||||
|
--© 2014 by Irv Mullins
|
||||||
|
------------------------
|
239
eugtk/examples/examples/worldflags.ex
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
--# Worldflags - match the flags and name the country
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include std/filesys.e
|
||||||
|
include std/sequence.e
|
||||||
|
|
||||||
|
integer prev = 0, guesses = 0, correct = 0, misses = 0
|
||||||
|
atom score = 0
|
||||||
|
constant flagdir = canonical_path("~/demos/resources/flags/")
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
-- get list of flag names
|
||||||
|
----------------------------
|
||||||
|
object flaglist = dir(flagdir & "flags-*.png")
|
||||||
|
|
||||||
|
if atom(flaglist) then
|
||||||
|
Error(0,"Worldflags Error","Cannot find flags",flagdir,,GTK_BUTTONS_CLOSE)
|
||||||
|
abort(1)
|
||||||
|
end if
|
||||||
|
|
||||||
|
flaglist = vslice(flaglist,D_NAME)
|
||||||
|
|
||||||
|
--------------------------------
|
||||||
|
-- select 8 at random, no dupes
|
||||||
|
--------------------------------
|
||||||
|
object flagarray = {}
|
||||||
|
while length(flagarray) < 8 do
|
||||||
|
flagarray = add_item(flaglist[rand(length(flaglist))],flagarray)
|
||||||
|
end while
|
||||||
|
|
||||||
|
---------------------------------------------
|
||||||
|
-- shuffle the 8 and add them to list again
|
||||||
|
-- so every flag has a twin somewhere
|
||||||
|
---------------------------------------------
|
||||||
|
flagarray &= shuffle(flagarray)
|
||||||
|
|
||||||
|
enum HANDLE, FLAG, TUX, NAME, CAPTION, SIGID, HASH, MATCHED
|
||||||
|
|
||||||
|
-------------------------------------------
|
||||||
|
-- create buttons from the selected flags
|
||||||
|
-------------------------------------------
|
||||||
|
object btn = {HANDLE,FLAG,TUX,NAME,CAPTION,SIGID,HASH,MATCHED}
|
||||||
|
object btns = repeat(btn,16)
|
||||||
|
object ctl, name, flag, tux, box, lbl, sigid, id
|
||||||
|
for i = 1 to 16 do
|
||||||
|
-- get rid of the file extension, and change country name to nice format;
|
||||||
|
name = proper(join(split(flagarray[i][7..$-4],'_'),' '))
|
||||||
|
-- match flag with its twin by means of a hash on the file name;
|
||||||
|
id = hash(name,0)
|
||||||
|
-- make a button to hold the flag;
|
||||||
|
ctl = create(GtkToolButton)
|
||||||
|
flag = create(GtkImage,flagdir & flagarray[i])
|
||||||
|
tux = create(GtkImage,"~/demos/thumbnails/BabyTux.png")
|
||||||
|
sigid = connect(ctl,"clicked",call_back(routine_id("onClick")),i)
|
||||||
|
box = create(GtkBox,1)
|
||||||
|
lbl = create(GtkLabel,{
|
||||||
|
{"text",name},
|
||||||
|
{"font","8"},
|
||||||
|
{"max width chars",10},
|
||||||
|
{"ellipsize",PANGO_ELLIPSIZE_END}})
|
||||||
|
add(box,{tux,flag,lbl})
|
||||||
|
set(ctl,{
|
||||||
|
{"label widget",box},
|
||||||
|
{"size request",80,80}})
|
||||||
|
show({ctl,box,flag,lbl})
|
||||||
|
btns[i] = {ctl,flag,tux,name,lbl,sigid,id,FALSE}
|
||||||
|
ifdef CHEAT then
|
||||||
|
set(ctl,"tooltip text",name)
|
||||||
|
end ifdef
|
||||||
|
end for
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
-- make a main window
|
||||||
|
----------------------
|
||||||
|
constant win = create(GtkWindow,{
|
||||||
|
{"border width",10},
|
||||||
|
{"default size",120,120},
|
||||||
|
{"position",GTK_WIN_POS_CENTER},
|
||||||
|
{"icon","thumbnails/preferences-desktop-locale.svg"}})
|
||||||
|
connect(win,"destroy","Quit")
|
||||||
|
show(win)
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,1)
|
||||||
|
add(win,panel)
|
||||||
|
show(panel)
|
||||||
|
|
||||||
|
---------------------
|
||||||
|
-- make a grid
|
||||||
|
---------------------
|
||||||
|
constant grid = create(GtkGrid,{
|
||||||
|
{"row homogeneous",TRUE},
|
||||||
|
{"column homogeneous",TRUE}})
|
||||||
|
add(panel,grid)
|
||||||
|
show(grid)
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
-- attach flag buttons to grid
|
||||||
|
-------------------------------
|
||||||
|
integer i = 1
|
||||||
|
for x = 1 to 4 do
|
||||||
|
for y = 1 to 4 do
|
||||||
|
set(grid,"attach",btns[i][HANDLE],x,y,1,1)
|
||||||
|
i += 1
|
||||||
|
end for
|
||||||
|
end for
|
||||||
|
|
||||||
|
constant helptxt = create(GtkLabel,{
|
||||||
|
{"markup","Perfect score is 100"},
|
||||||
|
{"font","8"},
|
||||||
|
{"foreground","red"}})
|
||||||
|
add(panel,helptxt)
|
||||||
|
show(helptxt)
|
||||||
|
|
||||||
|
------------------------------------------
|
||||||
|
-- show flags for 5 seconds, then hide 'em
|
||||||
|
------------------------------------------
|
||||||
|
constant delay = create(GTimeout,5000,call_back(routine_id("hide_flags")))
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
function hide_flags() -- called once at start of pgm. after a delay
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
for x = 1 to 16 do
|
||||||
|
set(btns[x][FLAG],"hide")
|
||||||
|
set(btns[x][CAPTION],"hide")
|
||||||
|
set(btns[x][TUX],"show")
|
||||||
|
btns[x][MATCHED] = FALSE
|
||||||
|
end for
|
||||||
|
return 0 -- 0 kills the timer, otherwise it would fire again every 5 sec.
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------
|
||||||
|
function onClick(atom ctl, integer this)
|
||||||
|
---------------------------------------------------------------
|
||||||
|
set(btns[this][TUX],"hide")
|
||||||
|
set(btns[this][FLAG],"show")
|
||||||
|
|
||||||
|
if btns[this][MATCHED] then return 1 end if
|
||||||
|
|
||||||
|
if prev > 0 then
|
||||||
|
if this = prev then return 1 end if -- same one clicked again, forgettaboutit!
|
||||||
|
if btns[this][HASH] != btns[prev][HASH] then -- not a match
|
||||||
|
set(btns[prev][FLAG],"hide")
|
||||||
|
set(btns[prev][CAPTION],"hide")
|
||||||
|
set(btns[prev][TUX],"show")
|
||||||
|
misses += 1
|
||||||
|
prev = this
|
||||||
|
guesses += 1
|
||||||
|
score -= 1
|
||||||
|
else -- matched!
|
||||||
|
btns[prev][MATCHED] = TRUE
|
||||||
|
btns[this][MATCHED] = TRUE
|
||||||
|
guesses += 1
|
||||||
|
correct += 1
|
||||||
|
prev = 0
|
||||||
|
popup_extra_credit(this)
|
||||||
|
end if
|
||||||
|
else
|
||||||
|
prev = this
|
||||||
|
end if
|
||||||
|
|
||||||
|
set(win,"title", -- update score;
|
||||||
|
sprintf("Score: %2.1f",score))
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
function popup_extra_credit(integer x)
|
||||||
|
-------------------------------------------------------------
|
||||||
|
object dlg = create(GtkDialog,{
|
||||||
|
{"default size",200,200},
|
||||||
|
{"border width",10},
|
||||||
|
{"add button","gtk-ok",1}})
|
||||||
|
|
||||||
|
object ca = get(dlg,"content area")
|
||||||
|
display(flagarray[x])
|
||||||
|
object img = create(GtkImage,sprintf("~/demos/resources/flags/%s",{flagarray[x]}))
|
||||||
|
object lbl = create(GtkLabel,{
|
||||||
|
{"font","8"},
|
||||||
|
{"markup",
|
||||||
|
"You get <b>5 points</b> for correctly matching the flags.\n" &
|
||||||
|
"For <i>more</i> points, please identify the country that\nflies this flag."}})
|
||||||
|
|
||||||
|
object sep = create(GtkSeparator)
|
||||||
|
add(ca,{img,lbl,sep})
|
||||||
|
|
||||||
|
object choices = {btns[x][NAME]}
|
||||||
|
while length(choices) < 3 do
|
||||||
|
choices = add_item(btns[rand(16)][NAME],choices)
|
||||||
|
end while
|
||||||
|
choices = shuffle(choices)
|
||||||
|
|
||||||
|
object btn = repeat(0,3)
|
||||||
|
btn[1] = create(GtkRadioButton,0,choices[1])
|
||||||
|
btn[2] = create(GtkRadioButton,btn[1],choices[2])
|
||||||
|
btn[3] = create(GtkRadioButton,btn[2],choices[3])
|
||||||
|
add(ca,btn)
|
||||||
|
show_all(ca)
|
||||||
|
|
||||||
|
object choice
|
||||||
|
integer i = get(dlg,"run")
|
||||||
|
|
||||||
|
for j = 1 to 3 do
|
||||||
|
if get(btn[j],"active") then choice = choices[j] end if
|
||||||
|
end for
|
||||||
|
|
||||||
|
if equal(choice,btns[x][NAME]) then
|
||||||
|
score += 100/8
|
||||||
|
show_matched_captions(0)
|
||||||
|
else
|
||||||
|
score += 5
|
||||||
|
show_matched_captions(x)
|
||||||
|
set(helptxt,"text","Incorrect guesses are shown in red")
|
||||||
|
end if
|
||||||
|
|
||||||
|
set(dlg,"destroy")
|
||||||
|
show_matched_captions(0)
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
procedure show_matched_captions(integer x)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
for i = 1 to 16 do
|
||||||
|
if btns[i][MATCHED] then show(btns[i][CAPTION]) end if
|
||||||
|
if x > 0 then -- set miss-identified captions to red
|
||||||
|
if equal(btns[i][NAME],btns[x][NAME]) then
|
||||||
|
set(btns[i][CAPTION],"color","red")
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
|
23
eugtk/examples/examples/xpm_include_test.ex
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
--# This demo includes xpm images as regular Eu sequences.
|
||||||
|
|
||||||
|
-- If this program is bound, shrouded, or compiled, the images
|
||||||
|
-- will be bound along with it, so neither the images nor the
|
||||||
|
-- include need to be available at run-time.
|
||||||
|
-----------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
include icon_P.e -- the converted xpm images;
|
||||||
|
include icon_I.e
|
||||||
|
include icon_E.e
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,"title=XPM includes,size=100x100,position=1,border=30,$destroy=Quit")
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,HORIZONTAL)
|
||||||
|
add(win,panel)
|
||||||
|
add(panel,{p:icon,i:icon,e:icon})
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
main()
|
141
eugtk/examples/examples/xpm_to_eu_include.ex
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
|
||||||
|
--------------------------------------------------------------
|
||||||
|
--# Utility converts xpm image file to euphoria sequence
|
||||||
|
-- which is then converted and exported as a GdkPixbuf.
|
||||||
|
--------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
integer n
|
||||||
|
object inputfile, outputfile
|
||||||
|
object xpm_name
|
||||||
|
object work = {"include GtkEngine.e\n"}
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,"title=XPM to .e,border=10,size=200x200,position=1,sig.destroy=Quit")
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,"orientation=VERTICAL,spacing=10")
|
||||||
|
add(win,panel)
|
||||||
|
|
||||||
|
constant lbl1 = create(GtkLabel,"Enter name of xpm file")
|
||||||
|
add(panel,lbl1)
|
||||||
|
|
||||||
|
constant fcb = create(GtkFileChooserButton,{
|
||||||
|
{"title","Select a file"},
|
||||||
|
{"action",GTK_FILE_CHOOSER_ACTION_OPEN},
|
||||||
|
{"current folder",canonical_path("~/demos/thumbnails")},
|
||||||
|
{"tooltip text","Click to open a file chooser dialog"},
|
||||||
|
{"signal","file-set","show_output_name"}})
|
||||||
|
add(panel,fcb)
|
||||||
|
|
||||||
|
constant filter = create(GtkFileFilter,{{"add pattern","*.xpm"}})
|
||||||
|
set(fcb,"filter",filter)
|
||||||
|
|
||||||
|
constant lbl2 = create(GtkLabel,"Output .e file or leave blank")
|
||||||
|
add(panel,lbl2)
|
||||||
|
|
||||||
|
constant out = create(GtkEntry)
|
||||||
|
add(panel,out)
|
||||||
|
|
||||||
|
constant img = create(GtkImage)
|
||||||
|
add(panel,img)
|
||||||
|
|
||||||
|
constant box = create(GtkButtonBox)
|
||||||
|
pack_end(panel,box)
|
||||||
|
|
||||||
|
add(box,create(GtkButton,"gtk-quit","Quit"))
|
||||||
|
add(box,create(GtkButton,"gtk-ok","xpm_convert"))
|
||||||
|
|
||||||
|
show_all(win)
|
||||||
|
main()
|
||||||
|
|
||||||
|
---------------------------------------------------------
|
||||||
|
function ProcessXPM(object line, integer ln, object data)
|
||||||
|
---------------------------------------------------------
|
||||||
|
integer i
|
||||||
|
|
||||||
|
if ln = 1 then -- retain name in comment;
|
||||||
|
i = match("/*",line)
|
||||||
|
if i > 0 then
|
||||||
|
line = line[i..$]
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
if ln = 2 then -- convert to eu constant declaration;
|
||||||
|
i = match("static char *",line)
|
||||||
|
if i > 0 then
|
||||||
|
xpm_name = line[i+14..$]
|
||||||
|
line = line[1..i-1] & "constant " & xpm_name
|
||||||
|
end if
|
||||||
|
i = match("[]",line) -- remove the brackets;
|
||||||
|
if i > 0 then
|
||||||
|
line = line[1..i-1] & line[i+2..$]
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
line = transmute(line,{{},'\t'},{' '}) -- convert tabs to spaces;
|
||||||
|
work = append(work,line)
|
||||||
|
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------
|
||||||
|
global function show_output_name(object ctl)
|
||||||
|
---------------------------------------------
|
||||||
|
set(out,"text",filebase(get(ctl,"filename")) & ".e")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------------------------
|
||||||
|
global function xpm_convert()
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
inputfile = get(fcb,"filename")
|
||||||
|
if not file_exists(inputfile) then
|
||||||
|
Error(,,inputfile,"does not exist",GTK_BUTTONS_CANCEL)
|
||||||
|
return 0
|
||||||
|
end if
|
||||||
|
|
||||||
|
set(img,"from file",inputfile) -- preview;
|
||||||
|
|
||||||
|
outputfile = get(out,"text")
|
||||||
|
if length(outputfile) = 0 then
|
||||||
|
outputfile = filebase(inputfile) & ".e"
|
||||||
|
set(out,"text",outputfile)
|
||||||
|
end if
|
||||||
|
|
||||||
|
process_lines(inputfile,routine_id("ProcessXPM"))
|
||||||
|
integer x = length(work)
|
||||||
|
|
||||||
|
xpm_name = split(xpm_name,"[") xpm_name = xpm_name[1]
|
||||||
|
|
||||||
|
work[$] = work[$][1..$-1] -- get rid of trailing semi-colon;
|
||||||
|
|
||||||
|
object n = filebase(get(out,"text"))
|
||||||
|
work = prepend(work,
|
||||||
|
sprintf(
|
||||||
|
`namespace %s
|
||||||
|
|
||||||
|
-- exports %s:icon as a GdkPixbuf
|
||||||
|
`,
|
||||||
|
{filebase(outputfile),n,n}))
|
||||||
|
|
||||||
|
work = append(work,"------------------------------------------------------------------------------")
|
||||||
|
work = append(work,sprintf("export constant icon = xpm_to_pixbuf(%s)",{xpm_name}))
|
||||||
|
work = append(work,"------------------------------------------------------------------------------")
|
||||||
|
|
||||||
|
write_lines(outputfile,work)
|
||||||
|
|
||||||
|
Info(,,
|
||||||
|
sprintf("include %s",{get(out,"text")}),
|
||||||
|
sprintf("reference with namespace:\n\t<b>%s:icon</b>",{filebase(get(out,"text"))}))
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
10
eugtk/examples/glade/.httpd.css
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
/*
|
||||||
|
-- ====================================================================
|
||||||
|
-- Styling for the remote display is set here;
|
||||||
|
-- ====================================================================
|
||||||
|
*/
|
||||||
|
th {color:yellow; background-color: blue;}
|
||||||
|
button {width: 100%;}
|
||||||
|
td {outline-style: solid; outline-width: 1px; outline-color: black; padding:2px; width: 25%;}
|
||||||
|
body {background-image: linear-gradient(180deg, orange, green); background-repeat: no-repeat;)
|
||||||
|
|
BIN
eugtk/examples/glade/Jessica-Alba.jpg
Normal file
After Width: | Height: | Size: 35 KiB |
85
eugtk/examples/glade/README.html
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>README</title>
|
||||||
|
<link rel="stylesheet" href="../documentation/style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<img src="gtk-logo-rgb.gif" alt="GTK Logo">
|
||||||
|
<img src="glade.svg" alt="Glade Logo">
|
||||||
|
<h2>EuGTK 4.11.10</h2>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<h3>Glade Demos</h3>
|
||||||
|
<p>
|
||||||
|
You can use Glade to design and adjust your user interface.
|
||||||
|
You still must write some Euphoria functions to respond to user interactions with the GUI. This is no different than VisualBasic, Delphi, or other programming environments, except that EuGTK code is generally less confusing.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
For writing that Euphoria code, either Geany or Pete Eberlein's new WEE editor (written in Euphoria and using EuGTK)
|
||||||
|
works for me. If you test-run your program from an x-term, EuGTK will generate
|
||||||
|
function prototypes for missing functions and display them on the terminal.
|
||||||
|
You can then copy and paste the prototype code into your program, and add
|
||||||
|
the necessary details.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Please start by reading <a href="../documentation/Glade.html">Glade docs</a>,
|
||||||
|
<a href="../documentation/StartingGlade.html">Starting Glade</a>, and
|
||||||
|
<a href="../documentation/StartingGlade2.html">Starting Glade II</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a href="widgets.ex" title="Click to run widgets.ex">
|
||||||
|
<img src="widgets.png" alt="widgets.ex" align="right" float="all" />
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Some of the programs in this folder are duplicates of other demos elsewhere, but have been re-written using Glade to design the user-interface. These are provided as examples f.y.i.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<ul>
|
||||||
|
<li>main.ex
|
||||||
|
<dd>along with include files:</dd>
|
||||||
|
<dd>
|
||||||
|
<ul><li>file.e</li><li>prefs.e</li><li>help.e</li></ul>
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
<li>calendar.ex
|
||||||
|
<dd>Fancy calendar with About dialog</dd></li>
|
||||||
|
|
||||||
|
<li>calculator.ex
|
||||||
|
<dd>Uses Shian Lee's math evaluator</dd></li>
|
||||||
|
|
||||||
|
<li>widgets.ex
|
||||||
|
<dd>Demos all numeric widgets</dd><br />
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="hint">
|
||||||
|
<img class="hint" src="../thumbnails/mongoose.png" alt="hint" align="left" float="right" />
|
||||||
|
<p>
|
||||||
|
This page edited by The <a href="../BEAR.ex">Bear</a>,
|
||||||
|
a web-page and programming editor
|
||||||
|
written in <a href="OpenEuphoria.org">Euphoria</a>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Updated for EuGTK version 4.11.11 Sept 1, 2016<br />
|
||||||
|
All code © 2016 by Irv Mullins
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
15
eugtk/examples/glade/about.e
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
namespace about
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
add(builder,canonical_path("~/demos/glade/about.glade"))
|
||||||
|
|
||||||
|
constant dlg = pointer("about:aboutdialog1")
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
global function on_help_about_activate()
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
if get(dlg,"run") then end if
|
||||||
|
set(dlg,"hide")
|
||||||
|
return 1
|
||||||
|
end function
|
36
eugtk/examples/glade/about.glade
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.16.1 -->
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.0"/>
|
||||||
|
<object class="GtkAboutDialog" id="aboutdialog1">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="type_hint">dialog</property>
|
||||||
|
<property name="program_name">About Hello</property>
|
||||||
|
<property name="version">Test of <b>Eu/Glade</b> </property>
|
||||||
|
<property name="comments" translatable="yes">February 2015</property>
|
||||||
|
<property name="logo_icon_name">apport</property>
|
||||||
|
<property name="license_type">lgpl-3-0</property>
|
||||||
|
<child internal-child="vbox">
|
||||||
|
<object class="GtkBox" id="aboutdialog-vbox1">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="spacing">2</property>
|
||||||
|
<child internal-child="action_area">
|
||||||
|
<object class="GtkButtonBox" id="aboutdialog-action_area1">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="layout_style">end</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
BIN
eugtk/examples/glade/accessories-calculator.png
Normal file
After Width: | Height: | Size: 5.2 KiB |
14
eugtk/examples/glade/au.e
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
namespace au
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
constant flag = canonical_path("~/demos/resources/flags/flags-australia.png")
|
||||||
|
set("image4","from pixbuf",create(GdkPixbuf,flag,-1,15,1))
|
||||||
|
|
||||||
|
export function hello(atom ctl, Label data)
|
||||||
|
set(data,"markup","G'Day, Mate!")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
||||||
|
|
118
eugtk/examples/glade/browser.ex
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
|
||||||
|
----------------------------------------------------------------------------------
|
||||||
|
--# A simple file browser/runner;
|
||||||
|
----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include std/sort.e
|
||||||
|
include std/datetime.e -- using this requires us to namespace gtk: functions
|
||||||
|
|
||||||
|
chdir(login)
|
||||||
|
|
||||||
|
constant win = create(GtkWindow,"size=750x550,border=10,$destroy=Quit")
|
||||||
|
gtk:set(win,"title","EuGTK Browser - " & login)
|
||||||
|
|
||||||
|
constant panel = create(GtkBox,"orientation=VERTICAL")
|
||||||
|
gtk:add(win,panel)
|
||||||
|
|
||||||
|
constant lbl = create(GtkLabel,
|
||||||
|
"markup='<small>Use <i>alt-f</i> to search, <i><enter></i> or double-click to run!</small>'")
|
||||||
|
gtk:add(panel,lbl)
|
||||||
|
|
||||||
|
constant store = create(GtkListStore,{gSTR,gSTR,gINT,gSTR,gINT,gSTR})
|
||||||
|
|
||||||
|
constant tv = create(GtkTreeView,{
|
||||||
|
{"model",store},
|
||||||
|
{"reorderable",TRUE},
|
||||||
|
{"headers clickable",TRUE},
|
||||||
|
{"set grid lines",GTK_TREE_VIEW_GRID_LINES_BOTH},
|
||||||
|
{"rules hint",TRUE}})
|
||||||
|
|
||||||
|
constant cols = { -- below is a new way to define cols and renderers in 1 line;
|
||||||
|
create(GtkColumn,"title=Name,type=text,text=1,sort_column_id=2"), --[1]
|
||||||
|
create(GtkColumn,"title=Size,type=text,text=3,sort_column_id=3"),
|
||||||
|
create(GtkColumn,"title=Date,type=text,text=4,sort_column_id=5"), --[2]
|
||||||
|
create(GtkColumn,"title=Description,type=text,markup=6,sort_column_id=6")
|
||||||
|
}
|
||||||
|
--[1] filename in col[1] is sorted by number in col[2]
|
||||||
|
--[2] date shown in col[4] is sorted on unix date in col[5]
|
||||||
|
|
||||||
|
gtk:add(tv,cols)
|
||||||
|
|
||||||
|
constant selection = gtk:get(tv,"selection")
|
||||||
|
set(selection,"mode",GTK_SELECTION_MULTIPLE)
|
||||||
|
|
||||||
|
constant scroller = create(GtkScrolledWindow)
|
||||||
|
pack(panel,scroller,TRUE,TRUE,10)
|
||||||
|
gtk:add(scroller,tv)
|
||||||
|
|
||||||
|
constant box = create(GtkButtonBox)
|
||||||
|
pack_end(panel,box)
|
||||||
|
|
||||||
|
constant btn = create(GtkButton,"gtk-quit","Quit")
|
||||||
|
gtk:add(box,btn)
|
||||||
|
|
||||||
|
-- load file list;
|
||||||
|
object files = dir("*.ex")
|
||||||
|
|
||||||
|
-- convert dates to usable format;
|
||||||
|
files = apply(files,routine_id("convert_date"))
|
||||||
|
files = apply(files,routine_id("convert_filename"))
|
||||||
|
|
||||||
|
-- load files into listview;
|
||||||
|
gtk:set(store,"data",files)
|
||||||
|
|
||||||
|
-- set up handlers;
|
||||||
|
gtk:set(tv,"rules hint",TRUE)
|
||||||
|
gtk:set(tv,"columns autosize")
|
||||||
|
gtk:set(tv,"search column",6)
|
||||||
|
gtk:set(tv,"search equal func",_("search_func"))
|
||||||
|
connect(tv,"row-activated","show_choice")
|
||||||
|
gtk:set(store,"sort column id",2,GTK_SORT_ASCENDING) -- default startup sort;
|
||||||
|
|
||||||
|
-- run the program!
|
||||||
|
show_all(win)
|
||||||
|
main()
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
function convert_filename(object f, object junk) -- allow 'natural' sort order;
|
||||||
|
------------------------------------------------
|
||||||
|
object tmp = io:read_lines(f[1])
|
||||||
|
for i = 1 to length(tmp) do
|
||||||
|
if match("--#",tmp[i]) =1 then
|
||||||
|
f[6] = tmp[i][5..$]
|
||||||
|
end if
|
||||||
|
end for
|
||||||
|
f[1] = filebase(f[1]) -- drop extension, build index of #s;
|
||||||
|
object x = filter(f[1],"out",{'0','9'},"[]")
|
||||||
|
object n = filter(f[1],"in",{'0','9'},"[]")
|
||||||
|
f[2] = x & pad_head(n,10,'0')
|
||||||
|
return f
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------------
|
||||||
|
function convert_date(object a, object b) -- convert dates to unix for sorting;
|
||||||
|
-----------------------------------------
|
||||||
|
object dt = datetime:new(a[4],a[5],a[6]) -- convert eu dir() date to datetime;
|
||||||
|
a[5] = to_unix(dt) -- store as UNIX timestamp for sorting purposes;
|
||||||
|
a[4] = datetime:format(dt,"%b %d %Y") -- store human-readable date for display;
|
||||||
|
a[6] = "?"
|
||||||
|
return a
|
||||||
|
end function
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
function search_func(atom mdl, integer col, object key, atom iter, object data)
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
key = lower(peek_string(key)) -- key is passed as pointer to string
|
||||||
|
data = get(mdl,"value",iter,6) -- value from col 6 of liststore (description)
|
||||||
|
return not match(key,lower(data)) -- find word anywhere in description, 0 = found
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
global function show_choice()
|
||||||
|
-----------------------
|
||||||
|
integer row = gtk:get(selection,"selected row")
|
||||||
|
object f = gtk:get(store,"col data",row,1)
|
||||||
|
system("eui " & f,0) -- run it;
|
||||||
|
return 1
|
||||||
|
end function
|
14
eugtk/examples/glade/ca.e
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
namespace ca
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
constant flag = canonical_path("~/demos/resources/flags/flags-canada.png")
|
||||||
|
set("image5","from pixbuf",create(GdkPixbuf,flag,-1,15,1))
|
||||||
|
|
||||||
|
export function hello(atom ctl, atom data)
|
||||||
|
set(data,"markup","Nice day, eh?")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
||||||
|
|
122
eugtk/examples/glade/calculator.ex
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
|
||||||
|
--# Calculator - uses math_eval.e by Shian Lee
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include GtkEvents.e
|
||||||
|
|
||||||
|
include math_eval.e -- AUTHOR: Shian Lee
|
||||||
|
|
||||||
|
add(builder,canonical_path("~/demos/glade/calculator.glade"))
|
||||||
|
|
||||||
|
object accumulator = ""
|
||||||
|
|
||||||
|
boolean has_decimal = FALSE
|
||||||
|
integer parens = -0
|
||||||
|
|
||||||
|
atom disp = pointer("label1")
|
||||||
|
set(disp,"color",#FADA12)
|
||||||
|
set("eventbox1","background","black")
|
||||||
|
set("window1","icon","calc")
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
global function on_button_clicked(Button btn)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
object key = get(btn,"name")
|
||||||
|
switch key do
|
||||||
|
case "clr" then clear_display()
|
||||||
|
case "=" then adjust_parens() do_calc()
|
||||||
|
case else update_display(key)
|
||||||
|
end switch
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
global function on_window1_key_press_event(Window w, atom event)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
object key = events:key(event)
|
||||||
|
switch key do
|
||||||
|
case 8 then do_backspace()
|
||||||
|
case 13 then update_display(key) do_calc() -- enter key
|
||||||
|
case 27 then clear_display() -- esc key clears accumulator
|
||||||
|
case 174 then update_display(".") -- keypad '.' = 174
|
||||||
|
case else if key > 0 then update_display(key) end if
|
||||||
|
end switch
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
||||||
|
-------------------------------------
|
||||||
|
procedure do_backspace()
|
||||||
|
-------------------------------------
|
||||||
|
if length(accumulator) then
|
||||||
|
accumulator = accumulator[1..$-1]
|
||||||
|
set(disp,"text",accumulator)
|
||||||
|
end if
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
-------------------------------------
|
||||||
|
procedure clear_display()
|
||||||
|
-------------------------------------
|
||||||
|
accumulator = ""
|
||||||
|
set(disp,"text",accumulator)
|
||||||
|
parens = 0
|
||||||
|
has_decimal = FALSE
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
-------------------------------------
|
||||||
|
procedure update_display(object key)
|
||||||
|
-------------------------------------
|
||||||
|
switch key do
|
||||||
|
case 40 then parens += 1
|
||||||
|
case 41 then if parens > 0 then parens -= 1 end if
|
||||||
|
case 13 then adjust_parens() return
|
||||||
|
case "|" then
|
||||||
|
adjust_parens()
|
||||||
|
set(disp,"text",accumulator)
|
||||||
|
return
|
||||||
|
case "." then
|
||||||
|
if has_decimal then return end if
|
||||||
|
has_decimal = TRUE
|
||||||
|
end switch
|
||||||
|
accumulator &= key
|
||||||
|
set(disp,"text",accumulator)
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
procedure adjust_parens()
|
||||||
|
------------------------------------------------
|
||||||
|
while parens > 0 do
|
||||||
|
accumulator &= ')'
|
||||||
|
parens -= 1
|
||||||
|
end while
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
procedure do_calc() -- send text to math_eval()
|
||||||
|
------------------------------------------------
|
||||||
|
object txt = accumulator
|
||||||
|
if parens then txt &= ")" end if
|
||||||
|
object results = math_eval(txt)
|
||||||
|
if atom(results) then -- valid result
|
||||||
|
results = sprintf("%g",results)
|
||||||
|
set(disp,"text",accumulator & " = " & results)
|
||||||
|
accumulator = results
|
||||||
|
else -- display the error message
|
||||||
|
Warn(,,accumulator,results,,"calc",64)
|
||||||
|
end if
|
||||||
|
|
||||||
|
end procedure
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
global function on_fn_clicked(Button b)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
object name = get(b,"name")
|
||||||
|
if find('(',name) then parens += 1 end if
|
||||||
|
accumulator &= name
|
||||||
|
set(disp,"text",accumulator)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
||||||
|
|
1027
eugtk/examples/glade/calculator.glade
Normal file
58
eugtk/examples/glade/calendar.ex
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
--# Display a nice calendar using EuGTK and Glade
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
add(builder,"~/demos/glade/calendar.glade")
|
||||||
|
|
||||||
|
-- PATCH: Gtk 3.14 forgets to add a quit button to the about.dialog!
|
||||||
|
if minor_version = 14 then
|
||||||
|
set("aboutdialog1","add button","gtk-quit",0)
|
||||||
|
end if
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
global function on_calendar1_day_selected_double_click()
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
return Info("window1",,"Calendar Clicked",
|
||||||
|
get("calendar1","date"),,
|
||||||
|
"~/demos/thumbnails/cal.png","x-office-calendar")
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
global function on_OK_button_clicked()
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
return Info("window1",,"Button Clicked",
|
||||||
|
sprintf("Date is %s",{get("calendar1","date")}),,
|
||||||
|
"~/demos/thumbnails/cal.png","x-office-calendar")
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
global function on_About_button_clicked()
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
set("aboutdialog1","run")
|
||||||
|
set("aboutdialog1","hide")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
global function check_link()
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
if networked() and inet_connected() then
|
||||||
|
return 0 -- go ahead and try the link;
|
||||||
|
else
|
||||||
|
Warn(,,"Network Error","No connection to Web!",,"~/demos/thumbnails/net0.png")
|
||||||
|
return 1 -- don't try to connect the link;
|
||||||
|
end if
|
||||||
|
end function
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
global function on_aboutdialog1_response()
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
set("aboutdialog1","hide")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
205
eugtk/examples/glade/calendar.glade
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.16.1 -->
|
||||||
|
<interface>
|
||||||
|
<object class="GtkImage" id="image2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="icon_name">x-office-calendar</property>
|
||||||
|
<property name="use_fallback">True</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkWindow" id="window1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="title" translatable="yes">Jessica Alba</property>
|
||||||
|
<property name="resizable">False</property>
|
||||||
|
<property name="window_position">center</property>
|
||||||
|
<property name="icon_name">x-office-calendar</property>
|
||||||
|
<property name="urgency_hint">True</property>
|
||||||
|
<signal name="destroy" handler="Quit" swapped="no"/>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="box1">
|
||||||
|
<property name="name">cal1</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="pixbuf">Jessica-Alba.jpg</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCalendar" id="calendar1">
|
||||||
|
<property name="name">calendar</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="show_details">False</property>
|
||||||
|
<signal name="day-selected-double-click" handler="on_calendar1_day_selected_double_click" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="padding">6</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButtonBox" id="buttonbox1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_left">10</property>
|
||||||
|
<property name="margin_right">10</property>
|
||||||
|
<property name="margin_bottom">5</property>
|
||||||
|
<property name="spacing">4</property>
|
||||||
|
<property name="homogeneous">True</property>
|
||||||
|
<property name="baseline_position">bottom</property>
|
||||||
|
<property name="layout_style">spread</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="Quit_button">
|
||||||
|
<property name="label">gtk-quit</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="tooltip_markup" translatable="yes">Click to <b>Quit</b></property>
|
||||||
|
<property name="margin_top">7</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="clicked" handler="Quit" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
<property name="non_homogeneous">True</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="About_button">
|
||||||
|
<property name="label">gtk-about</property>
|
||||||
|
<property name="name">about_button</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="tooltip_markup" translatable="yes">Click to show <b><i>About...</i></b> box.</property>
|
||||||
|
<property name="margin_top">7</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="clicked" handler="on_About_button_clicked" object="aboutdialog1" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
<property name="non_homogeneous">True</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="OK_button">
|
||||||
|
<property name="label">_OK</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="tooltip_markup" translatable="yes">Click to pop up an <b><i>Info</i></b> dialog
|
||||||
|
with the currently selected date.</property>
|
||||||
|
<property name="margin_top">7</property>
|
||||||
|
<property name="image">image2</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="clicked" handler="on_OK_button_clicked" object="calendar1" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
<property name="non_homogeneous">True</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<object class="GtkAboutDialog" id="aboutdialog1">
|
||||||
|
<property name="name">About!</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="title" translatable="yes">Jessica Alba</property>
|
||||||
|
<property name="resizable">False</property>
|
||||||
|
<property name="window_position">center-always</property>
|
||||||
|
<property name="destroy_with_parent">True</property>
|
||||||
|
<property name="icon_name">x-office-calendar</property>
|
||||||
|
<property name="type_hint">dialog</property>
|
||||||
|
<property name="skip_taskbar_hint">True</property>
|
||||||
|
<property name="skip_pager_hint">True</property>
|
||||||
|
<property name="deletable">False</property>
|
||||||
|
<property name="transient_for">window1</property>
|
||||||
|
<property name="attached_to">window1</property>
|
||||||
|
<property name="has_resize_grip">False</property>
|
||||||
|
<property name="program_name">Glade Calendar Demo</property>
|
||||||
|
<property name="version">vers 1.0</property>
|
||||||
|
<property name="copyright" translatable="yes">© 2016 by Irv Mullins</property>
|
||||||
|
<property name="comments" translatable="yes">Powered by</property>
|
||||||
|
<property name="website">http://openeuphoria.org</property>
|
||||||
|
<property name="website_label" translatable="yes">OpenEuphoria</property>
|
||||||
|
<property name="license" translatable="yes">LGPL ~ GNU Lesser General Public License version 3.0
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU Lesser General
|
||||||
|
Public License as published by the Free Software Foundation;
|
||||||
|
either version 2 of the License, or (at your option) any later
|
||||||
|
version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
See the GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Pl, Suite 330, Boston, MA 02111-1307 USA </property>
|
||||||
|
<property name="authors">Irv Mullins</property>
|
||||||
|
<property name="documenters">Donald Doc</property>
|
||||||
|
<property name="translator_credits" translatable="yes">Kay Pasa</property>
|
||||||
|
<property name="artists">Vince van Goo</property>
|
||||||
|
<property name="logo">eugtk.png</property>
|
||||||
|
<property name="wrap_license">True</property>
|
||||||
|
<property name="license_type">custom</property>
|
||||||
|
<signal name="activate-link" handler="check_link" swapped="no"/>
|
||||||
|
<signal name="response" handler="on_aboutdialog1_response" swapped="no"/>
|
||||||
|
<child internal-child="vbox">
|
||||||
|
<object class="GtkBox" id="aboutdialog-vbox1">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="double_buffered">False</property>
|
||||||
|
<property name="resize_mode">queue</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="spacing">2</property>
|
||||||
|
<child internal-child="action_area">
|
||||||
|
<object class="GtkButtonBox" id="aboutdialog-action_area1">
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="layout_style">end</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
32
eugtk/examples/glade/clock.ex
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
|
||||||
|
--# Clock built with Glade
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
include std/datetime.e
|
||||||
|
|
||||||
|
gtk:add(builder,"~/demos/glade/clock.glade")
|
||||||
|
|
||||||
|
constant ticker = gtk:create(GTimeout,250,_("TickTock")) -- every 1/4 sec.
|
||||||
|
|
||||||
|
create(GtkCssProvider,"""#clock {
|
||||||
|
font: Purisa, Comic Sans bold 30;
|
||||||
|
color: red;
|
||||||
|
text-shadow: 1px 1px 0px blue, -2px -2px yellow;
|
||||||
|
}""")
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
function TickTock() -- update time display
|
||||||
|
----------------------
|
||||||
|
gtk:set("display","markup",datetime:format(now(),"%a %l:%M:%S %P"))
|
||||||
|
return 1 -- return 1 to keep clock ticking!
|
||||||
|
end function
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
global function Bail()
|
||||||
|
----------------------
|
||||||
|
return Quit()
|
||||||
|
end function
|
||||||
|
|
90
eugtk/examples/glade/clock.glade
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.16.1 -->
|
||||||
|
<interface>
|
||||||
|
<object class="GtkWindow" id="Main Window">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="opacity">0.99999999977648257</property>
|
||||||
|
<property name="border_width">5</property>
|
||||||
|
<property name="window_position">center</property>
|
||||||
|
<property name="icon_name">clock</property>
|
||||||
|
<signal name="destroy" handler="Quit" swapped="no"/>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="box1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkOverlay" id="overlay1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="sensitive">False</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes"><u><b>Timeout/Idle</b></u>
|
||||||
|
|
||||||
|
Two kinds of timers are provided: the timeout, which calls a routine
|
||||||
|
you supply once each x/thousands of a second, and the idle, which
|
||||||
|
calls your routine as often as possible whenever GTK isn't attending
|
||||||
|
to other things, like user clicks, window movements, etc.
|
||||||
|
|
||||||
|
This clock uses timeout, updating 4x per second to minimize
|
||||||
|
visible 'jitter' in the time, but using less than 10% cpu time.
|
||||||
|
|
||||||
|
Changing the source to use idle instead will use 80-95% cpu</property>
|
||||||
|
<property name="use_markup">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child type="overlay">
|
||||||
|
<object class="GtkLabel" id="display">
|
||||||
|
<property name="name">clock</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="opacity">0.75</property>
|
||||||
|
<property name="valign">baseline</property>
|
||||||
|
<property name="use_markup">True</property>
|
||||||
|
<property name="track_visited_links">False</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButtonBox" id="buttonbox1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="layout_style">spread</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="Quit Button">
|
||||||
|
<property name="label">gtk-quit</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<property name="yalign">0.43000000715255737</property>
|
||||||
|
<signal name="clicked" handler="Bail" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
18
eugtk/examples/glade/colors.ex
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
--# XColors program built with Glade
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
add(builder,canonical_path("~/demos/glade/colors.glade"))
|
||||||
|
|
||||||
|
constant xcolors = canonical_path("~/demos/resources/xcolors.txt")
|
||||||
|
|
||||||
|
TreeView tv = pointer("treeview1")
|
||||||
|
ListStore st = pointer("liststore1")
|
||||||
|
|
||||||
|
sequence names = read_lines(xcolors)
|
||||||
|
set(st,"data",names)
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
111
eugtk/examples/glade/colors.glade
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.16.1 -->
|
||||||
|
<interface>
|
||||||
|
<object class="GtkListStore" id="liststore1">
|
||||||
|
<columns>
|
||||||
|
<!-- column-name name -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
</columns>
|
||||||
|
</object>
|
||||||
|
<object class="GtkWindow" id="window1">
|
||||||
|
<property name="width_request">350</property>
|
||||||
|
<property name="height_request">600</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="border_width">5</property>
|
||||||
|
<property name="resizable">False</property>
|
||||||
|
<property name="window_position">center</property>
|
||||||
|
<signal name="destroy" handler="Quit" swapped="no"/>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="box1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="shadow_type">in</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeView" id="treeview1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="vexpand">True</property>
|
||||||
|
<property name="model">liststore1</property>
|
||||||
|
<property name="show_expanders">False</property>
|
||||||
|
<property name="enable_grid_lines">both</property>
|
||||||
|
<child internal-child="selection">
|
||||||
|
<object class="GtkTreeSelection" id="treeview-selection1"/>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
|
||||||
|
<property name="fixed_width">160</property>
|
||||||
|
<property name="title" translatable="yes">Color name</property>
|
||||||
|
<property name="clickable">True</property>
|
||||||
|
<property name="reorderable">True</property>
|
||||||
|
<property name="sort_indicator">True</property>
|
||||||
|
<property name="sort_column_id">0</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext1"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="markup">0</attribute>
|
||||||
|
<attribute name="text">0</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn" id="treeviewcolumn2">
|
||||||
|
<property name="title" translatable="yes">Color</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext2"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="background">0</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButtonBox" id="buttonbox1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="layout_style">start</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="button1">
|
||||||
|
<property name="label">gtk-quit</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="clicked" handler="Quit" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
BIN
eugtk/examples/glade/coweat2.png
Normal file
After Width: | Height: | Size: 14 KiB |
14
eugtk/examples/glade/en.e
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
namespace en
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
constant flag = canonical_path("~/demos/resources/flags/flags-united_kingdom.png")
|
||||||
|
set("image1","from pixbuf",create(GdkPixbuf,flag,-1,15,1))
|
||||||
|
|
||||||
|
export function hello(atom ctl, Label data)
|
||||||
|
set(data,"markup","How do you do?")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
||||||
|
|
14
eugtk/examples/glade/es.e
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
namespace es
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
constant flag = canonical_path("~/demos/resources/flags/flags-spain.png")
|
||||||
|
set("image2","from pixbuf",create(GdkPixbuf,flag,-1,15,1))
|
||||||
|
|
||||||
|
export function hello(atom ctl, Label data)
|
||||||
|
set(data,"markup","Hola!")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
||||||
|
|
4
eugtk/examples/glade/eu.cfg
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
~/demos
|
||||||
|
|
||||||
|
|
||||||
|
|
BIN
eugtk/examples/glade/eugtk.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
eugtk/examples/glade/euphoria.gif
Normal file
After Width: | Height: | Size: 11 KiB |
88
eugtk/examples/glade/file.e
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
|
||||||
|
-----------------
|
||||||
|
namespace file -- used by main.ex
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
ifdef WINDOWS then
|
||||||
|
add(builder,"file.glade")
|
||||||
|
elsedef
|
||||||
|
add(builder,"~/demos/glade/file.glade")
|
||||||
|
end ifdef
|
||||||
|
|
||||||
|
set("file:chooser","do overwrite confirmation",TRUE)
|
||||||
|
|
||||||
|
object working_file = canonical_path("~/demos/test0.ex")
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
export function new(atom ctl, atom data)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
set("file:chooser",{
|
||||||
|
{"action",GTK_FILE_CHOOSER_ACTION_SAVE},
|
||||||
|
{"current name","MyNewFile"},
|
||||||
|
{"run"},
|
||||||
|
{"visible",FALSE}})
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
export function open(atom ctl, atom data)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
set("file:chooser",{
|
||||||
|
{"action",GTK_FILE_CHOOSER_ACTION_OPEN},
|
||||||
|
{"filename",working_file},
|
||||||
|
{"run"},
|
||||||
|
{"visible",FALSE}})
|
||||||
|
return 0
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
export function save(atom ctl, atom data)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
set("file:chooser",{
|
||||||
|
{"action",GTK_FILE_CHOOSER_ACTION_SAVE},
|
||||||
|
{"filename",working_file},
|
||||||
|
{"run"},
|
||||||
|
{"visible",FALSE}})
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
export function saveas(atom ctl, atom data)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
object newname
|
||||||
|
set("file:chooser",{
|
||||||
|
{"action",GTK_FILE_CHOOSER_ACTION_SAVE},
|
||||||
|
{"current name",""},
|
||||||
|
{"run"},
|
||||||
|
{"visible",FALSE}})
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-- following routines handle file-chooser dialog buttons;
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
export function cancel(atom ctl, atom data)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
set("file:chooser","visible",FALSE)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
export function ok(atom ctl, atom data)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
object fs = get("file:chooser","filename") display(fs)
|
||||||
|
if atom(fs) then
|
||||||
|
return 0 -- no filename entered
|
||||||
|
end if
|
||||||
|
|
||||||
|
integer act = get("file:chooser","action")
|
||||||
|
switch act do
|
||||||
|
case GTK_FILE_CHOOSER_ACTION_SAVE then
|
||||||
|
|
||||||
|
case GTK_FILE_CHOOSER_ACTION_OPEN then
|
||||||
|
end switch
|
||||||
|
set("file:chooser","visible",FALSE)
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
68
eugtk/examples/glade/file.glade
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.16.1 -->
|
||||||
|
<interface>
|
||||||
|
<object class="GtkFileChooserDialog" id="chooser">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="title" translatable="yes">File Operations</property>
|
||||||
|
<property name="window_position">mouse</property>
|
||||||
|
<property name="type_hint">normal</property>
|
||||||
|
<child internal-child="vbox">
|
||||||
|
<object class="GtkBox" id="filechooserdialog-vbox1">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="spacing">2</property>
|
||||||
|
<child internal-child="action_area">
|
||||||
|
<object class="GtkButtonBox" id="filechooserdialog-action_area1">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="layout_style">end</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="file_cancel_btn">
|
||||||
|
<property name="label">gtk-cancel</property>
|
||||||
|
<property name="name">file:cancel</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<signal name="clicked" handler="dispatch" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="file_ok_btn">
|
||||||
|
<property name="label">gtk-ok</property>
|
||||||
|
<property name="name">ok</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<signal name="clicked" handler="dispatch" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<action-widgets>
|
||||||
|
<action-widget response="0">file_cancel_btn</action-widget>
|
||||||
|
<action-widget response="1">file_ok_btn</action-widget>
|
||||||
|
</action-widgets>
|
||||||
|
</object>
|
||||||
|
</interface>
|
13
eugtk/examples/glade/fr.e
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
namespace fr
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
constant flag = canonical_path("~/demos/resources/flags/flags-france.png")
|
||||||
|
set("image3","from pixbuf",create(GdkPixbuf,flag,-1,15,1))
|
||||||
|
|
||||||
|
export function hello(atom ctl, Label data)
|
||||||
|
set(data,"markup","Bonjour!")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
1272
eugtk/examples/glade/glade.svg
Normal file
After Width: | Height: | Size: 74 KiB |
27
eugtk/examples/glade/gladetest1.ex
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
--# Test a few controls built with Glade
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
include GtkFileSelector.e
|
||||||
|
|
||||||
|
add(builder,canonical_path("~/demos/glade/gladetest1.glade"))
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
global function help_me()
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
Info(,,"About","My fine program!")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
global function open_file()
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
fileselector:filters = {"image"}
|
||||||
|
object newfile = fileselector:Open("*")
|
||||||
|
if sequence(newfile) then
|
||||||
|
set("image1","from file",newfile)
|
||||||
|
end if
|
||||||
|
return 1
|
||||||
|
end function
|
240
eugtk/examples/glade/gladetest1.glade
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.16.1 -->
|
||||||
|
<interface>
|
||||||
|
<object class="GtkWindow" id="window1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="title" translatable="yes">test1.ex</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="box1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="spacing">5</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuBar" id="menubar1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="menuitem1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">_File</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<child type="submenu">
|
||||||
|
<object class="GtkMenu" id="menu1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem1">
|
||||||
|
<property name="label">gtk-new</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="file_open">
|
||||||
|
<property name="label">gtk-open</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<signal name="activate" handler="open_file" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem3">
|
||||||
|
<property name="label">gtk-save</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem4">
|
||||||
|
<property name="label">gtk-save-as</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparatorMenuItem" id="separatormenuitem1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem5">
|
||||||
|
<property name="label">gtk-quit</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<signal name="activate" handler="Quit" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="menuitem2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">_Edit</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<child type="submenu">
|
||||||
|
<object class="GtkMenu" id="menu2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem6">
|
||||||
|
<property name="label">gtk-cut</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem7">
|
||||||
|
<property name="label">gtk-copy</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem8">
|
||||||
|
<property name="label">gtk-paste</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem9">
|
||||||
|
<property name="label">gtk-delete</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="menuitem3">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">_View</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="menuitem4">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">_Help</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<child type="submenu">
|
||||||
|
<object class="GtkMenu" id="menu3">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem10">
|
||||||
|
<property name="label">gtk-about</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="activate" handler="help_me" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="box2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="pixbuf">coweat2.png</property>
|
||||||
|
<property name="icon_size">6</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0.43999999761581421</property>
|
||||||
|
<property name="xpad">12</property>
|
||||||
|
<property name="label" translatable="yes">You have an unusual
|
||||||
|
<i><b>magnetic personality.</b></i>
|
||||||
|
|
||||||
|
Don't walk too close to
|
||||||
|
metal objects which are
|
||||||
|
not fastened down.</property>
|
||||||
|
<property name="use_markup">True</property>
|
||||||
|
<property name="max_width_chars">1</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="button1">
|
||||||
|
<property name="label">gtk-quit</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="relief">none</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="clicked" handler="Quit" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
BIN
eugtk/examples/glade/green-terminal.png
Normal file
After Width: | Height: | Size: 881 B |
BIN
eugtk/examples/glade/gtk-logo-rgb.gif
Normal file
After Width: | Height: | Size: 6.1 KiB |
48
eugtk/examples/glade/hello.ex
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
--# Simple greetings in various languages
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
chdir(canonical_path("~/demos/glade"))
|
||||||
|
add(builder,"hello.glade")
|
||||||
|
|
||||||
|
include en.e -- simple greetings in various languages
|
||||||
|
include es.e -- each include exports a function hello,
|
||||||
|
include fr.e -- and the correct one is called by using
|
||||||
|
include au.e -- the namespace en:, de:, fr:, etc...
|
||||||
|
include ca.e -- flag images are loaded as well.
|
||||||
|
|
||||||
|
include about.e -- handles the about dialog
|
||||||
|
|
||||||
|
constant hello_label = pointer("label1")
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
-- Rather than write a separate handler routine for each menu option,
|
||||||
|
-- we write a generic one which calls the appropriate function by name;
|
||||||
|
-- function name (including namespace) is specified in the Glade Widget name
|
||||||
|
-- property. See hello.glade. This can save a lot of coding in certain instances.
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
global function on_activate(object ctl)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
object fname = get(ctl,"name") -- (in this case, a function name)
|
||||||
|
|
||||||
|
display("Calling function []",{fname}) -- run from xterm to see this
|
||||||
|
|
||||||
|
atom fn = routine_id(fname)
|
||||||
|
if fn = -1 then
|
||||||
|
Error(,,"cannot link to function",fname)
|
||||||
|
else
|
||||||
|
return call_func(fn,{ctl,hello_label})
|
||||||
|
end if
|
||||||
|
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
257
eugtk/examples/glade/hello.glade
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.16.1 -->
|
||||||
|
<interface>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-missing-image</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image3">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-missing-image</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image4">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-missing-image</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image5">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-missing-image</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkWindow" id="window1">
|
||||||
|
<property name="width_request">250</property>
|
||||||
|
<property name="height_request">150</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="window_position">center</property>
|
||||||
|
<property name="icon_name">emblem-system</property>
|
||||||
|
<signal name="destroy" handler="Quit" swapped="no"/>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="box1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuBar" id="menubar1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="file_menu">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">_File</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<child type="submenu">
|
||||||
|
<object class="GtkMenu" id="file_submenu">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="file_new">
|
||||||
|
<property name="label">gtk-new</property>
|
||||||
|
<property name="name">hi:sayhi</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="sensitive">False</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="file_open">
|
||||||
|
<property name="label">gtk-open</property>
|
||||||
|
<property name="name">bi:sayhi</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="sensitive">False</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="file_save">
|
||||||
|
<property name="label">gtk-save</property>
|
||||||
|
<property name="name">bi:saybye</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="sensitive">False</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">False</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="file_save_as">
|
||||||
|
<property name="label">gtk-save-as</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="sensitive">False</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">False</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparatorMenuItem" id="file_sep1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="file_quit">
|
||||||
|
<property name="label">gtk-quit</property>
|
||||||
|
<property name="name">Quit</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="activate" handler="Quit" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="greetings_menu">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">_Greetings</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<child type="submenu">
|
||||||
|
<object class="GtkMenu" id="greetings_submenu">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="english">
|
||||||
|
<property name="label">_English</property>
|
||||||
|
<property name="name">en:hello</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="resize_mode">immediate</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="image">image1</property>
|
||||||
|
<property name="use_stock">False</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="activate" handler="on_activate" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="spanish">
|
||||||
|
<property name="label">_Spanish</property>
|
||||||
|
<property name="name">es:hello</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="image">image2</property>
|
||||||
|
<property name="use_stock">False</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="activate" handler="on_activate" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="french">
|
||||||
|
<property name="label">_French</property>
|
||||||
|
<property name="name">fr:hello</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="image">image3</property>
|
||||||
|
<property name="use_stock">False</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="activate" handler="on_activate" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="australian">
|
||||||
|
<property name="label">_Australian</property>
|
||||||
|
<property name="name">au:hello</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="image">image4</property>
|
||||||
|
<property name="use_stock">False</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="activate" handler="on_activate" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="canadian">
|
||||||
|
<property name="label">_Canadian</property>
|
||||||
|
<property name="name">ca:hello</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="image">image5</property>
|
||||||
|
<property name="use_stock">False</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="activate" handler="on_activate" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="help_menu">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">_Help</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<child type="submenu">
|
||||||
|
<object class="GtkMenu" id="help_submenu">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="help_about">
|
||||||
|
<property name="label">gtk-about</property>
|
||||||
|
<property name="name">about:rundialog</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<property name="always_show_image">True</property>
|
||||||
|
<signal name="activate" handler="on_help_about_activate" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="font-desc" value="Arial Bold 16"/>
|
||||||
|
</attributes>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
29
eugtk/examples/glade/help.e
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
--------------
|
||||||
|
namespace help -- used by main.ex
|
||||||
|
--------------
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
ifdef WINDOWS then
|
||||||
|
add(builder,"help.glade")
|
||||||
|
elsedef
|
||||||
|
add(builder,"~/demos/glade/help.glade")
|
||||||
|
end ifdef
|
||||||
|
|
||||||
|
-- About window1 is designed completely in Glade, all we need to do
|
||||||
|
-- here is to show or hide it as appropriate;
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
export function show(atom ctl, atom data)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
set("help:window1","visible",TRUE)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
export function close(atom ctl, atom data)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
set("help:window1","visible",FALSE)
|
||||||
|
return 1
|
||||||
|
end function
|
92
eugtk/examples/glade/help.glade
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.16.1 -->
|
||||||
|
<interface>
|
||||||
|
<object class="GtkWindow" id="window1">
|
||||||
|
<property name="width_request">200</property>
|
||||||
|
<property name="height_request">200</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="title" translatable="yes">About...</property>
|
||||||
|
<property name="window_position">mouse</property>
|
||||||
|
<property name="icon_name">help-about</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="box1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkGrid" id="grid1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="pixbuf">eugtk.png</property>
|
||||||
|
<property name="icon_size">2</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">0</property>
|
||||||
|
<property name="top_attach">0</property>
|
||||||
|
<property name="width">2</property>
|
||||||
|
<property name="height">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">About this program...</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="font-desc" value="URW Chancery L Bold Italic 12"/>
|
||||||
|
</attributes>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">0</property>
|
||||||
|
<property name="top_attach">1</property>
|
||||||
|
<property name="width">2</property>
|
||||||
|
<property name="height">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButtonBox" id="buttonbox1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_right">5</property>
|
||||||
|
<property name="margin_top">4</property>
|
||||||
|
<property name="margin_bottom">5</property>
|
||||||
|
<property name="resize_mode">immediate</property>
|
||||||
|
<property name="layout_style">end</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="close">
|
||||||
|
<property name="label">gtk-close</property>
|
||||||
|
<property name="name">help:close</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<signal name="clicked" handler="dispatch" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
46
eugtk/examples/glade/list.ex
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
|
||||||
|
--# Treeview built with Glade
|
||||||
|
|
||||||
|
include GtkEngine.e
|
||||||
|
|
||||||
|
add(builder,"~/demos/glade/list.glade")
|
||||||
|
|
||||||
|
-- retrieve some objects created by Glade that we'll need;
|
||||||
|
TreeView tv = pointer("treeview1")
|
||||||
|
ListStore store = pointer("liststore1")
|
||||||
|
TreeSelection selection = get(tv,"selection")
|
||||||
|
|
||||||
|
sequence veggies = {
|
||||||
|
"Broccoli",
|
||||||
|
"Cabbage",
|
||||||
|
"Beet greens",
|
||||||
|
"Swiss Chard",
|
||||||
|
"Collards",
|
||||||
|
"Asparagus ",
|
||||||
|
"Onions",
|
||||||
|
$}
|
||||||
|
|
||||||
|
set(store,"data",veggies) -- easy to load the list
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
global function on_treeview1_row_activated()
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
integer row = get(selection,"selected row")
|
||||||
|
object mdl = get(tv,"model")
|
||||||
|
object selected = get(mdl,"col data",row,1)
|
||||||
|
Info(,,selected)
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
global function on_imagemenuitem10_activate()
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
Info("window1",,"About this program")
|
||||||
|
return 1
|
||||||
|
end function
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|