| /* |
| * Copyright 2018-present Open Networking Foundation |
| * |
| * Licensed under the Apache License, Version 2.0 (the 'License'); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an 'AS IS' BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| import {Component, EventEmitter, Input, Output} from '@angular/core'; |
| import {MapObject} from '../maputils'; |
| import {MapBounds, TopoZoomPrefs, LogService, ZoomUtils} from 'gui2-fw-lib/public_api'; |
| |
| /** |
| * model of the topo2CurrentLayout attrs from BgZoom below |
| */ |
| export interface BgZoomAttrs { |
| offsetX: number; |
| offsetY: number; |
| scale: number; |
| } |
| |
| /** |
| * model of the topo2CurrentLayout background zoom attrs from Layout below |
| */ |
| export interface BgZoom { |
| cfg: BgZoomAttrs; |
| usr?: BgZoomAttrs; |
| } |
| |
| /** |
| * model of the topo2CurrentLayout breadcrumb from Layout below |
| */ |
| export interface LayoutCrumb { |
| id: string; |
| name: string; |
| } |
| |
| /** |
| * Enum of the topo2CurrentRegion location type from Location below |
| */ |
| export enum LocationType { |
| NONE = 'none', |
| GEO = 'geo', |
| GRID = 'grid' |
| } |
| |
| /** |
| * model of the topo2CurrentLayout WebSocket response |
| */ |
| export interface Layout { |
| id: string; |
| bgDefaultScale: number; |
| bgDesc: string; |
| bgFilePath: string; |
| bgId: string; |
| bgType: LocationType; |
| bgWarn: string; |
| bgZoom: BgZoom; |
| crumbs: LayoutCrumb[]; |
| parent: string; |
| region: string; |
| regionName: string; |
| } |
| |
| /** |
| * ONOS GUI -- Topology Background Layer View. |
| * |
| * TODO: consider that this layer has only one component the MapSvg and hence |
| * might be able to be eliminated |
| */ |
| @Component({ |
| selector: '[onos-backgroundsvg]', |
| templateUrl: './backgroundsvg.component.html', |
| styleUrls: ['./backgroundsvg.component.css'] |
| }) |
| export class BackgroundSvgComponent { |
| @Input() map: MapObject; |
| @Output() zoomlevel = new EventEmitter<TopoZoomPrefs>(); |
| |
| layoutData: Layout = <Layout>{}; |
| |
| constructor( |
| private log: LogService |
| ) { |
| this.log.debug('BackgroundSvg constructed'); |
| } |
| |
| /** |
| * Called when ever the mapBounds event is raised by the MapSvgComponent |
| * |
| * @param bounds - the bounds of the newly loaded map in terms of Lat and Long |
| */ |
| updatedBounds(bounds: MapBounds): void { |
| const zoomPrefs: TopoZoomPrefs = |
| ZoomUtils.convertBoundsToZoomLevel(bounds, this.log); |
| |
| this.zoomlevel.emit(zoomPrefs); |
| } |
| |
| } |