comparison src/luan_editor/window.luan @ 39:2a3092ca528e

error handling
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 15 May 2025 16:24:04 -0600
parents 8c90e0077cfe
children f7e8c1f532c8
comparison
equal deleted inserted replaced
38:8c90e0077cfe 39:2a3092ca528e
22 local make_find_panel = require "classpath:luan_editor/find.luan" 22 local make_find_panel = require "classpath:luan_editor/find.luan"
23 local add_menu_bar = require "classpath:luan_editor/menu.luan" 23 local add_menu_bar = require "classpath:luan_editor/menu.luan"
24 local Swing = require "luan:swing/Swing.luan" 24 local Swing = require "luan:swing/Swing.luan"
25 local File_chooser = require "luan:swing/File_chooser.luan" 25 local File_chooser = require "luan:swing/File_chooser.luan"
26 local choose_file = File_chooser.awt_choose_file or error() 26 local choose_file = File_chooser.awt_choose_file or error()
27 local Option_pane = require "luan:swing/Option_pane.luan"
28 local show_message_dialog = Option_pane.show_message_dialog or error()
27 local Logging = require "luan:logging/Logging.luan" 29 local Logging = require "luan:logging/Logging.luan"
28 local logger = Logging.logger "editor/window" 30 local logger = Logging.logger "editor/window"
29 31
30 32
31 local n_windows = 0 33 local n_windows = 0
57 config_file.write_text( stringify(config).."\n" ) 59 config_file.write_text( stringify(config).."\n" )
58 end 60 end
59 61
60 local function new_window(file,document) 62 local function new_window(file,document)
61 local window = {} 63 local window = {}
62 window.has_file = file~=nil and file.is_file() 64 if file == nil or not file.exists() then
65 window.has_file = false
66 elseif file.is_file() then
67 window.has_file = true
68 else
69 show_message_dialog(nil,"Not a file")
70 if n_windows == 0 then
71 Luan.exit()
72 else
73 return
74 end
75 end
76 window.has_file = file~=nil and file.exists()
63 local text_area = new_text_area{ 77 local text_area = new_text_area{
64 wrap_style_word = true 78 wrap_style_word = true
65 line_wrap = config.line_wrap 79 line_wrap = config.line_wrap
66 whitespace_visible = config.whitespace_visible 80 whitespace_visible = config.whitespace_visible
67 tab_size = config.tab_size 81 tab_size = config.tab_size
71 local title = file and file.canonical().to_string() or "new" 85 local title = file and file.canonical().to_string() or "new"
72 if document ~= nil then 86 if document ~= nil then
73 text_area.document = document 87 text_area.document = document
74 elseif file ~= nil then 88 elseif file ~= nil then
75 local document = documents[title] 89 local document = documents[title]
76 if document == nil then 90 if document ~= nil then
91 text_area.document = document
92 else
77 documents[title] = text_area.document 93 documents[title] = text_area.document
78 else 94 if file.exists() then
79 text_area.document = document 95 text_area.text = file.read_text()
80 end 96 text_area.document.clear_unedited()
81 if file.is_file() then 97 end
82 text_area.text = file.read_text()
83 text_area.document.clear_unedited()
84 end 98 end
85 end 99 end
86 text_area.set_selection(0) 100 text_area.set_selection(0)
87 local status_bar = new_label{ 101 local status_bar = new_label{
88 constraints = "span,growx" 102 constraints = "span,growx"
159 end 173 end
160 title = file.canonical().to_string() 174 title = file.canonical().to_string()
161 frame.title = title 175 frame.title = title
162 documents[title] = text_area.document 176 documents[title] = text_area.document
163 end 177 end
164 file.write_text(text_area.text) 178 try
179 file.write_text(text_area.text)
180 catch e
181 show_message_dialog( frame, e.get_message() )
182 return false
183 end
165 text_area.document.set_unedited() 184 text_area.document.set_unedited()
166 return true 185 return true
167 end 186 end
168 function window.revert() 187 function window.revert()
169 local selection = text_area.get_selection() 188 local selection = text_area.get_selection()