class TableStylingExample(VerticalLayout): def __init__(self): super(TableStylingExample, self).__init__() self.setSpacing(True) self._table = Table() self._markedRows = dict() self._markedCells = dict() self.addComponent(self._table) # set a style name, so we can style rows and cells self._table.setStyleName('contacts') # size self._table.setWidth('100%') self._table.setPageLength(7) # connect data source self._table.setContainerDataSource(ExampleUtil.getPersonContainer()) # Generate the email-link from firstname & lastname self._table.addGeneratedColumn('Email', TableColumnGenerator(self)) # turn on column reordering and collapsing self._table.setColumnReorderingAllowed(True) self._table.setColumnCollapsingAllowed(True) # Actions (a.k.a context menu) self._table.addActionHandler( TableActionHandler(self) ) # style generator self._table.setCellStyleGenerator( TableStyleGenerator(self) ) # toggle cell 'marked' styling when double-clicked self._table.addListener(TableClickListener(self), IItemClickListener) # Editing # we don't want to update container before pressing 'save': self._table.setWriteThrough(False) # edit button editButton = Button('Edit') self.addComponent(editButton) editButton.addListener(EditListener(self, editButton), button.IClickListener) self.setComponentAlignment(editButton, Alignment.TOP_RIGHT)
def __init__(self): super(TableClickListenersExample, self).__init__() # Create our data source dataSource = ExampleUtil.getOrderContainer() # Calculate total sum totalSum = 0.0 for i in range(len(dataSource)): item = dataSource.getItem(dataSource.getIdByIndex(i)) value = item.getItemProperty( ExampleUtil.ORDER_ITEMPRICE_PROPERTY_ID).getValue() #amount = NumberFormat.getCurrencyInstance().parse(str(value)) amount = re.search(u'([\u00A3\u0024\u20AC])(\d+(?:\.\d{2})?)', str(value)).groups()[1] totalSum += float(amount) # Create table table = Table('', ExampleUtil.getOrderContainer()) table.setColumnExpandRatio(ExampleUtil.ORDER_DESCRIPTION_PROPERTY_ID, 1) table.setSortDisabled(True) table.setWidth('100%') table.setPageLength(6) table.setFooterVisible(True) table.setImmediate(True) # Add some total sum and description to footer table.setColumnFooter(ExampleUtil.ORDER_DESCRIPTION_PROPERTY_ID, 'Total Price') l = defaultLocale() fc = format_currency(totalSum, currency='USD', locale=l).encode('utf-8') table.setColumnFooter(ExampleUtil.ORDER_ITEMPRICE_PROPERTY_ID, fc) # Add a header click handler table.addListener(HeaderListener(self), IHeaderClickListener) # Add a footer click handler table.addListener(FooterListener(self), IFooterClickListener) self.addComponent(table)
def __init__(self): super(TableClickListenersExample, self).__init__() # Create our data source dataSource = ExampleUtil.getOrderContainer() # Calculate total sum totalSum = 0.0 for i in range(len(dataSource)): item = dataSource.getItem(dataSource.getIdByIndex(i)) value = item.getItemProperty( ExampleUtil.ORDER_ITEMPRICE_PROPERTY_ID).getValue() match = re.search(self.CURRENCY_PATTERN, str(value)) if match is not None: amount = match.groups()[1] totalSum += float(amount) # Create table table = Table('', ExampleUtil.getOrderContainer()) table.setColumnExpandRatio(ExampleUtil.ORDER_DESCRIPTION_PROPERTY_ID, 1) table.setSortDisabled(True) table.setWidth('100%') table.setPageLength(6) table.setFooterVisible(True) table.setImmediate(True) # Add some total sum and description to footer table.setColumnFooter(ExampleUtil.ORDER_DESCRIPTION_PROPERTY_ID, 'Total Price') l = defaultLocale() fc = format_currency(totalSum, currency='USD', locale=l).encode('utf-8') table.setColumnFooter(ExampleUtil.ORDER_ITEMPRICE_PROPERTY_ID, fc) # Add a header click handler table.addListener(HeaderListener(self), IHeaderClickListener) # Add a footer click handler table.addListener(FooterListener(self), IFooterClickListener) self.addComponent(table)
class TableMainFeaturesExample(VerticalLayout): def __init__(self): super(TableMainFeaturesExample, self).__init__() self._markedRows = set() self._table = Table('ISO-3166 Country Codes and flags') self.addComponent(self._table) # Label to indicate current selection selected = Label('No selection') self.addComponent(selected) # set a style name, so we can style rows and cells self._table.setStyleName('iso3166') # size self._table.setWidth('100%') self._table.setHeight('170px') # selectable self._table.setSelectable(True) self._table.setMultiSelect(True) # react at once when something is selected self._table.setImmediate(True) # connect data source self._table.setContainerDataSource(ExampleUtil.getISO3166Container()) # turn on column reordering and collapsing self._table.setColumnReorderingAllowed(True) self._table.setColumnCollapsingAllowed(True) # set column headers self._table.setColumnHeaders(['Country', 'Code', 'Icon file']) # Icons for column headers self._table.setColumnIcon(ExampleUtil.iso3166_PROPERTY_FLAG, ThemeResource('../sampler/icons/action_save.gif')) self._table.setColumnIcon(ExampleUtil.iso3166_PROPERTY_NAME, ThemeResource('../sampler/icons/icon_get_world.gif')) self._table.setColumnIcon(ExampleUtil.iso3166_PROPERTY_SHORT, ThemeResource('../sampler/icons/page_code.gif')) # Column alignment self._table.setColumnAlignment(ExampleUtil.iso3166_PROPERTY_SHORT, Table.ALIGN_CENTER) # Column width self._table.setColumnExpandRatio(ExampleUtil.iso3166_PROPERTY_NAME, 1) self._table.setColumnWidth(ExampleUtil.iso3166_PROPERTY_SHORT, 70) # Collapse one column - the user can make it visible again self._table.setColumnCollapsed(ExampleUtil.iso3166_PROPERTY_FLAG, True) # show row header w/ icon self._table.setRowHeaderMode(Table.ROW_HEADER_MODE_ICON_ONLY) self._table.setItemIconPropertyId(ExampleUtil.iso3166_PROPERTY_FLAG) # Actions (a.k.a context menu) self._table.addActionHandler( TableActionHandler(self) ) # style generator self._table.setCellStyleGenerator( TableStyleGenerator(self) ) # listen for valueChange, a.k.a 'select' and update the label self._table.addListener(TableChangeListener(self, selected), IValueChangeListener)
class SimpleAddressBook(Application): _fields = ['First Name', 'Last Name', 'Company', 'Mobile Phone', 'Work Phone', 'Home Phone', 'Work Email', 'Home Email', 'Street', 'Zip', 'City', 'State', 'Country'] _visibleCols = ['Last Name', 'First Name', 'Company'] def __init__(self): super(SimpleAddressBook, self).__init__() self._contactList = Table() self._contactEditor = Form() self._bottomLeftCorner = HorizontalLayout() self._contactRemovalButton = None self._addressBookData = self.createDummyData() def init(self): self.initLayout() self.initContactAddRemoveButtons() self.initAddressList() self.initFilteringControls() def initLayout(self): splitPanel = HorizontalSplitPanel() self.setMainWindow(Window('Address Book', splitPanel)) left = VerticalLayout() left.setSizeFull() left.addComponent(self._contactList) self._contactList.setSizeFull() left.setExpandRatio(self._contactList, 1) splitPanel.addComponent(left) splitPanel.addComponent(self._contactEditor) self._contactEditor.setSizeFull() self._contactEditor.getLayout().setMargin(True) self._contactEditor.setImmediate(True) self._bottomLeftCorner.setWidth('100%') left.addComponent(self._bottomLeftCorner) def initContactAddRemoveButtons(self): # New item button newItem = Button('+', NewItemListener(self)) self._bottomLeftCorner.addComponent(newItem) # Remove item button self._contactRemovalButton = Button('-', RemoveItemListener(self)) self._contactRemovalButton.setVisible(False) self._bottomLeftCorner.addComponent(self._contactRemovalButton) def initAddressList(self): self._contactList.setContainerDataSource(self._addressBookData) self._contactList.setVisibleColumns(self._visibleCols) self._contactList.setSelectable(True) self._contactList.setImmediate(True) self._contactList.addListener(ContactChangeListener(self), IValueChangeListener) return self._visibleCols def initFilteringControls(self): for pn in self._visibleCols: sf = TextField() self._bottomLeftCorner.addComponent(sf) sf.setWidth("100%") sf.setValue(pn) sf.setImmediate(True) self._bottomLeftCorner.setExpandRatio(sf, 1) sf.addListener(TextChangeListener(pn, sf, self), IValueChangeListener) @classmethod def createDummyData(cls): fnames = ['Peter', 'Alice', 'Joshua', 'Mike', 'Olivia', 'Nina', 'Alex', 'Rita', 'Dan', 'Umberto', 'Henrik', 'Rene', 'Lisa', 'Marge'] lnames = ['Smith', 'Gordon', 'Simpson', 'Brown', 'Clavel', 'Simons', 'Verne', 'Scott', 'Allison', 'Gates', 'Rowling', 'Barks', 'Ross', 'Schneider', 'Tate'] ic = IndexedContainer() for p in cls._fields: ic.addContainerProperty(p, str, '') for _ in range(1000): idd = ic.addItem() fname = fnames[int( len(fnames) * random() )] ic.getContainerProperty(idd, 'First Name').setValue(fname) lname = lnames[int( len(lnames) * random() )] ic.getContainerProperty(idd, 'Last Name').setValue(lname) return ic
class TableMainFeaturesExample(VerticalLayout): def __init__(self): super(TableMainFeaturesExample, self).__init__() self._markedRows = set() self._table = Table('ISO-3166 Country Codes and flags') self.addComponent(self._table) # Label to indicate current selection selected = Label('No selection') self.addComponent(selected) # set a style name, so we can style rows and cells self._table.setStyleName('iso3166') # size self._table.setWidth('100%') self._table.setHeight('170px') # selectable self._table.setSelectable(True) self._table.setMultiSelect(True) # react at once when something is selected self._table.setImmediate(True) # connect data source self._table.setContainerDataSource(ExampleUtil.getISO3166Container()) # turn on column reordering and collapsing self._table.setColumnReorderingAllowed(True) self._table.setColumnCollapsingAllowed(True) # set column headers self._table.setColumnHeaders(['Country', 'Code', 'Icon file']) # Icons for column headers self._table.setColumnIcon( ExampleUtil.iso3166_PROPERTY_FLAG, ThemeResource('../sampler/icons/action_save.gif')) self._table.setColumnIcon( ExampleUtil.iso3166_PROPERTY_NAME, ThemeResource('../sampler/icons/icon_get_world.gif')) self._table.setColumnIcon( ExampleUtil.iso3166_PROPERTY_SHORT, ThemeResource('../sampler/icons/page_code.gif')) # Column alignment self._table.setColumnAlignment(ExampleUtil.iso3166_PROPERTY_SHORT, Table.ALIGN_CENTER) # Column width self._table.setColumnExpandRatio(ExampleUtil.iso3166_PROPERTY_NAME, 1) self._table.setColumnWidth(ExampleUtil.iso3166_PROPERTY_SHORT, 70) # Collapse one column - the user can make it visible again self._table.setColumnCollapsed(ExampleUtil.iso3166_PROPERTY_FLAG, True) # show row header w/ icon self._table.setRowHeaderMode(Table.ROW_HEADER_MODE_ICON_ONLY) self._table.setItemIconPropertyId(ExampleUtil.iso3166_PROPERTY_FLAG) # Actions (a.k.a context menu) self._table.addActionHandler(TableActionHandler(self)) # style generator self._table.setCellStyleGenerator(TableStyleGenerator(self)) # listen for valueChange, a.k.a 'select' and update the label self._table.addListener(TableChangeListener(self, selected), IValueChangeListener)