Index: scripts/newbitmaps/lib/pixcontrol.py |
diff --git a/scripts/newbitmaps/lib/pixcontrol.py b/scripts/newbitmaps/lib/pixcontrol.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..1f46558e8b6aca65c066d5c38eb26d034967b0d5 |
--- /dev/null |
+++ b/scripts/newbitmaps/lib/pixcontrol.py |
@@ -0,0 +1,102 @@ |
+#!/usr/bin/python -tt |
+# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Edit buttons for bmpblock object""" |
+ |
+import wx |
+ |
+class Frame(wx.Frame): |
+ |
+ def __init__(self, bmpblock=None, title=None): |
+ wx.Frame.__init__(self, None, wx.ID_ANY, title, size=(200,400)) |
+ menuFile = wx.Menu() |
+ m_about = menuFile.Append(wx.ID_ANY, "About...\tCtrl+A") |
+ menuFile.AppendSeparator() |
+ m_reload = menuFile.Append(wx.ID_ANY, "Reload\tCtrl+R") |
+ m_quit = menuFile.Append(wx.ID_ANY, "Quit\tCtrl+Q") |
+ menuBar = wx.MenuBar() |
+ menuBar.Append(menuFile, "&File") |
+ self.SetMenuBar(menuBar) |
+ self.CreateStatusBar() |
+ self.Bind(wx.EVT_MENU, self.OnAbout, m_about) |
+ self.Bind(wx.EVT_MENU, self.OnReload, m_reload) |
+ self.Bind(wx.EVT_MENU, self.OnQuit, m_quit) |
+ self.Bind(wx.EVT_CLOSE, self.OnQuit) |
+ |
+ acctbl = wx.AcceleratorTable([ |
+ (wx.ACCEL_CTRL, ord('A'), m_about.GetId()), |
+ (wx.ACCEL_CTRL, ord('R'), m_reload.GetId()), |
+ (wx.ACCEL_CTRL, ord('Q'), m_quit.GetId()) |
+ ]) |
+ |
+ self.SetAcceleratorTable(acctbl) |
+ |
+ # create UI components |
+ panel = wx.Panel(self) |
+ button_reload = wx.Button(panel, label="Reload File") |
+ self.screenlist = wx.ListBox(panel, wx.ID_ANY) |
+ |
+ # connect events |
+ self.Bind(wx.EVT_BUTTON, self.OnReload, button_reload) |
+ self.Bind(wx.EVT_LISTBOX, self.OnSelected, self.screenlist) |
+ self.Bind(wx.EVT_IDLE, self.OnIdle) |
+ |
+ # place the componenents |
+ sizer = wx.BoxSizer(wx.VERTICAL) |
+ sizer.Add(button_reload) |
+ sizer.Add(wx.StaticText(panel, wx.ID_ANY, "Screens")) |
+ sizer.Add(self.screenlist, 1, wx.EXPAND) |
+ |
+ panel.SetSizer(sizer) |
+ panel.Fit() |
+ |
+ # now, what are we looking at? |
+ self.bmpblock = bmpblock |
+ self.UpdateControls() |
+ self.do_update = True |
+ self.screenlist.SetFocus() |
+ |
+ def OnAbout(self, event): |
+ """Display basic information about this application.""" |
+ msg = ("Yes, all this does right now is display the screens from the config" |
+ " file. You still have to edit, save, and reload in order to see any" |
+ " changes. Learning python and wxpython is my 20% project (actually" |
+ " it's more like 5%). Feel free to improve things.\n\t-- bill") |
+ wx.MessageBox(msg, "About", wx.OK | wx.ICON_INFORMATION, self) |
+ |
+ def OnQuit(self, event): |
+ """Close all application windows and quit.""" |
+ wx.GetApp().ExitMainLoop() |
+ |
+ def OnReload(self, event): |
+ """Tell the model object to refresh the view that the user sees. |
+ FIXME: The model itself should know to do this without being told. |
+ """ |
+ self.bmpblock.Reload() |
+ self.do_update = True; |
+ self.UpdateControls() |
+ |
+ def OnSelected(self, event): |
+ """User may have picked one of the pulldowns.""" |
+ if event.IsSelection(): |
+ self.bmpblock.current_screen = event.GetString() |
+ self.do_update = True |
+ event.Skip() |
+ |
+ def UpdateControls(self): |
+ """Reload all the buttons with the current model information.""" |
+ screens = self.bmpblock.yaml["screens"] |
+ self.screenlist.Clear() |
+ self.screenlist.AppendItems(sorted(screens.keys())) |
+ current = self.bmpblock.current_screen |
+ self.screenlist.SetStringSelection(current) |
+ self.SetStatusText(self.bmpblock.filename) |
+ |
+ def OnIdle(self, event=None): |
+ """What to do, what to do...""" |
+ if self.do_update: |
+ # FIXME: The model should know when to do this itself, right? |
+ self.bmpblock.Redisplay() |
+ self.do_update = False |