Menu
This commit is contained in:
		@@ -1,15 +1,34 @@
 | 
			
		||||
<mat-toolbar>
 | 
			
		||||
<mat-toolbar id="toolbar">
 | 
			
		||||
    <button mat-icon-button routerLink="/">
 | 
			
		||||
        <img src="/assets/images/logo.png" height="35px" width="auto">
 | 
			
		||||
    </button>
 | 
			
		||||
    <small class="ml-1 text-muted">{{version}}</small>
 | 
			
		||||
    <div class="ml-auto">
 | 
			
		||||
        <div *ngFor="let section of menu" class="d-inline ml-4">
 | 
			
		||||
            <ng-container *ngFor="let item of section">
 | 
			
		||||
                <button *ngIf="!item.hidden" mat-icon-button [ngClass]="{'selected': item.enabled}" class="ml-1" (click)="clickWrapper(item)">
 | 
			
		||||
                    <mat-icon>{{item.icon}}</mat-icon>
 | 
			
		||||
                </button>
 | 
			
		||||
        <div *ngFor="let item of menuItems; let i = index" class="d-inline mx-1">
 | 
			
		||||
            <ng-container *ngIf="i <= maxMenuItems">
 | 
			
		||||
                <ng-container *ngTemplateOutlet="menuItem; context: {$implicit: item}"></ng-container>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
        </div>
 | 
			
		||||
        <button *ngIf="menuItems.length > maxMenuItems" mat-icon-button [matMenuTriggerFor]="menu">
 | 
			
		||||
            <mat-icon>menu</mat-icon>
 | 
			
		||||
        </button>
 | 
			
		||||
        <mat-menu #menu="matMenu">
 | 
			
		||||
            <ng-container *ngFor="let item of menuItems; let i = index">
 | 
			
		||||
                <ng-container *ngIf="i > maxMenuItems">
 | 
			
		||||
                    <button mat-menu-item>
 | 
			
		||||
                        <mat-icon>{{item.icon}}</mat-icon>
 | 
			
		||||
                        {{item.name}}
 | 
			
		||||
                    </button>
 | 
			
		||||
                </ng-container>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
        </mat-menu>
 | 
			
		||||
    </div>
 | 
			
		||||
</mat-toolbar>
 | 
			
		||||
 | 
			
		||||
<ng-template #menuItem let-item>
 | 
			
		||||
    <ng-container>
 | 
			
		||||
        <button mat-icon-button [ngClass]="{'selected': item?.enabled}" class="ml-1" (click)="clickWrapper(item)">
 | 
			
		||||
            <mat-icon>{{item?.icon}}</mat-icon>
 | 
			
		||||
        </button>
 | 
			
		||||
    </ng-container>
 | 
			
		||||
</ng-template>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import {Component, EventEmitter, Input, Output} from "@angular/core";
 | 
			
		||||
import {AfterViewInit, Component, EventEmitter, HostListener, Input, Output,} from "@angular/core";
 | 
			
		||||
import {ToolbarItem} from "./toolbarItem";
 | 
			
		||||
import {version} from '../../../../package.json';
 | 
			
		||||
 | 
			
		||||
@@ -7,26 +7,33 @@ import {version} from '../../../../package.json';
 | 
			
		||||
    templateUrl: 'toolbar.component.html',
 | 
			
		||||
    styleUrls: ['toolbar.component.scss']
 | 
			
		||||
})
 | 
			
		||||
export class ToolbarComponent {
 | 
			
		||||
    @Input() menu: ToolbarItem[][];
 | 
			
		||||
export class ToolbarComponent implements AfterViewInit {
 | 
			
		||||
    @Input() menuItems: ToolbarItem[];
 | 
			
		||||
 | 
			
		||||
    @Output() menuChange = new EventEmitter<ToolbarItem[][]>();
 | 
			
		||||
    @Output() menuItemsChange = new EventEmitter<ToolbarItem[]>();
 | 
			
		||||
 | 
			
		||||
    private maxMenuItems;
 | 
			
		||||
 | 
			
		||||
    readonly version = version;
 | 
			
		||||
 | 
			
		||||
    constructor() { }
 | 
			
		||||
 | 
			
		||||
    @HostListener('window:resize', ['$event'])
 | 
			
		||||
    ngAfterViewInit() {
 | 
			
		||||
        setTimeout(() => this.maxMenuItems = Math.floor((document.getElementById('toolbar').offsetWidth - 200) / 75), 1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    clickWrapper(item: ToolbarItem) {
 | 
			
		||||
        if(item.toggle) {
 | 
			
		||||
            if (item.individualToggle) {
 | 
			
		||||
                this.menu.forEach(menu => menu.filter(i2 => item.name != i2.name && i2.individualToggle).forEach(item => {
 | 
			
		||||
                this.menuItems.filter(i2 => item.name != i2.name && i2.individualToggle).forEach(item => {
 | 
			
		||||
                    item.enabled = false;
 | 
			
		||||
                    if (item.onDisabled) item.onDisabled();
 | 
			
		||||
                }));
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            item.enabled = !item.enabled;
 | 
			
		||||
            this.menuChange.emit(this.menu);
 | 
			
		||||
            this.menuItemsChange.emit(this.menuItems);
 | 
			
		||||
 | 
			
		||||
            if(item.enabled) {
 | 
			
		||||
                if(item.onEnabled) item.onEnabled();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
<toolbar [(menu)]="menu"></toolbar>
 | 
			
		||||
<toolbar [(menuItems)]="menu"></toolbar>
 | 
			
		||||
<div id="map"></div>
 | 
			
		||||
<div *ngIf="showPalette" [@flyInRight] [@flyOutRight] class="palette">
 | 
			
		||||
    <palette [(selected)]="drawColor" (selectedChange)="map.drawingColor = $event"></palette>
 | 
			
		||||
 
 | 
			
		||||
@@ -26,21 +26,18 @@ export class MapComponent implements OnInit {
 | 
			
		||||
    showPalette = false;
 | 
			
		||||
    isNaN = isNaN;
 | 
			
		||||
 | 
			
		||||
    menu: ToolbarItem[][] = [[
 | 
			
		||||
        {name: 'compass', icon: 'explore', hidden: true},
 | 
			
		||||
    ], [
 | 
			
		||||
        {name: 'marker', icon: 'room', toggle: true, individualToggle: true, click: () => this.addMarker()},
 | 
			
		||||
        {name: 'draw', icon: 'create', toggle: true, individualToggle: true, onEnabled: () => this.startDrawing(), onDisabled: () => this.endDrawing()},
 | 
			
		||||
        {name: 'measure', icon: 'straighten', toggle: true, individualToggle: true, click: () => this.measure()},
 | 
			
		||||
        {name: 'delete', icon: 'delete', toggle: true, individualToggle: true, onEnabled: () => this.map.deleteMode = true, onDisabled: () => this.map.deleteMode = false},
 | 
			
		||||
        {name: 'style', icon: 'terrain', enabled: true, toggle: true},
 | 
			
		||||
        {name: 'weather', icon: 'cloud', toggle: true},
 | 
			
		||||
        {name: 'compass', icon: 'explore', click: () => this.calibrate()}
 | 
			
		||||
    ], [
 | 
			
		||||
        {name: 'messages', icon: 'chat', hidden: true},
 | 
			
		||||
        {name: 'identity', icon: 'perm_identity', hidden: true},
 | 
			
		||||
        {name: 'settings', icon: 'settings', hidden: true}
 | 
			
		||||
    ]];
 | 
			
		||||
    menu: ToolbarItem[] = [
 | 
			
		||||
        {name: 'Marker', icon: 'room', toggle: true, individualToggle: true, click: () => this.addMarker()},
 | 
			
		||||
        {name: 'Draw', icon: 'create', toggle: true, individualToggle: true, onEnabled: () => this.startDrawing(), onDisabled: () => this.endDrawing()},
 | 
			
		||||
        {name: 'Measure', icon: 'straighten', toggle: true, individualToggle: true, click: () => this.measure()},
 | 
			
		||||
        {name: 'Delete', icon: 'delete', toggle: true, individualToggle: true, onEnabled: () => this.map.deleteMode = true, onDisabled: () => this.map.deleteMode = false},
 | 
			
		||||
        {name: 'Style', icon: 'terrain', enabled: true, toggle: true},
 | 
			
		||||
        {name: 'Weather', icon: 'cloud', toggle: true},
 | 
			
		||||
        {name: 'Calibrate', icon: 'explore', click: () => this.calibrate()},
 | 
			
		||||
        {name: 'Messages', icon: 'chat', hidden: true},
 | 
			
		||||
        {name: 'Identity', icon: 'perm_identity', hidden: true},
 | 
			
		||||
        {name: 'Settings', icon: 'settings', hidden: true}
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    constructor(public physicsService: PhysicsService, private snackBar: MatSnackBar, private bottomSheet: MatBottomSheet) { }
 | 
			
		||||
 | 
			
		||||
@@ -70,7 +67,7 @@ export class MapComponent implements OnInit {
 | 
			
		||||
 | 
			
		||||
    addMarker() {
 | 
			
		||||
        this.map.click.pipe(skip(1), take(1)).subscribe(latlng => {
 | 
			
		||||
            this.menu[1][0].enabled = false;
 | 
			
		||||
            this.menu[0].enabled = false;
 | 
			
		||||
            this.markers.push(latlng);
 | 
			
		||||
            this.map.newMarker(latlng);
 | 
			
		||||
        });
 | 
			
		||||
@@ -86,7 +83,7 @@ export class MapComponent implements OnInit {
 | 
			
		||||
            if(!firstPoint) {
 | 
			
		||||
                firstPoint = this.map.newMarker(latlng);
 | 
			
		||||
            } else {
 | 
			
		||||
                this.menu[1][2].enabled = false;
 | 
			
		||||
                this.menu[3].enabled = false;
 | 
			
		||||
                this.map.newMeasurement(firstPoint.getLatLng(), latlng);
 | 
			
		||||
                this.map.delete(firstPoint);
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user