aboutsummaryrefslogtreecommitdiff
path: root/dumblogger/utilities/confignetwork.py
diff options
context:
space:
mode:
Diffstat (limited to 'dumblogger/utilities/confignetwork.py')
-rw-r--r--dumblogger/utilities/confignetwork.py306
1 files changed, 306 insertions, 0 deletions
diff --git a/dumblogger/utilities/confignetwork.py b/dumblogger/utilities/confignetwork.py
new file mode 100644
index 0000000..3123ab2
--- /dev/null
+++ b/dumblogger/utilities/confignetwork.py
@@ -0,0 +1,306 @@
+import wx
+import wx.lib.buttons as buttons
+
+import os
+import sys
+
+try:
+ dirName = os.path.dirname(os.path.abspath(__file__))
+except:
+ dirName = os.path.dirname(os.path.abspath(sys.argv[0]))
+
+sys.path.append(os.path.split(dirName)[0])
+
+try:
+ from agw import pycollapsiblepane as PCP
+except ImportError: # if it's not there locally, try the wxPython lib.
+ import wx.lib.agw.pycollapsiblepane as PCP
+
+import images
+
+btnlbl1 = "call Expand(True)"
+btnlbl2 = "call Expand(False)"
+
+choices = ["wx.Button",
+ "GenButton",
+ "GenBitmapButton",
+ "GenBitmapTextButton",
+ "ThemedGenButton",
+ "ThemedGenBitmapTextButton"]
+
+gtkChoices = ["3, 6",
+ "4, 8",
+ "5, 10"]
+
+styles = ["CP_NO_TLW_RESIZE",
+ "CP_LINE_ABOVE",
+ "CP_USE_STATICBOX",
+ "CP_GTK_EXPANDER"]
+
+
+class PyCollapsiblePaneDemo(wx.Panel):
+
+ def __init__(self, parent, log):
+
+ wx.Panel.__init__(self, parent)
+
+ self.log = log
+
+ self.label1 = "Click here to show pane"
+ self.label2 = "Click here to hide pane"
+
+ title = wx.StaticText(self, label="PyCollapsiblePane")
+ title.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD))
+ title.SetForegroundColour("blue")
+
+ self.cpStyle = wx.CP_NO_TLW_RESIZE
+ self.cp = cp = PCP.PyCollapsiblePane(self, label=self.label1,
+ agwStyle=self.cpStyle)
+ self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged, cp)
+ self.MakePaneContent(cp.GetPane())
+
+ self.btnRB = radioBox = wx.RadioBox(self, -1, "Button Types",
+ choices=choices, style=wx.RA_SPECIFY_ROWS)
+ self.static1 = wx.StaticText(self, -1, "Collapsed Button Text:")
+ self.static2 = wx.StaticText(self, -1, "Expanded Button Text:")
+
+ self.buttonText1 = wx.TextCtrl(self, -1, self.label1)
+ self.buttonText2 = wx.TextCtrl(self, -1, self.label2)
+ self.updateButton = wx.Button(self, -1, "Update!")
+
+ sbox = wx.StaticBox(self, -1, 'Styles')
+ sboxsizer = wx.StaticBoxSizer(sbox, wx.VERTICAL)
+ self.styleCBs = list()
+ for styleName in styles:
+ cb = wx.CheckBox(self, -1, styleName)
+ if styleName == "CP_NO_TLW_RESIZE":
+ cb.SetValue(True)
+ cb.Disable()
+ cb.Bind(wx.EVT_CHECKBOX, self.OnStyleChoice)
+ self.styleCBs.append(cb)
+ sboxsizer.Add(cb, 0, wx.ALL, 4)
+
+ self.gtkText = wx.StaticText(self, -1, "Expander Size")
+ self.gtkChoice = wx.ComboBox(self, -1, choices=gtkChoices)
+ self.gtkChoice.SetSelection(0)
+
+ self.gtkText.Enable(False)
+ self.gtkChoice.Enable(False)
+
+ sizer = wx.BoxSizer(wx.VERTICAL)
+ radioSizer = wx.BoxSizer(wx.HORIZONTAL)
+ dummySizer = wx.BoxSizer(wx.VERTICAL)
+
+ dummySizer.Add(self.gtkText, 0, wx.EXPAND|wx.BOTTOM, 2)
+ dummySizer.Add(self.gtkChoice, 0, wx.EXPAND)
+
+ radioSizer.Add(radioBox, 0, wx.EXPAND)
+ radioSizer.Add(sboxsizer, 0, wx.EXPAND|wx.LEFT, 10)
+ radioSizer.Add(dummySizer, 0, wx.ALIGN_BOTTOM|wx.LEFT, 10)
+
+ self.SetSizer(sizer)
+ sizer.Add((0, 10))
+ sizer.Add(title, 0, wx.LEFT|wx.RIGHT, 25)
+ sizer.Add((0, 10))
+ sizer.Add(radioSizer, 0, wx.LEFT, 25)
+
+ sizer.Add((0, 10))
+ subSizer = wx.FlexGridSizer(2, 3, 5, 5)
+ subSizer.Add(self.static1, 0, wx.LEFT|wx.ALIGN_CENTER_VERTICAL, 5)
+ subSizer.Add(self.buttonText1, 0, wx.EXPAND)
+ subSizer.Add((0, 0))
+ subSizer.Add(self.static2, 0, wx.LEFT|wx.ALIGN_CENTER_VERTICAL, 5)
+ subSizer.Add(self.buttonText2, 0, wx.EXPAND)
+ subSizer.Add(self.updateButton, 0, wx.LEFT|wx.RIGHT, 10)
+
+ subSizer.AddGrowableCol(1)
+
+ sizer.Add(subSizer, 0, wx.EXPAND|wx.LEFT, 20)
+ sizer.Add((0, 15))
+ sizer.Add(cp, 0, wx.RIGHT|wx.LEFT|wx.EXPAND, 20)
+
+ self.btn = wx.Button(self, label=btnlbl1)
+ sizer.Add(self.btn, 0, wx.ALL, 25)
+
+ self.Bind(wx.EVT_BUTTON, self.OnToggle, self.btn)
+ self.Bind(wx.EVT_BUTTON, self.OnUpdate, self.updateButton)
+ self.Bind(wx.EVT_RADIOBOX, self.OnButtonChoice)
+ self.Bind(wx.EVT_COMBOBOX, self.OnUserChoice, self.gtkChoice)
+
+
+ def OnToggle(self, event):
+
+ self.cp.Collapse(self.cp.IsExpanded())
+ self.OnPaneChanged()
+
+
+ def OnUpdate(self, event):
+
+ self.label1 = self.buttonText1.GetValue()
+ self.label2 = self.buttonText2.GetValue()
+
+ self.OnPaneChanged(None)
+
+
+ def OnStyleChoice(self, evt):
+ style = 0
+ for cb in self.styleCBs:
+ if cb.IsChecked():
+ style |= getattr(wx, cb.GetLabel(), 0)
+
+ self.cpStyle = style
+ self.Rebuild()
+
+
+ def OnButtonChoice(self, event):
+
+ #self.gtkText.Enable(selection == 4)
+ #self.gtkChoice.Enable(selection == 4)
+
+ self.Rebuild()
+
+
+ def MakeButton(self):
+
+ if self.cpStyle & wx.CP_GTK_EXPANDER:
+ return None
+
+ selection = self.btnRB.GetSelection()
+
+ if selection == 0: # standard wx.Button
+ btn = wx.Button(self.cp, -1, self.label1)
+ elif selection == 1: # buttons.GenButton
+ btn = buttons.GenButton(self.cp, -1, self.label1)
+ elif selection == 2: # buttons.GenBitmapButton
+ bmp = images.Smiles.GetBitmap()
+ btn = buttons.GenBitmapButton(self.cp, -1, bmp)
+ elif selection == 3: # buttons.GenBitmapTextButton
+ bmp = images.Mondrian.GetBitmap()
+ btn = buttons.GenBitmapTextButton(self.cp, -1, bmp, self.label1)
+ elif selection == 4: # buttons.ThemedGenButton
+ btn = buttons.ThemedGenButton(self.cp, -1, self.label1)
+ elif selection == 5: # buttons.ThemedGenBitmapTextButton
+ bmp = images.Mondrian.GetBitmap()
+ btn = buttons.ThemedGenBitmapTextButton(self.cp, -1, bmp, self.label1)
+
+ return btn
+
+
+ def Rebuild(self):
+
+ isExpanded = self.cp.IsExpanded()
+ self.Freeze()
+ cp = PCP.PyCollapsiblePane(self, label=self.label1, agwStyle=self.cpStyle)
+ cp.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged)
+ self.MakePaneContent(cp.GetPane())
+ cp.SetExpanderDimensions(*self.GetUserSize())
+ self.GetSizer().Replace(self.cp, cp)
+ self.cp.Destroy()
+ self.cp = cp
+
+ btn = self.MakeButton()
+ if btn:
+ self.cp.SetButton(btn)
+ self.gtkText.Enable(btn is None)
+ self.gtkChoice.Enable(btn is None)
+ self.btnRB.Enable(btn is not None)
+
+ if isExpanded:
+ self.cp.Expand()
+ self.Thaw()
+
+ self.OnPaneChanged(None)
+ self.Layout()
+
+
+ def OnPaneChanged(self, event=None):
+
+ if event:
+ self.log.write('wx.EVT_COLLAPSIBLEPANE_CHANGED: %s\n' % event.Collapsed)
+
+ # redo the layout
+ self.Layout()
+
+ # and also change the labels
+ if self.cp.IsExpanded():
+ self.cp.SetLabel(self.label2)
+ self.btn.SetLabel(btnlbl2)
+ else:
+ self.cp.SetLabel(self.label1)
+ self.btn.SetLabel(btnlbl1)
+
+ self.btn.SetInitialSize()
+
+
+ def OnUserChoice(self, event):
+
+ self.cp.SetExpanderDimensions(*self.GetUserSize(event.GetSelection()))
+
+
+ def GetUserSize(self, selection=None):
+
+ if selection is None:
+ selection = self.gtkChoice.GetSelection()
+
+ choice = gtkChoices[selection]
+ width, height = choice.split(",")
+
+ return int(width), int(height)
+
+
+ def MakePaneContent(self, pane):
+ '''Just make a few controls to put on the collapsible pane'''
+
+ nameLbl = wx.StaticText(pane, -1, "SSID:")
+ name = wx.TextCtrl(pane, -1, "");
+
+ addrLbl = wx.StaticText(pane, -1, "PASSWORD:")
+ addr1 = wx.TextCtrl(pane, -1, "");
+ addr2 = wx.TextCtrl(pane, -1, "");
+
+ cstLbl = wx.StaticText(pane, -1, "SITE IP,SITE FEED, HRRM:")
+ city = wx.TextCtrl(pane, -1, "", size=(150,-1));
+ state = wx.TextCtrl(pane, -1, "", size=(50,-1));
+ zip = wx.TextCtrl(pane, -1, "", size=(70,-1));
+
+ addrSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
+ addrSizer.AddGrowableCol(1)
+ addrSizer.Add(nameLbl, 0,
+ wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
+ addrSizer.Add(name, 0, wx.EXPAND)
+ addrSizer.Add(addrLbl, 0,
+ wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
+ addrSizer.Add(addr1, 0, wx.EXPAND)
+ addrSizer.Add((5,5))
+ addrSizer.Add(addr2, 0, wx.EXPAND)
+
+ addrSizer.Add(cstLbl, 0,
+ wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
+
+ cstSizer = wx.BoxSizer(wx.HORIZONTAL)
+ cstSizer.Add(city, 1)
+ cstSizer.Add(state, 0, wx.LEFT|wx.RIGHT, 5)
+ cstSizer.Add(zip)
+ addrSizer.Add(cstSizer, 0, wx.EXPAND)
+
+ border = wx.BoxSizer()
+ border.Add(addrSizer, 1, wx.EXPAND|wx.ALL, 5)
+ pane.SetSizer(border)
+
+
+#----------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+ win = PyCollapsiblePaneDemo(nb, log)
+ return win
+
+#----------------------------------------------------------------------
+
+overview = PCP.__doc__
+
+if __name__ == '__main__':
+ import sys,os
+ import run
+ run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
+
+