Skip to content

Commit

Permalink
Robustify and simplify View.has_finished() logic
Browse files Browse the repository at this point in the history
  • Loading branch information
mattpap committed Apr 4, 2024
1 parent ca55dcb commit 1c53845
Show file tree
Hide file tree
Showing 16 changed files with 40 additions and 145 deletions.
32 changes: 23 additions & 9 deletions bokehjs/src/lib/core/view.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,30 @@ export class View implements ISignalable {

public *children(): IterViews {}

protected _has_finished: boolean
protected _has_finished: boolean = false

mark_finished(): void {
mark_finished(recursive: boolean = true): void {
this._has_finished = true

if (recursive) {
for (const child of this.children()) {
child.mark_finished(recursive)
}
}
}

has_finished(): boolean {
if (!this._has_finished) {
return false
}

for (const child of this.children()) {
if (!child.has_finished()) {
return false
}
}

return true
}

/** @internal */
Expand Down Expand Up @@ -90,9 +110,7 @@ export class View implements ISignalable {
}
}

initialize(): void {
this._has_finished = false
}
initialize(): void {}

async lazy_initialize(): Promise<void> {}

Expand Down Expand Up @@ -120,10 +138,6 @@ export class View implements ISignalable {
return this.parent == null
}

has_finished(): boolean {
return this._has_finished
}

get is_idle(): boolean {
return this.has_finished()
}
Expand Down
12 changes: 0 additions & 12 deletions bokehjs/src/lib/models/annotations/text_annotation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,18 +65,6 @@ export abstract class TextAnnotationView extends AnnotationView {
super.remove()
}

override has_finished(): boolean {
if (!super.has_finished()) {
return false
}

if (!this._text_view.has_finished()) {
return false
}

return true
}

override get displayed(): boolean {
return super.displayed && this._text_view.model.text != "" && this.visuals.text.doit
}
Expand Down
4 changes: 0 additions & 4 deletions bokehjs/src/lib/models/annotations/toolbar_panel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,6 @@ export class ToolbarPanelView extends AnnotationView {
this.layout = new SideLayout(this.panel, () => this.get_size(), true)
}

override has_finished(): boolean {
return super.has_finished() && this.toolbar_view.has_finished()
}

override *children(): IterViews {
yield* super.children()
yield this.toolbar_view
Expand Down
20 changes: 0 additions & 20 deletions bokehjs/src/lib/models/axes/axis.ts
Original file line number Diff line number Diff line change
Expand Up @@ -728,26 +728,6 @@ export class AxisView extends GuideRendererView {

super.remove()
}

override has_finished(): boolean {
if (!super.has_finished()) {
return false
}

if (this._axis_label_view != null) {
if (!this._axis_label_view.has_finished()) {
return false
}
}

for (const label_view of this._major_label_views.values()) {
if (!label_view.has_finished()) {
return false
}
}

return true
}
}

export namespace Axis {
Expand Down
5 changes: 1 addition & 4 deletions bokehjs/src/lib/models/glyphs/glyph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ export abstract class GlyphView extends View {
override initialize(): void {
super.initialize()
this.visuals = new visuals.Visuals(this)
this._has_finished = true
}

readonly decorations: ViewStorage<Decoration> = new Map()
Expand Down Expand Up @@ -127,10 +128,6 @@ export abstract class GlyphView extends View {

protected abstract _render(ctx: Context2d, indices: number[], data?: Glyph.Data): void

override has_finished(): boolean {
return true
}

override notify_finished(): void {
this.renderer.notify_finished()
}
Expand Down
14 changes: 0 additions & 14 deletions bokehjs/src/lib/models/glyphs/math_text_glyph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,6 @@ export abstract class MathTextGlyphView extends TextView {
yield* this._label_views.values()
}

override has_finished(): boolean {
if (!super.has_finished()) {
return false
}

for (const view of this._label_views.values()) {
if (!view.has_finished()) {
return false
}
}

return true
}

protected abstract _build_label(text: string): BaseText

protected override async _build_labels(): Promise<void> {
Expand Down
16 changes: 1 addition & 15 deletions bokehjs/src/lib/models/layouts/layout_dom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -509,21 +509,7 @@ export abstract class LayoutDOMView extends PaneView {
}

override has_finished(): boolean {
if (!super.has_finished()) {
return false
}

if (this.is_layout_root && !this._layout_computed) {
return false
}

for (const child_view of this.child_views) {
if (!child_view.has_finished()) {
return false
}
}

return true
return super.has_finished() && (!this.is_layout_root || this._layout_computed)
}

override box_sizing(): DOMBoxSizing {
Expand Down
16 changes: 0 additions & 16 deletions bokehjs/src/lib/models/plots/plot_canvas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -829,22 +829,6 @@ export class PlotView extends LayoutDOMView implements Renderable {
this.on_change(hold_render, () => this._hold_render_changed())
}

override has_finished(): boolean {
if (!super.has_finished()) {
return false
}

if (this.model.visible) {
for (const [, renderer_view] of this.renderer_views) {
if (!renderer_view.has_finished()) {
return false
}
}
}

return true
}

override _after_layout(): void {
super._after_layout()
this.unpause(true)
Expand Down
20 changes: 0 additions & 20 deletions bokehjs/src/lib/models/renderers/composite_renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,26 +107,6 @@ export abstract class CompositeRendererView extends RendererView {
}
}

override has_finished(): boolean {
if (!super.has_finished()) {
return false
}

for (const renderer_view of this.renderer_views) {
if (!renderer_view.has_finished()) {
return false
}
}

for (const element_view of this.element_views) {
if (!element_view.has_finished()) {
return false
}
}

return true
}

override serializable_state(): SerializableState {
const {children, ...state} = super.serializable_state()
return {
Expand Down
1 change: 1 addition & 0 deletions bokehjs/src/lib/models/sources/cds_view.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export class CDSViewView extends View {
override initialize(): void {
super.initialize()
this.compute_indices()
this._has_finished = true
}

override connect_signals(): void {
Expand Down
4 changes: 2 additions & 2 deletions bokehjs/src/lib/models/tiles/tile_renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ export class TileRendererView extends RendererView {
protected render_timer?: number
protected prefetch_timer?: number

override mark_finished(): void {
super.mark_finished()
override mark_finished(recursive?: boolean): void {
super.mark_finished(recursive)
this._tiles = []
}

Expand Down
5 changes: 5 additions & 0 deletions bokehjs/src/lib/models/tools/tool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ export type EventRole = EventType | "multi"
export abstract class ToolView extends View {
declare model: Tool

override initialize(): void {
super.initialize()
this._has_finished = true
}

override connect_signals(): void {
super.connect_signals()
this.connect(this.model.properties.active.change, () => {
Expand Down
14 changes: 0 additions & 14 deletions bokehjs/src/lib/models/tools/toolbar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,6 @@ export class ToolbarView extends UIElementView {
yield* this._tool_button_views.values()
}

override has_finished(): boolean {
if (!super.has_finished()) {
return false
}

for (const child_view of this._tool_button_views.values()) {
if (!child_view.has_finished()) {
return false
}
}

return true
}

override initialize(): void {
super.initialize()

Expand Down
5 changes: 5 additions & 0 deletions bokehjs/src/lib/models/ui/dialog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ export class DialogView extends UIElementView {

this._title = await build_view(title, {parent: this})
this._content = await build_view(content, {parent: this})

if (!this.model.visible) {
this.mark_finished()
}
}

override connect_signals(): void {
Expand Down Expand Up @@ -541,6 +545,7 @@ export class DialogView extends UIElementView {
if (show) {
if (!this._has_rendered) {
this.render()
this.after_render()
}
if (!this.el.isConnected) {
_stacking_order.push(this)
Expand Down
14 changes: 0 additions & 14 deletions bokehjs/src/lib/models/ui/pane.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,20 +81,6 @@ export class PaneView extends UIElementView {
}
}

override has_finished(): boolean {
if (!super.has_finished()) {
return false
}

for (const element_view of this.element_views) {
if (!element_view.has_finished()) {
return false
}
}

return true
}

override serializable_state(): SerializableState {
const {children, ...state} = super.serializable_state()
return {
Expand Down
3 changes: 2 additions & 1 deletion bokehjs/src/lib/models/ui/ui_element.ts
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,8 @@ export abstract class UIElementView extends DOMComponentView {

// If not displayed, then after_resize() will not be called.
if (!this.is_displayed) {
this.finish()
this.mark_finished()
this.notify_finished()
}
}

Expand Down

0 comments on commit 1c53845

Please sign in to comment.