diff options
Diffstat (limited to 'lib/debugger/src/dbg_wx_settings.erl')
-rw-r--r-- | lib/debugger/src/dbg_wx_settings.erl | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/lib/debugger/src/dbg_wx_settings.erl b/lib/debugger/src/dbg_wx_settings.erl new file mode 100644 index 0000000000..8f87815949 --- /dev/null +++ b/lib/debugger/src/dbg_wx_settings.erl @@ -0,0 +1,110 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2008-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% + +%% +-module(dbg_wx_settings). + +-include_lib("kernel/include/file.hrl"). +-include_lib("wx/include/wx.hrl"). + +%% External exports +-export([load/3, save/3]). + + +%%==================================================================== +%% External exports +%%==================================================================== + +%%==================================================================== +%% load/save(Win, Pos, Str) -> {ok, FileName} | cancel +%%==================================================================== +load(Win, Pos, SFile) -> + Str = "Load Settings Dialog", + open_win(Win, Pos, SFile, Str, ?wxFD_OPEN). + +save(Win, Pos, SFile) -> + Str = "Save Settings Dialog", + open_win(Win, Pos, SFile, Str, ?wxFD_SAVE). + + +%%==================================================================== +%% Internal functions +%%==================================================================== + +open_win(Win, Pos, SFile, Str, What) -> + {SDir, SFileName} = + if + %% If settings are saved for the first time, and to + %% the default directory HOME/erlang.tools/debugger, + %% make sure the directory exists, or create it if + %% desired and possible + SFile==default -> {default_settings_dir(Win), "NoName.state"}; + true -> {filename:dirname(SFile), filename:basename(SFile)} + end, + + FD = wxFileDialog:new(Win, [{message,Str},{pos, Pos}, + {defaultDir,SDir}, + {defaultFile,SFileName}, + {wildCard, "*.state"}, + {style,What}]), + case wxFileDialog:showModal(FD) of + ?wxID_OK -> + File = wxFileDialog:getFilename(FD), + Dir = wxFileDialog:getDirectory(FD), + wxFileDialog:destroy(FD), + {ok, filename:join(Dir,File)}; + _ -> + wxFileDialog:destroy(FD), + cancel + end. + +default_settings_dir(Win) -> + {ok, [[Home]]} = init:get_argument(home), + DefDir = filename:join([Home, ".erlang_tools", "debugger"]), + + case filelib:is_dir(DefDir) of + true -> DefDir; + false -> + {ok, CWD} = file:get_cwd(), + + Msg = ["Default directory", DefDir, "does not exist.", + "Click Ok to create it or", + "Cancel to use other directory!"], + case dbg_wx_win:confirm(Win, Msg) of + ok -> + ToolsDir = filename:dirname(DefDir), + case filelib:is_dir(ToolsDir) of + true -> + case file:make_dir(DefDir) of + ok -> DefDir; + _Error -> CWD + end; + false -> + case file:make_dir(ToolsDir) of + ok -> + case file:make_dir(DefDir) of + ok -> DefDir; + _Error -> CWD + end; + _Error -> CWD + end + end; + cancel -> CWD + end + end. |