[Debtags-commits] [svn] r1871 - python
Enrico Zini
enrico at costa.debian.org
Mon Aug 28 20:51:52 UTC 2006
Author: enrico
Date: Mon Aug 28 20:51:52 2006
New Revision: 1871
Modified:
python/ (props changed)
python/wxssearch
Log:
r3217 at viaza: enrico | 2006-08-28 18:17:32 +0100
Added infrastructure for context help
Modified: python/wxssearch
==============================================================================
--- python/wxssearch (original)
+++ python/wxssearch Mon Aug 28 20:51:52 2006
@@ -104,7 +104,6 @@
self.refilter()
def setQuery(self, query):
- print "SetQuery", query
query = query.split()
def match(pkg):
@@ -156,48 +155,6 @@
e.action, e.tag = action, tag
self.ProcessEvent(e)
- #x, y = event.GetX(), event.GetY()
- #item, flags = self.HitTest((x, y))
- #if flags & wx.LIST_HITTEST_ONITEM:
- # self.clickedItem = item
- #else:
- # self.clickedItem = None
-
- #event.Skip()
-
- #menu = wx.Menu()
- #menu.Append(TagList.ACTION_ADD_WANTED, "I want this tag")
- #menu.Append(TagList.ACTION_ADD_UNWANTED, "I do not want this tag")
- #self.PopupMenu(menu)
- #menu.Destroy()
-
- #def getClickedItem(self):
- #return self.OnGetItemText(self.clickedItem, 0)
-
- #def OnGetItemText(self, row, col):
- # icount = max(7, len(self.model.interesting))
- # if row < icount:
- # return self.model.interesting[row]
- # else:
- # row = row - icount
- # dcount = max(7, len(self.model.discriminant))
- # if row < icount + dcount:
- # return self.model.discriminant
- # else:
- # return None
-
- #def OnGetItemAttr(self, row):
- # icount = max(7, len(self.model.interesting))
- # if row < icount:
- # return self.intAttr
- # else:
- # row = row - icount
- # dcount = max(7, len(self.model.discriminant))
- # if row < dcount:
- # return self.discAttr
- # else:
- # return None
-
def modelChanged(self, event):
#print "TLMC"
self.SetPage("<html><body>")
@@ -256,10 +213,27 @@
self.SetColumnWidth(0, wx.LIST_AUTOSIZE)
self.SetColumnWidth(1, wx.LIST_AUTOSIZE)
+ self.Bind(wx.EVT_SIZE, self.OnResize)
+
+ def resizeColumns(self):
+ """
+ Ugly hack to have some decent size for the columns, since the ListCtrl
+ appearently won't autosize itself.
+ """
+ w, h = self.GetClientSizeTuple()
+ self.SetColumnWidth(0, w * 0.3)
+ # -20 to hope to account for the vertical scrollbar, when it's present
+ self.SetColumnWidth(1, w * 0.7 - 20)
+
def modelChanged(self, event):
self.packages = sorted(self.model.subcoll.iterPackages())
self.packages.sort()
self.SetItemCount(len(self.packages))
+ self.resizeColumns()
+ event.Skip()
+
+ def OnResize(self, event):
+ self.resizeColumns()
event.Skip()
def OnGetItemText(self, row, col):
@@ -271,26 +245,54 @@
class SearchWindow(wx.Frame):
+ ACTION_QUIT = wx.NewId()
+ ACTION_CONTEXT_HELP = wx.NewId()
+ ACTION_ABOUT = wx.NewId()
+
def __init__(self, parent, model, title):
wx.Frame.__init__(self, parent, -1, title,
style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
self.statusBar = self.CreateStatusBar()
+ # Create menu bar
+ self.menuBar = wx.MenuBar()
+ mFile = wx.Menu()
+ mFile.Append(SearchWindow.ACTION_QUIT, "&Quit", "Quit wxdballe")
+ self.menuBar.Append(mFile, "&File")
+ mFile = wx.Menu()
+ mFile.Append(SearchWindow.ACTION_CONTEXT_HELP, "&What is...", "Show context information about interface elements")
+ mFile.Append(SearchWindow.ACTION_ABOUT, "&About...", "Show information about this application")
+ self.menuBar.Append(mFile, "&Help")
+ self.SetMenuBar(self.menuBar)
+ self.Bind(wx.EVT_MENU, self.onAction)
+
self.model = model
self.model.Bind(Model.EVT_CHANGED, self.modelChanged)
self.SetSizeHints(500, 500)
- queryPanel = wx.Panel(self)
- self.query = wx.TextCtrl(queryPanel)
- # self.query.Bind(wx.EVT_TEXT, self.queryChanged)
+ queryPanel = wx.Panel(self, style=wx.SUNKEN_BORDER)
+
+ queryField = wx.Panel(queryPanel)
+ self.query = wx.TextCtrl(queryField)
+ self.query.SetHelpText("Enter here some keyword about what you are looking for. They will lead you to a selection of categories that you can use to browse the packages")
self.query.Bind(wx.EVT_CHAR, self.queryChanged)
+ # self.query.Bind(wx.EVT_TEXT, self.queryChanged)
+ self.queryButton = wx.Button(queryField, -1, "Go", style=wx.BU_EXACTFIT)
+ self.queryButton.Bind(wx.EVT_BUTTON, self.goButtonPressed)
+
+ box = wx.BoxSizer(wx.HORIZONTAL)
+ box.Add(wx.StaticText(queryField, -1, "Search: "), 0, wx.ALIGN_CENTER_VERTICAL)
+ box.Add(self.query, 1, wx.EXPAND)
+ box.Add(self.queryButton, 0, wx.ALIGN_CENTER_VERTICAL)
+ queryField.SetSizerAndFit(box)
+
self.tagList = TagList(queryPanel, model)
self.tagList.Bind(TagList.EVT_ACTION, self.wantedEvent)
box = wx.BoxSizer(wx.VERTICAL)
- box.Add(self.query, 0, wx.EXPAND)
+ box.Add(queryField, 0, wx.EXPAND)
box.Add(self.tagList, 3, wx.EXPAND)
queryPanel.SetSizerAndFit(box)
@@ -301,22 +303,27 @@
box.Add(self.results, 3, wx.EXPAND)
self.SetSizerAndFit(box)
- #box = wx.BoxSizer(wx.VERTICAL)
- #box.Add(self.query, 0, wx.EXPAND)
- #box.Add(self.tagList, 3, wx.EXPAND)
- #self.SetSizerAndFit(box)
-
- #gbs = wx.GridBagSizer()
- #gbs.Add(self.query, (0, 0), (1, 1))
- #gbs.Add(self.tagList, (1, 0), (1, 1), flag=wx.EXPAND)
- #gbs.Add(self.results, (0, 1), (2, 1), flag=wx.EXPAND)
- #gbs.AddGrowableCol(0)
- #gbs.AddGrowableCol(1)
- #gbs.AddGrowableRow(1)
- #self.SetSizerAndFit(gbs)
-
self.timedUpdater = None
+ self.Bind(wx.EVT_CHAR, self.onChar)
+ self.query.SetFocus()
+
+ def onAction(self, event):
+ id = event.GetId()
+ if id == SearchWindow.ACTION_QUIT:
+ self.Destroy()
+ elif id == SearchWindow.ACTION_ABOUT:
+ pass
+ elif id == SearchWindow.ACTION_CONTEXT_HELP:
+ contextHelp = wx.ContextHelp()
+ contextHelp.BeginContextHelp()
+
+ def onChar(self, event):
+ c = event.GetKeyCode()
+ # Quit on ^Q
+ if c == 17:
+ self.Destroy()
+
def wantedEvent(self, event):
action, tag = event.action, event.tag
@@ -330,6 +337,9 @@
else:
print "Unknown action", action
+ def goButtonPressed(self, event):
+ self.model.setQuery(self.query.GetValue())
+
def queryChanged(self, event):
"Delayed update of the filter from the value of the input fields"
c = event.GetKeyCode()
@@ -359,12 +369,15 @@
parser = Parser(usage="usage: %prog [options]",
version="%prog "+ VERSION,
description="smart search of Debian packages")
- parser.add_option("--tagdb", default="package-tags", help="Tag database to use (default: %default)")
+ parser.add_option("--tagdb", default="/var/lib/debtags/package-tags", help="Tag database to use (default: %default)")
(options, args) = parser.parse_args()
app = wx.PySimpleApp()
+ provider = wx.SimpleHelpProvider()
+ wx.HelpProvider_Set(provider)
+
# Read full database
fullcoll = Debtags.DB()
tagFilter = re.compile(r"^special::.+$|^.+::TODO$")
More information about the Debtags-commits
mailing list