/* * $Id$ * * Copyright (C) 2003-2015 JNode.org * * 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 library; If not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package org.jnode.apps.debug; import charva.awt.BorderLayout; import charva.awt.Color; import charva.awt.FlowLayout; import charva.awt.Toolkit; import charvax.swing.JFrame; import charvax.swing.JPanel; import charvax.swing.border.LineBorder; import charvax.swing.border.TitledBorder; import java.util.Vector; /** * @author blind */ public class TC extends JFrame { private RootObjectPanel rootObjectPanel; private PropertiesPanel propertiesPane; private ListPanel resultPane; private JPanel contentPane; public TC() { super("JNode Test Client"); initialize(); setLocation(0, 0); setSize(80, 24); validate(); } private void initialize() { contentPane = (JPanel) getContentPane(); setBackground(Color.black); setForeground(Color.cyan); contentPane.setLayout(new BorderLayout()); JPanel northPanel = new JPanel(); northPanel.setLayout(new FlowLayout()); northPanel.add(getRootObjectPanel()); northPanel.add(getPropertiesPane()); contentPane.add(northPanel, BorderLayout.NORTH); contentPane.add(getResultPane(), BorderLayout.CENTER); getRootObjectPanel().fill(); } protected RootObjectPanel getRootObjectPanel() { if (rootObjectPanel == null) { rootObjectPanel = new RootObjectPanel(38, 10) { public void elementSelected(Object o) { getPropertiesPane().fillPanel(o); } }; rootObjectPanel.setBorder(new LineBorder(Color.green)); rootObjectPanel.setBorder(new TitledBorder(new LineBorder( Color.green), "root objects")); } return rootObjectPanel; } protected PropertiesPanel getPropertiesPane() { if (propertiesPane == null) { propertiesPane = new PropertiesPanel(38, 10) { public void elementSelected(Object o) { Object result = null; try { if (o instanceof ObjectFieldPair) { ObjectFieldPair ofp = (ObjectFieldPair) o; result = ofp.getField().get(ofp.getObject()); } if (o instanceof ObjectMethodPair) { ObjectMethodPair omp = (ObjectMethodPair) o; //TODO: support for methods that take arguments result = omp.getMethod().invoke(omp.getObject()); } } catch (Exception ex) { addResultItem(ex); } addResultItem(result); } }; //propertiesPane.setBorder(new LineBorder(Color.green)); propertiesPane.setBorder(new TitledBorder(new LineBorder( Color.green), "fields & methods")); } return propertiesPane; } private ListPanel getResultPane() { if (resultPane == null) { resultPane = new ListPanel(75, 10) { public void elementSelected(Object o) { if (o != null) { final Vector<ListElement> newList = new Vector<ListElement>(); newList.addElement(new ListElement(o, getElementLabel(o))); getRootObjectPanel().setList(newList); } } }; resultPane.setBorder(new LineBorder(Color.green)); resultPane.setForeground(Color.cyan); resultPane.setBorder(new TitledBorder(new LineBorder( Color.green), "values")); } return resultPane; } protected void addResultItem(Object o) { Vector<ListElement> resultList = getResultPane().getList(); if (resultList == null) { resultList = new Vector<ListElement>(); } String label = (o == null) ? "null" : o.getClass().getName() + " [" + o.toString() + "]"; resultList.addElement(new ListElement(o, label)); getResultPane().setList(resultList); getResultPane().positionToLastRow(); } public static void main(String[] args) { Toolkit.getDefaultToolkit().register(); //JNODE TC tc = new TC(); tc.setVisible(true); } }