/**
* InfoPage
* Copyright 2010 by Michael Peter Christen; mc@yacy.net, Frankfurt a. M., Germany
* First released 05.08.2010 at http://yacy.net
*
* $LastChangedDate$
* $LastChangedRevision$
* $LastChangedBy$
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program in the file lgpl21.txt
* If not, see <http://www.gnu.org/licenses/>.
*/
package net.yacy.gui;
import java.awt.Color;
import java.awt.Font;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JEditorPane;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.event.DocumentListener;
import javax.swing.text.JTextComponent;
import net.yacy.gui.framework.Browser;
import net.yacy.gui.framework.Layout;
import net.yacy.gui.framework.Switchboard;
import net.yacy.kelondro.util.OS;
public class InfoPage implements Layout {
private static final String COMMIT_ACTION = "commit";
private static final int width = 500;
private static final int height = 600;
private static final int textHeight = 18;
final String host;
final int port;
JTextComponent SearchBox;
public InfoPage(String host, int port) {
this.host = host; this.port = port;
}
private class CommitAction extends AbstractAction {
private static final long serialVersionUID = 3630229455629476865L;
@Override
public void actionPerformed(ActionEvent ev) {
//int pos = SearchBox.getSelectionEnd();
Browser.openBrowser("http://" + host + ":" + port + "/yacysearch.html?display=0&verify=true&contentdom=text&nav=all&maximumRecords=10&startRecord=0&resource=global&urlmaskfilter=.*&prefermaskfilter=&indexof=off&meanCount=5&query=" + SearchBox.getText().replace(' ', '+'));
SearchBox.setText("");
//SearchBox..insert(" ", pos);
//SearchBox.setCaretPosition(pos + 1);
}
}
@Override
public LayoutManager getPage(JComponent context, DocumentListener listener) {
GroupLayout page = new GroupLayout(context);
//String[] fnames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
//for (String fname: fnames) System.out.println("font: " + fname);
Font font = Font.decode("SansSerif");
if (font != null) font = font.deriveFont((float) 14.0);
//if (font != null) font = font.deriveFont(Font.BOLD);
SearchBox = new JTextField();
SearchBox.setText("search...");
SearchBox.setCaretPosition(0);
SearchBox.moveCaretPosition(9);
SearchBox.setFont(font.deriveFont((float) 14.0).deriveFont(Font.BOLD));
SearchBox.setSize(width + 4, textHeight);
SearchBox.setBorder(BorderFactory.createEmptyBorder());
SearchBox.setBackground(Color.decode("#EEEEDD"));
SearchBox.getDocument().addDocumentListener(listener);
InputMap im = SearchBox.getInputMap();
ActionMap am = SearchBox.getActionMap();
im.put(KeyStroke.getKeyStroke("ENTER"), COMMIT_ACTION);
am.put(COMMIT_ACTION, new CommitAction());
Switchboard.InfoBox = new JTextField();
Switchboard.InfoBox.setBorder(BorderFactory.createTitledBorder(""));
Switchboard.InfoBox.setSize(width, textHeight);
Switchboard.InfoBox.setBorder(BorderFactory.createEmptyBorder());
Switchboard.InfoBox.setBackground(Color.decode("#EEEEDD"));
Switchboard.InfoBox.setText("search window initialized");
Switchboard.InfoBox.setFont(font.deriveFont((float) 11.0));
// make the scroll pane that contains the search result
JComponent mainText = new JEditorPane();
mainText.setPreferredSize(new java.awt.Dimension(480, 590));
String infotext =
"This is a YaCy GUI wrappper.\n\n" +
"The YaCy administration interface is in your browser\n" +
"just open http://" + this.host + ":" + this.port + "\n\n" +
"You may also enter a search term and press enter,\n" +
"then the query will be opened in your browser\n";
if (OS.isMacArchitecture) infotext += "\nThe application data on Mac is stored at ~Library/YaCy/\n";
((JEditorPane) mainText).setText(infotext);
//page.add(new splashCanvas());
//SplashScreen splash = SplashScreen.getSplashScreen();
//Graphics2D g2 = splash.createGraphics();
//splash.update();
JScrollPane pane = new JScrollPane();
pane.setViewportView(mainText);
// combine search box and scroll pane
page.setVerticalGroup(page.createSequentialGroup()
.addComponent(SearchBox, GroupLayout.PREFERRED_SIZE, textHeight + 4, GroupLayout.PREFERRED_SIZE)
.addComponent(pane, 0, height, Short.MAX_VALUE) // height
.addComponent(Switchboard.InfoBox, GroupLayout.PREFERRED_SIZE, textHeight, GroupLayout.PREFERRED_SIZE)
);
page.setHorizontalGroup(page.createSequentialGroup()
.addGroup(page.createParallelGroup()
.addComponent(SearchBox, GroupLayout.Alignment.LEADING, 0, width, Short.MAX_VALUE) // width
.addComponent(pane, GroupLayout.Alignment.LEADING, 0, width, Short.MAX_VALUE)
.addComponent(Switchboard.InfoBox, GroupLayout.Alignment.TRAILING, 0, width, Short.MAX_VALUE)));
return page;
}
}