private void updateSearchControls() {
    // setup search controls
    if (currentSource != null && currentSource.isSearchable()) {

      panel.updateCurrentMatchDisplay(currentSource.currentItem());
      panel.updateTotaMatcheslDisplay(currentSource.getNumberHits());

      if (currentSource.hasNextItem() || currentSource.hasNextPage()) {
        panel.enableNextMatchControl(true);
      } else {
        panel.enableNextMatchControl(false);
      }

      if (currentSource.hasPreviousItem() || currentSource.hasPreviousPage()) {
        panel.enablePrevMatchControl(true);
      } else {
        panel.enablePrevMatchControl(false);
      }

    } else {
      panel.enableNextMatchControl(false);
      panel.enablePrevMatchControl(false);
      panel.updateCurrentMatchDisplay(0);
      panel.updateTotaMatcheslDisplay(0);
    }
  }
 @Override
 public Component getComponent() {
   if (panel == null) {
     panel = new ExtractedContentPanel();
     panel.addPrevMatchControlListener(new PrevFindActionListener());
     panel.addNextMatchControlListener(new NextFindActionListener());
     panel.addPrevPageControlListener(new PrevPageActionListener());
     panel.addNextPageControlListener(new NextPageActionListener());
     panel.addSourceComboControlListener(new SourceChangeActionListener());
   }
   return panel;
 }
  private void updatePageControls() {
    if (currentSource == null) return;

    final int currentPage = currentSource.getCurrentPage();
    final int totalPages = currentSource.getNumberPages();
    panel.updateTotalPageslDisplay(totalPages);
    panel.updateCurrentPageDisplay(currentPage);

    if (totalPages == 1) {
      panel.enableNextPageControl(false);
      panel.enablePrevPageControl(false);
    } else {
      if (currentSource.hasNextPage()) {
        panel.enableNextPageControl(true);
      } else {
        panel.enableNextPageControl(false);
      }

      if (currentSource.hasPreviousPage()) {
        panel.enablePrevPageControl(true);
      } else {
        panel.enablePrevPageControl(false);
      }
    }
  }
  private void previousPage() {
    if (currentSource.hasPreviousPage()) {
      currentSource.previousPage();

      // set new text
      panel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
      panel.refreshCurrentMarkup();
      panel.setCursor(null);

      // update display
      panel.updateCurrentPageDisplay(currentSource.getCurrentPage());

      // scroll to current selection
      ExtractedContentViewer.this.scrollToCurrentHit();

      // update controls if needed
      if (!currentSource.hasPreviousPage()) {
        panel.enablePrevPageControl(false);
      }
      if (currentSource.hasNextPage()) {
        panel.enableNextPageControl(true);
      }

      updateSearchControls();
    }
  }
  private void scrollToCurrentHit() {
    final MarkupSource source = panel.getSelectedSource();
    if (source == null || !source.isSearchable()) {
      return;
    }

    // using invokeLater to wait for ComboBox selection to complete
    EventQueue.invokeLater(
        new Runnable() {

          @Override
          public void run() {
            panel.scrollToAnchor(source.getAnchorPrefix() + Integer.toString(source.currentItem()));
          }
        });
  }
 /**
  * Set the MarkupSources for the panel to display (safe to call even if the panel hasn't been
  * created yet)
  *
  * @param sources
  */
 private void setPanel(List<MarkupSource> sources) {
   if (panel != null) {
     panel.setSources(sources);
   }
 }
 @Override
 public void resetComponent() {
   setPanel(new ArrayList<MarkupSource>());
   panel.resetDisplay();
 }