Multi Monitor Service
::: info
We plan to enhance this service in the future. Currently, it offers a basic implementation of multi-monitor support, allowing you to manually open multiple windows on the same monitor. It is not yet a full multi-monitor solution!
:::
The multi-monitor service provides detection, launch and communication support for multiple monitors or windows/screens within a single monitor.
The multi-monitor service is currently applied via configuration file.
customizationService: ['@ohif/extension-default.customizationModule.multimonitor'],
Configurationsβ
The service supports two predefined configurations:
-
Split Screen (
multimonitor=split
) Splits the primary monitor into two windows. -
Multi-Monitor (
multimonitor=2
) Opens windows across separate physical monitors.
Launch Methodsβ
- Specify
&screenNumber=0
to designate the first window explicitly. - Omit
screenNumber
to let the service handle window assignments dynamically. - Use
launchAll
in the query parameters to launch all configured screens simultaneously.
Example URLs:β
-
Split Screen:
http://viewer.ohif.org/.....&multimonitor=split
Splits the primary monitor into two windows when a study is viewed. -
Multi-Monitor with All Screens:
http://viewer.ohif.org/.....&multimonitor=2&screenNumber=0&launchAll
Launches two monitors and opens all configured screens.
Configuration File Settingβ
The multimonitor
configuration setting in the
configuration file specifies various
properties for each of the OHIF windows opened when multimonitor is launched. The setting is
an array of properties for each configuration defined.
Each entry in the array is an object with the following properties.
id
: The id for the array item. Typically it corresponds to one of the configurations (e.g.split
or2
)test
: A function that takes a single object argument containing the propertymultimontior
(i.e. the configuration). The function should returntrue
if this array entry should be applied to the configuration.screens
: An array of objects that define each of the OHIF screens to be opened
Each screen
array entry above has the following properties.
id
: The unique screen identifier (e.g.ohif0
orradScreen0
)screen
: The index of the physical screen. For thesplit
configuration this can benull
because there is no specific physical screen for it.location
: The normalized top, left position and size of the window (i.e.x
,y
,width
,height
) relative to the physical screen for the windowoptions
Standard comma delimited string of popup window options.
Below is a snippet from a configuration file for multimonitor.
...
multimonitor: [
{
id: 'split',
test: ({ multimonitor }) => multimonitor === 'split', // applies to the split multimonitor configuration
screens: [
{
id: 'ohif0',
screen: null,
location: {
width: 0.5,
height: 1,
left: 0,
top: 0,
},
options: 'location=no,menubar=no,scrollbars=no,status=no,titlebar=no',
},
{
id: 'ohif1',
screen: null,
location: {
width: 0.5,
height: 1,
left: 0.5,
top: 0,
},
options: 'location=no,menubar=no,scrollbars=no,status=no,titlebar=no',
},
],
},
{
id: '2',
test: ({ multimonitor }) => multimonitor === '2', // applies to the `2` multimonitor configuration
screens: [
{
id: 'ohif0',
screen: 0,
location: {
width: 1,
height: 1,
left: 0,
top: 0,
},
options: 'fullscreen=yes,location=no,menubar=no,scrollbars=no,status=no,titlebar=no',
},
{
id: 'ohif1',
screen: 1,
location: {
width: 1,
height: 1,
left: 0,
top: 0,
},
options: 'fullscreen=yes,location=no,menubar=no,scrollbars=no,status=no,titlebar=no',
},
],
},
],
...
Behaviorβ
Refresh, Close and Openβ
If you refresh the base/original window, then all the other windows will also refresh. However, you can safely refresh any single other window, and on the next command to the other windows, it will re-create the other window links without losing content in the other windows. You can also close any other window and it will be reopened the next time you try to call to it.
Executing Commandsβ
The MultiMonitorService adds the ability to run commands on other specified windows. This allows opening up a study on another window without needing to refresh it's contents. The command below shows an example of how this can be done: