our
$VERSION
=
'0.29'
;
my
%settings
;
sub
settings { \
%settings
}
sub
_settings {
my
$conf
=
shift
;
%settings
=
%$conf
if
ref
$conf
eq
'HASH'
;
\
%settings
;
}
sub
merge_hash_into_settings {
my
$conf
=
shift
;
return
unless
ref
$conf
eq
'HASH'
;
_settings( Kephra::Config::Tree::update( settings(),
$conf
) );
}
sub
merge_subfile_into_settings {
my
$file
=
shift
;
return
unless
$file
;
$file
= Kephra::Config::filepath( _sub_dir(),
'sub'
,
$file
);
return
unless
-r
$file
;
merge_hash_into_settings( Kephra::Config::File::load(
$file
) );
}
sub
_sub_dir {
'global'
}
my
(
$auto_file
,
$current_file
);
sub
current_file{
$current_file
=
defined
$_
[0] ?
$_
[0] :
$current_file
}
sub
auto_file {
$auto_file
=
defined
$_
[0] ?
$_
[0] :
$auto_file
}
sub
autoload {
my
$autosave
= auto_file();
current_file(
$autosave
);
my
$backup
=
$autosave
.
'~'
;
for
my
$file
(
$autosave
,
$backup
) {
if
( -e
$file
) {
my
$config_tree
= Kephra::Config::File::load(
$file
);
%settings
=
%$config_tree
if
ref
$config_tree
eq
'HASH'
;
if
(
exists
$settings
{about}{version}
and
$settings
{about}{version} ne
$Kephra::VERSION
){
rename
$file
,
$file
.
'.old'
;
%settings
= %{ Kephra::Config::Tree::update(
Kephra::Config::Default::global_settings(),
\
%settings
,
) };
$settings
{about}{version} =
$Kephra::VERSION
;
}
last
if
%settings
;
rename
$file
,
$file
.
'.failed'
;
}
}
%settings
? evaluate()
: load_defaults();
Kephra::File::History::init();
keys
%settings
;
}
sub
autosave {
my
$file_name
= auto_file();
rename
$file_name
,
$file_name
.
'~'
;
Kephra::Config::File::store(
$file_name
, \
%settings
);
}
sub
open_current_file {
save_current();
Kephra::Config::open_file_absolute( current_file() );
}
sub
load_backup_file { reload( auto_file() .
'~'
) }
sub
load_defaults {
%settings
= %{ Kephra::Config::Default::global_settings() };
evaluate();
}
sub
load_from {
my
$file_name
= Kephra::Dialog::get_file_open(
Kephra::Config::Localisation::strings()->{dialog}{config_file}{load},
Kephra::Config::dirpath( _sub_dir() ),
$Kephra::temp
{file}{filterstring}{config}
);
reload(
$file_name
)
if
-e
$file_name
;
current_file(
$file_name
);
}
sub
update {
Kephra::App::Window::save_positions();
Kephra::Document::Data::update_attributes();
Kephra::Edit::Search::save_search_data();
Kephra::App::EditPanel::Fold::store();
Kephra::App::Panel::Notepad::save();
Kephra::App::Panel::Output::save();
}
sub
evaluate {
my
$t0
= new Benchmark;
Kephra::EventTable::del_all();
Kephra::EventTable::stop_timer();
my
$t1
= new Benchmark;
print
" iface cnfg:"
, Benchmark::timestr( Benchmark::timediff(
$t1
,
$t0
) ),
"\n"
if
$Kephra::BENCHMARK
;
$Kephra::app
{GUI}{masterID} = 20;
$Kephra::temp
{dialog}{control} = 0;
Kephra::Document::SyntaxMode::_ID(
'none'
);
Kephra::Edit::Search::_refresh_search_flags();
Kephra::API::settings()->{app}{window}{title}=~ s/\\\$/\$/g;
my
$t2
= new Benchmark;
print
" prep. data:"
, Benchmark::timestr( Benchmark::timediff(
$t2
,
$t1
) ),
"\n"
if
$Kephra::BENCHMARK
;
Kephra::Config::Interface::load();
my
$t3
= new Benchmark;
print
" create gui:"
, Benchmark::timestr( Benchmark::timediff(
$t3
,
$t2
) ),
"\n"
if
$Kephra::BENCHMARK
;
Kephra::App::Window::apply_settings();
Kephra::App::ContextMenu::create_all();
Kephra::App::MenuBar::create();
Kephra::App::MainToolBar::show();
Kephra::App::SearchBar::create();
Kephra::App::TabBar::apply_settings();
Kephra::App::StatusBar::create();
Kephra::App::Panel::Notepad::create();
Kephra::App::Panel::Output::create();
Kephra::App::assemble_layout();
Kephra::Config::Interface::del_temp_data();
my
$t4
= new Benchmark;
print
" apply sets:"
, Benchmark::timestr( Benchmark::timediff(
$t4
,
$t3
) ),
"\n"
if
$Kephra::BENCHMARK
;
Kephra::App::ContextMenu::connect_all();
Kephra::App::EditPanel::apply_settings_here();
Kephra::Config::build_fileendings2syntaxstyle_map();
Kephra::Config::build_fileendings_filterstring();
Kephra::EventTable::start_timer();
return
1;
}
sub
reload {
my
$configfile
=
shift
|| current_file();
if
( -e
$configfile
) {
Kephra::Document::Data::update_attributes();
my
%test_hash
= %{ Kephra::Config::File::load(
$configfile
) };
if
(
%test_hash
) {
%settings
=
%test_hash
;
reload_tree();
}
else
{
save();
Kephra::File::reload_current();
}
}
else
{
my
$err_msg
= Kephra::Config::Localisation::strings()->{dialog}{error};
Kephra::Dialog::warning_box
(
$err_msg
->{file_find} .
"\n $configfile"
,
$err_msg
->{config_read} );
}
}
sub
reload_tree {
update();
evaluate();
Kephra::App::TabBar::refresh_all_label();
Kephra::Document::Data::evaluate_attributes();
}
sub
reload_current { reload( current_file() ) }
sub
eval_config_file {
my
$file_path
= Kephra::Config::standartize_path_slashes(
shift
);
my
$config_path
= Kephra::Config::dirpath();
my
$l_path
=
length
$config_path
;
if
(
$config_path
eq
substr
(
$file_path
, 0,
$l_path
)){
$file_path
=
substr
$file_path
,
$l_path
+1;
}
my
$conf
=
$settings
{app};
my
$match
= \
&Kephra::Config::path_matches
;
if
(
&$match
(
$file_path
,
auto_file(),
$conf
->{localisation_file},
$conf
->{commandlist}{file} )) {
return
reload();
}
if
(
&$match
(
$file_path
,
$conf
->{menubar}{file} ) ) {
return
Kephra::App::MenuBar::create()
}
if
(
&$match
(
$file_path
,
$conf
->{toolbar}{main}{file} ) ) {
return
Kephra::App::MainToolBar::create();
}
if
(
&$match
(
$file_path
,
$conf
->{toolbar}{search}{file} ) ) {
Kephra::App::SearchBar::create();
Kephra::App::SearchBar::position();
return
;
}
my
$cfg
=
$settings
{file}{templates};
my
$path
= File::Spec->catfile(
$cfg
->{directory},
$cfg
->{file} );
if
(
substr
(
$file_path
, -
length
$path
) eq
$path
) {
Kephra::Menu::set_absolete(
'file_insert_templates'
);
Kephra::Menu::ready(
'file_insert_templates'
);
}
}
sub
save {
my
$file_name
=
shift
|| current_file();
update();
Kephra::Config::File::store(
$file_name
, \
%settings
);
}
sub
save_as {
my
$file_name
= Kephra::Dialog::get_file_save(
Kephra::Config::Localisation::strings()->{dialog}{config_file}{save},
Kephra::Config::dirpath( _sub_dir() ),
$Kephra::temp
{file}{filterstring}{config}
);
save(
$file_name
)
if
(
length
(
$file_name
) > 0 );
}
sub
save_current { save( current_file() ) }
sub
merge_with {
my
$filename
= Kephra::Dialog::get_file_open(
Kephra::Config::Localisation::strings()->{dialog}{config_file}{load},
Kephra::Config::dirpath( _sub_dir(),
'sub'
),
$Kephra::temp
{file}{filterstring}{config}
);
load_subconfig(
$filename
);
}
sub
load_subconfig {
my
$file
=
shift
;
if
( -e
$file
) {
merge_hash_into_settings( Kephra::Config::File::load(
$file
) );
reload_tree();
}
}
sub
open_templates_file {
my
$config
=
$settings
{file}{templates};
Kephra::Config::open_file(
$config
->{directory},
$config
->{file} );
}
1;