Files
Phoenix/demo/RearrangeDialog.py
2017-06-07 20:33:49 -07:00

161 lines
5.4 KiB
Python

#!/usr/bin/env python
import random
import wx
globalItems = ['New', 'Open', 'Save', 'Save As...', 'Cut', 'Copy', 'Paste',
'Delete', 'Select All', 'Find', 'About', 'Help', 'Exit',
'Python is the Best!']
random.shuffle(globalItems)
globalOrder = []
length = len(globalItems)
# print(length)
for num in range(0, length):
globalOrder.append(num)
random.shuffle(globalOrder)
# print(len(globalOrder))
randomShuffleCheckedOnce = True
globalCheckedStrings = []
class MyRearrangeDialog(wx.RearrangeDialog):
def __init__(self, parent, message, title, order, items, log):
wx.RearrangeDialog.__init__(self, parent, message, title, order, items)
self.log = log
panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.HORIZONTAL)
self.lc = self.GetList()
sizer.Add(wx.StaticText(panel, wx.ID_ANY,
"Number of checked boxes:"))
self.lenItems = len(items)
self.tc = wx.TextCtrl(panel, wx.ID_ANY, "%s" % self.lenItems,
style=wx.TE_READONLY)
self.lc.Bind(wx.EVT_CHECKLISTBOX, self.OnCheck)
self.lc.Bind(wx.EVT_LISTBOX, self.OnListBox)
self.lc.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
sizer.Add(self.tc)
panel.SetSizer(sizer)
self.AddExtraControls(panel)
global randomShuffleCheckedOnce
global globalCheckedStrings
if randomShuffleCheckedOnce:
globalCheckedStrings = []
for i in range(0, self.lenItems):
bool = random.randint(0, 1)
# print(bool)
if bool:
self.lc.Check(item=i, check=False)
globalCheckedStrings.append(0)
else:
globalCheckedStrings.append(1)
randomShuffleCheckedOnce = False
else:
for i in range(0, self.lenItems):
if globalCheckedStrings[i]:
self.lc.Check(item=i, check=True)
else:
self.lc.Check(item=i, check=False)
self.checkedItems = self.lc.GetCheckedItems()
self.checkedStrings = self.lc.GetCheckedStrings()
#Update the TextCtrl
self.tc.SetValue("%s" % len(self.checkedItems))
def OnListBox(self, event):
self.log.write('You Selected %s\n' % (self.lc.GetString(event.GetSelection())))
def OnCheck(self, event):
self.log.write('You Checked %s %s\n' % (self.lc.GetString(event.GetSelection()),
self.lc.IsChecked(event.GetSelection())))
#Update the TextCtrl
self.checkedItems = self.lc.GetCheckedItems()
self.tc.SetValue("%s" % len(self.checkedItems))
def OnUnCheckOrCheckAll(self, event):
doWhat = str(event.GetId()).endswith('1')
# print('doWhat', doWhat)
for i in range(0, self.lenItems):
if doWhat:
self.lc.Check(i, True)
else:
self.lc.Check(i, False)
self.checkedItems = self.lc.GetCheckedItems()
self.tc.SetValue("%s" % len(self.checkedItems))
def OnContextMenu(self, event):
menu = wx.Menu()
ID_UNCHECKALL = 1000
ID_CHECKALL = 1001
mi1 = wx.MenuItem(menu, ID_UNCHECKALL, 'UnCheck All', 'UnCheck All')
mi2 = wx.MenuItem(menu, ID_CHECKALL, 'Check All', 'Check All')
menu.Append(mi1)
menu.Append(mi2)
menu.Bind(wx.EVT_MENU, self.OnUnCheckOrCheckAll, id=ID_UNCHECKALL)
menu.Bind(wx.EVT_MENU, self.OnUnCheckOrCheckAll, id=ID_CHECKALL)
self.PopupMenu(menu)
menu.Destroy()
#---------------------------------------------------------------------------
class TestPanel(wx.Panel):
def __init__(self, parent, log):
self.log = log
wx.Panel.__init__(self, parent, -1)
b = wx.Button(self, -1, "Create and Show a RearrangeDialog", (50, 50))
self.Bind(wx.EVT_BUTTON, self.OnButton, b)
def OnButton(self, evt):
global globalOrder
global globalItems
global globalCheckedStrings
rd = MyRearrangeDialog(self, message="Rearrangeify Stuff!",
title="This is a wx.RearrangeDialog",
order=globalOrder, items=globalItems, log=self.log)
if rd.ShowModal() == wx.ID_OK:
# print('GetOrder: ', rd.GetOrder())
globalOrder = list(range(rd.lenItems))
globalItems = []
globalCheckedStrings = []
for i in range(0, rd.lenItems):
# print(rd.lc.GetString(i))
globalItems.append(rd.lc.GetString(i))
# print(rd.lc.IsChecked(i))
if rd.lc.IsChecked(i):
globalCheckedStrings.append(1)
else:
globalCheckedStrings.append(0)
#---------------------------------------------------------------------------
def runTest(frame, nb, log):
win = TestPanel(nb, log)
return win
#---------------------------------------------------------------------------
overview = """\
A RearrangeDialog is a dialog that allows the user to rearrange
the specified items.
This dialog can be used to allow the user to modify the order
of the items and to enable or disable them individually.
"""
if __name__ == '__main__':
import sys
import os
import run
run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])