Pastey budget.ex

include GtkEngine.e
include std/eds.e 
 
db_fatal_id = routine_id("ShowError") -- global procedure in utils.e; 
 
constant tips = {    -- these add tooltips to the buttons, and  are useful   
 "Exit the program", -- as a reminder of what this file is expected to do; 
 "Insert a new record", 
 "Edit the selected record", 
 "Delete the selected record" 
 } 
  
include record_funcs.e -- contains functions called by buttons below; 
 
constant -- Main Window 
    win = create(GtkWindow,"name=MainWin;size=600x500;border=10;$destroy=BailOut"), 
    pan = create(GtkBox,"orientation=vertical;name=MainWin:Panel"), 
    bar = create(GtkMenuBar,"name=MainWin:MenuBar"),-- exported by name so constant bar is local; 
    box = create(GtkButtonBox,"margin top=10"),  
    btn = create(GtkButton,"gtk-quit","BailOut") -- calls Bailout (in utils.e) directly; 
        & create(GtkButton,"gtk-add",_("Insert"))   -- call local functions in record_funcs.e 
        & create(GtkButton,"gtk-edit",_("Edit"))    -- there are also Edit and Delete funcs 
        & create(GtkButton,"gtk-delete",_("Delete"))-- in other menus, but they aren't visible here; 
 
for i = 1 to length(tips) do 
    set(btn[i],"tooltip text",tips[i]) 
end for 
         
include file_menu.e  -- These *_menu.e files contain the drop-down menu contents, 
include table_menu.e -- and add themselves to the main menu, in the order they are included; 
include record_menu.e 
include utils.e 
include help.e 
 
add(win,pan) 
add(box,btn) 
pack(pan,bar) 
pack(pan,"View",1,1) -- View is exported by name from view.e - in this case, it's a ListView 
pack(pan,-box) 
 
show_all(win) 
main() 

1. Comment by irv Oct 15, 2020

I'm posting some code to show how easy it is to create a user-friendly interface to your programs. These four files contain a fairly complete and generic program interface. You could use it for other purposes with minor modifications.

Breaking code up into easy-to understand chunks makes development a lot easier. This particular "budget" project is substatially complete, and has:

----------------------------------------- 
Lines of code  (comments count as code) 
----------------------------------------- 
File: budget.ex 36 lines 
File: dump.txt 10 lines 
File: file_funcs.e 87 lines 
File: file_menu.e 39 lines 
File: help.e 15 lines 
File: prefs.e 12 lines 
File: record_funcs.e 51 lines 
File: record_menu.e 24 lines 
File: sl_input.e 39 lines 
File: table_funcs.e 96 lines 
File: table_menu.e 26 lines 
File: utils.e 132 lines 
File: view.e 33 lines 
------------------------------------- 
600 lines of code in /home/irv/WORK 
------------------------------------- 

There is one more interface file to write - a multi-line record edit form. Should take less than 100 loc.

I'm posting the interface which you can run, the code to handle the database functions is written (file_funcs.e, table_funcs.e, and record_funcs.e - see list above). I'll post that later if anyone is interested.

2. Comment by irv Oct 15, 2020

Looks like I clipped off the function that should have been at the bottom of this file:

------------------------- 
global function BailOut() 
------------------------- 
return Quit() 
end function