def __init__(self, calendar): Composite.__init__(self) self.calendar = calendar self.dayCheckBoxListener = DayCheckBoxListener(calendar) self.outer = VerticalPanel() self.initWidget(self.outer) self.setStyleName("DynaTable-DayFilterWidget") self.outer.add(DayCheckBox(self, "Sunday", 0)) self.outer.add(DayCheckBox(self, "Monday", 1)) self.outer.add(DayCheckBox(self, "Tuesday", 2)) self.outer.add(DayCheckBox(self, "Wednesday", 3)) self.outer.add(DayCheckBox(self, "Thursday", 4)) self.outer.add(DayCheckBox(self, "Friday", 5)) self.outer.add(DayCheckBox(self, "Saturday", 6)) self.buttonAll = Button("All", self) self.buttonNone = Button("None", self) hp = HorizontalPanel() hp.setHorizontalAlignment(HasAlignment.ALIGN_CENTER) hp.add(self.buttonAll) hp.add(self.buttonNone) self.outer.add(hp) self.outer.setCellVerticalAlignment(hp, HasAlignment.ALIGN_BOTTOM) self.outer.setCellHorizontalAlignment(hp, HasAlignment.ALIGN_CENTER)
def __init__(self): DialogBox.__init__(self) # Use this opportunity to set the dialog's caption. self.setText("About the Mail Sample") # Create a DockPanel to contain the 'about' label and the 'OK' button. outer = DockPanel() outer.setSpacing(4) outer.add(Image(AboutDialog.LOGO_IMAGE), DockPanel.WEST) # Create the 'OK' button, along with a listener that hides the dialog # when the button is clicked. Adding it to the 'south' position within # the dock causes it to be placed at the bottom. buttonPanel = HorizontalPanel() buttonPanel.setHorizontalAlignment(HasAlignment.ALIGN_RIGHT) buttonPanel.add(Button("Close", self)) outer.add(buttonPanel, DockPanel.SOUTH) # Create the 'about' label. Placing it in the 'rest' position within the # dock causes it to take up any remaining space after the 'OK' button # has been laid out. textplain = "This sample application demonstrates the construction " textplain += "of a complex user interface using pyjamas' built-in widgets. Have a look " textplain += "at the code to see how easy it is to build your own apps!" text = HTML(textplain) text.setStyleName("mail-AboutText") outer.add(text, DockPanel.CENTER) # Add a bit of spacing and margin to the dock to keep the components from # being placed too closely together. outer.setSpacing(8) self.setWidget(outer)
def __init__(self): Composite.__init__(self) self.signOutLink = HTML("<a href='javascript:;'>Sign Out</a>") self.aboutLink = HTML("<a href='javascript:;'>About</a>") outer = HorizontalPanel() inner = VerticalPanel() outer.setHorizontalAlignment(HasAlignment.ALIGN_RIGHT) inner.setHorizontalAlignment(HasAlignment.ALIGN_RIGHT) links = HorizontalPanel() links.setSpacing(4) links.add(self.signOutLink) links.add(self.aboutLink) outer.add(inner) inner.add(HTML("<b>Welcome back, [email protected]</b>")) inner.add(links) self.signOutLink.addClickListener(self) self.aboutLink.addClickListener(self) self.initWidget(outer) inner.setStyleName("mail-TopPanel") links.setStyleName("mail-TopPanelLinks")
class MailList(Composite): VISIBLE_EMAIL_COUNT = 10 def __init__(self, mailObject): Composite.__init__(self) self.countLabel = HTML() self.newerButton = HTML("<a href='javascript:;'>< newer</a>", True) self.olderButton = HTML("<a href='javascript:;'>older ></a>", True) self.startIndex = 0 self.selectedRow = -1 self.table = FlexTable() self.navBar = HorizontalPanel() self.mailObject = mailObject # Setup the table. self.table.setCellSpacing(0) self.table.setCellPadding(2) self.table.setWidth("100%") # Hook up events. self.table.addTableListener(self) self.newerButton.addClickListener(self) self.olderButton.addClickListener(self) # Create the 'navigation' bar at the upper-right. innerNavBar = HorizontalPanel() innerNavBar.setStyleName("mail-ListNavBar") innerNavBar.setSpacing(8) innerNavBar.add(self.newerButton) innerNavBar.add(self.countLabel) innerNavBar.add(self.olderButton) self.navBar.setHorizontalAlignment(HasAlignment.ALIGN_RIGHT) self.navBar.add(innerNavBar) self.navBar.setWidth("100%") self.initWidget(self.table) self.setStyleName("mail-List") self.initTable() self.update() def onCellClicked(self, sender, row, cell): # Select the row that was clicked (-1 to account for header row). if (row > 0): self.selectRow(row - 1) def onClick(self, sender, event): print "click", sender if (sender == self.olderButton): # Move forward a page. self.startIndex = self.startIndex + MailList.VISIBLE_EMAIL_COUNT if (self.startIndex >= MailItems().getMailItemCount()): self.startIndex = self.startIndex - MailList.VISIBLE_EMAIL_COUNT else: self.styleRow(self.selectedRow, False) self.selectedRow = -1 self.update() elif (sender == self.newerButton): # Move back a page. self.startIndex = self.startIndex - MailList.VISIBLE_EMAIL_COUNT if (self.startIndex < 0): self.startIndex = 0 else: self.styleRow(self.selectedRow, False) self.selectedRow = -1 self.update() def initTable(self): # Create the header row. self.table.setText(0, 0, "sender") self.table.setText(0, 1, "email") self.table.setText(0, 2, "subject") self.table.setWidget(0, 3, self.navBar) self.table.getRowFormatter().setStyleName(0, "mail-ListHeader") # Initialize the rest of the rows. i = 0 while i < MailList.VISIBLE_EMAIL_COUNT: self.table.setText(i + 1, 0, "") self.table.setText(i + 1, 1, "") self.table.setText(i + 1, 2, "") self.table.getCellFormatter().setWordWrap(i + 1, 0, False) self.table.getCellFormatter().setWordWrap(i + 1, 1, False) self.table.getCellFormatter().setWordWrap(i + 1, 2, False) self.table.getFlexCellFormatter().setColSpan(i + 1, 2, 2) i = i + 1 def selectRow(self, row): # When a row (other than the first one, which is used as a header) is # selected, display its associated MailItem. item = MailItems().getMailItem(self.startIndex + row) if (item == None): return self.styleRow(self.selectedRow, False) self.styleRow(row, True) item.read = True self.selectedRow = row self.mailObject.get().displayItem(item) def styleRow(self, row, selected): if (row != -1): if (selected): self.table.getRowFormatter().addStyleName(row + 1, "mail-SelectedRow") else: self.table.getRowFormatter().removeStyleName(row + 1, "mail-SelectedRow") def update(self): # Update the older/newer buttons & label. count = MailItems().getMailItemCount() max = self.startIndex + MailList.VISIBLE_EMAIL_COUNT if (max > count): max = count self.newerButton.setVisible(self.startIndex != 0) self.olderButton.setVisible(self.startIndex + MailList.VISIBLE_EMAIL_COUNT < count) startIndexPlusOne = self.startIndex + 1 self.countLabel.setText("" + "%d" % startIndexPlusOne + " - " + "%d" % max + " of " + "%d" % count) # Show the selected emails. i = 0 while (i < MailList.VISIBLE_EMAIL_COUNT): # Don't read past the end. if (self.startIndex + i >= MailItems().getMailItemCount()): break item = MailItems().getMailItem(self.startIndex + i) # Add a row to the table, then set each of its columns to the # email's sender and subject values. self.table.setText(i + 1, 0, item.sender) self.table.setText(i + 1, 1, item.email) self.table.setText(i + 1, 2, item.subject) i = i + 1 # Clear any remaining slots. while (i < MailList.VISIBLE_EMAIL_COUNT): self.table.setHTML(i + 1, 0, " ") self.table.setHTML(i + 1, 1, " ") self.table.setHTML(i + 1, 2, " ") i = i + 1 # Select the first row if none is selected. if (self.selectedRow == -1): self.selectRow(0)