Skip to content

Commit 297b3f2

Browse files
authored
feat: add high contrast theme (#357)
1 parent 2002a1f commit 297b3f2

11 files changed

+274
-526
lines changed

src/app/app.component.html

-30
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@
5252
<button mat-menu-item routerLink="/settings">
5353
<div class="menu-items-with-icons"><i class="fa-solid fa-sliders" aria-hidden="true"></i>&nbsp;Settings</div>
5454
</button>
55-
<!-- <button mat-menu-item [disabled]="isNightMode" [matMenuTriggerFor]="themesMenu"> -->
56-
<!-- <span><i class="fa-solid fa-paint-brush"></i> Themes</span> -->
57-
<!-- </button> -->
5855
<button mat-menu-item [disabled]="!unlockStatus" (click)="newPage()">
5956
<div class="menu-items-with-icons"><i class="fa-solid fa-plus-square" aria-hidden="true"></i>&nbsp;Add Page</div>
6057
</button>
@@ -63,30 +60,3 @@
6360
<div class="menu-items-with-icons" *ngIf="unlockStatus"><i class="fa-solid fa-lock" aria-hidden="true"></i>&nbsp;Lock Layout</div>
6461
</button>
6562
</mat-menu>
66-
67-
<mat-menu #themesMenu="matMenu" xPosition="before">
68-
<button mat-menu-item (click)="setTheme('default-light')">
69-
<span><i *ngIf="themeName == 'default-light' else elseBlock" class="fa-solid fa-circle" aria-hidden="true"></i>&nbsp;Light Blue</span>
70-
<ng-template #elseBlock><i class="fa-solid fa-circle-o" aria-hidden="true"></i></ng-template>
71-
</button>
72-
<button mat-menu-item (click)="setTheme('signalk-light')">
73-
<span><i *ngIf="themeName == 'signalk-light' else elseBlock" class="fa-solid fa-circle" aria-hidden="true"></i>&nbsp;Signal K</span>
74-
<ng-template #elseBlock><i class="fa-solid fa-circle-o" aria-hidden="true"></i></ng-template>
75-
</button>
76-
<button mat-menu-item (click)="setTheme('high-contrast-light')">
77-
<span><i *ngIf="themeName == 'high-contrast-light' else elseBlock" class="fa-solid fa-circle" aria-hidden="true"></i>&nbsp;High Contrast</span>
78-
<ng-template #elseBlock><i class="fa-solid fa-circle-o" aria-hidden="true"></i></ng-template>
79-
</button>
80-
<button mat-menu-item (click)="setTheme('platypus-light')">
81-
<span><i *ngIf="themeName == 'platypus-light' else elseBlock" class="fa-solid fa-circle" aria-hidden="true"></i>&nbsp;Platypus</span>
82-
<ng-template #elseBlock><i class="fa-solid fa-circle-o" aria-hidden="true"></i></ng-template>
83-
</button>
84-
<button mat-menu-item (click)="setTheme('darkBlue-dark')">
85-
<span><i *ngIf="themeName == 'darkBlue-dark' else elseBlock" class="fa-solid fa-circle" aria-hidden="true"></i>&nbsp;Dark Blue</span>
86-
<ng-template #elseBlock><i class="fa-solid fa-circle-o" aria-hidden="true"></i></ng-template>
87-
</button>
88-
<button mat-menu-item (click)="setTheme('modern-dark')">
89-
<span><i *ngIf="themeName == 'modern-dark' else elseBlock" class="fa-solid fa-circle" aria-hidden="true"></i>&nbsp;Modern Dark</span>
90-
<ng-template #elseBlock><i class="fa-solid fa-circle-o" aria-hidden="true"></i></ng-template>
91-
</button>
92-
</mat-menu>

src/app/app.component.ts

-4
Original file line numberDiff line numberDiff line change
@@ -182,10 +182,6 @@ export class AppComponent implements OnInit, OnDestroy {
182182
}
183183
}
184184

185-
setTheme(theme: string) {
186-
this.appSettingsService.setThemeName(theme);
187-
}
188-
189185
setNightMode(nightMode: boolean) {
190186
this.isNightMode = nightMode;
191187
if (this.isNightMode) {

src/app/settings/general/general.component.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<div class="mat-typography">
22
<form #general="ngForm" name="GeneraSetting">
3-
<h2>Night Vision</h2>
4-
<mat-checkbox [(ngModel)]="autoNightModeConfig" [ngModelOptions]="{standalone: false}" name="autoNightMode" (change)="isAutoNightPathSupported($event)">Automatically change between Day and Night display modes based on sun phases</mat-checkbox>
5-
<br/><br/>
3+
<h2>Display Modes</h2>
4+
<mat-checkbox class="full-width" [(ngModel)]="autoNightModeConfig" [ngModelOptions]="{standalone: false}" name="autoNightMode" (change)="isAutoNightPathSupported($event)">Automatically change between Day and Night Modes based on sun phases preserving your night vision</mat-checkbox>
5+
<mat-checkbox class="full-width" [(ngModel)]="enableHighContrast" [ngModelOptions]="{standalone: false}" name="enableHighContrast" (change)="setTheme($event)">Enable full sunlight High Contrast, black and white display</mat-checkbox>
66
<h2>Notifications</h2>
77
<p class="mat-card-subtitle">Notifications are a special type of data sent from Signal K and displayed in the
88
notification menu. They are meant to alert or inform operators. Set server

src/app/settings/general/general.component.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { MatButton } from '@angular/material/button';
77
import { MatDivider } from '@angular/material/divider';
88
import { MatAccordion, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription } from '@angular/material/expansion';
99
import { MatSlideToggle } from '@angular/material/slide-toggle';
10-
import { MatCheckbox } from '@angular/material/checkbox';
10+
import { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox';
1111
import { FormsModule } from '@angular/forms';
1212

1313

@@ -33,6 +33,7 @@ export class SettingsGeneralComponent implements OnInit {
3333

3434
public notificationConfig: INotificationConfig;
3535
public autoNightModeConfig: boolean;
36+
public enableHighContrast: boolean = null;
3637

3738
constructor(
3839
private notifications: NotificationsService,
@@ -43,13 +44,16 @@ export class SettingsGeneralComponent implements OnInit {
4344
ngOnInit() {
4445
this.notificationConfig = this.settings.getNotificationConfig();
4546
this.autoNightModeConfig = this.app.autoNightMode;
47+
this.enableHighContrast = (this.settings.getThemeName() == "high-contrast") ? true : false;
4648
}
4749

4850
public saveAllSettings():void {
4951
try {
5052
this.saveNotificationsSettings();
5153
this.saveAutoNightMode();
5254
this.notifications.sendSnackbarNotification("General settings saved", 5000, false);
55+
this.enableHighContrast ? this.settings.setThemeName("high-contrast") : this.settings.setThemeName("modernDark")
56+
5357
} catch (error) {
5458
this.notifications.sendSnackbarNotification("Error saving settings: " + error, 5000, false);
5559
}
@@ -71,4 +75,8 @@ export class SettingsGeneralComponent implements OnInit {
7175
}
7276
}
7377
}
78+
79+
setTheme(e: MatCheckboxChange) {
80+
this.enableHighContrast = e.checked;
81+
}
7482
}

src/styles.scss

+14-40
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,9 @@
44
// For customizations see https://material.angular.io/guide/theming-your-components
55

66
//Import themes
7-
// @import 'themes/defaultTheme.scss';
8-
// @import 'themes/signalkTheme.scss';
9-
// @import 'themes/platypusTheme.scss';
10-
// @import 'themes/highContrastTheme.scss';
11-
// @import 'themes/darkBlueTheme.scss';
127
@import 'themes/modernTheme.scss';
138
@import 'themes/nightMode.scss';
9+
@import 'themes/highContrastTheme.scss';
1410

1511
// Include the common all common Materiel styles.
1612

@@ -58,25 +54,10 @@
5854
@include theme-kip-components($nightMode);
5955
}
6056

61-
// .signalk-light {
62-
// @include theme-components($signalKTheme-light);
63-
// }
64-
65-
// .high-contrast-light {
66-
// @include theme-components($highContrast-light);
67-
// }
68-
69-
// .platypus-light {
70-
// @include theme-components($platypusTheme-light);
71-
// }
72-
73-
// .darkBlue-dark {
74-
// @include theme-components($darkBlueTheme-dark);
75-
// }
76-
77-
// .modern-dark {
78-
// @include mat.all-component-themes($modernTheme-dark);
79-
// }
57+
.high-contrast {
58+
@include mat.all-component-colors($highContrast);
59+
@include theme-kip-components($highContrast);
60+
}
8061

8162
/* You can add global styles to this file, and also import other style files */
8263
html,
@@ -95,27 +76,20 @@ body {
9576
border-left: 5px solid #42A948; /* green */
9677
}
9778

98-
.ng-invalid:not(form) {
99-
border-left: 5px solid #a94442; /* red */
100-
}
101-
102-
79+
.ng-invalid:not(form) {
80+
border-left: 5px solid #a94442; /* red */
81+
}
10382

10483
.verticalCenter {
105-
position: relative;
106-
top: 50%;
107-
transform: translateY(-50%);
84+
position: relative;
85+
top: 50%;
86+
transform: translateY(-50%);
10887
}
10988

110-
11189
.flexContainer {
112-
113-
display: flex;
114-
/*flex-direction: column; */
115-
align-items: stretch;
116-
117-
height: 100%;
118-
90+
display: flex;
91+
align-items: stretch;
92+
height: 100%;
11993
}
12094

12195
.flowRow {

src/themes/darkBlueTheme.scss

-128
This file was deleted.

src/themes/defaultTheme.scss

-60
This file was deleted.

0 commit comments

Comments
 (0)