public DeviceDiskViewImpl() {
    initWidget(uiBinder.createAndBindUi(this));

    for (String pageSize : DevicePageSize.getPageSizeList()) {
      pageSizeList.addItem(pageSize);
    }
    pageSizeList.setSelectedIndex(DevicePageSize.getPageSizeSelectedIndex());
    pageSizeList.addChangeHandler(
        new ChangeHandler() {

          @Override
          public void onChange(ChangeEvent event) {
            DevicePageSize.setPageSizeSelectedIndex(pageSizeList.getSelectedIndex());
            if (table != null) {
              table.setPageSize(DevicePageSize.getPageSize());
            }
          }
        });

    selection = new MultiSelectionModel<SearchResultRow>(SearchResultRow.KEY_PROVIDER);
    selection.addSelectionChangeHandler(
        new SelectionChangeEvent.Handler() {

          @Override
          public void onSelectionChange(SelectionChangeEvent event) {
            updateSearchResultButtonStatus();
            presenter.onSelectionChange(selection.getSelectedSet());
          }
        });
    updateSearchResultButtonStatus();

    popup.setAutoHideEnabled(true);
  }
  @Override
  public void showSearchResult(SearchResult result) {
    if (table == null) {
      table = new DeviceSearchResultTable(result.getDescs(), selection);
      table.setRangeChangeHandler(presenter);
      table.setClickHandler(presenter);
      table.load();
      resultPanel.add(table);
      final DeviceColumnPopupPanel panel =
          new DeviceColumnPopupPanel(
              new DeviceColumnPopupPanel.Presenter() {

                @Override
                public void onValueChange(int column, boolean value) {
                  if (table != null) {
                    table.setVisible(column, value);
                  }
                }
              });
      columnButton.addClickHandler(
          new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
              panel.popup(columnButton);
            }
          });
      initColumnPanel(result.getDescs(), panel);
    }
    table.setData(result);
    if (table.getPageSize() != DevicePageSize.getPageSize()) {
      table.setPageSize(DevicePageSize.getPageSize());
      pageSizeList.setSelectedIndex(DevicePageSize.getPageSizeSelectedIndex());
    }
  }