├── .gitignore ├── .github ├── FUNDING.yml └── ISSUE_TEMPLATE │ ├── question.md │ ├── bug_report.md │ └── feature_request.md ├── tabshell-demos ├── tabshell-demos-full │ └── src │ │ └── main │ │ ├── resources │ │ ├── hex.png │ │ └── log4j2.xml │ │ └── java │ │ └── com │ │ └── techsenger │ │ └── tabshell │ │ └── demos │ │ └── full │ │ ├── dialogs │ │ ├── Dialog.java │ │ └── DialogItem.java │ │ ├── text │ │ └── TextEditorTabHistory.java │ │ ├── dock │ │ ├── TextViewerViewModel.java │ │ └── DockLayoutTabHistory.java │ │ ├── hex │ │ ├── DemoHexEditorTabMediator.java │ │ └── DemoHexEditorTabView.java │ │ └── menu │ │ └── DemoFileMenuNames.java ├── tabshell-demos-core │ └── src │ │ └── main │ │ ├── resources │ │ └── log4j2.xml │ │ └── java │ │ ├── com │ │ └── techsenger │ │ │ └── tabshell │ │ │ └── demos │ │ │ └── core │ │ │ ├── DemoComponentNames.java │ │ │ └── tab │ │ │ └── DemoTabMediator.java │ │ └── module-info.java └── pom.xml ├── tabshell-icons └── src │ └── main │ ├── resources │ └── com │ │ └── techsenger │ │ └── tabshell │ │ └── icons │ │ ├── font │ │ ├── materialdesignicons-webfont.ttf │ │ └── materialdesignicons-license.txt │ │ ├── web.css │ │ ├── terminal.css │ │ ├── text.css │ │ └── hex.css │ └── java │ └── module-info.java ├── tabshell-text └── src │ ├── test │ └── resources │ │ └── log4j2.xml │ └── main │ ├── java │ └── com │ │ └── techsenger │ │ └── tabshell │ │ └── text │ │ ├── package-info.java │ │ ├── editor │ │ ├── EditorTabMediator.java │ │ └── AbstractEditorTabHistory.java │ │ ├── viewer │ │ ├── AbstractViewerTabHistory.java │ │ ├── FindPaneViewModel.java │ │ ├── FindPaneView.java │ │ └── FindMatchesResetPolicy.java │ │ ├── style │ │ └── TextIcons.java │ │ └── TextComponentNames.java │ └── resources │ └── com │ └── techsenger │ └── tabshell │ └── text │ └── editor │ └── editor.css ├── tabshell-hex └── src │ └── main │ └── java │ └── com │ └── techsenger │ └── tabshell │ └── hex │ ├── package-info.java │ ├── editor │ ├── ColumnSeparator.java │ ├── CaretShape.java │ ├── HexAreaMediator.java │ ├── EditorPanel.java │ ├── NumberBase.java │ └── HexEditorTabHistory.java │ ├── inspector │ ├── ValueProvider.java │ ├── NumberBaseConverter.java │ └── SizeProvider.java │ └── style │ └── HexIcons.java ├── tabshell-layout └── src │ └── main │ ├── java │ └── com │ │ └── techsenger │ │ └── tabshell │ │ └── layout │ │ ├── package-info.java │ │ ├── dock │ │ ├── SideBarPolicy.java │ │ ├── TabDockMediator.java │ │ ├── DockConstants.java │ │ ├── SideBarMediator.java │ │ ├── SideBarHistory.java │ │ ├── TabPopupMediator.java │ │ └── TabDockComponent.java │ │ ├── tabhost │ │ └── TabHostMediator.java │ │ ├── splittab │ │ └── SplitTabMediator.java │ │ └── workertab │ │ ├── WorkerTabMediator.java │ │ └── AbstractWorkerTabHistory.java │ └── resources │ └── com │ └── techsenger │ └── tabshell │ └── layout │ ├── workertab │ └── workertab.css │ └── dock │ ├── dock-layout.css │ └── tab-popup.css ├── tabshell-web └── src │ └── main │ ├── resources │ └── com │ │ └── techsenger │ │ └── tabshell │ │ └── web │ │ └── web.css │ └── java │ └── com │ └── techsenger │ └── tabshell │ └── web │ ├── style │ └── WebIcons.java │ ├── WebBrowserTabMediator.java │ └── WebComponentNames.java ├── tabshell-core └── src │ ├── test │ └── java │ │ └── module-info.java │ └── main │ ├── java │ └── com │ │ └── techsenger │ │ └── tabshell │ │ └── core │ │ ├── style │ │ └── CssAnchor.java │ │ ├── Callback.java │ │ ├── dialog │ │ ├── DialogScope.java │ │ ├── DialogMediator.java │ │ ├── DialogComponent.java │ │ ├── DialogView.java │ │ └── DialogManager.java │ │ ├── registry │ │ ├── MenuElementType.java │ │ ├── ControlRegistrar.java │ │ └── ControlFactory.java │ │ ├── tab │ │ ├── AbstractShellTabHistory.java │ │ ├── TabContainerView.java │ │ ├── AbstractTabHistory.java │ │ ├── TabMediator.java │ │ ├── TabComponent.java │ │ ├── ShellTabMediator.java │ │ ├── ShellTabView.java │ │ ├── ShellTabComponent.java │ │ ├── TabView.java │ │ └── ShellTabViewModel.java │ │ ├── ShellMediator.java │ │ ├── area │ │ ├── AreaMediator.java │ │ ├── AbstractAreaHistory.java │ │ ├── AreaComponent.java │ │ ├── AreaView.java │ │ ├── AreaViewModel.java │ │ └── AbstractAreaComponent.java │ │ ├── page │ │ ├── PageMediator.java │ │ ├── PageComponent.java │ │ ├── AbstractPageHistory.java │ │ ├── PageView.java │ │ ├── PageViewModel.java │ │ └── AbstractPageComponent.java │ │ ├── settings │ │ ├── Settings.java │ │ ├── xml │ │ │ ├── ThemeAdapter.java │ │ │ └── FontAdapter.java │ │ ├── ViewerSettings.java │ │ └── TabSymbolSettings.java │ │ ├── element │ │ ├── ElementMediator.java │ │ ├── AbstractElementHistory.java │ │ ├── ElementComponent.java │ │ ├── ElementViewModel.java │ │ ├── ElementView.java │ │ └── AbstractElementViewModel.java │ │ ├── CoreComponentNames.java │ │ ├── SelectableViewModel.java │ │ ├── ClosePreparationResult.java │ │ ├── SelectableView.java │ │ ├── ShellComponent.java │ │ ├── CloseScope.java │ │ ├── menu │ │ └── manager │ │ │ └── ActionInterceptor.java │ │ └── CloseRequestResult.java │ └── resources │ └── com │ └── techsenger │ └── tabshell │ └── core │ └── style │ ├── core-nord-dark.css │ ├── core-nord-light.css │ ├── core-primer-dark.css │ ├── core-primer-light.css │ ├── core-dracula.css │ ├── core-cupertino-dark.css │ └── core-cupertino-light.css ├── tabshell-shared └── src │ ├── test │ └── java │ │ └── module-info.java │ └── main │ ├── java │ ├── com │ │ └── techsenger │ │ │ └── tabshell │ │ │ └── shared │ │ │ └── find │ │ │ └── FindPaneMediator.java │ └── module-info.java │ └── resources │ └── com │ └── techsenger │ └── tabshell │ └── shared │ └── find │ └── find.css ├── tabshell-storage └── src │ └── main │ └── java │ ├── com │ └── techsenger │ │ └── tabshell │ │ └── storage │ │ ├── FileType.java │ │ ├── FileStorageType.java │ │ ├── FileTaskProvider.java │ │ ├── FileColumnNames.java │ │ ├── UnixFileStorage.java │ │ └── InvalidFileException.java │ └── module-info.java ├── tabshell-dialogs └── src │ └── main │ ├── java │ └── com │ │ └── techsenger │ │ └── tabshell │ │ └── dialogs │ │ ├── file │ │ ├── FileChooserType.java │ │ ├── FileOperatorMediator.java │ │ ├── FileOperatorViewModel.java │ │ └── FileChooserDialogMediator.java │ │ ├── alert │ │ ├── AlertDialogType.java │ │ └── AlertDialogMediator.java │ │ ├── yesno │ │ └── YesNoDialogMediator.java │ │ ├── simple │ │ ├── SimpleDialogMediator.java │ │ └── AbstractSimpleDialogHistory.java │ │ ├── page │ │ ├── PageDialogMediator.java │ │ ├── AbstractPageDialogHistory.java │ │ └── AbstractPageDialogViewModel.java │ │ └── DialogComponentNames.java │ └── resources │ └── com │ └── techsenger │ └── tabshell │ └── dialogs │ ├── alert │ └── alert.css │ ├── yesno │ └── yesno.css │ └── file │ └── file-dialog.css ├── tabshell-material └── src │ └── main │ ├── java │ └── com │ │ └── techsenger │ │ └── tabshell │ │ └── material │ │ ├── icon │ │ ├── GenericFontIcon.java │ │ ├── GenericImageIcon.java │ │ ├── Icon.java │ │ ├── ImageIcon.java │ │ ├── StyleFontIcon.java │ │ ├── StyleImageIcon.java │ │ ├── AbstractIcon.java │ │ └── FontIcon.java │ │ ├── menu │ │ ├── NamedMenuState.java │ │ ├── MenuItemName.java │ │ ├── MenuGroupName.java │ │ ├── NamedMenuItemState.java │ │ ├── MenuName.java │ │ └── NamedMenuUpdate.java │ │ ├── theme │ │ ├── ThemePalette16.java │ │ ├── DefaultThemePalette16.java │ │ ├── ThemeStringConverter.java │ │ └── DefaultThemePalette32.java │ │ ├── textarea │ │ ├── TextAreaStyleNames.java │ │ └── TextAreaStyleName.java │ │ ├── Positioned.java │ │ ├── table │ │ ├── TreeTableColumnName.java │ │ └── TableColumnName.java │ │ ├── Named.java │ │ ├── scrollbar │ │ └── ShellScrollBarSkin.java │ │ ├── button │ │ └── ToggleButtonHistory.java │ │ └── style │ │ └── SizeConstants.java │ └── resources │ └── com │ └── techsenger │ └── tabshell │ └── material │ ├── search-field.css │ └── style │ ├── material-caspian.css │ └── material-modena.css ├── tabshell-jfx └── src │ └── main │ ├── java │ └── com │ │ └── techsenger │ │ └── tabshell │ │ └── jfx │ │ ├── eventlog │ │ └── LogEntry.java │ │ ├── JfxTabDockMediator.java │ │ ├── inspector │ │ ├── PropertyDialogMediator.java │ │ └── JfxInspectorTabMediator.java │ │ ├── JfxComponentNames.java │ │ └── style │ │ └── JfxIcons.java │ └── resources │ └── com │ └── techsenger │ └── tabshell │ └── jfx │ └── inspector │ └── inspector-tab.css ├── tabshell-terminal └── src │ └── main │ └── java │ └── com │ └── techsenger │ └── tabshell │ └── terminal │ ├── FindPaneHistory.java │ ├── style │ └── TerminalIcons.java │ ├── TerminalTabMediator.java │ ├── TerminalComponentNames.java │ └── TerminalTabHistory.java └── tabshell-registrars └── src └── main └── java └── module-info.java /.gitignore: -------------------------------------------------------------------------------- 1 | target/ -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: techsenger -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-full/src/main/resources/hex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techsenger/tabshell/HEAD/tabshell-demos/tabshell-demos-full/src/main/resources/hex.png -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question 3 | about: Ask a question about this project 4 | title: '' 5 | labels: question 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve the project 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /tabshell-icons/src/main/resources/com/techsenger/tabshell/icons/font/materialdesignicons-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techsenger/tabshell/HEAD/tabshell-icons/src/main/resources/com/techsenger/tabshell/icons/font/materialdesignicons-webfont.ttf -------------------------------------------------------------------------------- /tabshell-text/src/test/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-core/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-full/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tabshell-hex/src/main/java/com/techsenger/tabshell/hex/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.hex; 18 | -------------------------------------------------------------------------------- /tabshell-text/src/main/java/com/techsenger/tabshell/text/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.text; 18 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/java/com/techsenger/tabshell/layout/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.layout; 18 | -------------------------------------------------------------------------------- /tabshell-web/src/main/resources/com/techsenger/tabshell/web/web.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | 22 | -------------------------------------------------------------------------------- /tabshell-core/src/test/java/module-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | open module com.techsenger.tabshell.core { 18 | requires org.slf4j; 19 | 20 | requires org.junit.jupiter.api; 21 | requires org.assertj.core; 22 | } 23 | 24 | 25 | -------------------------------------------------------------------------------- /tabshell-demos/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | com.techsenger.tabshell 6 | tabshell 7 | 2.0.0-SNAPSHOT 8 | 9 | 10 | com.techsenger.tabshell.demos 11 | tabshell-demos 12 | pom 13 | TabShell - Demos 14 | Demo modules for TabShell 15 | 16 | 17 | tabshell-demos-core 18 | tabshell-demos-full 19 | 20 | -------------------------------------------------------------------------------- /tabshell-shared/src/test/java/module-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | open module com.techsenger.tabshell.kit.base { 18 | 19 | requires org.junit.jupiter.api; 20 | requires org.assertj.core; 21 | requires org.mockito; 22 | } 23 | 24 | 25 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/style/CssAnchor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.style; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public class CssAnchor { 24 | 25 | } 26 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/Callback.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface Callback { 24 | 25 | void call(); 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/dialog/DialogScope.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.dialog; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public enum DialogScope { 24 | 25 | SHELL, TAB 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/registry/MenuElementType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.registry; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | enum MenuElementType { 24 | GROUP, MENU, ITEM 25 | } 26 | -------------------------------------------------------------------------------- /tabshell-hex/src/main/java/com/techsenger/tabshell/hex/editor/ColumnSeparator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.hex.editor; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public enum ColumnSeparator { 24 | 25 | LINE, SPACE 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-storage/src/main/java/com/techsenger/tabshell/storage/FileType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.storage; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public enum FileType { 24 | 25 | DIRECTORY, FILE, SYMBOLIC_LINK 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/file/FileChooserType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs.file; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public enum FileChooserType { 24 | 25 | OPEN, SAVE_AS 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/icon/GenericFontIcon.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.icon; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface GenericFontIcon extends Icon { 24 | 25 | } 26 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/icon/GenericImageIcon.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.icon; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface GenericImageIcon extends Icon { 24 | 25 | } 26 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/alert/AlertDialogType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs.alert; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public enum AlertDialogType { 24 | 25 | INFO, WARNING, ERROR 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/menu/NamedMenuState.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.menu; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface NamedMenuState extends NamedMenuItemState { 24 | 25 | } 26 | -------------------------------------------------------------------------------- /tabshell-hex/src/main/java/com/techsenger/tabshell/hex/inspector/ValueProvider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.hex.inspector; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface ValueProvider { 24 | 25 | T provide(Values values); 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/theme/ThemePalette16.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.theme; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface ThemePalette16 { 24 | 25 | int[] getColors(); 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/tab/AbstractShellTabHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.tab; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public abstract class AbstractShellTabHistory extends AbstractTabHistory { 24 | 25 | } 26 | -------------------------------------------------------------------------------- /tabshell-hex/src/main/java/com/techsenger/tabshell/hex/editor/CaretShape.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.hex.editor; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public enum CaretShape { 24 | 25 | BAR, 26 | 27 | BLOCK, 28 | 29 | UNDERSCORE 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/java/com/techsenger/tabshell/layout/dock/SideBarPolicy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.layout.dock; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public enum SideBarPolicy { 24 | 25 | EXISTS_ALWAYS, EXISTS_WHEN_TABS_PRESENT 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/tab/TabContainerView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.tab; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface TabContainerView> { 24 | 25 | T getSelectedTab(); 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-icons/src/main/resources/com/techsenger/tabshell/icons/web.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | @font-face { 22 | src: url('font/materialdesignicons-webfont.ttf'); 23 | } 24 | 25 | .font-icon-view.web-browser-icon { 26 | -fx-code-point: 984479; /* web */ 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-full/src/main/java/com/techsenger/tabshell/demos/full/dialogs/Dialog.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.demos.full.dialogs; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | enum Dialog { 24 | 25 | INFO, WARNING, ERROR, YES_NO, OPEN_FILE, SAVE_FILE 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/ShellMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core; 18 | 19 | import com.techsenger.patternfx.core.ParentMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface ShellMediator extends ParentMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/registry/ControlRegistrar.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.registry; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface ControlRegistrar { 24 | 25 | void register(); 26 | 27 | void unregister(); 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-icons/src/main/resources/com/techsenger/tabshell/icons/terminal.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | @font-face { 22 | src: url('font/materialdesignicons-webfont.ttf'); 23 | } 24 | 25 | .font-icon-view.terminal-icon { 26 | -fx-code-point: 985015; /* console-line */ 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/area/AreaMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.area; 18 | 19 | import com.techsenger.patternfx.core.ChildMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface AreaMediator extends ChildMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/resources/com/techsenger/tabshell/layout/workertab/workertab.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | /* icon label */ 22 | .status-bar .worker-pane { 23 | -fx-padding: 0 25 0 0; 24 | } 25 | 26 | .status-bar .hyperlink { 27 | -fx-text-fill: -color-fg-default; 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/page/PageMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.page; 18 | 19 | import com.techsenger.tabshell.core.area.AreaMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface PageMediator extends AreaMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/settings/Settings.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.settings; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface Settings { 24 | 25 | AppearanceSettings getAppearance(); 26 | 27 | ViewerSettings getViewer(); 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/resources/com/techsenger/tabshell/dialogs/alert/alert.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author : Pavel Castornii 19 | */ 20 | 21 | .message-box { 22 | 23 | } 24 | 25 | .message-box > .message-icon-view { 26 | -fx-font-size: 3em; 27 | } 28 | 29 | .message-box > .message-label { 30 | -fx-wrap-text: true; 31 | } -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/resources/com/techsenger/tabshell/dialogs/yesno/yesno.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author : Pavel Castornii 19 | */ 20 | 21 | .message-box { 22 | 23 | } 24 | 25 | .message-box > .message-icon-view { 26 | -fx-font-size: 3em; 27 | } 28 | 29 | .message-box > .message-label { 30 | -fx-wrap-text: true; 31 | } -------------------------------------------------------------------------------- /tabshell-icons/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | module com.techsenger.tabshell.icons { 18 | requires org.slf4j; 19 | requires com.techsenger.tabshell.material; 20 | 21 | exports com.techsenger.tabshell.icons; 22 | 23 | opens com.techsenger.tabshell.icons; 24 | opens com.techsenger.tabshell.icons.font; 25 | } 26 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/element/ElementMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.element; 18 | 19 | import com.techsenger.patternfx.core.ChildMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface ElementMediator extends ChildMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/tab/AbstractTabHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.tab; 18 | 19 | import com.techsenger.patternfx.core.AbstractHistory; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public abstract class AbstractTabHistory extends AbstractHistory { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/tab/TabMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.tab; 18 | 19 | import com.techsenger.patternfx.core.ChildMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface TabMediator extends ChildMediator { 26 | 27 | void remove(); 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/file/FileOperatorMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs.file; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface FileOperatorMediator { 24 | 25 | void addFileChooserDialog(FileChooserDialogViewModel viewModel); 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-hex/src/main/java/com/techsenger/tabshell/hex/inspector/NumberBaseConverter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.hex.inspector; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | @FunctionalInterface 24 | public interface NumberBaseConverter { 25 | 26 | NumberBases convert(T value, int bits); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/java/com/techsenger/tabshell/layout/tabhost/TabHostMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.layout.tabhost; 18 | 19 | import com.techsenger.tabshell.core.area.AreaMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface TabHostMediator extends AreaMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/resources/com/techsenger/tabshell/layout/dock/dock-layout.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | .dock-layout .indicator { 21 | -fx-fill: -color-accent-5; 22 | -fx-stroke: -color-accent-7; 23 | -fx-stroke-width: 2; 24 | -fx-stroke-type: inside; 25 | -fx-opacity: 0.3; 26 | } 27 | 28 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/textarea/TextAreaStyleNames.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.textarea; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface TextAreaStyleNames { 24 | 25 | TextAreaStyleName FIND_HIGHLIGHT = new TextAreaStyleName(); 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-material/src/main/resources/com/techsenger/tabshell/material/search-field.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author : Pavel Castornii 19 | */ 20 | .search-field.extra-dense > .combo-box { 21 | -fx-padding: 0; 22 | } 23 | 24 | .search-field.extra-dense > .combo-box > .text-field { 25 | -fx-padding: 0.15em 0.6em 0.15em 0.6em; 26 | } 27 | 28 | -------------------------------------------------------------------------------- /tabshell-shared/src/main/java/com/techsenger/tabshell/shared/find/FindPaneMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.shared.find; 18 | 19 | import com.techsenger.tabshell.core.area.AreaMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface FindPaneMediator extends AreaMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/area/AbstractAreaHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.area; 18 | 19 | import com.techsenger.patternfx.core.AbstractHistory; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public abstract class AbstractAreaHistory extends AbstractHistory { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-jfx/src/main/java/com/techsenger/tabshell/jfx/eventlog/LogEntry.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.jfx.eventlog; 18 | 19 | import devtoolsfx.event.ConnectorEvent; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public record LogEntry(long timestamp, String zonedTime, String message, ConnectorEvent event) { } 26 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/java/com/techsenger/tabshell/layout/dock/TabDockMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.layout.dock; 18 | 19 | import com.techsenger.tabshell.layout.tabhost.TabHostMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface TabDockMediator extends TabHostMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/tab/TabComponent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.tab; 18 | 19 | import com.techsenger.patternfx.core.ChildComponent; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface TabComponent> extends ChildComponent { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-terminal/src/main/java/com/techsenger/tabshell/terminal/FindPaneHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.terminal; 18 | 19 | import com.techsenger.tabshell.shared.find.AbstractFindPaneHistory; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class FindPaneHistory extends AbstractFindPaneHistory { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-text/src/main/java/com/techsenger/tabshell/text/editor/EditorTabMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.text.editor; 18 | 19 | import com.techsenger.tabshell.text.viewer.ViewerTabMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface EditorTabMediator extends ViewerTabMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/area/AreaComponent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.area; 18 | 19 | import com.techsenger.patternfx.core.ChildComponent; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface AreaComponent> extends ChildComponent { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/dialog/DialogMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.dialog; 18 | 19 | import com.techsenger.tabshell.core.area.AreaMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface DialogMediator extends AreaMediator { 26 | 27 | void remove(); 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/element/AbstractElementHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.element; 18 | 19 | import com.techsenger.patternfx.core.AbstractHistory; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public abstract class AbstractElementHistory extends AbstractHistory { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/page/PageComponent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.page; 18 | 19 | import com.techsenger.tabshell.core.area.AreaComponent; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface PageComponent> extends AreaComponent { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/resources/com/techsenger/tabshell/core/style/core-nord-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | .stage-box .menu-item:focused { 22 | -fx-background-color: -color-base-7, -color-base-7; 23 | } 24 | 25 | .shadow { 26 | -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.6, 0, 2); 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/resources/com/techsenger/tabshell/core/style/core-nord-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | .stage-box .menu-item:focused { 22 | -fx-background-color: -color-base-1, -color-base-1; 23 | } 24 | 25 | .shadow { 26 | -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 6px, 0.3, 0, 2); 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/yesno/YesNoDialogMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs.yesno; 18 | 19 | import com.techsenger.tabshell.core.dialog.DialogMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface YesNoDialogMediator extends DialogMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/java/com/techsenger/tabshell/layout/splittab/SplitTabMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.layout.splittab; 18 | 19 | import com.techsenger.tabshell.core.tab.ShellTabMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface SplitTabMediator extends ShellTabMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/resources/com/techsenger/tabshell/core/style/core-primer-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | .stage-box .menu-item:focused { 22 | -fx-background-color: -color-base-7, -color-base-7; 23 | } 24 | 25 | .shadow { 26 | -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.6, 0, 2); 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/resources/com/techsenger/tabshell/core/style/core-primer-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | .stage-box .menu-item:focused { 22 | -fx-background-color: -color-base-1, -color-base-1; 23 | } 24 | 25 | .shadow { 26 | -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 6px, 0.3, 0, 2); 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/simple/SimpleDialogMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs.simple; 18 | 19 | import com.techsenger.tabshell.core.dialog.DialogMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface SimpleDialogMediator extends DialogMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-storage/src/main/java/com/techsenger/tabshell/storage/FileStorageType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.storage; 18 | 19 | /** 20 | * The types are defined based on the possibilities of their identification. 21 | * 22 | * @author Pavel Castornii 23 | */ 24 | public enum FileStorageType { 25 | 26 | BASE, FLOPPY, OPTICAL, NETWORK 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/CoreComponentNames.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core; 18 | 19 | import com.techsenger.patternfx.core.ComponentName; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface CoreComponentNames { 26 | 27 | ComponentName SHELL = new ComponentName("Shell"); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/dialog/DialogComponent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.dialog; 18 | 19 | import com.techsenger.tabshell.core.area.AreaComponent; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface DialogComponent> extends AreaComponent { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/page/AbstractPageHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.page; 18 | 19 | import com.techsenger.tabshell.core.area.AbstractAreaHistory; 20 | 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public abstract class AbstractPageHistory extends AbstractAreaHistory { 27 | 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/tab/ShellTabMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.tab; 18 | 19 | import com.techsenger.tabshell.core.ShellViewModel; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface ShellTabMediator extends TabMediator { 26 | 27 | ShellViewModel getShell(); 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/page/PageDialogMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs.page; 18 | 19 | import com.techsenger.tabshell.dialogs.simple.SimpleDialogMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface PageDialogMediator extends SimpleDialogMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/java/com/techsenger/tabshell/layout/workertab/WorkerTabMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.layout.workertab; 18 | 19 | import com.techsenger.tabshell.layout.splittab.SplitTabMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface WorkerTabMediator extends SplitTabMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/element/ElementComponent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.element; 18 | 19 | import com.techsenger.patternfx.core.ChildComponent; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface ElementComponent> extends ChildComponent { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/element/ElementViewModel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.element; 18 | 19 | import com.techsenger.patternfx.core.ChildViewModel; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface ElementViewModel extends ChildViewModel { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/tab/ShellTabView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.tab; 18 | 19 | /** 20 | * This is the tab that is added to Shell. 21 | * 22 | * @author Pavel Castornii 23 | */ 24 | public interface ShellTabView, S extends ShellTabComponent> extends TabView { 25 | 26 | } 27 | -------------------------------------------------------------------------------- /tabshell-core/src/main/resources/com/techsenger/tabshell/core/style/core-dracula.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | .stage-box .menu-item:focused { 22 | -fx-background-color: -color-accent-emphasis, -color-accent-emphasis; 23 | } 24 | 25 | .shadow { 26 | -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.6, 0, 2); 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/alert/AlertDialogMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs.alert; 18 | 19 | import com.techsenger.tabshell.dialogs.simple.SimpleDialogMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface AlertDialogMediator extends SimpleDialogMediator { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-material/src/main/resources/com/techsenger/tabshell/material/style/material-caspian.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | .root { 22 | -color-bg-default: #f0f0f0; 23 | -color-fg-default: #333333; 24 | -color-bg-extra: #d0d0d0; 25 | -color-border-muted: #444444; 26 | -color-base-9: #eeeeee; 27 | -color-base-4: #aaaaaa; 28 | } -------------------------------------------------------------------------------- /tabshell-web/src/main/java/com/techsenger/tabshell/web/style/WebIcons.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.web.style; 18 | 19 | import com.techsenger.tabshell.material.icon.StyleFontIcon; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface WebIcons { 26 | 27 | StyleFontIcon WEB_BROWSER = new StyleFontIcon("web-browser-icon"); 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-core/src/main/resources/com/techsenger/tabshell/core/style/core-cupertino-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | .stage-box .menu-item:focused { 22 | -fx-background-color: -color-accent-emphasis, -color-accent-emphasis; 23 | } 24 | 25 | .shadow { 26 | -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.6, 0, 2); 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/resources/com/techsenger/tabshell/core/style/core-cupertino-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | .stage-box .menu-item:focused { 22 | -fx-background-color: -color-accent-emphasis, -color-accent-emphasis; 23 | } 24 | 25 | .shadow { 26 | -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 6px, 0.3, 0, 2); 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/resources/com/techsenger/tabshell/dialogs/file/file-dialog.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .table-view .table-row-cell { 18 | -fx-background-insets: 0, 0 0 0 0; 19 | } 20 | 21 | .combo-box.location .list-cell HBox{ 22 | -fx-spacing: 0.25em; 23 | } 24 | 25 | .column-list-view .label { 26 | -fx-padding: 0 0 0 0.25em; 27 | -fx-graphic-text-gap: 0.5em; 28 | } 29 | 30 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/Positioned.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface Positioned { 24 | 25 | /** 26 | * Returns the position this node/element requires. 27 | * 28 | * @return 29 | */ 30 | int getPosition(); 31 | } 32 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/menu/MenuItemName.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.menu; 18 | 19 | import com.techsenger.patternfx.core.Name; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class MenuItemName extends Name { 26 | 27 | public MenuItemName() { 28 | super(null); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-material/src/main/resources/com/techsenger/tabshell/material/style/material-modena.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | .root { 22 | -color-bg-default: #ffffff; 23 | -color-fg-default: #2a2a2a; 24 | -color-bg-extra: #dddddd; 25 | -color-border-muted: #444444; 26 | -color-base-9: #eeeeee; 27 | -color-base-4: #aaaaaa; 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-web/src/main/java/com/techsenger/tabshell/web/WebBrowserTabMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.web; 18 | 19 | import com.techsenger.tabshell.core.tab.ShellTabMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface WebBrowserTabMediator extends ShellTabMediator { 26 | 27 | WebToolBarViewModel getToolBar(); 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/registry/ControlFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.registry; 18 | 19 | import com.techsenger.patternfx.core.ComponentView; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | @FunctionalInterface 26 | public interface ControlFactory { 27 | 28 | T create(ComponentView view); 29 | } 30 | -------------------------------------------------------------------------------- /tabshell-text/src/main/java/com/techsenger/tabshell/text/editor/AbstractEditorTabHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.text.editor; 18 | 19 | import com.techsenger.tabshell.text.viewer.AbstractViewerTabHistory; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public abstract class AbstractEditorTabHistory extends AbstractViewerTabHistory { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/simple/AbstractSimpleDialogHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs.simple; 18 | 19 | import com.techsenger.tabshell.core.dialog.AbstractDialogHistory; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public abstract class AbstractSimpleDialogHistory extends AbstractDialogHistory { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-text/src/main/java/com/techsenger/tabshell/text/viewer/AbstractViewerTabHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.text.viewer; 18 | 19 | import com.techsenger.tabshell.layout.workertab.AbstractWorkerTabHistory; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public abstract class AbstractViewerTabHistory extends AbstractWorkerTabHistory { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/SelectableViewModel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core; 18 | 19 | import javafx.beans.property.ReadOnlyBooleanProperty; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface SelectableViewModel { 26 | 27 | ReadOnlyBooleanProperty selectedProperty(); 28 | 29 | boolean isSelected(); 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-full/src/main/java/com/techsenger/tabshell/demos/full/text/TextEditorTabHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.demos.full.text; 18 | 19 | import com.techsenger.tabshell.text.editor.AbstractEditorTabHistory; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class TextEditorTabHistory extends AbstractEditorTabHistory { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/java/com/techsenger/tabshell/layout/workertab/AbstractWorkerTabHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.layout.workertab; 18 | 19 | import com.techsenger.tabshell.layout.splittab.AbstractSplitTabHistory; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public abstract class AbstractWorkerTabHistory extends AbstractSplitTabHistory { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-terminal/src/main/java/com/techsenger/tabshell/terminal/style/TerminalIcons.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.terminal.style; 18 | 19 | import com.techsenger.tabshell.material.icon.StyleFontIcon; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface TerminalIcons { 26 | 27 | StyleFontIcon TERMINAL = new StyleFontIcon("terminal-icon"); 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/page/AbstractPageDialogHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs.page; 18 | 19 | import com.techsenger.tabshell.dialogs.simple.AbstractSimpleDialogHistory; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public abstract class AbstractPageDialogHistory extends AbstractSimpleDialogHistory { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /tabshell-icons/src/main/resources/com/techsenger/tabshell/icons/text.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | @font-face { 22 | src: url('font/materialdesignicons-webfont.ttf'); 23 | } 24 | 25 | .font-icon-view.wrap-icon { 26 | -fx-code-point: 984502; /* wrap */ 27 | } 28 | 29 | .font-icon-view.editor-icon { 30 | -fx-code-point: 987624; /* file-edit-outline */ 31 | } 32 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/menu/MenuGroupName.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.menu; 18 | 19 | import com.techsenger.patternfx.core.Name; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class MenuGroupName extends Name { 26 | 27 | public MenuGroupName(String text) { 28 | super(text); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/table/TreeTableColumnName.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.table; 18 | 19 | import com.techsenger.patternfx.core.Name; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class TreeTableColumnName extends Name { 26 | 27 | public TreeTableColumnName() { 28 | super(null); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/textarea/TextAreaStyleName.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.textarea; 18 | 19 | import com.techsenger.patternfx.core.Name; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class TextAreaStyleName extends Name { 26 | 27 | public TextAreaStyleName() { 28 | super(null); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-jfx/src/main/java/com/techsenger/tabshell/jfx/JfxTabDockMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.jfx; 18 | 19 | import com.techsenger.tabshell.layout.dock.TabDockMediator; 20 | import devtoolsfx.connector.Connector; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface JfxTabDockMediator extends TabDockMediator { 27 | 28 | Connector getConnector(); 29 | } 30 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/Named.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material; 18 | 19 | import com.techsenger.patternfx.core.Name; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface Named { 26 | 27 | /** 28 | * Returns the name of the node/element. 29 | * 30 | * @return 31 | */ 32 | Name getName(); 33 | } 34 | -------------------------------------------------------------------------------- /tabshell-hex/src/main/java/com/techsenger/tabshell/hex/editor/HexAreaMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.hex.editor; 18 | 19 | import com.techsenger.tabshell.core.area.AreaMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface HexAreaMediator extends AreaMediator { 26 | 27 | HexToolBarViewModel getToolBar(); 28 | 29 | CaretViewModel getCaret(); 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/icon/Icon.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.icon; 18 | 19 | /** 20 | * All icons are immutable. 21 | * 22 | * @author Pavel Castornii 23 | */ 24 | public interface Icon { 25 | 26 | /** 27 | * Returns the content this icon (image, codePoint, styleClass). 28 | * 29 | * @return 30 | */ 31 | T getContent(); 32 | } 33 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/menu/NamedMenuItemState.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.menu; 18 | 19 | import javafx.scene.Node; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface NamedMenuItemState { 26 | 27 | String getText(); 28 | 29 | Node getGraphic(); 30 | 31 | boolean isVisible(); 32 | 33 | boolean isDisabled(); 34 | } 35 | -------------------------------------------------------------------------------- /tabshell-text/src/main/java/com/techsenger/tabshell/text/viewer/FindPaneViewModel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.text.viewer; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface FindPaneViewModel { 24 | 25 | void findNext(); 26 | 27 | void findPrevious(); 28 | 29 | boolean hasNextMatch(); 30 | 31 | boolean hasPreviousMatch(); 32 | 33 | void resetMatches(); 34 | } 35 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/icon/ImageIcon.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.icon; 18 | 19 | import javafx.scene.image.Image; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public final class ImageIcon extends AbstractIcon implements GenericImageIcon { 26 | 27 | public ImageIcon(Image content) { 28 | super(content); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-hex/src/main/java/com/techsenger/tabshell/hex/editor/EditorPanel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.hex.editor; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public enum EditorPanel { 24 | 25 | HEX, ASCII; 26 | 27 | public EditorPanel opposite() { 28 | if (this == HEX) { 29 | return ASCII; 30 | } else { 31 | return HEX; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /tabshell-hex/src/main/java/com/techsenger/tabshell/hex/inspector/SizeProvider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.hex.inspector; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | @FunctionalInterface 24 | public interface SizeProvider { 25 | 26 | /** 27 | * Returns the size of the value in bits. 28 | * 29 | * @param values 30 | * @return 31 | */ 32 | int provide(Values values); 33 | } 34 | -------------------------------------------------------------------------------- /tabshell-text/src/main/java/com/techsenger/tabshell/text/style/TextIcons.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.text.style; 18 | 19 | import com.techsenger.tabshell.material.icon.StyleFontIcon; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface TextIcons { 26 | 27 | StyleFontIcon WRAP = new StyleFontIcon("wrap-icon"); 28 | 29 | StyleFontIcon EDITOR = new StyleFontIcon("editor-icon"); 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/ClosePreparationResult.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public enum ClosePreparationResult { 24 | 25 | /** 26 | * Preparation completed successfully. 27 | */ 28 | SUCCESS, 29 | 30 | /** 31 | * Preparation was cancelled by user or system. 32 | */ 33 | CANCELLED, 34 | } 35 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/settings/xml/ThemeAdapter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.settings.xml; 18 | 19 | import com.techsenger.tabshell.material.theme.AtlantaFxTheme; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class ThemeAdapter extends EnumAdapter { 26 | 27 | public ThemeAdapter() { 28 | super(AtlantaFxTheme.class); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-terminal/src/main/java/com/techsenger/tabshell/terminal/TerminalTabMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.terminal; 18 | 19 | import com.techsenger.tabshell.core.tab.ShellTabMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface TerminalTabMediator extends ShellTabMediator { 26 | 27 | void addFindPane(FindPaneViewModel findViewModel); 28 | 29 | void removeFindPane(); 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-web/src/main/java/com/techsenger/tabshell/web/WebComponentNames.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.web; 18 | 19 | import com.techsenger.patternfx.core.ComponentName; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface WebComponentNames { 26 | 27 | ComponentName WEB_BROWSER_TAB = new ComponentName("WebBrowserTab"); 28 | 29 | ComponentName WEB_TOOL_BAR = new ComponentName("WebToolBar"); 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/area/AreaView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.area; 18 | 19 | import com.techsenger.patternfx.core.ChildView; 20 | import javafx.scene.layout.Region; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface AreaView, S extends AreaComponent> extends ChildView { 27 | 28 | @Override 29 | Region getNode(); 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/page/PageView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.page; 18 | 19 | import com.techsenger.tabshell.core.SelectableView; 20 | import com.techsenger.tabshell.core.area.AreaView; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface PageView, S extends PageComponent> extends AreaView, 27 | SelectableView { 28 | 29 | } 30 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/icon/StyleFontIcon.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.icon; 18 | 19 | /** 20 | * This class uses style class as content. 21 | * 22 | * @author Pavel Castornii 23 | */ 24 | public final class StyleFontIcon extends AbstractIcon implements GenericFontIcon { 25 | 26 | public StyleFontIcon(String content) { 27 | super(content); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tabshell-text/src/main/java/com/techsenger/tabshell/text/TextComponentNames.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.text; 18 | 19 | import com.techsenger.patternfx.core.ComponentName; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface TextComponentNames { 26 | 27 | ComponentName FIND_PANE = new ComponentName("FindPane"); 28 | 29 | ComponentName GO_TO_LINE_DIALOG = new ComponentName("GoToLineDialog"); 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/element/ElementView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.element; 18 | 19 | import com.techsenger.patternfx.core.ChildView; 20 | import javafx.scene.Node; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface ElementView, S extends ElementComponent> extends ChildView { 27 | 28 | @Override 29 | Node getNode(); 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-full/src/main/java/com/techsenger/tabshell/demos/full/dock/TextViewerViewModel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.demos.full.dock; 18 | 19 | import com.techsenger.tabshell.core.area.AbstractAreaViewModel; 20 | import com.techsenger.tabshell.core.area.AreaMediator; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public class TextViewerViewModel extends AbstractAreaViewModel { 27 | 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-full/src/main/java/com/techsenger/tabshell/demos/full/hex/DemoHexEditorTabMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.demos.full.hex; 18 | 19 | import com.techsenger.tabshell.hex.editor.HexEditorTabMediator; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface DemoHexEditorTabMediator extends HexEditorTabMediator { 26 | 27 | @Override 28 | DemoHexToolBarViewModel getToolBar(); 29 | } 30 | -------------------------------------------------------------------------------- /tabshell-text/src/main/java/com/techsenger/tabshell/text/viewer/FindPaneView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.text.viewer; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface FindPaneView { 24 | 25 | FindPaneViewModel getViewModel(); 26 | 27 | void setSelectionToFindText(); 28 | 29 | void selectNextRange(boolean focusToTextArea); 30 | 31 | void selectPreviousRange(boolean focusToTextArea); 32 | } 33 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/dialog/DialogView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.dialog; 18 | 19 | import com.techsenger.tabshell.core.area.AreaView; 20 | import javafx.scene.layout.VBox; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface DialogView, S extends DialogComponent> extends AreaView { 27 | 28 | @Override 29 | VBox getNode(); 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/icon/StyleImageIcon.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.icon; 18 | 19 | /** 20 | * This class uses style class as content. 21 | * 22 | * @author Pavel Castornii 23 | */ 24 | public final class StyleImageIcon extends AbstractIcon implements GenericImageIcon { 25 | 26 | public StyleImageIcon(String content) { 27 | super(content); 28 | } 29 | } 30 | 31 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/file/FileOperatorViewModel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs.file; 18 | 19 | import com.techsenger.tabshell.storage.GenericFile; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface FileOperatorViewModel { 26 | 27 | GenericFile getFile(); 28 | 29 | void setFile(GenericFile file); 30 | 31 | T getMediator(); 32 | } 33 | -------------------------------------------------------------------------------- /tabshell-storage/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | module com.techsenger.tabshell.storage { 18 | requires org.slf4j; 19 | requires com.techsenger.toolkit.core; 20 | requires com.techsenger.tabshell.material; 21 | requires com.techsenger.tabshell.core; 22 | requires javafx.controls; 23 | requires javafx.swing; 24 | requires com.sun.jna; 25 | requires com.sun.jna.platform; 26 | 27 | exports com.techsenger.tabshell.storage; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-core/src/main/java/com/techsenger/tabshell/demos/core/DemoComponentNames.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.demos.core; 18 | 19 | import com.techsenger.patternfx.core.ComponentName; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface DemoComponentNames { 26 | 27 | ComponentName DEMO_DIALOG = new ComponentName("DemoDialog"); 28 | 29 | ComponentName DEMO_TAB = new ComponentName("DemoTab"); 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-shared/src/main/resources/com/techsenger/tabshell/shared/find/find.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | GridPane.find { 22 | -fx-border-color: -color-border-muted; 23 | -fx-border-width: 1px 0 0 0; 24 | } 25 | 26 | .label.result { 27 | -fx-background-color: -color-bg-subtle, -color-bg-subtle; 28 | -fx-background-insets: 0, 1; 29 | -fx-text-fill: -color-fg-found; 30 | -fx-padding: 2 8 2 8; 31 | -fx-background-radius: 4; 32 | } -------------------------------------------------------------------------------- /tabshell-terminal/src/main/java/com/techsenger/tabshell/terminal/TerminalComponentNames.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.terminal; 18 | 19 | import com.techsenger.patternfx.core.ComponentName; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface TerminalComponentNames { 26 | 27 | ComponentName TERMINAL_TAB = new ComponentName("TerminalTab"); 28 | 29 | ComponentName FIND_PANE = new ComponentName("TerminalFindPane"); 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/java/com/techsenger/tabshell/layout/dock/DockConstants.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.layout.dock; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | final class DockConstants { 24 | 25 | static final double ONE_THIRD = 1.0 / 3.0; 26 | 27 | static final double TWO_THIRDS = 2.0 / 3.0; 28 | 29 | static final double ONE_HALF = 1.0 / 2.0; 30 | 31 | private DockConstants() { 32 | // empty 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /tabshell-registrars/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | module com.techsenger.tabshell.registrars { 18 | requires org.slf4j; 19 | requires com.techsenger.patternfx.core; 20 | requires com.techsenger.tabshell.core; 21 | requires com.techsenger.tabshell.shared; 22 | requires com.techsenger.tabshell.material; 23 | requires com.techsenger.tabshell.text; 24 | requires javafx.controls; 25 | 26 | exports com.techsenger.tabshell.registrars; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/resources/com/techsenger/tabshell/layout/dock/tab-popup.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | .tab-popup { 21 | -fx-background-color: -color-bg-default; 22 | -fx-border-color: -color-border-muted; 23 | } 24 | 25 | .tab-popup.right { 26 | -fx-border-width: 0 0 0 1px; 27 | } 28 | 29 | .tab-popup.bottom { 30 | -fx-border-width: 1px 0 0 0; 31 | } 32 | 33 | .tab-popup.left { 34 | -fx-border-width: 0 1px 0 0; 35 | } 36 | 37 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/table/TableColumnName.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.table; 18 | 19 | import com.techsenger.patternfx.core.Name; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class TableColumnName extends Name { 26 | 27 | public TableColumnName() { 28 | super(null); 29 | } 30 | 31 | public TableColumnName(String text) { 32 | super(text); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-full/src/main/java/com/techsenger/tabshell/demos/full/menu/DemoFileMenuNames.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.demos.full.menu; 18 | 19 | import com.techsenger.tabshell.shared.menu.FileMenuNames; 20 | import com.techsenger.tabshell.material.menu.MenuItemName; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface DemoFileMenuNames extends FileMenuNames { 27 | 28 | MenuItemName THEME = new MenuItemName(); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-jfx/src/main/java/com/techsenger/tabshell/jfx/inspector/PropertyDialogMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.jfx.inspector; 18 | 19 | import com.techsenger.tabshell.dialogs.simple.SimpleDialogMediator; 20 | import com.techsenger.tabshell.web.WebBrowserTabViewModel; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface PropertyDialogMediator extends SimpleDialogMediator { 27 | 28 | void addBrowser(WebBrowserTabViewModel vm); 29 | } 30 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/menu/MenuName.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.menu; 18 | 19 | import com.techsenger.patternfx.core.Name; 20 | 21 | /** 22 | * Although Menu extends MenuItem in JavaFX MenuName doesn't extend MenuItemName because name type must be unique. 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public class MenuName extends Name { 27 | 28 | public MenuName() { 29 | super(null); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/icon/AbstractIcon.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.icon; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | abstract class AbstractIcon implements Icon { 24 | 25 | private final T content; 26 | 27 | AbstractIcon(T content) { 28 | this.content = content; 29 | } 30 | 31 | @Override 32 | public T getContent() { 33 | return this.content; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/scrollbar/ShellScrollBarSkin.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.scrollbar; 18 | 19 | import javafx.scene.control.ScrollBar; 20 | import javafx.scene.control.skin.ScrollBarSkin; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public class ShellScrollBarSkin extends ScrollBarSkin { 27 | 28 | public ShellScrollBarSkin(ScrollBar sb) { 29 | super(sb); 30 | } 31 | 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /tabshell-text/src/main/java/com/techsenger/tabshell/text/viewer/FindMatchesResetPolicy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.text.viewer; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public enum FindMatchesResetPolicy { 24 | 25 | /** 26 | * With this policy it is necessary to call method to reset matches. 27 | */ 28 | MANUAL, 29 | 30 | /** 31 | * With this policy matches are reset automatically. 32 | */ 33 | AUTOMATIC; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-core/src/main/java/com/techsenger/tabshell/demos/core/tab/DemoTabMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.demos.core.tab; 18 | 19 | import com.techsenger.tabshell.core.tab.ShellTabMediator; 20 | import com.techsenger.tabshell.demos.core.dialog.DemoDialogViewModel; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface DemoTabMediator extends ShellTabMediator { 27 | 28 | void addDemoDialog(DemoDialogViewModel dialog); 29 | } 30 | -------------------------------------------------------------------------------- /tabshell-icons/src/main/resources/com/techsenger/tabshell/icons/font/materialdesignicons-license.txt: -------------------------------------------------------------------------------- 1 | Pictogrammers Free License 2 | -------------------------- 3 | 4 | This icon collection is released as free, open source, and GPL friendly by 5 | the [Pictogrammers](http://pictogrammers.com/) icon group. You may use it 6 | for commercial projects, open source projects, or anything really. 7 | 8 | # Icons: Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) 9 | Some of the icons are redistributed under the Apache 2.0 license. All other 10 | icons are either redistributed under their respective licenses or are 11 | distributed under the Apache 2.0 license. 12 | 13 | # Fonts: Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) 14 | All web and desktop fonts are distributed under the Apache 2.0 license. Web 15 | and desktop fonts contain some icons that are redistributed under the Apache 16 | 2.0 license. All other icons are either redistributed under their respective 17 | licenses or are distributed under the Apache 2.0 license. 18 | 19 | # Code: MIT (https://opensource.org/licenses/MIT) 20 | The MIT license applies to all non-font and non-icon files. 21 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/icon/FontIcon.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.icon; 18 | 19 | /** 20 | * Font icon has either a codePoint or styleClass. This icon will be displayed in {@link FontIconView}. 21 | * 22 | * @author Pavel Castornii 23 | */ 24 | public final class FontIcon extends AbstractIcon implements GenericFontIcon { 25 | 26 | public FontIcon(Integer content) { 27 | super(content); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/settings/ViewerSettings.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.settings; 18 | 19 | import javafx.beans.property.ObjectProperty; 20 | import javafx.scene.text.Font; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface ViewerSettings { 27 | 28 | ObjectProperty fontProperty(); 29 | 30 | Font getFont(); 31 | 32 | void setFont(Font font); 33 | 34 | TabSymbolSettings getTabSymbol(); 35 | } 36 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/tab/ShellTabComponent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.tab; 18 | 19 | import com.techsenger.tabshell.core.ShellComponent; 20 | import com.techsenger.tabshell.core.dialog.DialogContainerComponent; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface ShellTabComponent> extends TabComponent, DialogContainerComponent { 27 | 28 | ShellComponent getShell(); 29 | } 30 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/file/FileChooserDialogMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs.file; 18 | 19 | import com.techsenger.tabshell.dialogs.alert.AlertDialogViewModel; 20 | import com.techsenger.tabshell.dialogs.simple.SimpleDialogMediator; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface FileChooserDialogMediator extends SimpleDialogMediator { 27 | 28 | void addAlertDialog(AlertDialogViewModel vm); 29 | } 30 | -------------------------------------------------------------------------------- /tabshell-hex/src/main/java/com/techsenger/tabshell/hex/editor/NumberBase.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.hex.editor; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public enum NumberBase { 24 | 25 | HEX(16), 26 | 27 | DEC(10), 28 | 29 | OCT(8), 30 | 31 | BIN(2); 32 | 33 | private int value; 34 | 35 | NumberBase(int value) { 36 | this.value = value; 37 | } 38 | 39 | int getValue() { 40 | return this.value; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/theme/DefaultThemePalette16.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.theme; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | class DefaultThemePalette16 implements ThemePalette16 { 24 | 25 | private int[] colors; 26 | 27 | DefaultThemePalette16(int[] colors) { 28 | this.colors = colors; 29 | } 30 | 31 | @Override 32 | public int[] getColors() { 33 | return colors; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /tabshell-jfx/src/main/java/com/techsenger/tabshell/jfx/inspector/JfxInspectorTabMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.jfx.inspector; 18 | 19 | import com.techsenger.tabshell.core.tab.ShellTabViewModel; 20 | import com.techsenger.tabshell.core.tab.TabMediator; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface JfxInspectorTabMediator extends TabMediator { 27 | 28 | void addPropertyDialog(PropertyDialogViewModel vm); 29 | 30 | ShellTabViewModel getShellTab(); 31 | } 32 | -------------------------------------------------------------------------------- /tabshell-storage/src/main/java/com/techsenger/tabshell/storage/FileTaskProvider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.storage; 18 | 19 | import com.techsenger.tabshell.core.tab.TabWorker; 20 | 21 | /** 22 | * Interface that allows to use files from different storage - local, samba, ftp etc. 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface FileTaskProvider { 27 | 28 | TabWorker createFileReader(GenericFile file); 29 | 30 | TabWorker createFileWriter(GenericFile fileInfo, T content); 31 | } 32 | -------------------------------------------------------------------------------- /tabshell-hex/src/main/java/com/techsenger/tabshell/hex/style/HexIcons.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.hex.style; 18 | 19 | import com.techsenger.tabshell.material.icon.StyleFontIcon; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface HexIcons { 26 | 27 | StyleFontIcon EDITOR = new StyleFontIcon("hex-editor-icon"); 28 | 29 | StyleFontIcon COLUMNS_ENABLED = new StyleFontIcon("columns-enabled-icon"); 30 | 31 | StyleFontIcon DATA_INSPECTOR = new StyleFontIcon("data-inspector-icon"); 32 | } 33 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/SelectableView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public interface SelectableView { 24 | 25 | /** 26 | * Called when the component is selected (also called when a new component is created even if there are no 27 | * other ones). 28 | */ 29 | void doOnSelected(); 30 | 31 | /** 32 | * Called when the component is deselected. 33 | */ 34 | void doOnDeselected(); 35 | 36 | } 37 | -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-full/src/main/java/com/techsenger/tabshell/demos/full/hex/DemoHexEditorTabView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.demos.full.hex; 18 | 19 | import com.techsenger.tabshell.hex.editor.HexEditorTabView; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class DemoHexEditorTabView extends HexEditorTabView { 26 | 27 | public DemoHexEditorTabView(DemoHexEditorTabViewModel viewModel) { 28 | super(viewModel); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tabshell-icons/src/main/resources/com/techsenger/tabshell/icons/hex.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | @font-face { 22 | src: url('font/materialdesignicons-webfont.ttf'); 23 | } 24 | 25 | .font-icon-view.hex-editor-icon { 26 | -fx-code-point: 987815; /* hexadecimal */ 27 | } 28 | 29 | .font-icon-view.columns-enabled-icon { 30 | -fx-code-point: 985311; /* format-columns */ 31 | } 32 | 33 | .font-icon-view.data-inspector-icon { 34 | -fx-code-point: 989337; /* account-tie-hat-outline */ 35 | } 36 | 37 | 38 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/menu/NamedMenuUpdate.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.menu; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public final class NamedMenuUpdate extends NamedMenuItemUpdate { 24 | 25 | public static class Builder extends AbstractChangeBuilder { 26 | 27 | public Builder() { 28 | super(new NamedMenuUpdate()); 29 | } 30 | } 31 | 32 | private NamedMenuUpdate() { 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/DialogComponentNames.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs; 18 | 19 | import com.techsenger.patternfx.core.ComponentName; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface DialogComponentNames { 26 | 27 | ComponentName ALERT_DIALOG = new ComponentName("AlertDialog"); 28 | 29 | ComponentName YES_NO_DIALOG = new ComponentName("YesNoDialog"); 30 | 31 | ComponentName FILE_CHOOSER_DIALOG = new ComponentName("FileChooserDialog"); 32 | } 33 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/button/ToggleButtonHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.button; 18 | 19 | import java.io.Serializable; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class ToggleButtonHistory implements Serializable { 26 | 27 | private boolean selected; 28 | 29 | public boolean isSelected() { 30 | return selected; 31 | } 32 | 33 | public void setSelected(boolean selected) { 34 | this.selected = selected; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/style/SizeConstants.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.style; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public final class SizeConstants { 24 | 25 | public static final double INSET = 12.0; 26 | 27 | public static final double HALF_INSET = 6.0; 28 | 29 | public static final double THIRD_INSET = 4.0; 30 | 31 | public static final double SIXTH_INSET = 2.0; 32 | 33 | private SizeConstants() { 34 | //empty 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/java/com/techsenger/tabshell/layout/dock/SideBarMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.layout.dock; 18 | 19 | import com.techsenger.tabshell.core.area.AreaMediator; 20 | import javafx.collections.ObservableList; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface SideBarMediator extends AreaMediator { 27 | 28 | /** 29 | * Returns an unmodifiable list of minimized tab docks. 30 | * 31 | * @return 32 | */ 33 | ObservableList> getTabDocks(); 34 | } 35 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/area/AreaViewModel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.area; 18 | 19 | import com.techsenger.patternfx.core.ChildViewModel; 20 | import javafx.beans.property.ReadOnlyDoubleProperty; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface AreaViewModel extends ChildViewModel { 27 | 28 | ReadOnlyDoubleProperty widthProperty(); 29 | 30 | double getWidth(); 31 | 32 | ReadOnlyDoubleProperty heightProperty(); 33 | 34 | double getHeight(); 35 | } 36 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/java/com/techsenger/tabshell/layout/dock/SideBarHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.layout.dock; 18 | 19 | import com.techsenger.tabshell.core.area.AbstractAreaHistory; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class SideBarHistory extends AbstractAreaHistory { 26 | 27 | private TabPopupHistory popup; 28 | 29 | public TabPopupHistory getOrCreatePopup() { 30 | if (this.popup == null) { 31 | this.popup = new TabPopupHistory(); 32 | } 33 | return popup; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /tabshell-hex/src/main/java/com/techsenger/tabshell/hex/editor/HexEditorTabHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.hex.editor; 18 | 19 | import com.techsenger.tabshell.core.tab.AbstractShellTabHistory; 20 | import com.techsenger.tabshell.layout.dock.DockLayoutHistory; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public class HexEditorTabHistory extends AbstractShellTabHistory { 27 | 28 | private DockLayoutHistory dockLayout = new DockLayoutHistory(); 29 | 30 | public DockLayoutHistory getDockLayout() { 31 | return dockLayout; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /tabshell-storage/src/main/java/com/techsenger/tabshell/storage/FileColumnNames.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.storage; 18 | 19 | import com.techsenger.tabshell.material.table.TableColumnName; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface FileColumnNames { 26 | 27 | TableColumnName TYPE = new TableColumnName("Type"); 28 | 29 | TableColumnName NAME = new TableColumnName("Name"); 30 | 31 | TableColumnName SIZE = new TableColumnName("Size"); 32 | 33 | TableColumnName LAST_MODIFIED = new TableColumnName("Last Modified"); 34 | } 35 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/page/PageViewModel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.page; 18 | 19 | import com.techsenger.tabshell.core.IconedViewModel; 20 | import com.techsenger.tabshell.core.SelectableViewModel; 21 | import com.techsenger.tabshell.core.TitledViewModel; 22 | import com.techsenger.tabshell.core.area.AreaViewModel; 23 | 24 | /** 25 | * 26 | * @author Pavel Castornii 27 | */ 28 | public interface PageViewModel extends AreaViewModel, TitledViewModel, IconedViewModel, 29 | SelectableViewModel { 30 | 31 | } 32 | -------------------------------------------------------------------------------- /tabshell-storage/src/main/java/com/techsenger/tabshell/storage/UnixFileStorage.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.storage; 18 | 19 | import java.net.URI; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class UnixFileStorage extends AbstractDefaultFileStorage { 26 | 27 | public UnixFileStorage(FileStorageType type, String displayName, URI rootUri) { 28 | super(type, displayName, rootUri); 29 | } 30 | 31 | @Override 32 | public boolean refersToStorage(URI uri) { 33 | return "file".equalsIgnoreCase(uri.getScheme()); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/settings/TabSymbolSettings.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.settings; 18 | 19 | import javafx.beans.property.BooleanProperty; 20 | import javafx.beans.property.IntegerProperty; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public interface TabSymbolSettings { 27 | 28 | IntegerProperty sizeProperty(); 29 | 30 | int getSize(); 31 | 32 | void setSize(int size); 33 | 34 | BooleanProperty useSpacesProperty(); 35 | 36 | boolean isUseSpaces(); 37 | 38 | void setUseSpaces(boolean useSpaces); 39 | } 40 | -------------------------------------------------------------------------------- /tabshell-jfx/src/main/java/com/techsenger/tabshell/jfx/JfxComponentNames.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.jfx; 18 | 19 | import com.techsenger.patternfx.core.ComponentName; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface JfxComponentNames { 26 | 27 | ComponentName JFX_TAB_DOCK = new ComponentName("JFXTabDock"); 28 | 29 | ComponentName JFX_INSPECTOR_TAB = new ComponentName("JFXInspectorTab"); 30 | 31 | ComponentName EVENT_LOG_TAB = new ComponentName("EventLogTab"); 32 | 33 | ComponentName PROPERTY_DIALOG = new ComponentName("PropertyDialog"); 34 | } 35 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/dialog/DialogManager.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.dialog; 18 | 19 | import java.util.List; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface DialogManager { 26 | 27 | void showDialog(DialogView dialogView); 28 | 29 | void hideDialog(DialogView dialogView); 30 | 31 | /** 32 | * Returns an unmodifiable list of dialogs. 33 | * 34 | * @return the list of dialogs. If no dialogs are present, an empty list is returned. 35 | */ 36 | List> getDialogs(); 37 | } 38 | -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-full/src/main/java/com/techsenger/tabshell/demos/full/dock/DockLayoutTabHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.demos.full.dock; 18 | 19 | import com.techsenger.tabshell.core.tab.AbstractShellTabHistory; 20 | import com.techsenger.tabshell.layout.dock.DockLayoutHistory; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public class DockLayoutTabHistory extends AbstractShellTabHistory { 27 | 28 | private DockLayoutHistory dockLayout = new DockLayoutHistory(); 29 | 30 | public DockLayoutHistory getDockLayout() { 31 | return dockLayout; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/java/com/techsenger/tabshell/layout/dock/TabPopupMediator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.layout.dock; 18 | 19 | import com.techsenger.tabshell.core.area.AreaMediator; 20 | import com.techsenger.tabshell.core.tab.TabViewModel; 21 | import java.util.List; 22 | 23 | /** 24 | * 25 | * @author Pavel Castornii 26 | */ 27 | public interface TabPopupMediator extends AreaMediator { 28 | 29 | /** 30 | * Returns un unmodifiable list of tabs. A list instance is created on each method call. 31 | * 32 | * @return 33 | */ 34 | List getTabs(); 35 | } 36 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/tab/TabView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.tab; 18 | 19 | import com.techsenger.patternfx.core.ChildView; 20 | import com.techsenger.tabshell.core.SelectableView; 21 | import com.techsenger.tabshell.core.menu.MenuAware; 22 | 23 | /** 24 | * A view for components that has a root with JavaFX Tab class. 25 | * 26 | * @author Pavel Castornii 27 | */ 28 | public interface TabView, S extends TabComponent> extends ChildView, 29 | SelectableView, MenuAware { 30 | 31 | @Override 32 | ComponentTab getNode(); 33 | } 34 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/ShellComponent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core; 18 | 19 | import com.techsenger.patternfx.core.ParentComponent; 20 | import com.techsenger.tabshell.core.dialog.DialogContainerComponent; 21 | import com.techsenger.tabshell.core.tab.ShellTabComponent; 22 | import com.techsenger.tabshell.core.tab.TabContainerComponent; 23 | 24 | /** 25 | * 26 | * @author Pavel Castornii 27 | */ 28 | public interface ShellComponent> extends ParentComponent, 29 | TabContainerComponent>, DialogContainerComponent { 30 | 31 | } 32 | -------------------------------------------------------------------------------- /tabshell-dialogs/src/main/java/com/techsenger/tabshell/dialogs/page/AbstractPageDialogViewModel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.dialogs.page; 18 | 19 | import com.techsenger.tabshell.core.dialog.DialogScope; 20 | import com.techsenger.tabshell.dialogs.simple.AbstractSimpleDialogViewModel; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public abstract class AbstractPageDialogViewModel 27 | extends AbstractSimpleDialogViewModel { 28 | 29 | public AbstractPageDialogViewModel(DialogScope scope, boolean resizable) { 30 | super(scope, resizable); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /tabshell-terminal/src/main/java/com/techsenger/tabshell/terminal/TerminalTabHistory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.terminal; 18 | 19 | import com.techsenger.tabshell.core.tab.AbstractShellTabHistory; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class TerminalTabHistory extends AbstractShellTabHistory { 26 | 27 | private TerminalPaletteType paletteType; 28 | 29 | public TerminalPaletteType getPaletteType() { 30 | return paletteType; 31 | } 32 | 33 | public void setPaletteType(TerminalPaletteType paletteType) { 34 | this.paletteType = paletteType; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /tabshell-text/src/main/resources/com/techsenger/tabshell/text/editor/editor.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | /* Current line */ 22 | .styled-text-area.editor .paragraph-box:has-caret { 23 | /*when theme is dark then `derive(-color-bg-default, +8%)` when is light then `derive(-color-bg-default, -5%)` */ 24 | -fx-background-color: ladder(-color-bg-default, derive(-color-bg-default, +8%) 49%, derive(-color-bg-default, -5%) 50%); 25 | } 26 | 27 | /* It is necessary to set min width to avoid label moving on its value change */ 28 | .status-bar .overwrite-mode-box { 29 | -fx-min-width: 2.5em; 30 | -fx-padding: 0; 31 | } -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-full/src/main/java/com/techsenger/tabshell/demos/full/dialogs/DialogItem.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.demos.full.dialogs; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | class DialogItem { 24 | 25 | private final Dialog dialog; 26 | 27 | private final Runnable runnable; 28 | 29 | DialogItem(Dialog dialog, Runnable runnable) { 30 | this.dialog = dialog; 31 | this.runnable = runnable; 32 | } 33 | 34 | public Dialog getDialog() { 35 | return dialog; 36 | } 37 | 38 | public Runnable getRunnable() { 39 | return runnable; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/tab/ShellTabViewModel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.tab; 18 | 19 | import javafx.beans.property.ReadOnlyIntegerProperty; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface ShellTabViewModel extends TabViewModel { 26 | 27 | /** 28 | * Property that shows the count of open dialogs. 29 | * 30 | * @return 31 | */ 32 | ReadOnlyIntegerProperty dialogCountProperty(); 33 | 34 | /** 35 | * Returns the count of open dialogs. 36 | * 37 | * @return 38 | */ 39 | int getDialogCount(); 40 | } 41 | -------------------------------------------------------------------------------- /tabshell-demos/tabshell-demos-core/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | module com.techsenger.tabshell.demos.core { 18 | requires com.techsenger.toolkit.core; 19 | requires com.techsenger.toolkit.fx; 20 | requires com.techsenger.tabshell.core; 21 | requires com.techsenger.tabshell.material; 22 | requires com.techsenger.patternfx.core; 23 | 24 | requires org.slf4j; 25 | requires javafx.base; 26 | requires javafx.graphics; 27 | requires javafx.controls; 28 | 29 | exports com.techsenger.tabshell.demos.core.history; 30 | exports com.techsenger.tabshell.demos.core.settings; 31 | 32 | opens com.techsenger.tabshell.demos.core; 33 | } 34 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/theme/ThemeStringConverter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.theme; 18 | 19 | import javafx.util.StringConverter; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class ThemeStringConverter extends StringConverter { 26 | 27 | @Override 28 | public String toString(Theme t) { 29 | if (t != null) { 30 | return t.getName(); 31 | } else { 32 | return null; 33 | } 34 | } 35 | 36 | @Override 37 | public Theme fromString(String string) { 38 | throw new IllegalStateException(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/element/AbstractElementViewModel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.element; 18 | 19 | import com.techsenger.patternfx.core.AbstractChildViewModel; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public abstract class AbstractElementViewModel extends AbstractChildViewModel 26 | implements ElementViewModel { 27 | 28 | public AbstractElementViewModel() { 29 | super(); 30 | } 31 | 32 | @Override 33 | protected AbstractElementHistory getHistory() { 34 | return (AbstractElementHistory) super.getHistory(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /tabshell-layout/src/main/java/com/techsenger/tabshell/layout/dock/TabDockComponent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.layout.dock; 18 | 19 | import com.techsenger.tabshell.layout.tabhost.TabHostComponent; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class TabDockComponent> extends TabHostComponent { 26 | 27 | private final DockLayoutComponent layout; 28 | 29 | public TabDockComponent(T view, DockLayoutComponent layout) { 30 | super(view); 31 | this.layout = layout; 32 | } 33 | 34 | public DockLayoutComponent getLayout() { 35 | return layout; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/settings/xml/FontAdapter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.settings.xml; 18 | 19 | import jakarta.xml.bind.annotation.adapters.XmlAdapter; 20 | import javafx.scene.text.Font; 21 | 22 | /** 23 | * 24 | * @author Pavel Castornii 25 | */ 26 | public class FontAdapter extends XmlAdapter { 27 | 28 | @Override 29 | public Font unmarshal(XmlFontSettings s) { 30 | return Font.font(s.getFamily(), s.getSize()); 31 | } 32 | 33 | @Override 34 | public XmlFontSettings marshal(Font v) { 35 | return new XmlFontSettings(v.getFamily(), v.getSize()); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /tabshell-jfx/src/main/java/com/techsenger/tabshell/jfx/style/JfxIcons.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.jfx.style; 18 | 19 | import com.techsenger.tabshell.material.icon.StyleFontIcon; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public interface JfxIcons { 26 | 27 | StyleFontIcon SELECT = new StyleFontIcon("select-icon"); 28 | 29 | StyleFontIcon RECORD_START = new StyleFontIcon("record-start-icon"); 30 | 31 | StyleFontIcon RECORD_STOP = new StyleFontIcon("record-stop-icon"); 32 | 33 | StyleFontIcon FILTER = new StyleFontIcon("filter-icon"); 34 | 35 | StyleFontIcon SELECTED_ONLY = new StyleFontIcon("selected-only-icon"); 36 | } 37 | -------------------------------------------------------------------------------- /tabshell-shared/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | module com.techsenger.tabshell.shared { 18 | requires org.slf4j; 19 | requires com.techsenger.toolkit.fx; 20 | requires com.techsenger.patternfx.core; 21 | requires com.techsenger.tabshell.material; 22 | requires com.techsenger.tabshell.core; 23 | requires javafx.base; 24 | requires javafx.graphics; 25 | requires javafx.controls; 26 | requires javafx.swing; 27 | requires atlantafx.base; 28 | requires jakarta.xml.bind; 29 | 30 | exports com.techsenger.tabshell.shared.find; 31 | exports com.techsenger.tabshell.shared.menu; 32 | exports com.techsenger.tabshell.shared.style; 33 | } 34 | -------------------------------------------------------------------------------- /tabshell-storage/src/main/java/com/techsenger/tabshell/storage/InvalidFileException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.storage; 18 | 19 | import java.io.IOException; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public class InvalidFileException extends IOException { 26 | 27 | public InvalidFileException() { 28 | 29 | } 30 | 31 | public InvalidFileException(String message) { 32 | super(message); 33 | } 34 | 35 | public InvalidFileException(String message, Throwable cause) { 36 | super(message, cause); 37 | } 38 | 39 | public InvalidFileException(Throwable cause) { 40 | super(cause); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /tabshell-jfx/src/main/resources/com/techsenger/tabshell/jfx/inspector/inspector-tab.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* 18 | Author: Pavel Castornii 19 | */ 20 | 21 | .tree-view { 22 | -fx-border-width: 0; 23 | } 24 | 25 | .tree-table-view { 26 | -fx-border-width: 0; 27 | } 28 | 29 | .tree-table-view .tree-table-row-cell { 30 | -fx-background-insets: 0, 0; 31 | } 32 | 33 | .tree-table-view .tree-table-row-cell .label.default-value { 34 | -fx-text-fill: -color-fg-muted; 35 | } 36 | 37 | .tree-table-view .tree-table-row-cell .css-container { 38 | -fx-alignment: TOP_LEFT; 39 | } 40 | 41 | .tree-table-view .tree-table-row-cell .css-container > .css-hint { 42 | -fx-font-size: 0.65em; 43 | } 44 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/CloseScope.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core; 18 | 19 | /** 20 | * Defines the scope of a close operation. Indicates whether the close event originated from a single tab 21 | * or the entire shell (main application window). 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public enum CloseScope { 26 | 27 | /** 28 | * The close request was triggered for a specific tab 29 | * (e.g., user clicked the tab's close button). 30 | */ 31 | TAB, 32 | 33 | /** 34 | * The close request was triggered at the shell level 35 | * (e.g., main window closure, application exit). 36 | */ 37 | SHELL 38 | } 39 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/menu/manager/ActionInterceptor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.menu.manager; 18 | 19 | import javafx.event.ActionEvent; 20 | import javafx.event.EventHandler; 21 | 22 | /** 23 | * This interface is a wrapper for menu/menu item actions. We need it because when menu items are not shown to user 24 | * they are NOT disabled and their actions can be called using accelerator keys. So, it intercepts the event and 25 | * decides to call origin action or not. 26 | * 27 | * @author Pavel Castornii 28 | */ 29 | public interface ActionInterceptor extends EventHandler { 30 | 31 | EventHandler getAction(); 32 | } 33 | -------------------------------------------------------------------------------- /tabshell-material/src/main/java/com/techsenger/tabshell/material/theme/DefaultThemePalette32.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.material.theme; 18 | 19 | /** 20 | * @author Pavel Castornii 21 | */ 22 | class DefaultThemePalette32 implements ThemePalette32 { 23 | 24 | private int[] fgColors; 25 | 26 | private int[] bgColors; 27 | 28 | DefaultThemePalette32(int[] fgColors, int[] bgColors) { 29 | this.fgColors = fgColors; 30 | this.bgColors = bgColors; 31 | } 32 | 33 | @Override 34 | public int[] getFgColors() { 35 | return fgColors; 36 | } 37 | 38 | @Override 39 | public int[] getBgColors() { 40 | return bgColors; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/CloseRequestResult.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core; 18 | 19 | /** 20 | * 21 | * @author Pavel Castornii 22 | */ 23 | public enum CloseRequestResult { 24 | 25 | /** 26 | * All components were successfully closed. 27 | */ 28 | SUCCESS, 29 | 30 | /** 31 | * At least one component was not ready to close. 32 | */ 33 | NOT_READY_TO_CLOSE, 34 | 35 | /** 36 | * The close operation was cancelled during preparation. 37 | */ 38 | PREPARATION_CANCELLED, 39 | 40 | /** 41 | * The maximum number of close attempts was reached without success. 42 | */ 43 | MAX_ATTEMPTS_REACHED 44 | } 45 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/area/AbstractAreaComponent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.area; 18 | 19 | import com.techsenger.patternfx.core.AbstractChildComponent; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public abstract class AbstractAreaComponent> 26 | extends AbstractChildComponent implements AreaComponent { 27 | 28 | protected class Mediator extends AbstractChildComponent.Mediator implements AreaMediator { 29 | 30 | } 31 | 32 | public AbstractAreaComponent(T view) { 33 | super(view); 34 | } 35 | 36 | @Override 37 | protected abstract Mediator createMediator(); 38 | } 39 | -------------------------------------------------------------------------------- /tabshell-core/src/main/java/com/techsenger/tabshell/core/page/AbstractPageComponent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024-2025 Pavel Castornii. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.techsenger.tabshell.core.page; 18 | 19 | import com.techsenger.tabshell.core.area.AbstractAreaComponent; 20 | 21 | /** 22 | * 23 | * @author Pavel Castornii 24 | */ 25 | public abstract class AbstractPageComponent> extends AbstractAreaComponent 26 | implements PageComponent { 27 | 28 | protected class Mediator extends AbstractAreaComponent.Mediator implements PageMediator { 29 | 30 | } 31 | 32 | public AbstractPageComponent(T view) { 33 | super(view); 34 | } 35 | 36 | @Override 37 | protected abstract Mediator createMediator(); 38 | } 39 | --------------------------------------------------------------------------------