2016-11-25 00:33:18 -07:00

189 lines
6.7 KiB
Elixir

--# File Editor, Glade version of test25.ex
include GtkEngine.e
include GtkPrinter.e
constant docs = `Demonstrates
menus,
file chooser,
file filters,
recent chooser,
fonts,
exec, etc`
add(builder,"~/demos/glade/test25.glade")
object current_font = get("fontchooserdialog1","font")
set("textview1","font",current_font)
set("fontchooserdialog1","font",current_font)
object current_file = 0
-- Can't find a way to add more than one filter directly in Glade,
-- nor any way to set the filter's name, which is what shows in the
-- drop down filter selector... so we do it manually:
FileFilter f1 = get(builder,"object","filefilter1")
set(f1,"name","Euphoria files")
set("filechooserdialog1","add filter",f1)
FileFilter f2 = get(builder,"object","filefilter2")
set(f2,"name","All Text Files")
set("filechooserdialog1","add filter",f2)
-- seems that Glade has no way to directly add a drop-down
-- RecentChooser to main menu so we do this the 'old fashioned' way;
RecentFilter rcf = pointer("recentfilter1")
RecentChooserMenu rc_menu = create(GtkRecentChooserMenu,{
{"add filter",rcf},
{"sort type",GTK_RECENT_SORT_MRU},
{"show icons",TRUE},
{"local only",TRUE},
{"show numbers",TRUE},
{"show tips",TRUE}})
set("recent_menu","submenu",rc_menu)
connect(rc_menu,"selection-done","open_recent",rc_menu)
main()
------------------------------------------------------------------------------
global function menu_open_file(Button self, atom dialog)
------------------------------------------------------------------------------
object fn -- storage for filename
if get(dialog,"run") = 1 -- 'ok' button's Response ID (must set in Glade)
then fn = get(dialog,"filename") -- actually, gets the full path to file
if file_exists(fn) then
LoadText(fn)
end if
end if
set(dialog,"hide") -- don't destroy this dialog, keep it for later use
return 1
end function
------------------------------------------------------------------------
global function open_recent()
------------------------------------------------------------------------
object fn = get(rc_menu,"current uri")
fn = fn[8..$] -- discard the leading FILE:///
if file_exists(fn) then
LoadText(fn)
end if
return 1
end function
---------------------------------
procedure LoadText(sequence fn)
---------------------------------
set("window1","title",fn)
set("textbuffer1","text",read_file(fn))
set("menu_close","sensitive",TRUE)
set("menu_open","sensitive",FALSE)
set("menu_exec","sensitive",TRUE)
set("menu_print","sensitive",TRUE)
current_file = fn
end procedure
------------------------------------------------------------------------
global function menu_close_file(atom self, atom data)
------------------------------------------------------------------------
set("textbuffer1","text","") -- clear the text
set("menu_close","sensitive",FALSE)
set("menu_open","sensitive",TRUE)
set("menu_exec","sensitive",FALSE)
set("menu_print","sensitive",FALSE)
return 1
end function
------------------------------------------------------------------------
global function on_menu_exec_activate()
------------------------------------------------------------------------
system("eui " & current_file & " & ",0) -- run the current file;
return 1
end function
-----------------------------------------------------------------------
global function on_menu_print_activate()
-----------------------------------------------------------------------
printer:PrintFile(current_file)
return 1
end function
------------------------------------------------------------------------
global function on_menu_colors_activate(atom self, atom view)
------------------------------------------------------------------------
-- hack:
-- colors are passed in Glade 'name' field as fgnd,bkgnd (no quotes)
object params = split(get(self,"name"),',')
set(view,"foreground",params[1])
set(view,"background",params[2])
return 1
end function
-------------------------------------------------------------------------------
global function on_menu_font_activate(atom self, atom dialog)
-------------------------------------------------------------------------------
set(dialog,"filter func",call_back(routine_id("FilterFonts")))
set(dialog,"font",current_font)
if get(dialog,"run") then
current_font = get(dialog,"font")
set("textview1","font",current_font)
set(dialog,"hide")
end if
return 1
end function
------------------------------------------------------------------------
function FilterFonts(atom family)
------------------------------------------------------------------------
sequence fontlist = { -- faces to show in font selection dialog;
"DejaVu Sans Mono","Courier 10 Pitch","Courier New","FreeSerif",
"Impact","URW Chancery L","Comic","Purisa","Arial","Arial Black",
"Sawasdee","Balmoral D","Ubuntu Mono"
}
object fontname = gtk_str_func("pango_font_family_get_name",{P},{family})
-- process each font the dialog tries to load;
return find(fontname,fontlist)
-- return 1 if it's on our list, otherwise, return 0 to skip this font;
end function
------------------------------------------------------------------------
global function on_menu_normal_activate(atom self, atom view)
------------------------------------------------------------------------
FontDescription fnt = create(PangoFontDescription,current_font)
set(fnt,"weight",PANGO_WEIGHT_NORMAL)
set(fnt,"style",PANGO_STYLE_NORMAL)
current_font = get(fnt,"to string")
set(view,"font",current_font)
return 1
end function
------------------------------------------------------------------------
global function on_menu_bold_activate(atom self, atom view)
------------------------------------------------------------------------
FontDescription fnt = create(PangoFontDescription,current_font)
set(fnt,"weight",PANGO_WEIGHT_BOLD)
current_font = get(fnt,"to string")
set(view,"font",current_font)
return 1
end function
------------------------------------------------------------------------
global function on_menu_italic_activate(atom self, atom view)
------------------------------------------------------------------------
FontDescription fnt = create(PangoFontDescription,current_font)
set(fnt,"style",PANGO_STYLE_ITALIC)
current_font = get(fnt,"to string")
set(view,"font",current_font)
return 1
end function
------------------------------------------------------------------------
global function on_menu_about_activate()
------------------------------------------------------------------------
return Info("window1"," About ",
"Simple Text\nViewer/Editor",docs,,"accessories-text-editor","gnome-help")
end function