Package nl.siegmann.epublib.viewer

Source Code of nl.siegmann.epublib.viewer.NavigationBar

package nl.siegmann.epublib.viewer;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToolBar;

import nl.siegmann.epublib.browsersupport.NavigationEvent;
import nl.siegmann.epublib.browsersupport.NavigationEventListener;
import nl.siegmann.epublib.browsersupport.NavigationHistory;
import nl.siegmann.epublib.browsersupport.Navigator;
import nl.siegmann.epublib.domain.Book;
import nl.siegmann.epublib.search.SearchIndex;
import nl.siegmann.epublib.search.SearchResult;
import nl.siegmann.epublib.search.SearchResults;
import nl.siegmann.epublib.util.ToolsResourceUtil;

/**
* A toolbar that contains the history back and forward buttons and the page title.
*
* @author paul.siegmann
*
*/
public class NavigationBar extends JToolBar implements NavigationEventListener {
 
  /**
   *
   */
  private static final long serialVersionUID = 1166410773448311544L;
  private JTextField titleField;
  private JTextField searchField;
  private final NavigationHistory navigationHistory;
  private Navigator navigator;
  private SearchIndex searchIndex = new SearchIndex();
  private String previousSearchTerm = null;
  private int searchResultIndex = -1;
  private SearchResults searchResults;
 
  public NavigationBar(Navigator navigator) {
    this.navigationHistory = new NavigationHistory(navigator);
    this.navigator = navigator;
    navigator.addNavigationEventListener(this);
    addHistoryButtons();
    titleField = (JTextField) add(new JTextField());
    addSearchButtons();
    initBook(navigator.getBook());
  }

  private void initBook(Book book) {
    if (book == null) {
      return;
    }
    searchIndex.initBook(book);
  }

  private void addHistoryButtons() {
    Font historyButtonFont = new Font("SansSerif", Font.BOLD, 24);
    JButton previousButton = ViewerUtil.createButton("history-previous", "<=");
    previousButton.setFont(historyButtonFont);
//    previousButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, Event.CTRL_MASK));
     
    previousButton.addActionListener(new ActionListener() {
     
      @Override
      public void actionPerformed(ActionEvent e) {
        navigationHistory.move(-1);
      }
    });
   
    add(previousButton);
   
    JButton nextButton = ViewerUtil.createButton("history-next", "=>");
    nextButton.setFont(historyButtonFont);
    nextButton.addActionListener(new ActionListener() {
     
      @Override
      public void actionPerformed(ActionEvent e) {
        navigationHistory.move(1);
      }
    });
    add(nextButton);
  }

  private void doSearch(int move) {
    String searchTerm = searchField.getText();
    if (searchTerm.equals(previousSearchTerm)) {
      searchResultIndex += move;
    } else {
      searchResults = searchIndex.doSearch(searchTerm);
      previousSearchTerm = searchTerm;
      searchResultIndex = 0;
    }
    if (searchResultIndex < 0) {
      searchResultIndex = searchResults.size() - 1;
    } else if (searchResultIndex >= searchResults.size()) {
      searchResultIndex = 0;
    }
    if (! searchResults.isEmpty()) {
      SearchResult searchResult = searchResults.getHits().get(searchResultIndex);
      navigator.gotoResource(searchResult.getResource(), searchResult.getPagePos(), NavigationBar.this);
    }
   
  }
 
  private void addSearchButtons() {
    JPanel searchForm = new JPanel(new BorderLayout());
    searchForm.setPreferredSize(new Dimension(200, 28));
    Font historyButtonFont = new Font("SansSerif", Font.BOLD, 20);
    JButton previousButton = ViewerUtil.createButton("search-previous", "<");
    previousButton.setFont(historyButtonFont);
//    previousButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, Event.CTRL_MASK));
     
    previousButton.addActionListener(new ActionListener() {
     
      @Override
      public void actionPerformed(ActionEvent e) {
        doSearch(-1);
      }
    });
   
    searchForm.add(previousButton, BorderLayout.WEST);

    searchField = new JTextField();
//    JPanel searchInput = new JPanel();
//    searchInput.add(new JLabel(ViewerUtil.createImageIcon("search-icon")));
//    searchInput.add(searchField);
    searchField.setMinimumSize(new Dimension(100, 20));
    searchField.addKeyListener(new KeyListener() {
     
      @Override
      public void keyTyped(KeyEvent keyEvent) {
      }

      @Override
      public void keyPressed(KeyEvent e) {
      }

      @Override
      public void keyReleased(KeyEvent keyEvent) {
        if (keyEvent.getKeyCode() == KeyEvent.VK_ENTER) {
          doSearch(1);
        }
      }
    });
//    searchInput.setMinimumSize(new Dimension(140, 20));
    searchForm.add(searchField, BorderLayout.CENTER);
    JButton nextButton = ViewerUtil.createButton("search-next", ">");
    nextButton.setFont(historyButtonFont);
    nextButton.addActionListener(new ActionListener() {
     
      @Override
      public void actionPerformed(ActionEvent e) {
        doSearch(1);
      }
    });
    searchForm.add(nextButton, BorderLayout.EAST);
    add(searchForm);
  }

  @Override
  public void navigationPerformed(NavigationEvent navigationEvent) {
    if (navigationEvent.isBookChanged()) {
      initBook(navigationEvent.getCurrentBook());
    }
    if (navigationEvent.getCurrentResource() != null) {
      String title = ToolsResourceUtil.getTitle(navigationEvent.getCurrentResource());
      titleField.setText(title);
    }
  }
}
TOP

Related Classes of nl.siegmann.epublib.viewer.NavigationBar

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.