diff --git a/src/gd_v_devman.erl b/src/gd_v_devman.erl index 1d1b440..caac3ba 100644 --- a/src/gd_v_devman.erl +++ b/src/gd_v_devman.erl @@ -945,15 +945,14 @@ open_hash3(State, Address, Source) -> end. -% TODO: Break this down -- tons of things in here recur. -save(State = #s{frame = Frame, j = J, prefs = Prefs, code = {Codebook, Pages}}) -> +save(State = #s{prefs = Prefs, code = {Codebook, Pages}}) -> case wxNotebook:getSelection(Codebook) of ?wxNOT_FOUND -> State; Index -> case lists:nth(Index + 1, Pages) of #p{path = {file, Path}, code = Widget} -> - Source = wxTextCtrl:getValue(Widget), + Source = wxStyledTextCtrl:getText(Widget), case filelib:ensure_dir(Path) of ok -> case file:write_file(Path, Source) of @@ -968,7 +967,7 @@ save(State = #s{frame = Frame, j = J, prefs = Prefs, code = {Codebook, Pages}}) State end; Page = #p{path = {hash, Hash}, code = Widget} -> - DefaultDir = + DefDir = case maps:find(dir, Prefs) of {ok, PrefDir} -> PrefDir; @@ -978,117 +977,78 @@ save(State = #s{frame = Frame, j = J, prefs = Prefs, code = {Codebook, Pages}}) D -> filename:basename(D) end end, - Options = - [{message, J("Save Location")}, - {defaultDir, DefaultDir}, - {defaultFile, unicode:characters_to_list([Hash, ".aes"])}, - {wildCard, "*.aes"}, - {style, ?wxFD_SAVE bor ?wxFD_OVERWRITE_PROMPT}], - Dialog = wxFileDialog:new(Frame, Options), - NewState = - case wxFileDialog:showModal(Dialog) of - ?wxID_OK -> - Dir = wxFileDialog:getDirectory(Dialog), - case wxFileDialog:getFilename(Dialog) of - "" -> - State; - Name -> - File = - case filename:extension(Name) of - ".aes" -> Name; - _ -> Name ++ ".aes" - end, - Path = filename:join(Dir, File), - Source = gd_sophia_editor:get_text(Widget), - case filelib:ensure_dir(Path) of - ok -> - case file:write_file(Path, Source) of - ok -> - true = wxNotebook:setPageText(Codebook, Index, File), - NewPrefs = maps:put(dir, Dir, Prefs), - NewPage = Page#p{path = {file, Path}}, - NewPages = store_nth(Index + 1, NewPage, Pages), - NewCode = {Codebook, NewPages}, - State#s{prefs = NewPrefs, code = NewCode}; - Error -> - ok = handle_troubling(State, Error), - State - end; - Error -> - ok = handle_troubling(State, Error), - State - end - end; - ?wxID_CANCEL -> - State - end, - ok = wxFileDialog:destroy(Dialog), - NewState + DefName = unicode:characters_to_list([Hash, ".aes"]), + save_dialog(State, DefDir, DefName, Widget, Index, Page) end end. -% TODO: Break this down -- tons of things in here recur. -rename(State = #s{frame = Frame, j = J, prefs = Prefs, code = {Codebook, Pages}}) -> +rename(State = #s{code = {Codebook, Pages}}) -> case wxNotebook:getSelection(Codebook) of ?wxNOT_FOUND -> State; Index -> case lists:nth(Index + 1, Pages) of Page = #p{path = {file, Path}, code = Widget} -> - DefaultDir = filename:dirname(Path), - Options = - [{message, J("Save Location")}, - {defaultDir, DefaultDir}, - {defaultFile, filename:basename(Path)}, - {wildCard, "*.aes"}, - {style, ?wxFD_SAVE bor ?wxFD_OVERWRITE_PROMPT}], - Dialog = wxFileDialog:new(Frame, Options), - NewState = - case wxFileDialog:showModal(Dialog) of - ?wxID_OK -> - Dir = wxFileDialog:getDirectory(Dialog), - case wxFileDialog:getFilename(Dialog) of - "" -> - State; - Name -> - File = - case filename:extension(Name) of - ".aes" -> Name; - _ -> Name ++ ".aes" - end, - NewPath = filename:join(Dir, File), - Source = gd_sophia_editor:get_text(Widget), - case filelib:ensure_dir(NewPath) of - ok -> - case file:write_file(NewPath, Source) of - ok -> - true = wxNotebook:setPageText(Codebook, Index, File), - NewPrefs = maps:put(dir, Dir, Prefs), - NewPage = Page#p{path = {file, NewPath}}, - NewPages = store_nth(Index + 1, NewPage, Pages), - NewCode = {Codebook, NewPages}, - State#s{prefs = NewPrefs, code = NewCode}; - Error -> - ok = handle_troubling(State, Error), - State - end; - Error -> - ok = handle_troubling(State, Error), - State - end - end; - ?wxID_CANCEL -> - State - end, - ok = wxFileDialog:destroy(Dialog), - NewState; + DefDir = filename:dirname(Path), + DefName = filename:basename(Path), + save_dialog(State, DefDir, DefName, Widget, Index, Page); #p{path = {hash, _}} -> save(State) end end. +save_dialog(State = #s{frame = Frame, j = J, prefs = Prefs, code = {Codebook, Pages}}, + DefDir, DefName, Widget, Index, Page) -> + Options = + [{message, J("Save Location")}, + {defaultDir, DefDir}, + {defaultFile, DefName}, + {wildCard, "*.aes"}, + {style, ?wxFD_SAVE bor ?wxFD_OVERWRITE_PROMPT}], + Dialog = wxFileDialog:new(Frame, Options), + NewState = + case wxFileDialog:showModal(Dialog) of + ?wxID_OK -> + Dir = wxFileDialog:getDirectory(Dialog), + case wxFileDialog:getFilename(Dialog) of + "" -> + State; + Name -> + File = + case filename:extension(Name) of + ".aes" -> Name; + _ -> Name ++ ".aes" + end, + NewPath = filename:join(Dir, File), + Source = gd_sophia_editor:get_text(Widget), + case filelib:ensure_dir(NewPath) of + ok -> + case file:write_file(NewPath, Source) of + ok -> + true = wxNotebook:setPageText(Codebook, Index, File), + NewPrefs = maps:put(dir, Dir, Prefs), + NewPage = Page#p{path = {file, NewPath}}, + NewPages = store_nth(Index + 1, NewPage, Pages), + NewCode = {Codebook, NewPages}, + State#s{prefs = NewPrefs, code = NewCode}; + Error -> + ok = handle_troubling(State, Error), + State + end; + Error -> + ok = handle_troubling(State, Error), + State + end + end; + ?wxID_CANCEL -> + State + end, + ok = wxFileDialog:destroy(Dialog), + NewState. + + close_source(State = #s{code = {Codebook, Pages}}) -> case wxNotebook:getSelection(Codebook) of ?wxNOT_FOUND ->