our
$VERSION
=
'0.11'
;
my
$frame
;
sub
_ref {
if
(
ref
$_
[0] eq
'Wx::Frame'
){
$frame
=
$_
[0] }
else
{
$frame
} }
sub
_config { Kephra::API::settings()->{app}{window} }
sub
create {
my
$win
= Wx::Frame->new
(
undef
, -1,
''
, [-1,-1], [-1,-1],
&Wx::wxDEFAULT_FRAME_STYLE
);
Wx::Window::SetWindowVariant(
$win
,
&Wx::wxWINDOW_VARIANT_SMALL
)
if
Wx::wxMAC();
_ref(
$win
);
connect_events(
$win
);
$win
;
}
sub
connect_events {
my
$win
=
shift
|| _ref();
my
$trigger
= \
&Kephra::EventTable::trigger
;
Wx::Event::EVT_MENU_OPEN (
$win
,
sub
{
&$trigger
(
'menu.open'
)});
Wx::Event::EVT_DROP_FILES(
$win
, \
&Kephra::File::add_dropped
);
Wx::Event::EVT_CLOSE (
$win
,
sub
{
&$trigger
(
'app.close'
);
Kephra::App::
exit
()
});
}
sub
apply_settings {
my
$win
=
shift
|| _ref();
$win
->DragAcceptFiles(1)
if
Wx::wxMSW();
my
$icon_file
= Kephra::Config::existing_filepath( _config()->{icon} );
load_icon(
$win
,
$icon_file
);
restore_positions();
eval_fullscreen_flag();
eval_on_top_flag();
eval_transparency_flag();
eval_max_editpanel_flag();
}
sub
load_icon {
my
$frame
=
shift
;
my
$icon_file
=
shift
;
return
unless
-e
$icon_file
;
my
$type
;
if
(
$icon_file
=~ /.ico$/) {
$type
=
&Wx::wxBITMAP_TYPE_ICO
}
elsif
(
$icon_file
=~ /.xpm$/) {
$type
=
&Wx::wxBITMAP_TYPE_XPM
}
my
$icon
;
$icon
= Wx::Icon->new(
$icon_file
,
$type
)
if
$type
;
$frame
->SetIcon(
$icon
)
if
defined
$icon
;
}
sub
set_title {
my
$title
=
shift
;
_ref()->SetTitle(
$title
);
}
sub
refresh_title {
my
$appname
=
$Kephra::NAME
;
my
$version
=
$Kephra::VERSION
;
my
$untitled
= Kephra::Config::Localisation::strings()->{app}{general}{untitled};
my
$filepath
= Kephra::Document::Data::get_file_path() ||
"<$untitled>"
;
my
$filename
= Kephra::Document::Data::file_name() ||
"<$untitled>"
;
my
$docnr
= Kephra::Document::Data::current_nr() + 1;
my
$doccount
= Kephra::Document::Data::last_nr();
my
$title
= _config()->{title};
set_title(
eval
qq/"$title"/
);
}
sub
get_fullscreen_mode { _config()->{fullscreen} }
sub
switch_fullscreen_mode {
_config()->{fullscreen} ^= 1;
eval_fullscreen_flag();
}
sub
eval_fullscreen_flag {
_ref->ShowFullScreen(
get_fullscreen_mode(),
&Wx::wxFULLSCREEN_NOCAPTION
|
&Wx::wxFULLSCREEN_NOBORDER
);
}
sub
get_on_top_mode { _config()->{stay_on_top} }
sub
switch_on_top_mode {
_config()->{stay_on_top} ^= 1;
eval_on_top_flag();
}
sub
eval_on_top_flag {
my
$win
= _ref();
my
$style
=
$win
->GetWindowStyleFlag();
if
( get_on_top_mode() ) {
$style
|=
&Wx::wxSTAY_ON_TOP
}
else
{
$style
&= ~
&Wx::wxSTAY_ON_TOP
}
$win
->SetWindowStyle(
$style
);
Kephra::EventTable::trigger(
'app.window.ontop'
);
}
sub
get_transparency_mode { _config()->{transparent} }
sub
switch_transparency_mode {
_config()->{transparent} ^= 1;
eval_transparency_flag();
}
sub
eval_transparency_flag {
_ref->SetTransparent(
255 -
int
( _config()->{transparency} * 255 * get_transparency_mode() )
);
}
sub
switch_top_and_transparency_mode {
switch_transparency_mode();
switch_on_top_mode
if
get_on_top_mode() != get_transparency_mode();
}
sub
get_max_editpanel_mode { _config()->{maximize_editpanel} }
sub
switch_max_editpanel_mode {
_config()->{maximize_editpanel} ^= 1;
eval_max_editpanel_flag();
}
sub
eval_max_editpanel_flag {
my
$v
= get_max_editpanel_mode();
Kephra::App::MenuBar::switch_visibility()
if
Kephra::App::MenuBar::get_visibility() ==
$v
;
Kephra::App::MainToolBar::switch_visibility()
if
Kephra::App::MainToolBar::get_visibility() ==
$v
;
Kephra::App::TabBar::switch_visibility()
if
Kephra::App::TabBar::get_visibility() ==
$v
and not
$v
;
Kephra::App::SearchBar::switch_visibility()
if
Kephra::App::SearchBar::get_visibility() ==
$v
;
Kephra::App::StatusBar::switch_visibility()
if
Kephra::App::StatusBar::get_visibility() ==
$v
;
}
sub
restore_normal_mode {
switch_fullscreen_mode
if
_config()->{fullscreen};
switch_on_top_mode
if
_config()->{stay_on_top};
switch_transparency_mode
if
_config()->{transparent};
switch_max_editpanel_mode
if
_config()->{maximize_editpanel};
}
sub
save_positions {
my
$app_win
= Kephra::App::Window::_ref();
my
$config
= _config();
if
(
$config
->{save_position}){
(
$config
->{position_x},
$config
->{position_y}) =
$app_win
->GetPositionXY;
(
$config
->{size_x},
$config
->{size_y}) =
$app_win
->GetSizeWH;
}
}
sub
restore_positions {
my
$config
= _config();
my
$default
=
$config
->{
default
};
my
$screen
= Wx::GetDisplaySize();
my
(
$screen_x
,
$screen_y
) = (
$screen
->GetWidth,
$screen
->GetHeight );
if
(
$config
->{save_position}){
if
( ( 0 >
$config
->{position_x} +
$config
->{size_x} )
or ( 0 >
$config
->{position_y} +
$config
->{size_y} ) ) {
$config
->{position_x} = 0;
$config
->{position_y} = 0;
if
(
int
$default
->{size_x} == 0 )
{
$config
->{size_x} =
$screen_x
}
else
{
$config
->{size_x} =
$default
->{size_x} }
if
(
int
$default
->{size_y} == 0 )
{
$config
->{size_y} =
$screen_y
- 55}
else
{
$config
->{size_y} =
$default
->{size_y} }
}
if
(Wx::wxMAC()) {
$config
->{size_y}-=23;
if
(
$config
->{position_y}<21) {
$config
->{position_y}=21;}}
$config
->{position_x} = 0
if
$screen_x
<
$config
->{position_x};
$config
->{position_y} = 0
if
$screen_y
<
$config
->{position_y};
}
else
{
$config
->{position_x} =
$default
->{position_x};
$config
->{position_y} =
$default
->{position_y};
$config
->{size_x} =
$default
->{size_x};
$config
->{size_y} =
$default
->{size_y};
}
_ref()->SetSize(
$config
->{position_x},
$config
->{position_y},
$config
->{size_x},
$config
->{size_y}
);
}
sub
OnPaint {
my
(
$self
,
$event
) =
@_
;
my
$dc
= Wx::PaintDC->new(
$self
);
}
sub
OnQuit {
my
(
$self
,
$event
) =
@_
;
$self
->Close(1);
}
sub
destroy { _ref()->Destroy() }
1;