blob: b01229323038b3357fbe1622afe1a32ae7a058e0 [file] [log] [blame]
Jan Scheffler8ce0cbb2021-04-05 20:34:371// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Tim van der Lippe877f04a2021-07-23 11:02:545import type {TabbedPane} from './TabbedPane.js';
6import type {ToolbarItem, ToolbarMenuButton} from './Toolbar.js';
Jan Scheffler8ce0cbb2021-04-05 20:34:377import {ViewManager} from './ViewManager.js';
Jack Franklina75ae7c2021-05-11 13:22:548import type {Widget} from './Widget.js';
Tim van der Lippec2cbf322021-07-26 14:35:339import {VBox} from './Widget.js';
Jan Scheffler8ce0cbb2021-04-05 20:34:3710export interface View {
11 viewId(): string;
12
13 title(): string;
14
15 isCloseable(): boolean;
16
Alex Rudenkoec400262021-10-05 06:03:0817 isPreviewFeature(): boolean;
18
Jan Scheffler8ce0cbb2021-04-05 20:34:3719 isTransient(): boolean;
20
21 toolbarItems(): Promise<ToolbarItem[]>;
22
23 widget(): Promise<Widget>;
24
25 disposeView(): void|Promise<void>;
26}
27
28export class SimpleView extends VBox implements View {
Jan Scheffler01eab3c2021-08-16 17:18:0729 private readonly titleInternal: string;
Simon Zünd140d8122022-03-30 10:12:5630 readonly #viewId: string;
31
32 constructor(title: string, isWebComponent?: boolean, viewId?: string) {
Jan Scheffler8ce0cbb2021-04-05 20:34:3733 super(isWebComponent);
Jan Scheffler01eab3c2021-08-16 17:18:0734 this.titleInternal = title;
Simon Zünd140d8122022-03-30 10:12:5635 this.#viewId = viewId ?? title;
Jan Scheffler8ce0cbb2021-04-05 20:34:3736 }
37
38 viewId(): string {
Simon Zünd140d8122022-03-30 10:12:5639 return this.#viewId;
Jan Scheffler8ce0cbb2021-04-05 20:34:3740 }
41
42 title(): string {
Jan Scheffler01eab3c2021-08-16 17:18:0743 return this.titleInternal;
Jan Scheffler8ce0cbb2021-04-05 20:34:3744 }
45
46 isCloseable(): boolean {
47 return false;
48 }
49
50 isTransient(): boolean {
51 return false;
52 }
53
54 toolbarItems(): Promise<ToolbarItem[]> {
55 return Promise.resolve([]);
56 }
57
58 widget(): Promise<Widget> {
59 return (Promise.resolve(this) as Promise<Widget>);
60 }
61
62 revealView(): Promise<void> {
63 return ViewManager.instance().revealView(this);
64 }
65
66 disposeView(): void {
67 }
Alex Rudenkoec400262021-10-05 06:03:0868
69 isPreviewFeature(): boolean {
70 return false;
71 }
Jan Scheffler8ce0cbb2021-04-05 20:34:3772}
73
74export interface ViewLocation {
75 appendApplicableItems(locationName: string): void;
76 appendView(view: View, insertBefore?: View|null): void;
77 showView(view: View, insertBefore?: View|null, userGesture?: boolean): Promise<void>;
78 removeView(view: View): void;
79 widget(): Widget;
80}
81
82export interface TabbedViewLocation extends ViewLocation {
83 tabbedPane(): TabbedPane;
84 enableMoreTabsButton(): ToolbarMenuButton;
85}
86
87export interface ViewLocationResolver {
88 resolveLocation(location: string): ViewLocation|null;
89}