Revision 1 (by moose, 2006/03/06 10:35:57) Initial Import
#include <qdebug.h>
#include <QTreeWidget>
#include <QFileInfo>
#include <QFile>
#include <QMessageBox>
#include <QHeaderView>

#include <qextscintilla.h>

#include "SciQMWBase.h"
#include "SciQWorkspace.h"
#include "SciQWorkspaceDock.h"
#include "SciQWorkspaceModel.h"

#include "SciQLvPItem.h"
#include "SciQLvCItem.h"

SciQWorkspaceDock::SciQWorkspaceDock(SciQMWBase *parent) : SciQDockWindow("Workspaces", parent, 0)
{
	lv = new QTreeView(this);
//	lv->setIndentation(16);
	lv->setRootIsDecorated(true);
	model = new SciQWorkspaceModel(new SciQWorkspace("/home/moose/projects/sciq4"));
	lv->setModel(model);
	lv->setAlternatingRowColors ( true );
	lv->header()->hide();

//	lv->header()->setStretchEnabled(TRUE);

	lv->setFrameShape(QFrame::NoFrame);

//	lv->setPaletteBackgroundColor(palette().background());
	setWidget(lv);

//	QTreeWidgetItem *pi = new SciQLvPItem(lv, "Foo");
//		SciQLvCItem *pi1 = new SciQLvCItem(pi, QFileInfo("src"));
//		SciQLvCItem *pi2 = new SciQLvCItem(pi1, QFileInfo("src/SciQ.cpp"));
//		SciQLvCItem *pi4 = new SciQLvCItem(pi1, QFileInfo("src/SciQApp.cpp"));
//	QTreeWidgetItem *pi3 = new SciQLvPItem(lv, "baz");

	connect(
		lv->selectionModel(), SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)),
		this, SLOT(itemChanged(const QModelIndex&, const QModelIndex&)));

//	setResizeEnabled(TRUE);
}

SciQWorkspaceDock::~SciQWorkspaceDock()
{

}

void SciQWorkspaceDock::itemChanged (const QModelIndex &cur, const QModelIndex& prev)
{
	SciQWorkspaceItem *item = (SciQWorkspaceItem *)cur.internalPointer();
	SciQWorkspaceFileItem *fi = item ? item->asFileItem() : 0;
	if(fi) {
		SciQWorkspaceItem *pitem = (SciQWorkspaceItem *)prev.internalPointer();
		SciQWorkspaceFileItem *pfi = pitem ? pitem->asFileItem() : 0;
		if(pfi) {
			pfi->setDoc(mw->sci->document());
		}

		mw->sci->setDocument(fi->sciDoc());
		QString fp = fi->getPath();
		QFileInfo fi(fp);
		QFile fh(fp);

		// FIXME: mark file as unopenable (stop 'X' icon?)
		if(!fi.isReadable()) {
			QMessageBox::warning(mw, "Warning", QString("Failed to read file\n%1").arg(fp), QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
			return;
		}

		// FIXME: mark file as un saveable...
		if(!fi.isWritable()) {
			QMessageBox::warning(mw, "Warning", QString("Failed to open file\n%1").arg(fp), QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
			// ...
		}

		// FIXME: mark file as unopenable (stop 'X' icon?)
		// This "should" have been caught by the ReadUser check above...
		if(!fh.open(QIODevice::ReadOnly)) {
			QMessageBox::warning(mw, "Warning", QString("Failed to open file\n%1").arg(fp), QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
			return;
		}
		mw->sci->setText(QString(fh.readAll()));
	}
	qDebug() << "Selected: " << model->data(cur, Qt::DisplayRole).asString();
	
}