/*- * Copyright (C) 2007-2008 Erik Larsson * * 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 3 of the License, or * (at your option) 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, see <http://www.gnu.org/licenses/>. */ package org.catacombae.hfsexplorer; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import org.catacombae.hfs.AttributesFile; import org.catacombae.hfs.HFSVolume; import org.catacombae.hfs.Journal; import org.catacombae.hfs.types.hfscommon.CommonHFSVolumeHeader; import org.catacombae.hfsexplorer.gui.AttributesInfoPanel; import org.catacombae.hfsexplorer.gui.CatalogInfoPanel; import org.catacombae.hfsexplorer.gui.ExtentsInfoPanel; import org.catacombae.hfsexplorer.gui.HFSExplorerJFrame; import org.catacombae.hfsexplorer.gui.JournalInfoPanel; import org.catacombae.hfsexplorer.gui.StructViewPanel; /** * A window that queries a HFSish file system about its volume properties and displays them * graphically. * * @author <a href="http://www.catacombae.org/" target="_top">Erik Larsson</a> */ public class VolumeInfoWindow extends HFSExplorerJFrame { public VolumeInfoWindow(HFSVolume fsView) { super("Volume information"); final JTabbedPane tabs = new JTabbedPane(); // The "Volume header" tab try { final JPanel volumeInfoPanel; CommonHFSVolumeHeader volHeader = fsView.getVolumeHeader(); volumeInfoPanel = new StructViewPanel("Volume header", volHeader.getStructElements(), true); JScrollPane volumeInfoPanelScroller = new JScrollPane(volumeInfoPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); tabs.addTab("Volume header", volumeInfoPanelScroller); volumeInfoPanelScroller.getVerticalScrollBar().setUnitIncrement(10); } catch(Exception e) { e.printStackTrace(); } // The "Catalog file info" tab try { final JTabbedPane catalogTabs = new JTabbedPane(); try { StructViewPanel headerRecordPanel = new StructViewPanel("B-tree header record", fsView.getCatalogFile().getCatalogHeaderNode(). getHeaderRecord().getStructElements()); JScrollPane headerRecordPanelScroller = new JScrollPane( headerRecordPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); headerRecordPanelScroller.getVerticalScrollBar(). setUnitIncrement(10); catalogTabs.addTab("Header record", headerRecordPanelScroller); } catch(Exception e) { e.printStackTrace(); } CatalogInfoPanel catalogInfoPanel = new CatalogInfoPanel(fsView); JScrollPane catalogInfoPanelScroller = new JScrollPane(catalogInfoPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); catalogInfoPanelScroller.getVerticalScrollBar().setUnitIncrement(10); catalogTabs.addTab("Tree", catalogInfoPanelScroller); tabs.addTab("Catalog file", catalogTabs); } catch(Exception e) { e.printStackTrace(); } // The "Extents overflow file info" tab try { final JTabbedPane extentsTabs = new JTabbedPane(); try { StructViewPanel headerRecordPanel = new StructViewPanel("B-tree header record", fsView.getExtentsOverflowFile(). getHeaderNode().getHeaderRecord(). getStructElements()); JScrollPane headerRecordPanelScroller = new JScrollPane( headerRecordPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); headerRecordPanelScroller.getVerticalScrollBar(). setUnitIncrement(10); extentsTabs.addTab("Header record", headerRecordPanelScroller); } catch(Exception e) { e.printStackTrace(); } ExtentsInfoPanel extentsInfoPanel = new ExtentsInfoPanel(fsView); JScrollPane scroller = new JScrollPane(extentsInfoPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); scroller.getVerticalScrollBar().setUnitIncrement(10); extentsTabs.addTab("Tree", scroller); tabs.addTab("Extents overflow file", extentsTabs); } catch(Exception e) { e.printStackTrace(); } // The "Attributes file info" tab try { final AttributesFile attributesFile = fsView.getAttributesFile(); if(attributesFile != null) { final JTabbedPane attributesTabs = new JTabbedPane(); try { StructViewPanel headerRecordPanel = new StructViewPanel("B-tree header record", attributesFile.getHeaderNode().getHeaderRecord(). getStructElements()); JScrollPane headerRecordPanelScroller = new JScrollPane( headerRecordPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); headerRecordPanelScroller.getVerticalScrollBar(). setUnitIncrement(10); attributesTabs.addTab("Header record", headerRecordPanelScroller); } catch(Exception e) { e.printStackTrace(); } AttributesInfoPanel attributesInfoPanel = new AttributesInfoPanel(fsView.getAttributesFile()); JScrollPane scroller = new JScrollPane(attributesInfoPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); scroller.getVerticalScrollBar().setUnitIncrement(10); attributesTabs.addTab("Tree", scroller); tabs.addTab("Attributes file", attributesTabs); } } catch(Exception e) { e.printStackTrace(); } // The "Journal info" tab (optional) try { Journal journal = fsView.getJournal(); if(journal != null) { JournalInfoPanel journalInfoPanel = new JournalInfoPanel(journal); tabs.addTab("Journal", journalInfoPanel); } } catch(Exception e) { e.printStackTrace(); } // The "Allocation file info" tab /* try { AllocationFileInfoPanel allocationFileInfoPanel = new AllocationFileInfoPanel(this, fsView.getAllocationFileView()); JScrollPane allocationFileInfoPanelScroller = new JScrollPane(allocationFileInfoPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); tabs.addTab("Allocation file info", allocationFileInfoPanelScroller); allocationFileInfoPanelScroller.getVerticalScrollBar().setUnitIncrement(10); } catch(Exception e) { e.printStackTrace(); } */ add(tabs, BorderLayout.CENTER); setDefaultCloseOperation(DISPOSE_ON_CLOSE); pack(); int width = getSize().width; int height = getSize().height; int adjustedHeight = width + width / 2; //System.err.println("w: " + width + " h: " + height + " ah: " + adjustedHeight); if(adjustedHeight < height) setSize(width, adjustedHeight); setLocationRelativeTo(null); } /* public void setVolumeFields(HFSPlusVolumeHeader vh) { volumeInfoPanel.setFields(vh); } */ /* public void setJournalFields(JournalInfoBlock jib) { journalInfoPanel.setFields(jib); } * */ }