title = 'Pmw.MessageBar demonstration'

# Import Pmw from this directory tree.
import sys
sys.path[:0] = ['../../..']

import Tkinter
import Pmw

class Demo:
    def __init__(self, parent):
	# Create and pack the MessageBar.
	self._messagebar = Pmw.MessageBar(parent,
		entry_width = 40,
		entry_relief='groove',
		labelpos = 'w',
		label_text = 'Status:')
	self._messagebar.pack(side = 'bottom', fill = 'x',
		expand = 1, padx = 10, pady = 10)

	# Create and pack the ScrolledListBox to change the MessageBar.
	self.box = Pmw.ScrolledListBox(parent,
		listbox_selectmode='single',
		items=('state', 'help', 'userevent', 'systemevent',
			'usererror', 'systemerror', 'busy',),
		label_text='Message type',
		labelpos='n',
		selectioncommand=self.selectionCommand)
	self.box.pack(fill = 'both', expand = 'yes', padx = 10, pady = 10)

	self._index = 0
	self._stateCounter = 0

    def selectionCommand(self):
	sels = self.box.getcurselection()
	if len(sels) > 0:
	    self._index = self._index + 1
	    messagetype = sels[0]
	    if messagetype == 'state':
		self._stateCounter = (self._stateCounter + 1) % 3
		text = stateMessages[self._stateCounter]
		if text != '':
		    text = text + ' (' + messagetype + ')'
		self._messagebar.message('state', text)
	    else:
		text = messages[messagetype]
		text = text + ' (' + messagetype + ')'
		self._messagebar.message(messagetype, text)
		if messagetype == 'busy':
		    Pmw.showbusycursor()
		    self.box.after(2000)
		    Pmw.hidebusycursor()
		    self._messagebar.resetmessages('busy')
		    text = 'All files successfully removed'
		    text = text + ' (userevent)'
		    self._messagebar.message('userevent', text)


messages = {
    'help': 'Save current file',
    'userevent': 'Saving file "foo"',
    'busy': 'Busy deleting all files from file system ...',
    'systemevent': 'File "foo" saved',
    'usererror': 'Invalid file name "foo/bar"',
    'systemerror': 'Failed to save file: file system full',
}

stateMessages = {
    0: '',
    1: 'Database is down',
    2: 'Waiting for reply from database',
}

######################################################################

# Create demo in root window for testing.
if __name__ == '__main__':
    root = Tkinter.Tk()
    Pmw.initialise(root)
    root.title(title)

    exitButton = Tkinter.Button(root, text = 'Exit', command = root.destroy)
    exitButton.pack(side = 'bottom')
    widget = Demo(root)
    root.mainloop()
