package com.dasatti.uhtml;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.text.*;
import javax.swing.text.rtf.*;
import javax.swing.text.html.*;
import javax.swing.event.*;
import com.lang.LangControler;
public class FindDialog extends JDialog
{
JLabel lblFindWhat,lblReplaceWhat,lblReplaceWith,lblLanguage,lblLanguage2;
JCheckBox cbWholeWords,cbMatchCase,cbWholeWords2,cbMatchCase2;
JRadioButton rbSearchUp,rbSearchDown,rbSearchUp2,rbSearchDown2;
JTextField tfFindWhat,tfReplaceWhat,tfReplaceWith;
JButton btnFindNext,btnReplace,btnReplaceAll,btnClose,btnClose2;
JTabbedPane tabpane;
JComboBox cmbLanguage,cmbLanguage2;
JEditorPane m_ed_Pane;
HTMLDocument m_doc;
JEditorPane jtp;
int searchIndex=0;
LangControler objLang;
UMasterUI parent;
// public FindDialog(HTMLDocument _doc,int selectedTab,JEditorPane _jtp)
//FindandReplace()
public FindDialog(UMasterUI _parent,int selectedTab)
{
//super(parent,"Find and replace",false);
super();
setModal(true);
setTitle("Find and Replace");
parent = _parent;
m_doc=(HTMLDocument) parent.m_internalFrame_document.getDesignDocument().getDocument();
jtp= parent.m_internalFrame_document.getDesignDocument();
objLang=new LangControler();
JPanel pnlFind=new JPanel();
pnlFind.setLayout(null);
JPanel pnlReplace=new JPanel();
pnlReplace.setLayout(null);
/*
pnlFind.setLayout(new BorderLayout());
Box boxFind=Box.createVerticalBox();
Box boxFindRow1=Box.createHorizontalBox();
Box boxFindRow2=Box.createHorizontalBox();
Box boxFindRow3=Box.createHorizontalBox();
*/
lblFindWhat=new JLabel("Find What:");
tfFindWhat=new JTextField(20);
btnFindNext=new JButton("Find Next");
btnFindNext.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
Find();
}
});
btnClose=new JButton("Close");
btnClose.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
dispose();
}
});
lblLanguage=new JLabel("Language:");
cmbLanguage=new JComboBox(new String[]{"English","Urdu"});
cmbLanguage.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setFindKeymap(cmbLanguage.getSelectedItem().toString());
}
}
);
lblLanguage2=new JLabel("Language:");
cmbLanguage2=new JComboBox(new String[]{"English","Urdu"});
cmbLanguage2.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setReplaceKeymap(cmbLanguage2.getSelectedItem().toString());
}
}
);
lblReplaceWhat=new JLabel("Replace What:");
lblReplaceWith=new JLabel("Replace With:");
tfReplaceWhat=new JTextField(20);
tfReplaceWith=new JTextField(20);
btnReplace=new JButton("Replace");
btnReplace.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
Replace();
}
});
btnReplaceAll=new JButton("Replace All");
btnReplaceAll.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
ReplaceAll();
}
});
btnClose2=new JButton("Close");
btnClose2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
dispose();
}
});
/*
boxFindRow1.add(lblFindWhat);
boxFindRow1.add(tfFindWhat);
boxFindRow1.add(btnFindNext);
boxFindRow1.add(Box.createHorizontalStrut(90));
boxFindRow2.add(btnClose);
boxFind.add(boxFindRow1);
boxFind.add(boxFindRow2);
pnlFind.add(boxFind);
*/
pnlFind.add(lblFindWhat);
lblFindWhat.setBounds(10,20,100,25);
pnlFind.add(tfFindWhat);
tfFindWhat.setBounds(105,20,180,25);
pnlFind.add(btnFindNext);
btnFindNext.setSize(10,5);
btnFindNext.setBounds(290,20,98,25);
pnlFind.add(lblLanguage);
lblLanguage.setBounds(10,50,100,25);
pnlFind.add(cmbLanguage);
cmbLanguage.setBounds(105,50,100,25);
pnlFind.add(btnClose);
btnClose.setBounds(290,50,98,25);
pnlReplace.add(lblReplaceWhat);
lblReplaceWhat.setBounds(10,20,100,25);
pnlReplace.add(lblReplaceWith);
lblReplaceWith.setBounds(10,50,100,25);
pnlReplace.add(tfReplaceWhat);
tfReplaceWhat.setBounds(105,20,180,25);
pnlReplace.add(tfReplaceWith);
tfReplaceWith.setBounds(105,50,180,25);
pnlReplace.add(btnReplace);
btnReplace.setSize(10,5);
btnReplace.setBounds(290,20,98,25);
pnlReplace.add(btnReplaceAll);
btnReplaceAll.setBounds(290,50,98,25);
pnlReplace.add(lblLanguage2);
lblLanguage2.setBounds(10,80,100,25);
pnlReplace.add(cmbLanguage2);
cmbLanguage2.setBounds(105,80,100,25);
pnlReplace.add(btnClose2);
btnClose2.setBounds(290,80,98,25);
cbWholeWords=new JCheckBox("Whole Words Only");
cbMatchCase=new JCheckBox("Match Case",true);
rbSearchUp=new JRadioButton("Search up");
rbSearchDown=new JRadioButton("Search down",true);
cbWholeWords2=new JCheckBox("Whole Words Only");
cbMatchCase2=new JCheckBox("Match Case",true);
rbSearchUp2=new JRadioButton("Search up");
rbSearchDown2=new JRadioButton("Search down",true);
//pnlFind.add(cbWholeWords);
//pnlFind.add(cbMatchCase);
//pnlFind.add(rbSearchUp);
//pnlFind.add(rbSearchDown);
//cbWholeWords.setBounds(10,120,150,25);
//cbMatchCase.setBounds(10,150,150,25);
//rbSearchUp.setBounds(160,120,150,25);
//rbSearchDown.setBounds(160,150,150,25);
ButtonGroup btnGrp=new ButtonGroup();
btnGrp.add(rbSearchUp);
btnGrp.add(rbSearchDown);
ButtonGroup btnGrp2=new ButtonGroup();
btnGrp2.add(rbSearchUp2);
btnGrp2.add(rbSearchDown2);
JPanel pnlFindOptions=new JPanel();
JPanel pnlReplaceOptions=new JPanel();
pnlFindOptions.add(cbWholeWords);
pnlFindOptions.add(rbSearchUp);
pnlFindOptions.add(cbMatchCase);
pnlFindOptions.add(rbSearchDown);
pnlFindOptions.setLayout(new GridLayout(2,2));
pnlFindOptions.setBorder(new TitledBorder(new EtchedBorder(), "Options"));
pnlFindOptions.setBounds(10,100,280,100);
pnlReplaceOptions.add(cbWholeWords2);
pnlReplaceOptions.add(rbSearchUp2);
pnlReplaceOptions.add(cbMatchCase2);
pnlReplaceOptions.add(rbSearchDown2);
pnlReplaceOptions.setLayout(new GridLayout(2,2));
pnlReplaceOptions.setBorder(new TitledBorder(new EtchedBorder(), "Options"));
pnlReplaceOptions.setBounds(10,100,280,100);
pnlFind.add(pnlFindOptions);
pnlReplace.add(pnlReplaceOptions);
tabpane=new JTabbedPane();
tabpane.addTab("Find",pnlFind);
tabpane.addTab("Replace",pnlReplace);
tabpane.setSelectedIndex(selectedTab);
add(tabpane);
WindowListener flst = new WindowAdapter()
{
public void windowActivated(WindowEvent e)
{
if (tabpane.getSelectedIndex()==0)
tfFindWhat.grabFocus();
else
tfReplaceWhat.grabFocus();
}
public void windowDeactivated(WindowEvent e)
{
}
};
addWindowListener(flst);
pack();
//setSize(405,275);
setBounds(200,200,405,275);
setResizable(false);
setVisible(true);
}
public void Find()
{
String searchKey=tfFindWhat.getText();
if(searchKey.length()==0)
{
JOptionPane.showMessageDialog(this,"Please specify text you want to find");
}
else
{
try
{
String AllText=m_doc.getText(0,m_doc.getLength());
String searchFrom="",key="";
int startIndex=-1;
int endIndex=-1;
if(!cbMatchCase.isSelected())
{
searchFrom=AllText.toLowerCase();
key=searchKey.toLowerCase();
}
else
{
searchFrom=AllText;
key=searchKey;
}
if(rbSearchUp.isSelected())
{
startIndex=searchFrom.lastIndexOf(key,searchIndex);
if(!(endIndex>=m_doc.getLength()-1))
{
endIndex=startIndex+key.length();
searchIndex=startIndex-1;
}
}
else
{
startIndex=searchFrom.indexOf(key,searchIndex);
if(!(endIndex>=m_doc.getLength()-1))
{
endIndex=startIndex+key.length();
searchIndex=endIndex;
}
}
if(startIndex<0)
{
JOptionPane.showMessageDialog(this,"Input Text not found");
}
else
{
// JOptionPane.showMessageDialog(this,"Input Text found between index "+startIndex+" and "+endIndex);
jtp.select(startIndex,endIndex);
// parent._select(startIndex, endIndex);
}
}
catch(BadLocationException e)
{
JOptionPane.showMessageDialog(this,"Please specify text you want to find");
}
}
}
public void Replace()
{
String searchKey=tfReplaceWhat.getText();
String replaceWith=tfReplaceWith.getText();
if(searchKey.length()==0 || replaceWith.length()==0)
{
JOptionPane.showMessageDialog(this,"Please specify text you want to Replace or Replace With");
}
else
{
try
{
String AllText=m_doc.getText(0,m_doc.getLength());
String searchFrom="",key="";
int startIndex=-1;
int endIndex=-1;
if(!cbMatchCase2.isSelected())
{
searchFrom=AllText.toLowerCase();
key=searchKey.toLowerCase();
}
else
{
searchFrom=AllText;
key=searchKey;
}
if(rbSearchUp2.isSelected())
{
startIndex=searchFrom.lastIndexOf(key,searchIndex);
if(!(endIndex>=m_doc.getLength()-1))
{
endIndex=startIndex+key.length();
searchIndex=startIndex-1;
}
}
else
{
startIndex=searchFrom.indexOf(key,searchIndex);
if(!(endIndex>=m_doc.getLength()-1))
{
endIndex=startIndex+key.length();
searchIndex=endIndex;
}
}
if(startIndex<0)
{
JOptionPane.showMessageDialog(this,"Input Text not found");
}
else
{
//ed_Pane.doc.setSelection(startIndex,endIndex,true);
//JOptionPane.showMessageDialog(this,"Input Text found between index "+startIndex+" and "+endIndex);
jtp.select(startIndex,endIndex);
jtp.replaceSelection(replaceWith);
jtp.select(startIndex, startIndex+replaceWith.length());
}
}
catch(BadLocationException e)
{
JOptionPane.showMessageDialog(this,"Please specify text you want to Replace");
}
}
}
public void ReplaceAll()
{
String searchKey=tfReplaceWhat.getText();
String replaceWith=tfReplaceWith.getText();
if(searchKey.length()==0 || replaceWith.length()==0)
{
JOptionPane.showMessageDialog(this,"Please specify text you want to Replace or Replace With");
}
else
{
String searchFrom="",key="";
int startIndex=-1;
int endIndex=-1;
while(true)
{
try
{
String AllText=m_doc.getText(0,m_doc.getLength());
startIndex=-1;
if(!cbMatchCase2.isSelected())
{
searchFrom=AllText.toLowerCase();
key=searchKey.toLowerCase();
}
else
{
searchFrom=AllText;
key=searchKey;
}
//if(rbSearchUp2.isSelected())
//{
//startIndex=searchFrom.lastIndexOf(key,searchIndex);
//if(!(endIndex>=m_ed_Pane.doc.getLength()-1))
//{
// endIndex=startIndex+key.length();
// searchIndex=startIndex-1;
// }
//}
//else
//{
startIndex=searchFrom.indexOf(key,searchIndex);
if(!(endIndex>=m_doc.getLength()-1))
{
endIndex=startIndex+key.length();
searchIndex=endIndex;
}
else
break;
//}
if(startIndex<0)
{
//JOptionPane.showMessageDialog(this,"Input Text not found");
break;
}
else
{
//ed_Pane.doc.setSelection(startIndex,endIndex,true);
//JOptionPane.showMessageDialog(this,"Input Text found between index "+startIndex+" and "+endIndex);
jtp.select(startIndex,endIndex);
jtp.replaceSelection(replaceWith);
jtp.select(startIndex, startIndex+replaceWith.length());
searchIndex= startIndex+replaceWith.length();
}
}
catch(BadLocationException e)
{
JOptionPane.showMessageDialog(this,"Please specify text you want to Replace");
}
}
}
}
public void addKeymaps()
{
Keymap parentKeymap=tfFindWhat.getKeymap();
objLang.english=tfFindWhat.addKeymap("English",parentKeymap);
objLang.urdu=tfFindWhat.addKeymap("Urdu",parentKeymap);
JTextComponent.loadKeymap(objLang.urdu,objLang.urduBindings,objLang.urduActions);
}
public void setFindKeymap(String _lang)
{
if(_lang== "English")
{
tfFindWhat.setKeymap(objLang.english);
tfFindWhat.grabFocus();
}
if(_lang== "Urdu")
{
//JTextComponent.loadKeymap(objLang.urdu,objLang.urduBindings,objLang.urduActions);
tfFindWhat.setKeymap(objLang.urdu);
tfFindWhat.grabFocus();
}
}
public void setReplaceKeymap(String _lang)
{
if(_lang== "English")
{
tfReplaceWhat.setKeymap(objLang.english);
tfReplaceWith.setKeymap(objLang.english);
tfReplaceWhat.grabFocus();
}
if(_lang== "Urdu")
{
//JTextComponent.loadKeymap(objLang.urdu,objLang.urduBindings,objLang.urduActions);
tfReplaceWhat.setKeymap(objLang.urdu);
tfReplaceWith.setKeymap(objLang.urdu);
tfReplaceWhat.grabFocus();
}
}
/*
public static void main(String a[])
{
FindDialog app=new FindDialog(null,null,null);
}
*/
}