Changeset 4785 for trunk/GSASIIctrlGUI.py
- Timestamp:
- Jan 27, 2021 3:27:25 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIctrlGUI.py
r4783 r4785 57 57 :class:`OrderBox` Creates a wx.Panel with scrollbars where items can be 58 58 ordered into columns. 59 :class:`SortableLstCtrl` Creates a wx.Panel for a table of data that 60 can be sorted by clicking on a column label. 59 61 :class:`ScrolledMultiEditor` wx.Dialog for editing many dict- or list-contained items. 60 62 with validation. Results are placed in dict or list. … … 2784 2786 hlp = HelpButton(self, self.hlp, wrap=450) 2785 2787 btnsizer.Add((-1,-1),1, wx.EXPAND, 1) 2786 btnsizer.Add(hlp,0,wx.ALIGN_RIGHT|wx.ALL) 2788 #btnsizer.Add(hlp,0,wx.ALIGN_RIGHT|wx.ALL) 2789 btnsizer.Add(hlp,0) 2787 2790 mainSizer.Add(btnsizer,0,wx.EXPAND) 2788 2791 if self.lbl: 2789 mainSizer.Add(wx.StaticText(self,wx.ID_ANY,self.lbl) ,0,WACV,0)2792 mainSizer.Add(wx.StaticText(self,wx.ID_ANY,self.lbl)) 2790 2793 mainSizer.Add((-1,15)) 2791 2794 promptSizer = wx.FlexGridSizer(0,2,5,5) … … 2793 2796 self.Indx = {} 2794 2797 for prompt,value in zip(self.prompts,self.values): 2795 promptSizer.Add(wx.StaticText(self,-1,prompt) ,0,WACV,0)2798 promptSizer.Add(wx.StaticText(self,-1,prompt)) 2796 2799 valItem = wx.TextCtrl(self,-1,value=value,style=wx.TE_PROCESS_ENTER,size=(self.size,-1)) 2797 2800 self.Indx[valItem.GetId()] = prompt … … 2810 2813 btn = wx.Button(self, wx.ID_ANY,'+',style=wx.BU_EXACTFIT) 2811 2814 btn.Bind(wx.EVT_BUTTON,self.onExpand) 2812 btnsizer.Add(btn ,0,wx.ALIGN_RIGHT)2815 btnsizer.Add(btn) 2813 2816 mainSizer.Add(btnsizer,0,wx.EXPAND) 2814 2817 self.SetSizer(mainSizer) … … 5992 5995 'Get the version number in the dialog' 5993 5996 return self.spin.GetValue() 5997 5998 ################################################################################ 5999 ################################################################################ 6000 import wx.lib.mixins.listctrl as listmix 6001 class SortableLstCtrl(wx.Panel): 6002 '''Creates a read-only table with sortable columns. Sorting is done by 6003 clicking on a column label. A triangle facing up or down is added to 6004 indicate the column is sorted. 6005 6006 To use, the header is labeled using 6007 :meth:`PopulateHeader`, then :meth:`PopulateLine` is called for every 6008 row in table and finally :meth:`SetColWidth` is called to set the column 6009 widths. 6010 6011 :param wx.Frame parent: parent object for control 6012 ''' 6013 def __init__(self, parent): 6014 wx.Panel.__init__(self, parent, wx.ID_ANY)#, style=wx.WANTS_CHARS) 6015 sizer = wx.BoxSizer(wx.VERTICAL) 6016 self.list = G2LstCtrl(self, wx.ID_ANY, style=wx.LC_REPORT| wx.BORDER_SUNKEN) 6017 sizer.Add(self.list, 1, wx.EXPAND) 6018 self.SetSizer(sizer) 6019 self.SetAutoLayout(True) 6020 #self.SortListItems(0, True) 6021 6022 def PopulateHeader(self, header, justify): 6023 '''Defines the column labels 6024 6025 :param list header: a list of strings with header labels 6026 :param list justify: a list of int values where 0 causes left justification, 6027 1 causes right justification, and -1 causes centering 6028 ''' 6029 info = wx.ListItem() 6030 info.Mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT 6031 info.Image = -1 6032 for i,(h,j) in enumerate(zip(header, justify)): 6033 info.Text = h 6034 if j > 0: 6035 info.Align = wx.LIST_FORMAT_RIGHT 6036 elif j < 0: 6037 info.Align = wx.LIST_FORMAT_CENTER 6038 else: 6039 info.Align = 0 6040 self.list.InsertColumn(i, info) 6041 listmix.ColumnSorterMixin.__init__(self.list, len(header)) 6042 self.list.itemDataMap = {} 6043 6044 def PopulateLine(self, key, data): 6045 '''Enters each row into the table 6046 6047 :param int key: a unique int value for each line, probably should 6048 be sequential 6049 :param list data: a list of strings for each column in that row 6050 ''' 6051 index = self.list.InsertItem(self.list.GetItemCount(), data[0]) 6052 for i,d in enumerate(data[1:]): 6053 self.list.SetItem(index, i+1, d) 6054 self.list.SetItemData(index, key) 6055 self.list.itemDataMap[key] = data 6056 6057 def SetColWidth(self,col,width=None,auto=True,minwidth=0,maxwidth=None): 6058 '''Sets the column width. 6059 6060 :param int width: the column width in pixels 6061 :param bool auto: if True (default) and width is None (default) the 6062 width is set by the maximum width entry in the column 6063 :param int minwidth: used when auto is True, sets a minimum 6064 column width 6065 :param int maxwidth: used when auto is True, sets a maximum 6066 column width. Do not use with minwidth 6067 ''' 6068 if width: 6069 self.list.SetColumnWidth(col, width) 6070 elif auto: 6071 self.list.SetColumnWidth(col, wx.LIST_AUTOSIZE) 6072 if minwidth and self.list.GetColumnWidth(col) < minwidth: 6073 self.list.SetColumnWidth(col, minwidth) 6074 elif maxwidth and self.list.GetColumnWidth(col) > maxwidth: 6075 self.list.SetColumnWidth(col, maxwidth) 6076 else: 6077 print('Error in SetColWidth: use either auto or width') 6078 6079 class G2LstCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin): 6080 '''Creates a custom ListCtrl with support for images in column labels 6081 ''' 6082 def __init__(self, parent, ID=wx.ID_ANY, pos=wx.DefaultPosition, 6083 size=wx.DefaultSize, style=0): 6084 wx.ListCtrl.__init__(self, parent, ID, pos, size, style) 6085 listmix.ListCtrlAutoWidthMixin.__init__(self) 6086 from wx.lib.embeddedimage import PyEmbeddedImage 6087 # from demo/images.py 6088 SmallUpArrow = PyEmbeddedImage( 6089 b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAADxJ" 6090 b"REFUOI1jZGRiZqAEMFGke2gY8P/f3/9kGwDTjM8QnAaga8JlCG3CAJdt2MQxDCAUaOjyjKMp" 6091 b"cRAYAABS2CPsss3BWQAAAABJRU5ErkJggg==") 6092 SmallDnArrow = PyEmbeddedImage( 6093 b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAEhJ" 6094 b"REFUOI1jZGRiZqAEMFGke9QABgYGBgYWdIH///7+J6SJkYmZEacLkCUJacZqAD5DsInTLhDR" 6095 b"bcPlKrwugGnCFy6Mo3mBAQChDgRlP4RC7wAAAABJRU5ErkJggg==") 6096 self.il = wx.ImageList(16, 16) 6097 self.UpArrow = self.il.Add(SmallUpArrow.GetBitmap()) 6098 self.DownArrow = self.il.Add(SmallDnArrow.GetBitmap()) 6099 self.parent=parent 6100 self.SetImageList(self.il, wx.IMAGE_LIST_SMALL) 6101 6102 def GetListCtrl(self): # needed for sorting 6103 return self 6104 def GetSortImages(self): 6105 #return (self.parent.DownArrow, self.parent.UpArrow) 6106 return (self.DownArrow, self.UpArrow) 5994 6107 5995 6108 ################################################################################
Note: See TracChangeset
for help on using the changeset viewer.