package se.cth.hedgehogphoto.search.view;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.FocusListener;
import java.awt.event.MouseAdapter;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentListener;
import se.cth.hedgehogphoto.search.model.SearchConstants;
import se.cth.hedgehogphoto.search.model.SearchModel;
/**
* @author Barnabas Sapan
*/
@SuppressWarnings("serial")
public class JSearchBox extends JPanel implements Observer{
private Dimension searchBoxSize = new Dimension(100, 30);
private Dimension searchButtonSize = new Dimension(100, 30);
private JTextField searchBox;
private JButton searchButton;
private PreviewI preview;
private SearchModel model;
public JSearchBox(SearchModel model, PreviewI popup){
setLayout(new FlowLayout());
this.searchButton = new JButton(SearchConstants.SEARCH_BUTTON_TEXT);
this.searchButton.setPreferredSize(this.searchButtonSize);
this.searchBox = new JTextField(SearchConstants.PLACE_HOLDER_TEXT);
this.searchBox.setPreferredSize(this.searchBoxSize);
add(this.searchBox);
add(this.searchButton);
this.setModel(model);
this.setSearchPreview(popup);
addObserverToModel();
setPreferredSize(new Dimension(250, 30));
}
public JSearchBox(SearchModel model) {
this(model, null);
}
public void addObserverToModel() {
this.model.addObserver(this);
if (this.preview != null) {
this.model.addObserver(this.preview);
}
}
public void setSearchBoxFocusListener(FocusListener fl){
this.searchBox.addFocusListener(fl);
}
public void setSearchBoxDocumentListener(DocumentListener dl){
this.searchBox.getDocument().addDocumentListener(dl);
}
public void setSearchBoxActionListener(ActionListener al){
this.searchBox.addActionListener(al);
}
public void setSearchButtonListener(ActionListener ac){
this.searchButton.addActionListener(ac);
}
public String getPlaceholderText(){
return SearchConstants.PLACE_HOLDER_TEXT;
}
public Dimension getSearchBoxSize(){
return this.searchBox.getSize();
}
public void setSearchBoxSize(Dimension dimension){
this.searchBox.setPreferredSize(dimension);
}
public Dimension getSearchButtonSize(){
return searchButton.getSize();
}
public void setSearchButtonSize(Dimension dimension){
this.searchButton.setPreferredSize(dimension);
}
/**
* Specifies a popup search preview view. If not set no dynamic
* search preview will be shown.
* @param previw The search preview veiw
*/
public void setSearchPreview(PreviewI preview){
if (preview != null && preview.getPopupView() != null) {
this.preview = preview;
this.preview.setTextField(this.searchBox);
add(this.preview.getPopupView());
}
}
public void setModel(SearchModel model) {
this.model = model;
if (this.preview != null) {
this.preview.setModel(model);
}
}
public void setSearchBoxText(String txt){
this.searchBox.setText(txt);
}
public String getSearchBoxText(){
return this.searchBox.getText();
}
public void setPreviewComponentListener(MouseAdapter listener) {
if (this.preview != null) {
this.preview.addMouseListener(listener);
}
}
@Override
public void update(Observable o, Object arg) {
}
}