#!/usr/bin/env python

from __future__ import print_function

from bokeh.browserlib import view
from bokeh.document import Document
from bokeh.session import Session

from bokeh.models import (
    Plot, ColumnDataSource, DataRange1d, FactorRange,
    LinearAxis, CategoricalAxis, Grid, Legend,
    SingleIntervalTicker
)

from bokeh.models.widgets import (
    VBox, HBox,
    Paragraph, Icon,
    Button, Toggle, Dropdown,
    CheckboxGroup, RadioGroup,
    CheckboxButtonGroup, RadioButtonGroup,
)

from bokeh.models.renderers import (
    GlyphRenderer
)

from bokeh.plotting import *

document = Document()
session = Session()
session.use_doc('buttons_server')
session.load_document(document)


source = ColumnDataSource(data=dict(x=[], y=[]))

def checkbox_group_handler(active):

    for i,renderer in enumerate(plot.select(dict(type=GlyphRenderer))):
        renderer.glyph.update(line_alpha=float(i in active))

    session.store_document(document)
    
checkbox_group = CheckboxGroup(labels=["Line 1", "Line 2", "Line 3"],
                               active=[])

checkbox_group.on_click(checkbox_group_handler)

x = [0, 1, 2, 3, 4, 5,  6,  7, 8,   9, 10]
y = [0, 8, 2, 4, 6, 9, 15, 18, 19, 25, 28]
z = [c+1 for c in y]
a = [c+2 for c in y]

source1 = ColumnDataSource(data=dict(x=x, y=y))
source2 = ColumnDataSource(data=dict(x=x, y=z))
source3 = ColumnDataSource(data=dict(x=x, y=a))

x_min = 0
x_max = 10
y_min = 0
y_max = 35

plot = figure(x_range=[x_min, x_max],
              y_range=[y_min, y_max],
              outline_line_color="green",title="Check-Box Chart")


for s in [source1,source2,source3]:
    plot.line("x", "y", source=s,line_color="blue",alpha=0.0)

session.load_document(document)

hbox = HBox(children=[plot,  checkbox_group])

document.add(hbox)

session.store_document(document)

if __name__ == "__main__":
    
    link = session.object_link(document.context)
    print("Please visit %s to see the plots" % link)
    view(link)
    print("\npress ctrl-C to exit")
    session.poll_document(document)
