Code for Resource System Example
/****************************************************************************
**
** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
**
** This file is part of Qt Jambi.
**
** ** This file may be used under the terms of the GNU General Public
** License version 2.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of
** this file. Please review the following information to ensure GNU
** General Public Licensing requirements will be met:
** http://www.trolltech.com/products/qt/opensource.html
**
** If you are unsure which license is appropriate for your use, please
** review the following information:
** http://www.trolltech.com/products/qt/licensing.html or contact the
** sales department at sales@trolltech.com.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/
package com.trolltech.examples;
import com.trolltech.qt.core.*;
import com.trolltech.qt.gui.*;
import java.util.*;
class ResourceItem extends QTreeWidgetItem
{
private QFileInfo mainInfo = null;
private static QFileIconProvider iconProvider = new QFileIconProvider();
private boolean isPopulated = false;
private QTreeWidgetItem dummyNode = null;
public ResourceItem(QTreeWidgetItem parent, QFileInfo info, boolean recurse)
{
super(parent);
setInfo(info, recurse);
}
public ResourceItem(QTreeWidget parent, QFileInfo info, boolean recurse)
{
super(parent);
setInfo(info, recurse);
}
public QFileInfo getInfo()
{
return mainInfo;
}
boolean shouldInsertFile(QFileInfo i)
{
return ((i.isDir() && !i.fileName().equals(".") && !i.fileName().equals(".."))
|| i.suffix().equals("png")
|| i.suffix().equals("jpg")
|| i.suffix().equals("jpeg"));
}
private void populate()
{
QDir dir = new QDir(mainInfo.absoluteFilePath());
List<QFileInfo> entryList = dir.entryInfoList();
for (QFileInfo i : entryList) {
if (shouldInsertFile(i))
new ResourceItem(this, i, false);
}
isPopulated = true;
}
public void expand()
{
if (!isPopulated) {
if (dummyNode != null) {
takeChildren();
dummyNode.dispose();
dummyNode = null;
}
populate();
}
}
private void setInfo(QFileInfo info, boolean recurse)
{
mainInfo = info;
setText(0, mainInfo.fileName());
setIcon(0, iconProvider.icon(info));
if (mainInfo.isDir() && recurse) {
populate();
} else if (mainInfo.isDir()) {
dummyNode = new QTreeWidgetItem(this);
}
}
}
@QtJambiExample(name = "Resource System",
canInstantiate = "call-static-method:notWebstart")
public class ResourceSystem extends QWidget
{
private QLabel currentImage = null;
private QTreeWidget selection = null;
private QRadioButton browseClassPathButton;
private boolean browseClassPath = true;
private boolean shown = false;
private String jarName = null;
public Signal1<String> pathChanged = new Signal1<String>();
public ResourceSystem()
{
setupUI();
pathChanged.connect(this, "setPreviewFile(String)");
}
private void setupUI()
{
currentImage = new QLabel();
selection = new QTreeWidget();
selection.setColumnCount(1);
selection.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum);
selection.currentItemChanged.connect(this, "itemChanged(QTreeWidgetItem, QTreeWidgetItem)");
selection.itemExpanded.connect(this, "expandItem(QTreeWidgetItem)");
List<String> labels = new LinkedList<String>();
labels.add("Name");
selection.setHeaderLabels(labels);
browseClassPathButton = new QRadioButton("Browse class path");
browseClassPathButton.setChecked(true);
QRadioButton bt2 = new QRadioButton("Pick file to browse");
QButtonGroup group = new QButtonGroup(this);
group.addButton(browseClassPathButton);
group.addButton(bt2);
group.setId(browseClassPathButton, 0);
group.setId(bt2, 1);
group.buttonIdClicked.connect(this, "modeChanged(int)");
QHBoxLayout layout2 = new QHBoxLayout();
layout2.addWidget(browseClassPathButton);
layout2.addWidget(bt2);
QVBoxLayout layout = new QVBoxLayout();
layout.addWidget(selection);
layout.addLayout(layout2);
layout.addWidget(currentImage);
setLayout(layout);
setWindowIcon(new QIcon("classpath:com/trolltech/images/qt-logo.png"));
setWindowTitle("Resource System");
}
protected void expandItem(QTreeWidgetItem item)
{
if (item instanceof ResourceItem)
((ResourceItem) item).expand();
}
protected void modeChanged(int id)
{
if (id == 0)
browseClassPath = true;
else
browseClassPath = false;
setupSelection();
}
protected void itemChanged(QTreeWidgetItem cur, QTreeWidgetItem prev)
{
if (cur == null || !(cur instanceof ResourceItem))
return ;
ResourceItem selected_item = (ResourceItem) cur;
QFileInfo info = selected_item.getInfo();
if (info.exists() && !info.isDir()) {
pathChanged.emit(info.absoluteFilePath());
}
}
public void setPreviewFile(String path) {
QPixmap pm = new QPixmap(path);
if (pm.width() > 100 || pm.height() > 100)
pm = pm.scaled(100, 100, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation);
currentImage.setPixmap(pm);
}
private void setupSelection()
{
selection.clear();
String searchPath = null;
if (!browseClassPath) {
String fileName = QFileDialog.getOpenFileName(this, "Select a .jar file",
null, new QFileDialog.Filter("Jar Files (*.jar)"));
if (fileName.length() == 0) {
browseClassPath = true;
browseClassPathButton.setChecked(true);
}
QFileInfo jarInfo = new QFileInfo(fileName);
searchPath = "classpath:" + jarInfo.canonicalFilePath() + "#/";
}
if (browseClassPath) {
searchPath = "classpath:/";
}
QFileInfo info = new QFileInfo(searchPath);
if (!info.exists() || !info.isDir()) {
QMessageBox.warning(this, "Couldn't open root dir", "Problem reading from class path");
return ;
}
new ResourceItem(selection, info, true);
}
@Override
protected void showEvent(QShowEvent e) {
if (!shown) {
QTimer.singleShot(0, this, "setupSelection()");
shown = true;
}
}
public static boolean notWebstart() {
return System.getProperty("com.trolltech.launcher.webstart") == null;
}
public static void main(String[] args)
{
QApplication.initialize(args);
ResourceSystem w = new ResourceSystem();
w.show();
QApplication.exec();
}
}