"""
The ``ui.Hyperlink`` class acts as an "internal" hyperlink to a particular
state of the application.  These states are stored in the application's
history, allowing for the use of the Back and Next buttons in the browser to
move between application states.

The ``ui.Hyperlink`` class only makes sense in an application which keeps track
of state using the ``History`` module.  When the user clicks on a hyperlink,
the application changes state by calling ``History.newItem(newState)``.  The
application then uses a history listener function to respond to the change in
state in whatever way makes sense.
"""
from pyjamas.ui.SimplePanel import SimplePanel
from pyjamas.ui.VerticalPanel import VerticalPanel
from pyjamas.ui.HorizontalPanel import HorizontalPanel
from pyjamas.ui.Hyperlink import Hyperlink
from pyjamas.ui.Label import Label
from pyjamas import History


class HyperlinkDemo(SimplePanel):
    def __init__(self):
        SimplePanel.__init__(self)

        History.addHistoryListener(self)

        vPanel = VerticalPanel()

        self.stateDisplay = Label()
        vPanel.add(self.stateDisplay)

        hPanel = HorizontalPanel(Spacing=5)
        hPanel.add(Hyperlink("State 1", False, TargetHistoryToken="state number 1"))
        hPanel.add(Hyperlink("State 2", False, TargetHistoryToken="state number 2"))

        vPanel.add(hPanel)
        self.add(vPanel)

    def onHistoryChanged(self, state):
        self.stateDisplay.setText(state)

