1 16 package com.google.gwt.sample.mail.client; 17 18 import com.google.gwt.user.client.ui.ClickListener; 19 import com.google.gwt.user.client.ui.Composite; 20 import com.google.gwt.user.client.ui.FlexTable; 21 import com.google.gwt.user.client.ui.HTML; 22 import com.google.gwt.user.client.ui.HorizontalPanel; 23 import com.google.gwt.user.client.ui.SourcesTableEvents; 24 import com.google.gwt.user.client.ui.TableListener; 25 import com.google.gwt.user.client.ui.Widget; 26 27 30 public class MailList extends Composite implements TableListener, ClickListener { 31 32 private static final int VISIBLE_EMAIL_COUNT = 10; 33 34 private HTML countLabel = new HTML(); 35 private HTML newerButton = new HTML("<a HREF='javascript:;'>< newer</a>", 36 true); 37 private HTML olderButton = new HTML("<a HREF='javascript:;'>older ></a>", 38 true); 39 private int startIndex, selectedRow = -1; 40 private FlexTable table = new FlexTable(); 41 private HorizontalPanel navBar = new HorizontalPanel(); 42 43 public MailList() { 44 table.setCellSpacing(0); 46 table.setCellPadding(0); 47 table.setWidth("100%"); 48 49 table.addTableListener(this); 51 newerButton.addClickListener(this); 52 olderButton.addClickListener(this); 53 54 HorizontalPanel innerNavBar = new HorizontalPanel(); 56 navBar.setStyleName("mail-ListNavBar"); 57 innerNavBar.add(newerButton); 58 innerNavBar.add(countLabel); 59 innerNavBar.add(olderButton); 60 61 navBar.setHorizontalAlignment(HorizontalPanel.ALIGN_RIGHT); 62 navBar.add(innerNavBar); 63 navBar.setWidth("100%"); 64 65 initWidget(table); 66 setStyleName("mail-List"); 67 68 initTable(); 69 update(); 70 } 71 72 public void onCellClicked(SourcesTableEvents sender, int row, int cell) { 73 if (row > 0) { 75 selectRow(row - 1); 76 } 77 } 78 79 public void onClick(Widget sender) { 80 if (sender == olderButton) { 81 startIndex += VISIBLE_EMAIL_COUNT; 83 if (startIndex >= MailItems.getMailItemCount()) { 84 startIndex -= VISIBLE_EMAIL_COUNT; 85 } else { 86 styleRow(selectedRow, false); 87 selectedRow = -1; 88 update(); 89 } 90 } else if (sender == newerButton) { 91 startIndex -= VISIBLE_EMAIL_COUNT; 93 if (startIndex < 0) { 94 startIndex = 0; 95 } else { 96 styleRow(selectedRow, false); 97 selectedRow = -1; 98 update(); 99 } 100 } 101 } 102 103 107 private void initTable() { 108 table.setText(0, 0, "Sender"); 110 table.setText(0, 1, "Email"); 111 table.setText(0, 2, "Subject"); 112 table.setWidget(0, 3, navBar); 113 table.getRowFormatter().setStyleName(0, "mail-ListHeader"); 114 115 for (int i = 0; i < VISIBLE_EMAIL_COUNT; ++i) { 117 table.setText(i + 1, 0, ""); 118 table.setText(i + 1, 1, ""); 119 table.setText(i + 1, 2, ""); 120 table.getCellFormatter().setWordWrap(i + 1, 0, false); 121 table.getCellFormatter().setWordWrap(i + 1, 1, false); 122 table.getCellFormatter().setWordWrap(i + 1, 2, false); 123 table.getFlexCellFormatter().setColSpan(i + 1, 2, 2); 124 } 125 } 126 127 132 private void selectRow(int row) { 133 MailItem item = MailItems.getMailItem(startIndex + row); 136 if (item == null) { 137 return; 138 } 139 140 styleRow(selectedRow, false); 141 styleRow(row, true); 142 143 item.read = true; 144 selectedRow = row; 145 Mail.get().displayItem(item); 146 } 147 148 private void styleRow(int row, boolean selected) { 149 if (row != -1) { 150 if (selected) { 151 table.getRowFormatter().addStyleName(row + 1, "mail-SelectedRow"); 152 } else { 153 table.getRowFormatter().removeStyleName(row + 1, "mail-SelectedRow"); 154 } 155 } 156 } 157 158 private void update() { 159 int count = MailItems.getMailItemCount(); 161 int max = startIndex + VISIBLE_EMAIL_COUNT; 162 if (max > count) { 163 max = count; 164 } 165 166 newerButton.setVisible(startIndex != 0); 167 olderButton.setVisible(startIndex + VISIBLE_EMAIL_COUNT < count); 168 countLabel.setText("" + (startIndex + 1) + " - " + max + " of " + count); 169 170 int i = 0; 172 for (; i < VISIBLE_EMAIL_COUNT; ++i) { 173 if (startIndex + i >= MailItems.getMailItemCount()) { 175 break; 176 } 177 178 MailItem item = MailItems.getMailItem(startIndex + i); 179 180 table.setText(i + 1, 0, item.sender); 183 table.setText(i + 1, 1, item.email); 184 table.setText(i + 1, 2, item.subject); 185 } 186 187 for (; i < VISIBLE_EMAIL_COUNT; ++i) { 189 table.setHTML(i + 1, 0, " "); 190 table.setHTML(i + 1, 1, " "); 191 table.setHTML(i + 1, 2, " "); 192 } 193 194 if (selectedRow == -1) { 196 selectRow(0); 197 } 198 } 199 } 200 | Popular Tags |