|
What this is
Other links
The source code
/*
* $Id: PHPBrowseTab.java,v 1.2 2003/02/24 19:26:31 blaisorblade Exp $
*
* PHP Plugin for Jext
*
* Copyright (C) 2002 Romain Guy rewrite in java by Nicolas Thouvenin
* touv at yahoo dot fr
*
* This program 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 any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import javax.swing.text.Document;
import javax.swing.text.BadLocationException;
import javax.swing.text.Element;
import org.jext.*;
import org.jext.event.*;
import org.jext.gui.JextCheckBox;
import org.jext.gui.JextHighlightButton;
public class PHPBrowseTab extends JPanel implements TreeSelectionListener, ActionListener, Runnable, JextListener
{
private JextFrame parent;
private JTree browserTree;
private DefaultTreeModel browserTreeModel;
private PHPBrowseTabNode root;
private Thread thread;
public PHPBrowseTab(JextFrame parent)
{
super();
this.parent = parent;
parent.addJextListener(this);
setLayout(new BorderLayout());
this.root = new PHPBrowseTabNode("PHP");
this.browserTreeModel = new DefaultTreeModel(root);
this.browserTree = new JTree(this.browserTreeModel);
// Look
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
renderer.setOpenIcon(Utilities.getIcon("images/tree_open.gif", Jext.class));
renderer.setLeafIcon(Utilities.getIcon("images/tree_leaf.gif", Jext.class));
renderer.setClosedIcon(Utilities.getIcon("images/tree_close.gif", Jext.class));
renderer.setTextSelectionColor(GUIUtilities.parseColor(Jext.getProperty("vf.selectionColor")));
renderer.setBackgroundSelectionColor(this.browserTree.getBackground());
renderer.setBorderSelectionColor(this.browserTree.getBackground());
this.browserTree.setCellRenderer(renderer);
DefaultTreeSelectionModel selectionModel = new DefaultTreeSelectionModel();
selectionModel.setSelectionMode(DefaultTreeSelectionModel.SINGLE_TREE_SELECTION);
this.browserTree.setSelectionModel(selectionModel);
// Divers propriétés
this.browserTree.putClientProperty("JTree.lineStyle", "Angled");
this.browserTree.setScrollsOnExpand(true);
this.browserTree.expandRow(1);
this.browserTree.setRootVisible(true);
this.browserTree.setShowsRootHandles(true);
this.browserTree.addTreeSelectionListener(this);
// Ajout du treeview dans panneau
this.add(new JScrollPane(this.browserTree), BorderLayout.CENTER);
// On "thread" cette classe
this.thread = new Thread(this);
// On lance l'analyse dans le thread
this.thread.start();
}
public void jextEventFired(JextEvent evt)
{
int what = evt.getWhat();
// Le textarea change ou on en ouvre/selectionne un nouveau
if (what == JextEvent.CHANGED_UPDATE ||
what == JextEvent.REMOVE_UPDATE ||
what == JextEvent.INSERT_UPDATE ||
what == JextEvent.TEXT_AREA_SELECTED ||
what == JextEvent.TEXT_AREA_OPENED) {
if (this.thread.isAlive()) {
// il ya un thread actif donc on l'arrete
this.thread.interrupt();
this.thread = null;
}
// On lance l'execution d'un nouveau Thread - implicitement on execute la méthode run()
this.thread = new Thread(this);
this.thread.start();
}
}
/*
* Lancement du traitement du thread
*/
public void run()
{
try {
Thread.sleep(400);
}
catch(InterruptedException i) {
return;
}
this.load(this.parent.getTextAreas());
}
public void load(JextTextArea[] textAreas)
{
PHPBrowseTabNode newroot = new PHPBrowseTabNode("PHP");
DefaultTreeModel newbrowserTreeModel = new DefaultTreeModel(newroot);
for (int i = 0; i < textAreas.length; i++) {
if (textAreas[i].getColorizingMode().equals("php3")) {
PHPBrowseTabNode truc1 = new PHPBrowseTabNode(textAreas[i].getName(), textAreas[i].getFile(), newroot);
PHPBrowseTabParser p = new PHPBrowseTabParser(truc1, textAreas[i]);
p.parse();
newroot.add(truc1);
}
}
this.browserTree.setModel(newbrowserTreeModel);
}
public void valueChanged(TreeSelectionEvent tse)
{
JTree source = (JTree) tse.getSource();
if (source.isSelectionEmpty()) {
return;
}
PHPBrowseTabNode node = (PHPBrowseTabNode) source.getSelectionPath().getLastPathComponent();
JextTextArea textArea = this.parent.getTextArea();
int no = node.getLine();
File fi = node.getFile();
if (no != -1) {
if (!fi.equals(textArea.getFile())) {
textArea = null;
// Le fichier n'est pas le Fichier courant, donc on le cherche...
JextTextArea[] openAreas = this.parent.getTextAreas();
for (int i=0; i < openAreas.length; i++) {
if (fi.equals(openAreas[i].getFile())) {
parent.getTabbedPane().setSelectedComponent(textArea=openAreas[i]);
break;
}
}
}
// On verifie que l'on a bien trouvé un fichier
if (textArea != null) {
Element lelement = textArea.getDocument().getDefaultRootElement().getElement(no - 1);
textArea.select(lelement.getStartOffset(), lelement.getEndOffset() - 1);
}
}
}
public void actionPerformed(ActionEvent evt)
{
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.