package me.rkfg.ns2gather.client; import java.util.Comparator; import java.util.Date; import me.rkfg.ns2gather.dto.ServerDTO; import me.rkfg.ns2gather.dto.SteamPlayerDTO; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler; import com.google.gwt.user.cellview.client.DataGrid; import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.view.client.ListDataProvider; public class ServerPlayersPanel extends DialogBox { private final SimplePanel simplePanel = new SimplePanel(); private final FlexTable flexTable = new FlexTable(); private final ListDataProvider<SteamPlayerDTO> dataProvider_players = new ListDataProvider<SteamPlayerDTO>(); private final DataGrid<SteamPlayerDTO> dataGrid_players = new DataGrid<SteamPlayerDTO>(); private final Label label_caption = new Label("Игроки сервера"); private final Button button_close = new Button("Закрыть"); DateTimeFormat format = DateTimeFormat.getFormat("HH:mm:ss"); long baseTime = format.parse("00:00:00").getTime(); ListHandler<SteamPlayerDTO> sortHandler = new ListHandler<SteamPlayerDTO>(null); private final TextColumn<SteamPlayerDTO> textColumn_name = new TextColumn<SteamPlayerDTO>() { @Override public String getValue(SteamPlayerDTO object) { return object.getName(); } }; private final TextColumn<SteamPlayerDTO> textColumn_score = new TextColumn<SteamPlayerDTO>() { @Override public String getValue(SteamPlayerDTO object) { return String.valueOf(object.getScore()); } }; private final TextColumn<SteamPlayerDTO> textColumn_time = new TextColumn<SteamPlayerDTO>() { @Override public String getValue(SteamPlayerDTO object) { Date time = new Date((long) (object.getConnectTime() * 1000) + baseTime); return format.format(time); } }; public ServerPlayersPanel() { setModal(false); setText("Данные о сервере"); flexTable.setCellPadding(5); setWidget(simplePanel); simplePanel.setSize("400px", "300px"); simplePanel.setWidget(flexTable); flexTable.setSize("100%", "100%"); flexTable.setWidget(0, 0, label_caption); flexTable.setWidget(1, 0, dataGrid_players); flexTable.getCellFormatter().setHeight(1, 0, "100%"); flexTable.getCellFormatter().setWidth(1, 0, "100%"); dataGrid_players.setSize("100%", "100%"); flexTable.getCellFormatter().setHorizontalAlignment(0, 0, HasHorizontalAlignment.ALIGN_CENTER); button_close.addClickHandler(new ButtonClickHandler()); flexTable.setWidget(2, 0, button_close); flexTable.getCellFormatter().setHorizontalAlignment(2, 0, HasHorizontalAlignment.ALIGN_CENTER); dataProvider_players.addDataDisplay(dataGrid_players); textColumn_name.setSortable(true); dataGrid_players.addColumn(textColumn_name, "Имя"); textColumn_score.setSortable(true); dataGrid_players.addColumn(textColumn_score, "Счёт"); textColumn_time.setSortable(true); dataGrid_players.addColumn(textColumn_time, "Время"); dataGrid_players.addColumnSortHandler(sortHandler); sortHandler.setComparator(textColumn_name, new Comparator<SteamPlayerDTO>() { @Override public int compare(SteamPlayerDTO o1, SteamPlayerDTO o2) { return o1.getName().compareTo(o2.getName()); } }); sortHandler.setComparator(textColumn_score, new Comparator<SteamPlayerDTO>() { @Override public int compare(SteamPlayerDTO o1, SteamPlayerDTO o2) { return o1.getScore() - o2.getScore(); } }); sortHandler.setComparator(textColumn_time, new Comparator<SteamPlayerDTO>() { @Override public int compare(SteamPlayerDTO o1, SteamPlayerDTO o2) { return Math.round(o1.getConnectTime() - o2.getConnectTime()); } }); } public void init(ServerDTO server) { label_caption.setText("Игроки сервера " + server.getName()); dataProvider_players.setList(server.getPlayers()); sortHandler.setList(dataProvider_players.getList()); } private class ButtonClickHandler implements ClickHandler { public void onClick(ClickEvent event) { hide(); } } }