blob: ef4d83b1c13f99ac17f68da0a3059a3c24be1e5b [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;
Jan Scheffler8ce0cbb2021-04-05 20:34:3730 constructor(title: string, isWebComponent?: boolean) {
31 super(isWebComponent);
Jan Scheffler01eab3c2021-08-16 17:18:0732 this.titleInternal = title;
Jan Scheffler8ce0cbb2021-04-05 20:34:3733 }
34
35 viewId(): string {
Jan Scheffler01eab3c2021-08-16 17:18:0736 return this.titleInternal;
Jan Scheffler8ce0cbb2021-04-05 20:34:3737 }
38
39 title(): string {
Jan Scheffler01eab3c2021-08-16 17:18:0740 return this.titleInternal;
Jan Scheffler8ce0cbb2021-04-05 20:34:3741 }
42
43 isCloseable(): boolean {
44 return false;
45 }
46
47 isTransient(): boolean {
48 return false;
49 }
50
51 toolbarItems(): Promise<ToolbarItem[]> {
52 return Promise.resolve([]);
53 }
54
55 widget(): Promise<Widget> {
56 return (Promise.resolve(this) as Promise<Widget>);
57 }
58
59 revealView(): Promise<void> {
60 return ViewManager.instance().revealView(this);
61 }
62
63 disposeView(): void {
64 }
Alex Rudenkoec400262021-10-05 06:03:0865
66 isPreviewFeature(): boolean {
67 return false;
68 }
Jan Scheffler8ce0cbb2021-04-05 20:34:3769}
70
71export interface ViewLocation {
72 appendApplicableItems(locationName: string): void;
73 appendView(view: View, insertBefore?: View|null): void;
74 showView(view: View, insertBefore?: View|null, userGesture?: boolean): Promise<void>;
75 removeView(view: View): void;
76 widget(): Widget;
77}
78
79export interface TabbedViewLocation extends ViewLocation {
80 tabbedPane(): TabbedPane;
81 enableMoreTabsButton(): ToolbarMenuButton;
82}
83
84export interface ViewLocationResolver {
85 resolveLocation(location: string): ViewLocation|null;
86}