CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 1 of 1

Threaded View

  1. #1
    Join Date
    Apr 2008
    Posts
    4

    Angry Sort items in UltimateListCtrl

    I want to create an ultimate list ctrl based table where the user can sort the columns by clicking on the column header. Here's the code I attempted:

    Code:
    import wx
    import wx.lib.mixins.listctrl as listmix
    from wx.lib.agw import ultimatelistctrl as ULC
    
    APPNAME='Sortable Ultimate List Ctrl'
    APPVERSION='1.0'
    MAIN_WIDTH=300
    MAIN_HEIGHT=300
     
    musicdata = {
    0 : ("Bad English", "The Price Of Love"),
    1 : ("DNA featuring Suzanne Vega", "Tom's Diner"),
    2 : ("George Michael", "Praying For Time"),
    3 : ("Gloria Estefan", "Here We Are"),
    4 : ("Linda Ronstadt", "Don't Know Much"),
    5 : ("Michael Bolton", "How Am I Supposed To Live Without You"),
    6 : ("Paul Young", "Oh Girl"),
    }
     
    ########################################################################
    class TestUltimateListCtrlPanel(wx.Panel, listmix.ColumnSorterMixin):
     
        #----------------------------------------------------------------------
        def __init__(self, parent):
            wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS, size=(MAIN_WIDTH,MAIN_HEIGHT))
     
            self.index = 0
     
            self.list_ctrl = ULC.UltimateListCtrl(self, -1, agwStyle=ULC.ULC_REPORT|ULC.ULC_HAS_VARIABLE_ROW_HEIGHT)
            self.list_ctrl.InsertColumn(0, "Artist")
            self.list_ctrl.InsertColumn(1, "Title", wx.LIST_FORMAT_RIGHT)
            self.list_ctrl.InsertColumn(2, "Download")
     
            items = musicdata.items()
            index = 0
            for key, data in items:
                pos=self.list_ctrl.InsertStringItem(index, data[0])
                self.list_ctrl.SetStringItem(index, 1, data[1])
                #self.list_ctrl.SetStringItem(index, 2, data[2])
                button = wx.Button(self.list_ctrl, id=wx.ID_ANY, label="Download")
    	    self.list_ctrl.SetItemWindow(pos, col=2, wnd=button, expand=True)
                self.list_ctrl.SetItemData(index, key)
                index += 1
     
            # Now that the list exists we can init the other base class,
            # see wx/lib/mixins/listctrl.py
            self.itemDataMap = musicdata
            listmix.ColumnSorterMixin.__init__(self, 3)
            self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick, self.list_ctrl)
     
            sizer = wx.BoxSizer(wx.VERTICAL)
            sizer.Add(self.list_ctrl, 1, wx.ALL|wx.EXPAND, 5)
            self.SetSizer(sizer)
     
    	
        def GetListCtrl(self):
            return self.list_ctrl
        
        #----------------------------------------------------------------------
        def OnColClick(self, event):
            pass
     
    ########################################################################
    class MyForm(wx.Frame):
     
        #----------------------------------------------------------------------
        def __init__(self):
            wx.Frame.__init__(self,None,wx.ID_ANY,'%s v%s' % (APPNAME,APPVERSION),size=(MAIN_WIDTH,MAIN_HEIGHT),style=wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN)
     
            # Add a panel so it looks the correct on all platforms
            panel = TestUltimateListCtrlPanel(self)
     
    #----------------------------------------------------------------------
    # Run the program
    if __name__ == "__main__":
        app = wx.App(False)
        frame = MyForm()
        frame.Show()
        app.MainLoop()
    Clicking on the column does not sort the 'Artist' or 'Title' fields. I want to be able to sort them when the user clicks on the column headers. Please help.

    Attached is the screen shot of how the frame looks like
    Attached Images Attached Images  

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured