NativePHP is currently in alpha development
Let's get to beta!- Working with Windows
- Opening Windows
- Closing Windows
- Resizing Windows
- Minimizing and Maximizing
- Changing the URL
- Changing the Window Title
- Retrieving the Current Window
- Retrieving all Windows
- Managing Multiple Windows
- Configuring Windows
- Window URLs
- Window Titles
- Window Sizes
- Window Position
- Remembering Window State
- Resizable Windows
- Focusable Windows
- Movable Windows
- Minimizable, Maximizable, and Closable Windows
- Full Screen Windows
- Window Shadow
- Windows on Top
- Window Background Color
- Hiding the menu
- Window Title Styles
- Default Title Style
- Hidden Title Style
- Events
- `WindowShown`
- `WindowClosed`
- `WindowFocused`
- `WindowBlurred`
- `WindowMinimized`
- `WindowMaximized`
- `WindowResized`
#Working with Windows
NativePHP allows you to open native application Windows.
While this usually happens in your NativeAppServiceProvider
, you are free to open a window anywhere in your application.
#Opening Windows
To open a window, you may use the Window
facade.
1namespace App\Providers; 2 3use Native\Laravel\Facades\Window; 4 5class NativeAppServiceProvider 6{ 7 public function boot(): void 8 { 9 Window::open()10 ->width(800)11 ->height(800);12 }13}
When opening a window, NativePHP will automatically open the root URL of your application.
You may pass a unique identifier to the open()
method to distinguish between multiple windows.
The default ID, if none is specified, is main
.
You can use the ID to reference the window in other methods, such as Window::close()
or Window::resize()
.
#Closing Windows
To close a window, you may use the Window::close()
method.
You may pass a unique identifier to the close()
method to specify which window to close.
If you do not specify a window ID, NativePHP will try to detect the window ID automatically based on the current route.
1Window::close();2Window::close('settings');
#Resizing Windows
You may use the Window::resize()
method to resize a window. This method accepts a width and height as its first and second arguments, respectively.
You may pass a unique identifier to the resize()
method to specify which window to resize.
If you do not specify a window ID, NativePHP will try to detect the window ID automatically based on the current route.
1Window::resize(400, 300);2 3Window::resize(400, 300, 'settings');
#Minimizing and Maximizing
There are convenience methods that allow you to minimize and maximize windows.
Minimize a Window
To maximize a window, you may use the Window::minimize()
method.
You may pass the window ID to the minimize()
method to specify which window to minimize.
If you do not specify a window ID, NativePHP will try to detect the window ID automatically based on the current route.
1Window::open('secondary');2 3// Later...4 5Window::minimize('secondary');
Maximize a Window
To maximize a window, you may use the Window::maximize()
method.
You may pass the window ID to the maximize()
method to specify which window to maximize.
If you do not specify a window ID, NativePHP will try to detect the window ID automatically based on the current route.
1Window::open('secondary');2 3// Later...4 5Window::maximize('secondary');
Of course, you may also wish to open windows in a minimized or maximized state. You can achieve this simply by chaining the
minimized()
and maximized()
methods to your Window::open()
call:
1Window::open()2 ->maximized();
#Changing the URL
While the URL in a window will change based on user activity, your Laravel routes and the flow of your application, sometimes it may be useful to change the URL of a window outside of the usual typical request-response cycle of PHP.
For this, you can use the url()
method:
1Window::open('secondary');2 3// Later...4 5Window::get('secondary')->url(route('home'));
A case where this may be useful is when handling Event-based menu item or in response to some output from a queued job, scheduled task or Child Process.
#Changing the Window Title
To change a window's Title, you may use the title()
method:
1Window::open('secondary');2 3// Later...4 5Window::get('secondary')->title('Mmmm... delicious!');
#Retrieving the Current Window
You may use the Window::current()
method to retrieve the currently focused window.
This method returns an object with the following properties:
-
id
: The ID of the window. -
title
: The title of the window. -
width
: The width of the window. -
height
: The height of the window. -
x
: The x position of the window. -
y
: The y position of the window. -
alwaysOnTop
: Whether the window is always on top.
1$currentWindow = Window::current();
#Retrieving all Windows
You may use the Window::all()
method to retrieve all open windows.
1foreach (Window::all() as $window) {2 $window->url(route('home'));3}
#Managing Multiple Windows
If you would like to open multiple windows, you may use the Window::open()
method multiple times.
In order to distinguish between the individual windows, you may pass a unique identifier to the open()
method.
If you do not specify an ID, NativePHP will automatically use main
as the ID.
This ID can be used to reference the window in other methods, such as Window::close()
or Window::resize()
.
1Window::open('home')2 ->width(800)3 ->height(800);4 5Window::open('settings')6 ->route('settings')7 ->width(800)8 ->height(800);
#Configuring Windows
#Window URLs
By default, all calls to Window::open()
will open up the root URL of your application.
If you would like to open a different URL, you may use the route()
method to specify the route name to open.
1Window::open()2 ->route('home');
You may also pass an absolute URL to the url()
method:
1Window::open()2 ->url('https://google.com');
#Window Titles
By default, all calls to Window::open()
will use the application name as the window title.
If you would like to use a different title, you may use the title()
method to specify the window title to use.
1Window::open()2 ->title('My Window');
#Window Sizes
You may use the width()
and height()
methods to specify the size of the window.
1Window::open()2 ->width(800)3 ->height(800);
If you want to constrain the window to a specific size, you may make use of the minWidth()
, minHeight()
,
maxWidth()
, and maxHeight()
methods.
1Window::open()2 ->minWidth(400)3 ->minHeight(400)4 ->maxWidth(800)5 ->maxHeight(800);
#Window Position
To specify the position of the window, you may use the position($x, $y)
method.
1Window::open()2 ->position(100, 100);
#Remembering Window State
The users of your application may resize or move the window and expect it to be in the same position and size the next
time they open it. NativePHP provides a simple way to manage the state of your window. You may use the rememberState()
method to instruct NativePHP to remember the state of the window.
1Window::open()2 ->rememberState();
Please note that NativePHP only allows you to remember the state of one window at a time.
#Resizable Windows
By default, all windows created with the Window
facade are resizable.
If you would like to disable resizing, you may use the resizable()
method and pass false
as the first argument.
1Window::open()2 ->resizable(false);
#Focusable Windows
By default, all windows created with the Window
facade are focusable by clicking on them.
You may use the focusable()
method to disable focusing.
1Window::open()2 ->focusable(false);
#Movable Windows
By default, all windows created with the Window
facade are movable.
You may use the movable()
method to disable moving.
1Window::open()2 ->movable(false);
#Minimizable, Maximizable, and Closable Windows
By default, all windows created with the Window
facade are minimizable, maximizable, and closable.
You may use the minimizable()
, maximizable()
, and closable()
methods to disable these features.
1Window::open()2 ->minimizable(false)3 ->maximizable(false)4 ->closable(false);
#Full Screen Windows
By default, all windows created with the Window
facade are fullscreen-able, meaning that they can enter Full Screen Mode.
You may use the fullscreenable()
method to disable this feature.
1Window::open()->fullscreenable(false);
If you wish, you may open a window in full screen mode using the fullscreen()
method.
1Window::open()->fullscreen();
#Window Shadow
By default, all windows created with the Window
facade have a shadow. You may use the hasShadow()
method to disable the shadow.
1Window::open()2 ->hasShadow(false);
#Windows on Top
In some cases, you may want to make a window always on top of other windows.
When opening a window, you may use the alwaysOnTop()
method to make the window always on top.
1Window::open()2 ->alwaysOnTop();
If you would like to toggle the always on top state of a window, you may use the alwaysOnTop()
method on the Window
facade
directly and pass the window ID as the second argument.
If you do not specify a window ID, NativePHP will try to detect the window ID automatically based on the current route.
1Window::alwaysOnTop(true, 'settings');
#Window Background Color
By default, all windows created with the Window
facade have a white background color.
This color is visible when resizing the window, right before the content is rendered.
You may use the backgroundColor()
method to change the background color of the window.
This method accepts a hex color code as its first argument.
You may also pass a hex color code with an alpha channel to make the background color semi-transparent.
1Window::open()2 ->backgroundColor('#00000050'); // Semi-transparent black
#Hiding the menu
By default on Windows and Linux the application menu will be visible. This method will hide the menu and have it reveal when the user presses ALT.
1Window::open()2 ->hideMenu();
#Window Title Styles
#Default Title Style
By default, all windows created with the Window
facade show their title in the center of the title bar.
#Hidden Title Style
You may use the titleBarHidden()
method to hide the title bar of a window.
1Window::open()2 ->titleBarHidden();
When using this style, you may want to add a custom title bar to the window yourself via HTML/JS.
In order to keep the window draggable, you should add an HTML element with the following CSS attributes:
1<div style="height: 30px; -webkit-app-region: drag;">2 <!-- Your Custom Title Content -->3</div>
#Events
NativePHP provides a simple way to listen for native window events.
All events get dispatched as regular Laravel events, so you may use your EventServiceProvider
to register listeners.
1protected $listen = [2 'Native\Laravel\Events\Windows\WindowShown' => [3 'App\Listeners\WindowWasShownListener',4 ],5 // ...6];
Sometimes you may want to listen and react to window events in real-time, which is why NativePHP also broadcasts all
window events to the nativephp
broadcast channel.
To learn more about NativePHP's broadcasting capabilities, please refer to the Broadcasting section.
#WindowShown
The Native\Laravel\Events\Windows\WindowShown
event will be dispatched when a window is shown to the user.
The payload of this event contains the window ID.
#WindowClosed
The Native\Laravel\Events\Windows\WindowClosed
event will be dispatched when a window is closed.
The payload of this event contains the window ID.
#WindowFocused
The Native\Laravel\Events\Windows\WindowFocused
event will be dispatched when a window is focused.
The payload of this event contains the window ID.
#WindowBlurred
The Native\Laravel\Events\Windows\WindowBlurred
event will be dispatched when a window is blurred.
The payload of this event contains the window ID.
#WindowMinimized
The Native\Laravel\Events\Windows\WindowMinimized
event will be dispatched when a window is minimized.
The payload of this event contains the window ID.
#WindowMaximized
The Native\Laravel\Events\Windows\WindowMaximized
event will be dispatched when a window is maximized.
The payload of this event contains the window ID.
#WindowResized
The Native\Laravel\Events\Windows\WindowResized
event will be dispatched after a window has been resized.
The payload of this event contains the window ID and the new window $width
and $height
.
- Working with Windows
- Opening Windows
- Closing Windows
- Resizing Windows
- Minimizing and Maximizing
- Changing the URL
- Changing the Window Title
- Retrieving the Current Window
- Retrieving all Windows
- Managing Multiple Windows
- Configuring Windows
- Window URLs
- Window Titles
- Window Sizes
- Window Position
- Remembering Window State
- Resizable Windows
- Focusable Windows
- Movable Windows
- Minimizable, Maximizable, and Closable Windows
- Full Screen Windows
- Window Shadow
- Windows on Top
- Window Background Color
- Hiding the menu
- Window Title Styles
- Default Title Style
- Hidden Title Style
- Events
- `WindowShown`
- `WindowClosed`
- `WindowFocused`
- `WindowBlurred`
- `WindowMinimized`
- `WindowMaximized`
- `WindowResized`