189 lines
6.7 KiB
Elixir
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
|
|
|