Changed: #1306 small additions/bug fixed here and there for your viewing pleasure :)
This commit is contained in:
parent
1cd1643ef4
commit
421a434c87
10 changed files with 102 additions and 72 deletions
|
@ -28,8 +28,7 @@ namespace Plugin
|
||||||
|
|
||||||
CGeorgesDirTreeDialog::CGeorgesDirTreeDialog(QString ldPath, QWidget *parent)
|
CGeorgesDirTreeDialog::CGeorgesDirTreeDialog(QString ldPath, QWidget *parent)
|
||||||
:QDockWidget(parent),
|
:QDockWidget(parent),
|
||||||
m_ldPath(ldPath),
|
m_ldPath(ldPath)
|
||||||
m_proxyModel(0)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
m_ui.setupUi(this);
|
m_ui.setupUi(this);
|
||||||
|
@ -38,10 +37,10 @@ CGeorgesDirTreeDialog::CGeorgesDirTreeDialog(QString ldPath, QWidget *parent)
|
||||||
QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton));
|
QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton));
|
||||||
|
|
||||||
m_dirModel = new CGeorgesFileSystemModel(m_ldPath);
|
m_dirModel = new CGeorgesFileSystemModel(m_ldPath);
|
||||||
m_proxyModel = new CGeorgesFileSystemProxyModel(this);
|
//m_proxyModel = new CGeorgesFileSystemProxyModel(this);
|
||||||
|
|
||||||
m_proxyModel->setSourceModel(m_dirModel);
|
//m_proxyModel->setSourceModel(m_dirModel);
|
||||||
m_ui.dirTree->setModel(m_proxyModel);
|
m_ui.dirTree->setModel(m_dirModel);
|
||||||
|
|
||||||
// TODO: filtering in tree model is ... complicated - so hide it for now
|
// TODO: filtering in tree model is ... complicated - so hide it for now
|
||||||
m_ui.filterLineEdit->hide();
|
m_ui.filterLineEdit->hide();
|
||||||
|
@ -51,7 +50,7 @@ CGeorgesDirTreeDialog::CGeorgesDirTreeDialog(QString ldPath, QWidget *parent)
|
||||||
if (m_dirModel->isCorrectLDPath())
|
if (m_dirModel->isCorrectLDPath())
|
||||||
{
|
{
|
||||||
m_dirModel->setRootPath(m_ldPath);
|
m_dirModel->setRootPath(m_ldPath);
|
||||||
m_ui.dirTree->setRootIndex(m_proxyModel->mapFromSource(m_dirModel->index(m_ldPath)));
|
m_ui.dirTree->setRootIndex(m_dirModel->index(m_ldPath));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -72,9 +71,9 @@ CGeorgesDirTreeDialog::~CGeorgesDirTreeDialog()
|
||||||
|
|
||||||
void CGeorgesDirTreeDialog::fileSelected(QModelIndex index)
|
void CGeorgesDirTreeDialog::fileSelected(QModelIndex index)
|
||||||
{
|
{
|
||||||
if (index.isValid() && !m_dirModel->isDir(m_proxyModel->mapToSource(index)))
|
if (index.isValid() && !m_dirModel->isDir(index))
|
||||||
{
|
{
|
||||||
Q_EMIT selectedForm(m_dirModel->fileName(m_proxyModel->mapToSource(index)));
|
Q_EMIT selectedForm(m_dirModel->fileName(index));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,18 +90,18 @@ void CGeorgesDirTreeDialog::ldPathChanged(QString path)
|
||||||
m_ldPath = path;
|
m_ldPath = path;
|
||||||
|
|
||||||
delete m_dirModel;
|
delete m_dirModel;
|
||||||
delete m_proxyModel;
|
//delete m_proxyModel;
|
||||||
|
|
||||||
m_dirModel = new CGeorgesFileSystemModel(m_ldPath);
|
m_dirModel = new CGeorgesFileSystemModel(m_ldPath);
|
||||||
m_proxyModel = new CGeorgesFileSystemProxyModel(this);
|
//m_proxyModel = new CGeorgesFileSystemProxyModel(this);
|
||||||
|
|
||||||
m_proxyModel->setSourceModel(m_dirModel);
|
//m_proxyModel->setSourceModel(m_dirModel);
|
||||||
m_ui.dirTree->setModel(m_proxyModel);
|
m_ui.dirTree->setModel(m_dirModel);
|
||||||
|
|
||||||
if (m_dirModel->isCorrectLDPath())
|
if (m_dirModel->isCorrectLDPath())
|
||||||
{
|
{
|
||||||
m_dirModel->setRootPath(m_ldPath);
|
m_dirModel->setRootPath(m_ldPath);
|
||||||
m_ui.dirTree->setRootIndex(m_proxyModel->mapFromSource(m_dirModel->index(m_ldPath)));
|
m_ui.dirTree->setRootIndex(m_dirModel->index(m_ldPath));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -45,7 +45,7 @@ private:
|
||||||
Ui::CGeorgesDirTreeDialog m_ui;
|
Ui::CGeorgesDirTreeDialog m_ui;
|
||||||
|
|
||||||
CGeorgesFileSystemModel *m_dirModel;
|
CGeorgesFileSystemModel *m_dirModel;
|
||||||
CGeorgesFileSystemProxyModel *m_proxyModel;
|
//CGeorgesFileSystemProxyModel *m_proxyModel;
|
||||||
QString m_ldPath;
|
QString m_ldPath;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
|
|
@ -198,23 +198,48 @@ namespace Plugin
|
||||||
{
|
{
|
||||||
m_dockedWidgets.append(new CGeorgesTreeViewDialog(m_mainDock));
|
m_dockedWidgets.append(new CGeorgesTreeViewDialog(m_mainDock));
|
||||||
m_mainDock->addDockWidget(Qt::RightDockWidgetArea, m_dockedWidgets.last());
|
m_mainDock->addDockWidget(Qt::RightDockWidgetArea, m_dockedWidgets.last());
|
||||||
|
connect(m_dockedWidgets.last(), SIGNAL(closing()),
|
||||||
|
this, SLOT(closingTreeView()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Q_FOREACH(QDockWidget *wgt, m_dockedWidgets)
|
||||||
|
{
|
||||||
|
if (info.fileName() == wgt->windowTitle())
|
||||||
|
{
|
||||||
|
wgt->raise();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
m_dockedWidgets.append(new CGeorgesTreeViewDialog(m_mainDock));
|
m_dockedWidgets.append(new CGeorgesTreeViewDialog(m_mainDock));
|
||||||
|
connect(m_dockedWidgets.last(), SIGNAL(closing()),
|
||||||
|
this, SLOT(closingTreeView()));
|
||||||
Q_ASSERT(m_dockedWidgets.size() > 1);
|
Q_ASSERT(m_dockedWidgets.size() > 1);
|
||||||
m_mainDock->tabifyDockWidget(m_dockedWidgets.at(m_dockedWidgets.size() - 2), m_dockedWidgets.last());
|
m_mainDock->tabifyDockWidget(m_dockedWidgets.at(m_dockedWidgets.size() - 2), m_dockedWidgets.last());
|
||||||
}
|
}
|
||||||
CForm *form = m_dockedWidgets.last()->getFormByName(info.fileName());
|
CForm *form = m_dockedWidgets.last()->getFormByName(info.fileName());
|
||||||
if (form)
|
if (form)
|
||||||
{
|
{
|
||||||
// delete newView;
|
m_dockedWidgets.last()->setForm(form);
|
||||||
// newView = createTreeView(fileName);
|
m_dockedWidgets.last()->loadFormIntoDialog(form);
|
||||||
m_dockedWidgets.last()->setForm(form);
|
QApplication::processEvents();
|
||||||
m_dockedWidgets.last()->loadFormIntoDialog(form);
|
m_dockedWidgets.last()->raise();
|
||||||
//setCurrentFile(info.fileName());
|
connect(m_dockedWidgets.last(), SIGNAL(changeFile(QString)),
|
||||||
// return;
|
m_georgesDirTreeDialog, SLOT(changeFile(QString)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_dockedWidgets.last()->close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GeorgesEditorForm::closingTreeView()
|
||||||
|
{
|
||||||
|
int i = m_dockedWidgets.size();
|
||||||
|
m_dockedWidgets.removeAll(qobject_cast<CGeorgesTreeViewDialog*>(sender()));
|
||||||
|
i = m_dockedWidgets.size();
|
||||||
|
int j = i;
|
||||||
|
}
|
||||||
|
|
||||||
} /* namespace Plugin */
|
} /* namespace Plugin */
|
||||||
|
|
|
@ -44,6 +44,7 @@ public Q_SLOTS:
|
||||||
void save();
|
void save();
|
||||||
void settingsChanged();
|
void settingsChanged();
|
||||||
void loadFile(const QString fileName);
|
void loadFile(const QString fileName);
|
||||||
|
void closingTreeView();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void readSettings();
|
void readSettings();
|
||||||
|
|
|
@ -90,8 +90,9 @@ QString GeorgesEditorPlugin::description() const
|
||||||
QStringList GeorgesEditorPlugin::dependencies() const
|
QStringList GeorgesEditorPlugin::dependencies() const
|
||||||
{
|
{
|
||||||
QStringList list;
|
QStringList list;
|
||||||
list.append(Core::Constants::OVQT_CORE_PLUGIN);
|
// TODO
|
||||||
list.append("ObjectViewer"); // TODO
|
//list.append(Core::Constants::OVQT_CORE_PLUGIN);
|
||||||
|
//list.append("ObjectViewer");
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,10 @@ CGeorgesFileSystemModel::CGeorgesFileSystemModel(QString ldPath, QObject *parent
|
||||||
m_correct(false)
|
m_correct(false)
|
||||||
{
|
{
|
||||||
checkLDPath();
|
checkLDPath();
|
||||||
connect(this, SIGNAL(directoryLoaded(QString)),
|
|
||||||
this, SLOT(dir(const QString)));
|
// this yielded no relevant performance boost on my observations
|
||||||
|
//connect(this, SIGNAL(directoryLoaded(QString)),
|
||||||
|
// this, SLOT(dir(const QString)));
|
||||||
}
|
}
|
||||||
|
|
||||||
CGeorgesFileSystemModel::~CGeorgesFileSystemModel()
|
CGeorgesFileSystemModel::~CGeorgesFileSystemModel()
|
||||||
|
@ -39,6 +41,8 @@ CGeorgesFileSystemModel::~CGeorgesFileSystemModel()
|
||||||
|
|
||||||
void CGeorgesFileSystemModel::dir(const QString &dir)
|
void CGeorgesFileSystemModel::dir(const QString &dir)
|
||||||
{
|
{
|
||||||
|
// in theory this should prefetch all directory entries for the
|
||||||
|
// filesystem model to speed up later work
|
||||||
QModelIndex i = index(dir);
|
QModelIndex i = index(dir);
|
||||||
|
|
||||||
if (hasChildren(i)) {
|
if (hasChildren(i)) {
|
||||||
|
@ -117,18 +121,18 @@ void CGeorgesFileSystemModel::checkLDPath()
|
||||||
// return (!indexNode->populatedChildren);*/
|
// return (!indexNode->populatedChildren);*/
|
||||||
//}
|
//}
|
||||||
|
|
||||||
CGeorgesFileSystemProxyModel::CGeorgesFileSystemProxyModel(QObject *parent) : QSortFilterProxyModel(parent)
|
//CGeorgesFileSystemProxyModel::CGeorgesFileSystemProxyModel(QObject *parent) : QSortFilterProxyModel(parent)
|
||||||
{
|
//{
|
||||||
setFilterCaseSensitivity(Qt::CaseInsensitive);
|
// setFilterCaseSensitivity(Qt::CaseInsensitive);
|
||||||
}
|
//}
|
||||||
|
|
||||||
bool CGeorgesFileSystemProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
|
//bool CGeorgesFileSystemProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
|
||||||
{
|
//{
|
||||||
// TODO this is not perfect as it could be
|
// TODO this is not perfect as it could be
|
||||||
// eg it should filter all dirs which have no entry
|
// eg it should filter all dirs which have no entry
|
||||||
QModelIndex idx = sourceModel()->index(source_row, 0, source_parent);
|
//QModelIndex idx = sourceModel()->index(source_row, 0, source_parent);
|
||||||
if (sourceModel()->hasChildren(idx))
|
//if (sourceModel()->hasChildren(idx))
|
||||||
{
|
//{
|
||||||
// QString d = sourceModel()->data(idx).toString();
|
// QString d = sourceModel()->data(idx).toString();
|
||||||
// //QModelIndex i = mapFromSource(source_parent);
|
// //QModelIndex i = mapFromSource(source_parent);
|
||||||
// //if (hasChildren(i)) {
|
// //if (hasChildren(i)) {
|
||||||
|
@ -139,10 +143,10 @@ bool CGeorgesFileSystemProxyModel::filterAcceptsRow(int source_row, const QModel
|
||||||
// bool test = filterAcceptsRow(c, child);
|
// bool test = filterAcceptsRow(c, child);
|
||||||
// }*/
|
// }*/
|
||||||
// }
|
// }
|
||||||
return true;
|
// return true;
|
||||||
}
|
//}
|
||||||
return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
|
//return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
|
||||||
}
|
//}
|
||||||
|
|
||||||
//QVariant CGeorgesFileSystemProxyModel::data ( const QModelIndex & index, int role ) const
|
//QVariant CGeorgesFileSystemProxyModel::data ( const QModelIndex & index, int role ) const
|
||||||
//{
|
//{
|
||||||
|
|
|
@ -61,18 +61,18 @@ private Q_SLOTS:
|
||||||
|
|
||||||
// A modified QSortFilterProxyModel that always accepts the root nodes in the tree
|
// A modified QSortFilterProxyModel that always accepts the root nodes in the tree
|
||||||
// so filtering is only done on the children.
|
// so filtering is only done on the children.
|
||||||
class CGeorgesFileSystemProxyModel : public QSortFilterProxyModel
|
//class CGeorgesFileSystemProxyModel : public QSortFilterProxyModel
|
||||||
{
|
//{
|
||||||
Q_OBJECT
|
// Q_OBJECT
|
||||||
|
|
||||||
public:
|
//public:
|
||||||
CGeorgesFileSystemProxyModel(QObject *parent = 0);
|
// CGeorgesFileSystemProxyModel(QObject *parent = 0);
|
||||||
|
|
||||||
//QVariant data(const QModelIndex& index, int role) const ;
|
//QVariant data(const QModelIndex& index, int role) const ;
|
||||||
|
|
||||||
protected:
|
//protected:
|
||||||
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
|
// bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
|
||||||
};
|
//};
|
||||||
|
|
||||||
} /* namespace NLQT */
|
} /* namespace NLQT */
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#include "georges.h"
|
#include "georges.h"
|
||||||
#include "georgesform_model.h"
|
#include "georgesform_model.h"
|
||||||
#include "georgesform_proxy_model.h"
|
#include "georgesform_proxy_model.h"
|
||||||
//#include "formitem.h"
|
#include "formitem.h"
|
||||||
//#include "formdelegate.h"
|
//#include "formdelegate.h"
|
||||||
|
|
||||||
using namespace NLMISC;
|
using namespace NLMISC;
|
||||||
|
@ -72,7 +72,6 @@ namespace Plugin
|
||||||
{
|
{
|
||||||
//delete _ui.treeView->itemDelegateForColumn(1);
|
//delete _ui.treeView->itemDelegateForColumn(1);
|
||||||
delete m_form;
|
delete m_form;
|
||||||
deleteLater();
|
|
||||||
//QSettings settings("RyzomCore", "GeorgesQt");
|
//QSettings settings("RyzomCore", "GeorgesQt");
|
||||||
//settings.setValue("dirViewGeometry", saveGeometry());
|
//settings.setValue("dirViewGeometry", saveGeometry());
|
||||||
}
|
}
|
||||||
|
@ -288,11 +287,18 @@ namespace Plugin
|
||||||
void CGeorgesTreeViewDialog::doubleClicked ( const QModelIndex & index )
|
void CGeorgesTreeViewDialog::doubleClicked ( const QModelIndex & index )
|
||||||
{
|
{
|
||||||
// TODO: this is messy :( perhaps this can be done better
|
// TODO: this is messy :( perhaps this can be done better
|
||||||
//CGeorgesFormProxyModel * mp =
|
CGeorgesFormProxyModel * proxyModel =
|
||||||
// dynamic_cast<CGeorgesFormProxyModel *>(_ui.treeView->model());
|
dynamic_cast<CGeorgesFormProxyModel *>(m_ui.treeView->model());
|
||||||
//CGeorgesFormModel *m =
|
CGeorgesFormModel *model =
|
||||||
// dynamic_cast<CGeorgesFormModel *>(mp->sourceModel());
|
dynamic_cast<CGeorgesFormModel *>(proxyModel->sourceModel());
|
||||||
//QModelIndex in = mp->mapToSource(index);
|
QModelIndex sourceIndex = proxyModel->mapToSource(index);
|
||||||
|
|
||||||
|
CFormItem *item = model->getItem(sourceIndex);
|
||||||
|
|
||||||
|
if (item->parent() && item->parent()->data(0) == "parents")
|
||||||
|
{
|
||||||
|
Q_EMIT changeFile(CPath::lookup(item->data(0).toString().toStdString(),false).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
//// col containing additional stuff like icons
|
//// col containing additional stuff like icons
|
||||||
//if (index.column() == 2)
|
//if (index.column() == 2)
|
||||||
|
@ -344,20 +350,8 @@ namespace Plugin
|
||||||
|
|
||||||
void CGeorgesTreeViewDialog::closeEvent(QCloseEvent *event)
|
void CGeorgesTreeViewDialog::closeEvent(QCloseEvent *event)
|
||||||
{
|
{
|
||||||
/*if (Modules::mainWin().getEmptyView() == this)
|
Q_EMIT closing();
|
||||||
{
|
deleteLater();
|
||||||
event->ignore();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(Modules::mainWin().getTreeViewList().size() == 1)
|
|
||||||
{
|
|
||||||
Modules::mainWin().createEmptyView(
|
|
||||||
Modules::mainWin().getTreeViewList().takeFirst());
|
|
||||||
}
|
|
||||||
Modules::mainWin().getTreeViewList().removeOne(this);
|
|
||||||
deleteLater();
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGeorgesTreeViewDialog::filterRows()
|
void CGeorgesTreeViewDialog::filterRows()
|
||||||
|
|
|
@ -64,13 +64,16 @@ namespace Plugin
|
||||||
protected:
|
protected:
|
||||||
void closeEvent(QCloseEvent *event);
|
void closeEvent(QCloseEvent *event);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void changeFile(QString);
|
void changeFile(QString);
|
||||||
void modified(bool);
|
void modified(bool);
|
||||||
|
void closing();
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void setForm(const CForm*);
|
void setForm(const CForm*);
|
||||||
void loadFormIntoDialog(CForm *form = 0);
|
void loadFormIntoDialog(CForm *form = 0);
|
||||||
void modifiedFile( );
|
void modifiedFile( );
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void doubleClicked ( const QModelIndex & index );
|
void doubleClicked ( const QModelIndex & index );
|
||||||
void filterRows();
|
void filterRows();
|
||||||
|
|
|
@ -573,12 +573,15 @@ namespace Plugin
|
||||||
void CGeorgesFormModel::loadFormHeader()
|
void CGeorgesFormModel::loadFormHeader()
|
||||||
{
|
{
|
||||||
|
|
||||||
CFormItem *fi_pars = new CFormItem(m_rootElm, QList<QVariant>() << "parents", m_rootItem);
|
if (m_parents.size())
|
||||||
m_rootItem->appendChild(fi_pars);
|
|
||||||
|
|
||||||
Q_FOREACH(QString str, m_parents)
|
|
||||||
{
|
{
|
||||||
fi_pars->appendChild(new CFormItem(m_rootElm, QList<QVariant>() << str, fi_pars));
|
CFormItem *fi_pars = new CFormItem(m_rootElm, QList<QVariant>() << "parents" << "" << "", m_rootItem);
|
||||||
|
m_rootItem->appendChild(fi_pars);
|
||||||
|
|
||||||
|
Q_FOREACH(QString str, m_parents)
|
||||||
|
{
|
||||||
|
fi_pars->appendChild(new CFormItem(m_rootElm, QList<QVariant>() << str << "" << "", fi_pars));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*QStringList dfns = _dependencies["dfn"];
|
/*QStringList dfns = _dependencies["dfn"];
|
||||||
|
|
Loading…
Reference in a new issue