Files
secondo/Javagui/viewer/hoese/algebras/Dspltext.java

903 lines
27 KiB
Java
Raw Normal View History

2026-01-23 17:03:45 +08:00
//This file is part of SECONDO.
//Copyright (C) 2004, University in Hagen, Department of Computer Science,
//Database Systems for New Applications.
//SECONDO is free software; you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation; either version 2 of the License, or
//(at your option) any later version.
//SECONDO 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 General Public License for more details.
//You should have received a copy of the GNU General Public License
//along with SECONDO; if not, write to the Free Software
//Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
package viewer.hoese.algebras;
import sj.lang.ListExpr;
import viewer.*;
import viewer.hoese.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.EditorKit;
import javax.swing.text.StyledEditorKit;
import javax.swing.text.Document;
import tools.Base64Decoder;
import tools.Reporter;
import java.io.*;
import java.util.SortedMap;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.Iterator;
// for pdf display
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
/**
* A displayclass for the html formatted code
*/
public class Dspltext extends DsplGeneric implements ExternDisplay{
private boolean defined;
/** Creates a new Instance of this.
*/
public Dspltext(){
if(Display==null){
Display = new TextViewerFrame();
}
}
public String toString(){
return Entry;
}
public void init (String name, int nameWidth, int indent, ListExpr type,ListExpr value, QueryResult qr)
{
String T = name;
String V;
if (value.listLength()==1){
value = value.first();
}
defined = !isUndefined(value);
if(!defined){
V = "undefined";
theList = ListExpr.textAtom(V);
}else{
if(value.atomType()!=ListExpr.TEXT_ATOM){
V = "error in value ";
theList = ListExpr.textAtom(V);
defined = false;
}
else{
V = value.textValue();
theList = value;
}
}
T=extendString(T,nameWidth, indent);
String Text = V;
computeType(type, Text);
if(Type==PLAIN_TYPE){
if(Text.length()<=MAX_DIRECT_DISPLAY_LENGTH){ // short Text
Entry = T+" : "+ Text;
qr.addEntry(Entry); // avoid the possibility to pop up a window
return;
} else{ // long plain text
Entry = T+" : "+ Text.substring(0,MAX_DIRECT_DISPLAY_LENGTH-4).replace('\n',' ')+" ...";
}
}else if(Type==HTML_TYPE){
Entry = T + " : <html> ...";
} else if(Type==RTF_TYPE){
Entry = T + " : RTF ...";
} else if(Type==PDF_TYPE){
Entry = T + " : PDF ...";
}
qr.addEntry(this);
return;
}
public void displayExtern(){
Display.setSource(this);
Display.setVisible(true);
}
public boolean isExternDisplayed(){
return Display.isVisible() && this.equals(Display.getSource());
}
private boolean checkForHtml(String Text,int offset){
int restlength = Text.length()-offset-1;
if(restlength<4)
return false;
String tag = Text.substring(offset,offset+5).toLowerCase();
if("<html".equals(tag))
return true;
// search for "<html ignoring case
int max = Text.length();
int index = offset+1;
int state = 1;
boolean found = false;
while(!found && index<max-5){
char c = Text.charAt(index);
index++;
switch(state){
case 1 : if(c=='<') state = 2;break;
case 2 : if(c=='h' || c=='H') state=3; else state=1; break;
case 3 : if(c=='t' || c=='T') state=4; else state=1; break;
case 4 : if(c=='m' || c=='M') state=5; else state=1; break;
case 5 : if(c=='l' || c=='L') found=true; else state=1; break;
default: Reporter.writeError("Undefined state");
}
if(c=='<') state = 2;
}
return found;
}
/** sets the type of this Text
* depending on some keywords
**/
protected void computeType(ListExpr type, String Text){
if(Text.startsWith("JVBE") ){ // base 64 encodes "%PD"
Type = PDF_TYPE;
return;
}
// search for <html or { *\rtf at the begin of the document ignoring cases
for(int i=0;i<Text.length()-5;i++){
char c = Text.charAt(i);
if(c=='<'){
if(checkForHtml(Text,i))
Type=HTML_TYPE;
else
Type=PLAIN_TYPE;
return;
} else if(c=='{'){ // possible rtf format
// search for the next non-whitespace
for(int j=i+1;j<Text.length()-4;j++){
c = Text.charAt(j);
if(!isWhiteSpace(c)){
String test = Text.substring(j,j+4);
if("\\rtf".equals(test))
Type = RTF_TYPE;
else
Type = PLAIN_TYPE;
return;
}
}
Type = PLAIN_TYPE; // no \rtf found
return;
}
else{
if(!isWhiteSpace(c)){ // not an html document
Type = PLAIN_TYPE;
return;
}
}
}
// only whitespaces in text
Type = PLAIN_TYPE;
}
private static boolean isWhiteSpace(char c){
return WHITESPACES.indexOf(c)>=0;
}
private static TextViewerFrame Display=null;
private String Entry;
private ListExpr theList;
protected int Type; // contains the type which is the text (probably)
protected static final int PLAIN_TYPE=0;
protected static final int HTML_TYPE=1;
protected static final int RTF_TYPE=2;
protected static final int PDF_TYPE=3;
private static final int MAX_DIRECT_DISPLAY_LENGTH = 30;
private static final String WHITESPACES = " \t\n\r";
private static class TextViewerFrame extends JFrame{
JComboBox encodingCB;
private String encoding=stdEncoding;
private static String stdEncoding;
static {
try{
stdEncoding = System.getProperty("file.encoding");
} catch(Exception e){
stdEncoding=null;
}
if(stdEncoding==null){
stdEncoding = "UTF-8";
}
}
public TextViewerFrame(){
getContentPane().setLayout(new BorderLayout());
Display = new JTextPane();
if(EKHtml==null){
EKHtml = JTextPane.createEditorKitForContentType("text/html");
EKRtf = JTextPane.createEditorKitForContentType("text/rtf");
}
TextScrollPane = new JScrollPane(Display);
TextPanel = new JPanel(new BorderLayout());
JPanel SearchPanel = new JPanel();
SearchPanel.add(CaseSensitive);
SearchPanel.add(SearchField);
SearchPanel.add(SearchBtn);
SearchBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
searchText();
}
});
SearchField.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent evt){
if(evt.getKeyCode()==KeyEvent.VK_ENTER)
searchText();
}
public void keyTyped(KeyEvent evt){}
public void keyReleased(KeyEvent evt){}
});
TextPanel.add(TextScrollPane,BorderLayout.CENTER);
TextPanel.add(SearchPanel,BorderLayout.SOUTH);
getContentPane().add(TextPanel,BorderLayout.CENTER);
CloseBtn = new JButton("Close");
CloseBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
TheText=null;
TextViewerFrame.this.setVisible(false);
}
} );
fileChooser = new JFileChooser();
SaveBtn = new JButton("Save");
SaveBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
if(fileChooser.showSaveDialog(TextViewerFrame.this)==JFileChooser.APPROVE_OPTION){
File F = TextViewerFrame.this.fileChooser.getSelectedFile();
try{
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(F));
if(TextViewerFrame.this.Source.Type!=PDF_TYPE){
out.write(TheText.getBytes());
} else{
out.write(Base64Decoder.decode(TheText));
}
out.flush();
out.close();
}catch(Exception e){
Reporter.debug(e);
Reporter.showError("Error in saving file ");
}
}
}
});
// create the pdf viewer
if(pdf_viewer==null){
try{
pdf_viewer = new PDFPanel();
}catch(Exception e){
Reporter.writeError("cannot initialize pdf-viewer");
}
}
encodingCB = new JComboBox();
Iterator acs = Charset.availableCharsets().entrySet().iterator();
//for(int i=0; i<encodings.length; i++){
// encodingCB.addItem(encodings[i]);
//}
while(acs.hasNext()){
Map.Entry e = (Map.Entry) acs.next();
Charset cs = (Charset) e.getValue();
encodingCB.addItem(cs.displayName());
}
encodingCB.setSelectedItem(stdEncoding);
encodingCB.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
try{
TextViewerFrame.this.TheText = new String(TextViewerFrame.this.Display.getText().getBytes(encoding));
} catch(Exception e){
TextViewerFrame.this.TheText = TextViewerFrame.this.Display.getText();
}
String enc = (String) encodingCB.getSelectedItem();
encoding = enc;
setToPlain(false);
}
});
PlainBtn = new JButton("plain");
resetBtn = new JButton("reset");
resetBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
setSource(Source);
}
});
HtmlBtn = new JButton("html");
RtfBtn = new JButton("rtf");
PdfBtn = new JButton("pdf");
ActionListener FormatSwitcher = new ActionListener(){
public void actionPerformed(ActionEvent evt){
TextViewerFrame.this.setTitle("");
Object src = evt.getSource();
LastSearchPos=0;
// get the text if it is editable
if(TextViewerFrame.this.Display.isEditable()&&!ISPDF){
try{
TextViewerFrame.this.TheText = new String(TextViewerFrame.this.Display.getText().getBytes(encoding));
} catch(Exception e){
TextViewerFrame.this.TheText = TextViewerFrame.this.Display.getText();
}
}
Container CP=TextViewerFrame.this.getContentPane();
if(TextViewerFrame.this.PlainBtn.equals(src)){
setToPlain(false);
} else
if(TextViewerFrame.this.HtmlBtn.equals(src)){
try{
TextViewerFrame.this.Display.setEditorKit(TextViewerFrame.EKHtml);
TextViewerFrame.this.Display.setEditable(false);
TextViewerFrame.this.Display.setText(TextViewerFrame.this.TheText);
TextViewerFrame.this.Display.setCaretPosition(0);
TextViewerFrame.this.Source.Type = Dspltext.HTML_TYPE;
TextViewerFrame.this.PlainBtn.setEnabled(true);
TextViewerFrame.this.encodingCB.setEnabled(false);
TextViewerFrame.this.HtmlBtn.setEnabled(false);
TextViewerFrame.this.RtfBtn.setEnabled(true);
TextViewerFrame.this.PdfBtn.setEnabled(true);
if(TextViewerFrame.this.ISPDF){
CP.remove(pdf_viewer);
CP.add(TextPanel,BorderLayout.CENTER);
ISPDF=false;
TextViewerFrame.this.invalidate();
TextViewerFrame.this.validate();
TextViewerFrame.this.repaint();
}
}catch(Exception e){
setToPlain(true);
}
}else
if(TextViewerFrame.this.RtfBtn.equals(src)){
try{
TextViewerFrame.this.Display.setEditorKit(TextViewerFrame.EKRtf);
TextViewerFrame.this.Display.setEditable(false);
TextViewerFrame.this.Display.setText(TextViewerFrame.this.TheText);
TextViewerFrame.this.Display.setCaretPosition(0);
TextViewerFrame.this.Source.Type = Dspltext.RTF_TYPE;
TextViewerFrame.this.PlainBtn.setEnabled(true);
TextViewerFrame.this.encodingCB.setEnabled(false);
TextViewerFrame.this.HtmlBtn.setEnabled(true);
TextViewerFrame.this.RtfBtn.setEnabled(false);
TextViewerFrame.this.PdfBtn.setEnabled(true);
if(TextViewerFrame.this.ISPDF){
CP.remove(pdf_viewer);
CP.add(TextPanel,BorderLayout.CENTER);
ISPDF=false;
TextViewerFrame.this.invalidate();
TextViewerFrame.this.validate();
TextViewerFrame.this.repaint();
}
} catch(Exception e){
setToPlain(true);
}
}else
if(TextViewerFrame.this.PdfBtn.equals(src)){
byte[] content = Base64Decoder.decode(TheText);
if(pdf_viewer.setPdfData(content)){
TextViewerFrame.this.PlainBtn.setEnabled(true);
TextViewerFrame.this.encodingCB.setEnabled(false);
TextViewerFrame.this.HtmlBtn.setEnabled(true);
TextViewerFrame.this.RtfBtn.setEnabled(true);
TextViewerFrame.this.PdfBtn.setEnabled(false);
if(!TextViewerFrame.this.ISPDF ){
CP.remove(TextPanel);
CP.add(pdf_viewer,BorderLayout.CENTER);
ISPDF=true;
TextViewerFrame.this.invalidate();
TextViewerFrame.this.validate();
TextViewerFrame.this.repaint();
}
}else {
setToPlain(true);
}
}
}
};
PlainBtn.addActionListener(FormatSwitcher);
HtmlBtn.addActionListener(FormatSwitcher);
RtfBtn.addActionListener(FormatSwitcher);
PdfBtn.addActionListener(FormatSwitcher);
JPanel ControlPanel = new JPanel(new BorderLayout());
JPanel FormatPanel1 = new JPanel();
FormatPanel1.setLayout(new BorderLayout());
FormatPanel1.add(new JLabel("show as : "), BorderLayout.NORTH);
JPanel FormatPanel = new JPanel();
JPanel p1 = new JPanel(new GridLayout(3,1));
p1.add(PlainBtn);
p1.add(encodingCB);
p1.add(resetBtn);
FormatPanel.add(p1);
FormatPanel.add(HtmlBtn);
FormatPanel.add(RtfBtn);
FormatPanel.add(PdfBtn);
FormatPanel1.add(FormatPanel, BorderLayout.CENTER);
ControlPanel.add(FormatPanel1,BorderLayout.NORTH);
JPanel closePanel = new JPanel();
closePanel.add(CloseBtn);
ControlPanel.add(closePanel,BorderLayout.CENTER);
ControlPanel.add(SaveBtn,BorderLayout.SOUTH);
getContentPane().add(ControlPanel,BorderLayout.WEST);
setSize(640,480);
}
/** searchs the text in the textfield in the document and
* marks its if found
*/
private void searchText(){
String Text = SearchField.getText();
if(Text.length()==0){
Reporter.showError("no text to search");
return;
}
try{
Document Doc = Display.getDocument();
String DocText = Doc.getText(0,Doc.getLength());
if(!CaseSensitive.isSelected()){
DocText = DocText.toUpperCase();
Text = Text.toUpperCase();
}
int pos = DocText.indexOf(Text,LastSearchPos);
if(pos<0){
Reporter.showError("end of text is reached");
LastSearchPos=0;
return;
}
pos = pos;
int i1 = pos;
int i2 = pos+Text.length();
LastSearchPos = pos+1;
Display.setCaretPosition(i1);
Display.moveCaretPosition(i2);
Display.getCaret().setSelectionVisible(true);
} catch(Exception e){
Reporter.debug(e);
Reporter.showError("error in searching text");
}
}
private void setToPlain(boolean isError){
if(isError){
Reporter.showError("Cannot show the text in specified format\n"+
", switch to plain text");
}
LastSearchPos=0;
String contentType = "text/plain; charset="+encoding;
// Display.setContentType(contentType);
EditorKit EKPlain = Display.getEditorKitForContentType(contentType);
/*
Before switching to plain text, we switch to rtf.
This is a work around to avoid display failures when switching directly
from html to plain text.
*/
Display.setEditorKit(EKRtf);
Display.setEditorKit(EKPlain);
Display.setEditable(true);
try{
TextViewerFrame.this.Display.read( new InputStreamReader(
new ByteArrayInputStream(
TextViewerFrame.this.TheText.getBytes()),encoding),
null);
} catch(Exception e){
Reporter.debug(e);
TextViewerFrame.this.Display.setText(TextViewerFrame.this.TheText);
}
Display.setCaretPosition(0);
Source.Type = Dspltext.PLAIN_TYPE;
PlainBtn.setEnabled(false);
encodingCB.setEnabled(true);
HtmlBtn.setEnabled(true);
RtfBtn.setEnabled(true);
PdfBtn.setEnabled(true);
Display.updateUI();
if(ISPDF){
getContentPane().remove(pdf_viewer);
getContentPane().add(TextPanel,BorderLayout.CENTER);
ISPDF=false;
}
invalidate();
validate();
repaint();
}
public void setSource(Dspltext S){
Source = S;
LastSearchPos=0;
PlainBtn.setEnabled(true);
encodingCB.setEnabled(false);
HtmlBtn.setEnabled(true);
RtfBtn.setEnabled(true);
PdfBtn.setEnabled(true);
if(S.Type==Dspltext.PLAIN_TYPE){
Display.setContentType("text/plain; charset="+encoding);
PlainBtn.setEnabled(false);
encodingCB.setEnabled(true);
Display.setEditable(true);
}else if(S.Type==Dspltext.HTML_TYPE){
Display.setEditorKit(EKHtml);
HtmlBtn.setEnabled(false);
Display.setEditable(false);
} else if(S.Type==Dspltext.RTF_TYPE){
Display.setEditorKit(EKRtf);
RtfBtn.setEnabled(false);
Display.setEditable(false);
}
TheText = S.theList.textValue();
if(S.Type!=PDF_TYPE){
try{
if(PlainBtn.isEnabled()){
Display.setText(TheText);
} else { // plain text
TextViewerFrame.this.Display.read( new InputStreamReader(
new ByteArrayInputStream(
TheText.getBytes()),encoding),
null);
}
} catch(Exception e){
setToPlain(true);
}
Display.setCaretPosition(0);// go to top
if(ISPDF){
ISPDF=false;
getContentPane().remove(pdf_viewer);
getContentPane().add(TextPanel,BorderLayout.CENTER);
invalidate();validate();repaint();
}
} else{
try{
byte[] content = Base64Decoder.decode(TheText);
if(!pdf_viewer.setPdfData(content)){
setToPlain(true);
return;
}
PdfBtn.setEnabled(false);
if(!ISPDF){
getContentPane().remove(TextPanel);
getContentPane().add(pdf_viewer,BorderLayout.CENTER);
ISPDF=true;
invalidate();validate();repaint();
}
}catch(Exception e){
Reporter.debug(e);
setToPlain(true);
}
}
}
public Dspltext getSource(){
return Source;
}
private class PDFPanel extends JPanel{
public PDFPanel(){
super();
pageField.setHorizontalAlignment(JTextField.CENTER);
setLayout(new BorderLayout());
JPanel CommandPanel = new JPanel();
CommandPanel.add(FirstBtn);
CommandPanel.add(PrevBtn);
CommandPanel.add(pageField);
CommandPanel.add(NextBtn);
CommandPanel.add(LastBtn);
CommandPanel.add(new JLabel(" "));
CommandPanel.add(GBtn);
CommandPanel.add(LBtn);
CommandPanel.add(FitBtn);
PdfScrollPane = new JScrollPane(CurrentPage);
add(PdfScrollPane,BorderLayout.CENTER);
add(CommandPanel,BorderLayout.SOUTH);
ActionListener Control= new ActionListener(){
public void actionPerformed(ActionEvent evt){
Object src = evt.getSource();
if(!dataAvailable)
return;
int newpage = page;
if(src.equals(FirstBtn)){
newpage = 0;
} else if(src.equals(PrevBtn)&& page>0){
newpage = page -1;
} else if(src.equals(NextBtn) && page < NumberOfPages-1){
newpage = page+1;
} else if(src.equals(LastBtn)){
newpage=NumberOfPages-1;
}
setPage(newpage);
}
};
pageField.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String p = pageField.getText().trim();
try{
int pn = Integer.parseInt(p);
setPage(pn-1);
} catch(NumberFormatException a ){
Reporter.showError("Invalid page number");
}
}
});
FirstBtn.addActionListener(Control);
PrevBtn.addActionListener(Control);
NextBtn.addActionListener(Control);
LastBtn.addActionListener(Control);
ActionListener Magnifier = new ActionListener(){
public void actionPerformed(ActionEvent evt){
Object src = evt.getSource();
if(src.equals(GBtn))
scale=scale*SCALEFACTOR;
if(src.equals(LBtn))
scale=Math.max(MINSCALE,scale/SCALEFACTOR);
if(src.equals(FitBtn))
scale = getFitSF();
if(!dataAvailable){
return;
}
try{
CurrentPage.setImage(pdfRenderer.renderImage(page,scale));
PdfScrollPane.invalidate();
TextViewerFrame.this.invalidate();
TextViewerFrame.this.validate();
TextViewerFrame.this.repaint();
}catch(Exception e){
Reporter.debug(e);
CurrentPage.setImage(null);
PdfScrollPane.invalidate();
PDFPanel.this.repaint();
}
}};
GBtn.addActionListener(Magnifier);
LBtn.addActionListener(Magnifier);
FitBtn.addActionListener(Magnifier);
}
private void setPage(int newpage){
if(newpage<0) newpage = 0;
if(newpage>NumberOfPages-1) newpage = NumberOfPages-1;
pageField.setText(""+(newpage+1));
if(newpage!=page){
page=newpage;
try{
pageField.setText(""+(page+1));
CurrentPage.setImage(pdfRenderer.renderImage(page,scale));
PdfScrollPane.invalidate();
TextViewerFrame.this.invalidate();
TextViewerFrame.this.validate();
TextViewerFrame.this.repaint();
} catch(Exception e){
Reporter.debug(e);
CurrentPage.setImage(null);
PdfScrollPane.invalidate();
TextViewerFrame.this.invalidate();
TextViewerFrame.this.validate();
TextViewerFrame.this.repaint();
}
}
}
private class PicturePanel extends JPanel{
public void paint(Graphics g){
if(image!=null)
g.drawImage(image,0,0,null);
}
public Dimension getPreferredSize(){
return MyDimension;
}
public Dimension getMaximumSize(){
return MyDimension;
}
public Dimension getMinimumSize(){
return MyDimension;
}
public void setImage(Image image){
this.image = image;
if(image!=null){
MyDimension.width = image.getWidth(null);
MyDimension.height = image.getHeight(null);
}else{
MyDimension.width=MyDimension.height=10;
}
}
Image image;
Dimension MyDimension = new Dimension();
};
private PicturePanel CurrentPage= new PicturePanel();
public boolean setPdfData(byte[] data){
try{
if(pdfDocument!=null){
pdfDocument.close();
pdfDocument = null;
}
pdfDocument = PDDocument.load(data);
NumberOfPages = pdfDocument.getNumberOfPages();
dataAvailable=true;
pdfRenderer = new PDFRenderer(pdfDocument);
page = 0;
scale = getFitSF();
pageField.setText(""+1);
CurrentPage.setImage(pdfRenderer.renderImage(0,scale));
String title = pdfDocument.getDocumentInformation().getTitle();
if(title==null){
title = "";
}
String author = pdfDocument.getDocumentInformation().getAuthor();
if(author==null){
author = "";
}
String sep = (author.length()>0 && title.length()>0)?" : " :"";
TextViewerFrame.this.setTitle(author + sep + title);;
TextViewerFrame.this.invalidate();
TextViewerFrame.this.validate();
TextViewerFrame.this.repaint();
return true;
} catch(Exception e){
TextViewerFrame.this.setTitle("");
Reporter.debug(e);
NumberOfPages = -1;
dataAvailable=false;
return false;
}
}
private float getFitSF(){
if(pdfRenderer == null){
return 1;
}
try{
Image img = pdfRenderer.renderImage(page,1);
Dimension dim = PdfScrollPane.getSize();
Insets in = PdfScrollPane.getInsets();
float w = dim.width - (in.left + in.right);
float h = dim.height - (in.top + in.bottom);
float sx = w / (float) img.getWidth(null);
float sy = h / (float) img.getHeight(null);
float s = Math.min(sx,sy);
return s>=MINSCALE?s:1;
} catch(Exception e){
return 1;
}
}
private PDDocument pdfDocument = null;
private PDFRenderer pdfRenderer = null;
private JScrollPane PdfScrollPane;
private JButton FirstBtn = new JButton("|<");
private JButton PrevBtn = new JButton("<");
private JButton NextBtn = new JButton(">");
private JTextField pageField = new JTextField(" "){
public Dimension getPreferredSize(){
Dimension r = super.getPreferredSize();
if(r.width < 100){
r.width = 100;
}
return r;
}
public Dimension getMinimumSize(){
Dimension r = super.getMinimumSize();
if(r.width < 100){
r.width = 100;
}
return r;
}
};
private JButton LastBtn = new JButton(">|");
private JButton GBtn = new JButton("(+)");
private JButton LBtn = new JButton("(-)");
private JButton FitBtn = new JButton("[]");
private JLabel Pages = new JLabel("# pages ");
private int NumberOfPages=-1;
private boolean dataAvailable = false;
private int page; // the number of the current page
private float scale=1.0F;
private final float MINSCALE = 0.001F;
static final float SCALEFACTOR=1.2F;
}
private JTextPane Display;
private JButton CloseBtn;
private JButton SaveBtn;
private JFileChooser fileChooser;
private Dspltext Source;
private JButton PlainBtn;
private JButton resetBtn;
private JButton HtmlBtn;
private JButton RtfBtn;
private JButton PdfBtn;
private String TheText;
private static EditorKit EKHtml=null;
private static EditorKit EKRtf=null;
private static JScrollPane TextScrollPane;
private static PDFPanel pdf_viewer; // Panel for displaying pdf contents
private static JPanel TextPanel; // Panel for displaying text in plain, html and rtf format
private boolean ISPDF = false;
private JCheckBox CaseSensitive = new JCheckBox("case sensitive");
private JTextField SearchField = new JTextField(20);
private JButton SearchBtn = new JButton("search");
private int LastSearchPos=0;
}
}