@finsemble/finsemble-core 6.1.4 → 6.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mocharc.js +12 -12
- package/.nycrc.json +7 -7
- package/README.md +24 -24
- package/assets/fonts/LICENSE.txt +202 -202
- package/configs/core/config.json +214 -214
- package/configs/core/securityPolicies.json +24 -24
- package/configs/core/services.json +233 -233
- package/configs/schemas/README.md +1 -1
- package/configs/schemas/fileBasedSchemas/appdConfigFile.schema.json +5 -5
- package/configs/schemas/fileBasedSchemas/applicationConfigFile.schema.json +5 -5
- package/configs/schemas/fileBasedSchemas/componentsFile.schema.json +5 -5
- package/configs/schemas/fileBasedSchemas/coreConfigFile.schema.json +5 -5
- package/configs/schemas/fileBasedSchemas/dashbarFile.schema.json +5 -5
- package/configs/schemas/fileBasedSchemas/manifestFile.schema.json +5 -5
- package/configs/schemas/fileBasedSchemas/securityPoliciesFile.schema.json +5 -5
- package/configs/schemas/fileBasedSchemas/servicesFile.schema.json +5 -5
- package/configs/schemas/fileBasedSchemas/uiComponentsFile.schema.json +5 -5
- package/configs/schemas/fileBasedSchemas/workspacesFile.schema.json +5 -5
- package/configs/schemas/finsemble.schema.json +4006 -4006
- package/dist/FSBL.js +1 -1
- package/dist/clients/Interop/FinsembleDesktopAgent.md +154 -154
- package/dist/clients/Interop/tsconfig.json +7 -7
- package/dist/clients/Startup/README.md +28 -28
- package/dist/clients/dragAndDropAssets/dragAndDropScrim.css +54 -54
- package/dist/clients/dragAndDropAssets/ff-delete-circle.svg +10 -10
- package/dist/clients/dragAndDropAssets/ff-share.svg +13 -13
- package/dist/components/system/notification/ff-close.svg +14 -14
- package/dist/components/system/notification/finsemble_logo_white.svg +15 -15
- package/dist/components/system/notification/notification.html +155 -155
- package/dist/configs/core/config.json +214 -214
- package/dist/configs/core/securityPolicies.json +24 -24
- package/dist/configs/core/services.json +233 -233
- package/dist/configs/schemas/README.md +1 -1
- package/dist/configs/schemas/fileBasedSchemas/appdConfigFile.schema.json +5 -5
- package/dist/configs/schemas/fileBasedSchemas/applicationConfigFile.schema.json +5 -5
- package/dist/configs/schemas/fileBasedSchemas/componentsFile.schema.json +5 -5
- package/dist/configs/schemas/fileBasedSchemas/coreConfigFile.schema.json +5 -5
- package/dist/configs/schemas/fileBasedSchemas/dashbarFile.schema.json +5 -5
- package/dist/configs/schemas/fileBasedSchemas/manifestFile.schema.json +5 -5
- package/dist/configs/schemas/fileBasedSchemas/securityPoliciesFile.schema.json +5 -5
- package/dist/configs/schemas/fileBasedSchemas/servicesFile.schema.json +5 -5
- package/dist/configs/schemas/fileBasedSchemas/uiComponentsFile.schema.json +5 -5
- package/dist/configs/schemas/fileBasedSchemas/workspacesFile.schema.json +5 -5
- package/dist/configs/schemas/finsemble.schema.json +4006 -4006
- package/dist/finsemble-javascript-adapter.js +1 -1
- package/dist/index.js +1 -1
- package/dist/javascript-adapter-example-app.html +37 -37
- package/dist/services/Interop/DevTools.tsx +71 -71
- package/dist/services/Interop/Interop.html +15 -15
- package/dist/services/Interop/InteropService.js +1 -1
- package/dist/services/Interop/InteropService.md +148 -148
- package/dist/services/Interop/InteropServiceUI.css +12 -12
- package/dist/services/Interop/InteropServiceUI.js +1 -1
- package/dist/services/Interop/InteropServiceUI.tsx +39 -39
- package/dist/services/Interop/devtoolsEnhancer.tsx +63 -63
- package/dist/services/Interop/tsconfig.json +7 -7
- package/dist/services/ServiceTemplate.md +39 -39
- package/dist/services/assimilation/assimilation.html +18 -18
- package/dist/services/assimilation/assimilationService.js +1 -1
- package/dist/services/authentication/authentication.html +17 -17
- package/dist/services/authentication/authenticationService.js +1 -1
- package/dist/services/authentication/dialogSignOn.html +199 -199
- package/dist/services/config/config.html +17 -17
- package/dist/services/config/configService.js +1 -1
- package/dist/services/dataStore/dataStore.html +18 -18
- package/dist/services/dataStore/dataStoreService.js +1 -1
- package/dist/services/hotkeys/hotkeys.html +18 -18
- package/dist/services/hotkeys/hotkeysService.js +1 -1
- package/dist/services/linker/linker.html +18 -18
- package/dist/services/linker/linkerService.js +1 -1
- package/dist/services/logger/logger.html +18 -18
- package/dist/services/logger/loggerService.js +1 -1
- package/dist/services/logger/loggerUI.js +1 -1
- package/dist/services/logger/src/app.css +860 -860
- package/dist/services/logger/src/components/Views/Logs/rightPanel/consoleView.css +379 -379
- package/dist/services/logger/src/components/objectInspector/README.md +1 -1
- package/dist/services/notification/notification.html +11 -11
- package/dist/services/notification/notificationService.js +1 -1
- package/dist/services/preferences/preferencesService.js +1 -1
- package/dist/services/router/router.html +18 -18
- package/dist/services/router/routerService.js +1 -1
- package/dist/services/search/search.html +17 -17
- package/dist/services/search/searchService.js +1 -1
- package/dist/services/storage/adapters/instrumentedIndexedDBAdapter.js +1 -1
- package/dist/services/storage/storage.html +17 -17
- package/dist/services/storage/storageService.js +1 -1
- package/dist/services/systemManager/bootTasks/testTasks/_aReadMe.md +119 -119
- package/dist/services/systemManager/systemManager.html +24 -24
- package/dist/services/systemManager/systemManager.js +1 -1
- package/dist/services/window/Docking/GroupRequirements.md +18 -18
- package/dist/services/window/Splintering/SplinterAgentSlave.html +13 -13
- package/dist/services/window/Splintering/SplinterAgentSlave.js +1 -1
- package/dist/services/window/Splintering/Splintering.md +118 -118
- package/dist/services/window/StackedWindowManager/StackRequirements.md +23 -23
- package/dist/services/window/WindowBehaviorRequirements.md +25 -25
- package/dist/services/window/windowService.html +10 -10
- package/dist/services/window/windowService.js +1 -1
- package/dist/services/workspace/dev-docs/importExportFormat.md +51 -51
- package/dist/services/workspace/dev-docs/remotelyPersistedWorkspaces.md +62 -62
- package/dist/services/workspace/workspace.html +18 -18
- package/dist/services/workspace/workspace.schema.json +48 -48
- package/dist/services/workspace/workspaceService.js +1 -1
- package/package.json +1 -1
- package/tsconfig.json +23 -23
- package/types/index.d.ts +40 -55
- package/types/index.tsbuildinfo +1 -1
- package/types.tsconfig.json +15 -15
|
@@ -1,118 +1,118 @@
|
|
|
1
|
-
# Splintering
|
|
2
|
-
|
|
3
|
-
There are three ways to handle resource management with Openfin.
|
|
4
|
-
|
|
5
|
-
1. You can group everything into one "Application" with N child-windows. This was the approach we took initially.
|
|
6
|
-
- Pros of this approach:
|
|
7
|
-
- You don't have to worry about the startup penalty involved with starting up a new openfin application. On good
|
|
8
|
-
machines, it's a negligible cost. On bad machines, it's noticeable.
|
|
9
|
-
- Cons of this approach:
|
|
10
|
-
- Everything is inside of one render process. This means that every time a window fires off a JS function, it goes
|
|
11
|
-
on to the same event loop. If you have a badly behaving component, it can lock up your entire application. If you
|
|
12
|
-
have a resource-intensive component or service, it can also slow down performance.
|
|
13
|
-
- It makes debugging difficult. Using the profiler is a useless exercise, as all of the javascript for every window
|
|
14
|
-
is included in the same profile.
|
|
15
|
-
2. Every component/service can be in its own openfin application.
|
|
16
|
-
- Pros of this approach:
|
|
17
|
-
- Badly behaving/non-performant components don't ruin your application's experience.
|
|
18
|
-
- Debugging is easier because everything is in its own render process.
|
|
19
|
-
- Cons of this approach:
|
|
20
|
-
- Can be resource-intensive on bad machines.
|
|
21
|
-
3. A hybrid approach. Intelligent grouping of components/services into separate openfin processes.
|
|
22
|
-
- Pros of this approach:
|
|
23
|
-
- Windows load quicker (with caveats). Subjective performance is improved.
|
|
24
|
-
- Gives you the ability to isolate known hogs - or sensitive, mission-critical components (e.g., the toolbar,
|
|
25
|
-
menus).
|
|
26
|
-
- Uses fewer resources than #2 due to grouping.
|
|
27
|
-
- Cons of this approach:
|
|
28
|
-
- If grouping is done wrong, you can end up with a badly behaving component locking up sensitive components.
|
|
29
|
-
|
|
30
|
-
We've decided to advocate and optimize for option 3 - that's what the rest of this document will be about. See footnotes
|
|
31
|
-
1 and 2 if you prefer one of the other approaches.
|
|
32
|
-
|
|
33
|
-
In order to splinter off processes, you first need to create separate Openfin Applications. These applications need to
|
|
34
|
-
communicate back to the `LauncherService`, and they need to be quick enough to handle a large number of requests in a
|
|
35
|
-
short amount of time (e.g., workspace load).
|
|
36
|
-
|
|
37
|
-
Our approach involves 3 parts: the `SplinterAgentPool`, the `SplinterAgent`, and the `SplinterAgentSlave`.
|
|
38
|
-
|
|
39
|
-
The `SplinterAgentPool` receives all calls to `LauncherService.spawn` and routes them to the appropriate
|
|
40
|
-
`SplinterAgent`.
|
|
41
|
-
|
|
42
|
-
If no `SplinterAgent` is available that can spawn the requested component/service, the `SplinterAgentPool` creates a new
|
|
43
|
-
`SplinterAgent`. At the same time, it spawns off a new Openfin Application. The `SplinterAgent` manages this application
|
|
44
|
-
as its slave (the `SplinterAgentSlave`). Once the application is ready, the `SplinterAgent` registers with the
|
|
45
|
-
`SplinterAgentPool`, and can then begin accepting spawn requests. When the agent receives a request, it simply passes
|
|
46
|
-
the `windowDescriptor` to its slave.
|
|
47
|
-
|
|
48
|
-
The default behavior for a `SplinterAgent` is to have an unlimited capacity. If the dev-user specifies a
|
|
49
|
-
`maxWindowsPerAgent` in their config, the behavior changes slightly.
|
|
50
|
-
|
|
51
|
-
After each spawn, the `SplinterAgent` will check to see if it has reached its capacity. If so, it notifies the
|
|
52
|
-
`SplinterAgentPool` via an event that it cannot receive any more requests. Then, the `SplinterAgentPool` will pre-spawn
|
|
53
|
-
another `SplinterAgent` capable of handling the same requests<sup>3</sup>.
|
|
54
|
-
|
|
55
|
-
When a `SplinterAgent`'s last window is closed, it will send an event to the `SplinterAgentPool` notifying it that it is
|
|
56
|
-
empty. If it is the only Agent of its kind, it will stay available to the system. If there are others available, it will
|
|
57
|
-
close.
|
|
58
|
-
|
|
59
|
-
### Footnotes
|
|
60
|
-
|
|
61
|
-
1. Config for a single-process:
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
"finsemble":{
|
|
65
|
-
"splinteringConfig":{
|
|
66
|
-
"enabled": false
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
2. Config for a 1-1 mapping of windows to applications.
|
|
72
|
-
|
|
73
|
-
```
|
|
74
|
-
"splinteringConfig": {
|
|
75
|
-
"enabled": true,
|
|
76
|
-
"splinterAgents": [
|
|
77
|
-
{
|
|
78
|
-
"agentLabel": "Toolbar",
|
|
79
|
-
"components": [
|
|
80
|
-
"Toolbar",
|
|
81
|
-
"App Launcher",
|
|
82
|
-
"Workspace Overflow Menu",
|
|
83
|
-
"Workspace Management Menu",
|
|
84
|
-
"Finsemble Linker Window",
|
|
85
|
-
"Authentication",
|
|
86
|
-
"dialogSignOn",
|
|
87
|
-
"dialogTemplate",
|
|
88
|
-
"dialogTest",
|
|
89
|
-
"File Menu",
|
|
90
|
-
"QuickComponentForm",
|
|
91
|
-
"Process Monitor"
|
|
92
|
-
],
|
|
93
|
-
"maxWindowsPerAgent": 1
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
"agentLabel": "advancedCharts",
|
|
97
|
-
"components": [
|
|
98
|
-
"Advanced Chart"
|
|
99
|
-
],
|
|
100
|
-
"maxWindowsPerAgent": 1
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
"agentLabel": "Services",
|
|
104
|
-
"services": [
|
|
105
|
-
"windowService",
|
|
106
|
-
"workspaceService"
|
|
107
|
-
],
|
|
108
|
-
"maxWindowsPerAgent": 1
|
|
109
|
-
}
|
|
110
|
-
]
|
|
111
|
-
}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
3. When an agent is spawned, it sets a timeout (default is 2 minutes). After that period if time, the Agent checks to
|
|
115
|
-
see if it is being used. This is to prevent zombie Agents from clogging up a user's machine. It's easy to imagine
|
|
116
|
-
this scenario: User spawns 3 advanced charts. 2nd Agent is spawned. User spawns no new charts, Agent still exists. In
|
|
117
|
-
this case, we have an Agent who can _only_ spawn Advanced Charts just doing nothing. So we close it down. If the
|
|
118
|
-
Agent has windows after 2 minutes, it stays up.
|
|
1
|
+
# Splintering
|
|
2
|
+
|
|
3
|
+
There are three ways to handle resource management with Openfin.
|
|
4
|
+
|
|
5
|
+
1. You can group everything into one "Application" with N child-windows. This was the approach we took initially.
|
|
6
|
+
- Pros of this approach:
|
|
7
|
+
- You don't have to worry about the startup penalty involved with starting up a new openfin application. On good
|
|
8
|
+
machines, it's a negligible cost. On bad machines, it's noticeable.
|
|
9
|
+
- Cons of this approach:
|
|
10
|
+
- Everything is inside of one render process. This means that every time a window fires off a JS function, it goes
|
|
11
|
+
on to the same event loop. If you have a badly behaving component, it can lock up your entire application. If you
|
|
12
|
+
have a resource-intensive component or service, it can also slow down performance.
|
|
13
|
+
- It makes debugging difficult. Using the profiler is a useless exercise, as all of the javascript for every window
|
|
14
|
+
is included in the same profile.
|
|
15
|
+
2. Every component/service can be in its own openfin application.
|
|
16
|
+
- Pros of this approach:
|
|
17
|
+
- Badly behaving/non-performant components don't ruin your application's experience.
|
|
18
|
+
- Debugging is easier because everything is in its own render process.
|
|
19
|
+
- Cons of this approach:
|
|
20
|
+
- Can be resource-intensive on bad machines.
|
|
21
|
+
3. A hybrid approach. Intelligent grouping of components/services into separate openfin processes.
|
|
22
|
+
- Pros of this approach:
|
|
23
|
+
- Windows load quicker (with caveats). Subjective performance is improved.
|
|
24
|
+
- Gives you the ability to isolate known hogs - or sensitive, mission-critical components (e.g., the toolbar,
|
|
25
|
+
menus).
|
|
26
|
+
- Uses fewer resources than #2 due to grouping.
|
|
27
|
+
- Cons of this approach:
|
|
28
|
+
- If grouping is done wrong, you can end up with a badly behaving component locking up sensitive components.
|
|
29
|
+
|
|
30
|
+
We've decided to advocate and optimize for option 3 - that's what the rest of this document will be about. See footnotes
|
|
31
|
+
1 and 2 if you prefer one of the other approaches.
|
|
32
|
+
|
|
33
|
+
In order to splinter off processes, you first need to create separate Openfin Applications. These applications need to
|
|
34
|
+
communicate back to the `LauncherService`, and they need to be quick enough to handle a large number of requests in a
|
|
35
|
+
short amount of time (e.g., workspace load).
|
|
36
|
+
|
|
37
|
+
Our approach involves 3 parts: the `SplinterAgentPool`, the `SplinterAgent`, and the `SplinterAgentSlave`.
|
|
38
|
+
|
|
39
|
+
The `SplinterAgentPool` receives all calls to `LauncherService.spawn` and routes them to the appropriate
|
|
40
|
+
`SplinterAgent`.
|
|
41
|
+
|
|
42
|
+
If no `SplinterAgent` is available that can spawn the requested component/service, the `SplinterAgentPool` creates a new
|
|
43
|
+
`SplinterAgent`. At the same time, it spawns off a new Openfin Application. The `SplinterAgent` manages this application
|
|
44
|
+
as its slave (the `SplinterAgentSlave`). Once the application is ready, the `SplinterAgent` registers with the
|
|
45
|
+
`SplinterAgentPool`, and can then begin accepting spawn requests. When the agent receives a request, it simply passes
|
|
46
|
+
the `windowDescriptor` to its slave.
|
|
47
|
+
|
|
48
|
+
The default behavior for a `SplinterAgent` is to have an unlimited capacity. If the dev-user specifies a
|
|
49
|
+
`maxWindowsPerAgent` in their config, the behavior changes slightly.
|
|
50
|
+
|
|
51
|
+
After each spawn, the `SplinterAgent` will check to see if it has reached its capacity. If so, it notifies the
|
|
52
|
+
`SplinterAgentPool` via an event that it cannot receive any more requests. Then, the `SplinterAgentPool` will pre-spawn
|
|
53
|
+
another `SplinterAgent` capable of handling the same requests<sup>3</sup>.
|
|
54
|
+
|
|
55
|
+
When a `SplinterAgent`'s last window is closed, it will send an event to the `SplinterAgentPool` notifying it that it is
|
|
56
|
+
empty. If it is the only Agent of its kind, it will stay available to the system. If there are others available, it will
|
|
57
|
+
close.
|
|
58
|
+
|
|
59
|
+
### Footnotes
|
|
60
|
+
|
|
61
|
+
1. Config for a single-process:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
"finsemble":{
|
|
65
|
+
"splinteringConfig":{
|
|
66
|
+
"enabled": false
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
2. Config for a 1-1 mapping of windows to applications.
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
"splinteringConfig": {
|
|
75
|
+
"enabled": true,
|
|
76
|
+
"splinterAgents": [
|
|
77
|
+
{
|
|
78
|
+
"agentLabel": "Toolbar",
|
|
79
|
+
"components": [
|
|
80
|
+
"Toolbar",
|
|
81
|
+
"App Launcher",
|
|
82
|
+
"Workspace Overflow Menu",
|
|
83
|
+
"Workspace Management Menu",
|
|
84
|
+
"Finsemble Linker Window",
|
|
85
|
+
"Authentication",
|
|
86
|
+
"dialogSignOn",
|
|
87
|
+
"dialogTemplate",
|
|
88
|
+
"dialogTest",
|
|
89
|
+
"File Menu",
|
|
90
|
+
"QuickComponentForm",
|
|
91
|
+
"Process Monitor"
|
|
92
|
+
],
|
|
93
|
+
"maxWindowsPerAgent": 1
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"agentLabel": "advancedCharts",
|
|
97
|
+
"components": [
|
|
98
|
+
"Advanced Chart"
|
|
99
|
+
],
|
|
100
|
+
"maxWindowsPerAgent": 1
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"agentLabel": "Services",
|
|
104
|
+
"services": [
|
|
105
|
+
"windowService",
|
|
106
|
+
"workspaceService"
|
|
107
|
+
],
|
|
108
|
+
"maxWindowsPerAgent": 1
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
3. When an agent is spawned, it sets a timeout (default is 2 minutes). After that period if time, the Agent checks to
|
|
115
|
+
see if it is being used. This is to prevent zombie Agents from clogging up a user's machine. It's easy to imagine
|
|
116
|
+
this scenario: User spawns 3 advanced charts. 2nd Agent is spawned. User spawns no new charts, Agent still exists. In
|
|
117
|
+
this case, we have an Agent who can _only_ spawn Advanced Charts just doing nothing. So we close it down. If the
|
|
118
|
+
Agent has windows after 2 minutes, it stays up.
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
# Stack Requirements
|
|
2
|
-
|
|
3
|
-
## Always On Top
|
|
4
|
-
|
|
5
|
-
When a window joins a stack (or creates a new stack with another window), if any of the windows in the stack are
|
|
6
|
-
alwaysOnTop, then all of the windows become alwaysOnTop.
|
|
7
|
-
|
|
8
|
-
When a window leaves a stack, it should return its state prior to joining the stack.
|
|
9
|
-
|
|
10
|
-
When the alwaysOnTop state of any window in a stack is toggled, every other window in the stack is also toggled.
|
|
11
|
-
|
|
12
|
-
## Auto Arrange
|
|
13
|
-
|
|
14
|
-
When auto arrange is called, the "grid" of windows is compiled using the StackedWindow. The process loops through the
|
|
15
|
-
windows on a workspace and filters out any children (as they should not be added to the grid because their StackedWindow
|
|
16
|
-
will be auto arranged instead).
|
|
17
|
-
|
|
18
|
-
This means that if a stack is created _after_ auto arrange takes place on a monitor. The DockingCalculator's
|
|
19
|
-
representation of cached locations needs to be updated. The child is removed from the cache, and the stacked window is
|
|
20
|
-
put in its place. If a stack is destroyed while auto arrange status is true, the same takes place in reverse. The
|
|
21
|
-
StackedWindow in the cache is replaced with the remaining window of the stack.
|
|
22
|
-
|
|
23
|
-
Tabbing/Untabbing windows is the only stack action that does not destroy auto arrange status.
|
|
1
|
+
# Stack Requirements
|
|
2
|
+
|
|
3
|
+
## Always On Top
|
|
4
|
+
|
|
5
|
+
When a window joins a stack (or creates a new stack with another window), if any of the windows in the stack are
|
|
6
|
+
alwaysOnTop, then all of the windows become alwaysOnTop.
|
|
7
|
+
|
|
8
|
+
When a window leaves a stack, it should return its state prior to joining the stack.
|
|
9
|
+
|
|
10
|
+
When the alwaysOnTop state of any window in a stack is toggled, every other window in the stack is also toggled.
|
|
11
|
+
|
|
12
|
+
## Auto Arrange
|
|
13
|
+
|
|
14
|
+
When auto arrange is called, the "grid" of windows is compiled using the StackedWindow. The process loops through the
|
|
15
|
+
windows on a workspace and filters out any children (as they should not be added to the grid because their StackedWindow
|
|
16
|
+
will be auto arranged instead).
|
|
17
|
+
|
|
18
|
+
This means that if a stack is created _after_ auto arrange takes place on a monitor. The DockingCalculator's
|
|
19
|
+
representation of cached locations needs to be updated. The child is removed from the cache, and the stacked window is
|
|
20
|
+
put in its place. If a stack is destroyed while auto arrange status is true, the same takes place in reverse. The
|
|
21
|
+
StackedWindow in the cache is replaced with the remaining window of the stack.
|
|
22
|
+
|
|
23
|
+
Tabbing/Untabbing windows is the only stack action that does not destroy auto arrange status.
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
# Window Behavior Requirements
|
|
2
|
-
|
|
3
|
-
## Always On Top
|
|
4
|
-
|
|
5
|
-
A window can be always on top of other windows by setting the alwaysOnTop option in the componentConfig for the window.
|
|
6
|
-
The user can be given the ability to toggle the always on top state by enabling finsemble.WindowManager.alwaysOnTopIcon
|
|
7
|
-
globally or on a per component basis using component.foreign.components.WindowManager.alwaysOnTopIcon in the component
|
|
8
|
-
config.
|
|
9
|
-
|
|
10
|
-
[Group Always On Top](Docking/GroupRequirements.md)
|
|
11
|
-
|
|
12
|
-
[Stack Always On Top](StackedWindowManager/StackRequirements.md)
|
|
13
|
-
|
|
14
|
-
## Auto arrange
|
|
15
|
-
|
|
16
|
-
Windows can be auto arranged in grids. All windows, regardless of type, should be auto arranged alongside all other
|
|
17
|
-
windows. This includes Native, WPF (native), and HTML5 windows. Auto arrange status should be preserved across multiple
|
|
18
|
-
monitors (until Finsemble shuts down or restarts). This includes the ability to move any UI components that trigger auto
|
|
19
|
-
arrange across monitors and get feedback on that monitors auto arranged status. Any kind of window interaction on an
|
|
20
|
-
auto arranged monitor will cancel the auto arrange status and remove any chance of 'restoring' to a previous state.
|
|
21
|
-
Exceptions to this are below.
|
|
22
|
-
|
|
23
|
-
[Group Auto Arrange](Docking/GroupRequirements.md)
|
|
24
|
-
|
|
25
|
-
[StackedWindow Auto Arrange](StackedWindowManager/StackRequirements.md)
|
|
1
|
+
# Window Behavior Requirements
|
|
2
|
+
|
|
3
|
+
## Always On Top
|
|
4
|
+
|
|
5
|
+
A window can be always on top of other windows by setting the alwaysOnTop option in the componentConfig for the window.
|
|
6
|
+
The user can be given the ability to toggle the always on top state by enabling finsemble.WindowManager.alwaysOnTopIcon
|
|
7
|
+
globally or on a per component basis using component.foreign.components.WindowManager.alwaysOnTopIcon in the component
|
|
8
|
+
config.
|
|
9
|
+
|
|
10
|
+
[Group Always On Top](Docking/GroupRequirements.md)
|
|
11
|
+
|
|
12
|
+
[Stack Always On Top](StackedWindowManager/StackRequirements.md)
|
|
13
|
+
|
|
14
|
+
## Auto arrange
|
|
15
|
+
|
|
16
|
+
Windows can be auto arranged in grids. All windows, regardless of type, should be auto arranged alongside all other
|
|
17
|
+
windows. This includes Native, WPF (native), and HTML5 windows. Auto arrange status should be preserved across multiple
|
|
18
|
+
monitors (until Finsemble shuts down or restarts). This includes the ability to move any UI components that trigger auto
|
|
19
|
+
arrange across monitors and get feedback on that monitors auto arranged status. Any kind of window interaction on an
|
|
20
|
+
auto arranged monitor will cancel the auto arrange status and remove any chance of 'restoring' to a previous state.
|
|
21
|
+
Exceptions to this are below.
|
|
22
|
+
|
|
23
|
+
[Group Auto Arrange](Docking/GroupRequirements.md)
|
|
24
|
+
|
|
25
|
+
[StackedWindow Auto Arrange](StackedWindowManager/StackRequirements.md)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<html>
|
|
2
|
-
<head>
|
|
3
|
-
<meta charset="utf-8" />
|
|
4
|
-
<title>Window Service</title>
|
|
5
|
-
</head>
|
|
6
|
-
|
|
7
|
-
<body>
|
|
8
|
-
<script src="windowService.js"></script>
|
|
9
|
-
</body>
|
|
10
|
-
</html>
|
|
1
|
+
<html>
|
|
2
|
+
<head>
|
|
3
|
+
<meta charset="utf-8" />
|
|
4
|
+
<title>Window Service</title>
|
|
5
|
+
</head>
|
|
6
|
+
|
|
7
|
+
<body>
|
|
8
|
+
<script src="windowService.js"></script>
|
|
9
|
+
</body>
|
|
10
|
+
</html>
|