| Revision 1 (by moose, 2006/03/06 10:35:57) |
Initial Import
|
#ifndef SciQWorkspace_H_GUARD
#define SciQWorkspace_H_GUARD
#include <QDateTime>
#include <QFileInfo>
#include <QString>
#include <QIcon>
#include <QDir>
#include <qextscintilla.h>
class SciQWorkspaceItem;
class SciQWorkspaceDirItem;
class SciQWorkspaceFileItem;
class SciQWorkspace;
/**
Ok, can't do the "No File Item" idea, need to store the items for the scintilla doc struct,
and because you dont want it disappearing/changing automatically when you modify it on disk...
I had thought it'd be cool to base the File items on the contents of a filtered QDir()..
What can be done is auto importing (based on dir's atime/mtime) files found based on the setup filetypes, but if they are deleted or modified
externally to the editor, a dialog should be popped up asking what to do.
*/
// FIXME: Add Rrevision Controll support ie: CVS, SVN, etc.
// TODO: Really Implement SciQDocumentType
class SciQDocumentType { public: QIcon icon() { return QIcon(); } };
typedef class QHash<QString, SciQWorkspaceItem *> SciQWorkspaceItemHash;
typedef class QList<SciQWorkspaceItem *> SciQWorkspaceItemList;
class SciQDocument {
QextScintilla *sci;
long scidoc;
public:
SciQDocument(QextScintilla *sci = 0);
~SciQDocument();
SciQDocument &operator=(SciQDocument &);
bool operator==(SciQDocument &);
};
class SciQWorkspaceItem {
friend class SciQWorkspaceModel;
friend class SciQWorkspaceDirItem;
friend class SciQWorkspaceFileItem;
friend class SciQWorkspace;
protected:
// New items get marked "not new" on access/load
// modified files get unmarked on save, folders dont have a "modified" state in the gui.
enum Flag { Modified = 1, New = 2 };
QString name;
QString path;
QString icon;
QFileInfo info;
QDateTime lastmod;
Q_DECLARE_FLAGS(Flags, Flag)
Flags flags;
SciQWorkspaceItem *parent;
SciQWorkspace *ws;
enum Type { None, Workspace, Dir, File } type;
virtual void update() { info.refresh(); QDateTime mtime = info.lastModified(); if(mtime != lastmod) { flags |= Modified; } else { lastmod = mtime; flags &= ~Modified; } }
public:
SciQWorkspaceItem(Type t, QString n, SciQWorkspaceItem *p = 0, SciQWorkspace *w = 0);
virtual ~SciQWorkspaceItem();
QString getPath();
QString getName() { /*QFileInfo fi(name); return fi.fileName();*/ return name; }
SciQWorkspace *asWorkspace();
SciQWorkspaceFileItem *asFileItem();
SciQWorkspaceDirItem *asDirItem();
SciQWorkspaceItem *getParent() { return parent; }
SciQWorkspace *getWorkspace() { return ws; }
QDateTime getLastMod() { return lastmod; }
virtual int childCount() { return 0; }
virtual SciQWorkspaceItem *child(int i) { return 0; }
virtual SciQWorkspaceItem *addChild(QString /*name*/, QString /*icon*/) { return 0; }
virtual SciQWorkspaceItemList childList(Flags) { return SciQWorkspaceItemList(); }
virtual int row();
virtual QIcon getIcon();
virtual void activate() { flags &= ~Modified; }
bool flag(Flags f) { return flags & f; }
void setModified(bool m) { if(m) flags |= Modified; else flags &= ~Modified; }
void setNew(bool m) { if(m) flags |= New; else flags &= ~New; }
};
Q_DECLARE_OPERATORS_FOR_FLAGS(SciQWorkspaceItem::Flags)
class SciQWorkspaceDirItem : public SciQWorkspaceItem {
friend class SciQWorkspaceModel;
friend class SciQWorkspaceItem;
protected:
QDir dir;
SciQWorkspaceItemList list;
virtual void update();
bool populated;
virtual void populate();
public:
SciQWorkspaceDirItem(QString n, SciQWorkspaceItem *p = 0, SciQWorkspace *w = 0);
~SciQWorkspaceDirItem();
virtual int childCount();
virtual SciQWorkspaceItem *child(int i);
virtual SciQWorkspaceItem *addChild(QString /*name*/, QString /*icon*/);
virtual SciQWorkspaceItemList childList(Flags);
virtual QIcon getIcon();
};
class SciQWorkspaceFileItem : public SciQWorkspaceItem {
protected:
QextScintillaDocument scidoc;
SciQDocumentType *docType;
virtual void update();
public:
SciQWorkspaceFileItem(QString n, SciQWorkspaceItem *p = 0, SciQWorkspace *w = 0);
~SciQWorkspaceFileItem();
virtual QextScintillaDocument &sciDoc() { return scidoc; }
virtual void setDoc(QextScintillaDocument s) { scidoc = s; }
virtual QIcon getIcon();
};
class SciQWorkspace : public SciQWorkspaceDirItem {
public:
SciQWorkspace(QString n);
~SciQWorkspace();
virtual QIcon getIcon();
};
#endif /* SciQWorkspace_H_GUARD */