[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