Changed: #1150 Code Cleanup

This commit is contained in:
aquiles 2010-11-02 15:25:36 +01:00
parent ad7e7ccc23
commit 7eca51b274
32 changed files with 2476 additions and 2250 deletions

View file

@ -2,8 +2,8 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${LI
INCLUDE( ${QT_USE_FILE} ) INCLUDE( ${QT_USE_FILE} )
FILE(GLOB GEORGES_EDITOR_SRC *.cpp) FILE(GLOB GEORGES_EDITOR_SRC *.cpp)
SET(GEORGES_EDITOR_HDR georges_dirtree_dialog.h georges_treeview_dialog.h georgesform_model.h main_window.h SET(GEORGES_EDITOR_HDR georges_dirtree_dialog.h georges_treeview_dialog.h main_window.h
log_dialog.h objectviewer_dialog.h settings_dialog.h) objectviewer_dialog.h settings_dialog.h)
SET(GEORGES_EDITOR_UIS settings_form.ui objectviewer_form.ui log_form.ui georges_treeview_form.ui georges_dirtree_form.ui) SET(GEORGES_EDITOR_UIS settings_form.ui objectviewer_form.ui log_form.ui georges_treeview_form.ui georges_dirtree_form.ui)
SET(GEORGES_EDITOR_RCS georges_editor_qt.qrc) SET(GEORGES_EDITOR_RCS georges_editor_qt.qrc)

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "filesystem_model.h" #include "filesystem_model.h"
@ -21,26 +21,31 @@
#include <QtGui/QApplication> #include <QtGui/QApplication>
#include <QtGui/QStyle> #include <QtGui/QStyle>
namespace NLQT { namespace NLQT
{
CFileSystemModel::CFileSystemModel(QString ldPath, QObject *parent) CFileSystemModel::CFileSystemModel(QString ldPath, QObject *parent)
: QFileSystemModel(parent), : QFileSystemModel(parent),
_ldPath(ldPath){ _ldPath(ldPath)
{
} }
CFileSystemModel::~CFileSystemModel() { CFileSystemModel::~CFileSystemModel()
{
} }
QVariant CFileSystemModel::data(const QModelIndex& index, int role) const { QVariant CFileSystemModel::data(const QModelIndex& index, int role) const {
if (role == Qt::DecorationRole) { if (role == Qt::DecorationRole)
{
if (_ldPath.isEmpty()) if (_ldPath.isEmpty())
return QVariant(); return QVariant();
if (isDir(index)) if (isDir(index))
return QApplication::style()->standardIcon(QStyle::SP_DirIcon); return QApplication::style()->standardIcon(QStyle::SP_DirIcon);
} }
if (_ldPath.isEmpty() && role == Qt::DisplayRole) { if (_ldPath.isEmpty() && role == Qt::DisplayRole)
{
if (index.parent().isValid()) if (index.parent().isValid())
return QVariant(); return QVariant();
return QString("Set a correct leveldesign path ..."); return QString("Set a correct leveldesign path ...");
@ -55,10 +60,14 @@ namespace NLQT {
int CFileSystemModel::rowCount(const QModelIndex &parent) const int CFileSystemModel::rowCount(const QModelIndex &parent) const
{ {
if (_ldPath.isEmpty()) { if (_ldPath.isEmpty())
if(parent.isValid()) { {
if(parent.isValid())
{
return 0; return 0;
} else { }
else
{
return qMin(QFileSystemModel::rowCount(parent),1); return qMin(QFileSystemModel::rowCount(parent),1);
} }
} }

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef FILESYSTEM_MODEL_H #ifndef FILESYSTEM_MODEL_H
@ -21,7 +21,8 @@
#include <QtGui/QFileSystemModel> #include <QtGui/QFileSystemModel>
namespace NLQT { namespace NLQT
{
class CFileSystemModel : public QFileSystemModel class CFileSystemModel : public QFileSystemModel
{ {

View file

@ -0,0 +1,302 @@
/*
Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
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/>.
*/
#include "formdelegate.h"
// NeL includes
#include <nel/misc/debug.h>
#include <nel/georges/u_type.h>
#include <nel/georges/u_form_elm.h>
// Qt includes
#include <QSpinBox>
#include <QLineEdit>
#include <QDoubleSpinBox>
#include <QColorDialog>
#include <QComboBox>
#include <QApplication>
#include <QTextDocument>
#include <QAbstractTextDocumentLayout>
#include <QPainter>
// Project includes
#include "georgesform_model.h"
#include "formitem.h"
namespace NLQT
{
FormDelegate::FormDelegate(QObject *parent)
: QStyledItemDelegate(parent)
{
}
QWidget *FormDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem & option ,
const QModelIndex &index) const
{
CFormItem *item = static_cast<CFormItem*>(index.internalPointer());
QString value = item->data(1).toString();
if (value.isEmpty())
return 0;
const NLGEORGES::UType *type = dynamic_cast<const CGeorgesFormModel *>(index.model())->
getItem(index)->getFormElm()->getType();
if(type)
{
int numDefinitions = type->getNumDefinition();
if (numDefinitions)
{
std::string l, v;
QString label,value;
QComboBox *editor = new QComboBox(parent);
for (int i = 0; i < numDefinitions; i++)
{
type->getDefinition(i,l,v);
label = l.c_str();
value = v.c_str();
editor->addItem(label);
}
return editor;
}
else
{
switch (type->getType())
{
case NLGEORGES::UType::UnsignedInt:
case NLGEORGES::UType::SignedInt:
{
QSpinBox *editor = new QSpinBox(parent);
//QString min = QString(type->getMin().c_str());
//QString max = QString(type->getMax().c_str());
//QString inc = QString(type->getIncrement().c_str());
//nldebug(QString("min %1 max %2 inc %3").arg(min).arg(max).arg(inc).toStdString().c_str());
// TODO: use saved min/max values
editor->setMinimum(-99999);
editor->setMaximum(99999);
editor->setSingleStep(1);
return editor;
}
case NLGEORGES::UType::Double:
{
QDoubleSpinBox *editor = new QDoubleSpinBox(parent);
//QString min = QString(type->getMin().c_str());
//QString max = QString(type->getMax().c_str());
//QString inc = QString(type->getIncrement().c_str());
//nldebug(QString("min %1 max %2 inc %3").arg(min).arg(max).arg(inc).toStdString().c_str());
// TODO: use saved min/max values
editor->setMinimum(-99999);
editor->setMaximum(99999);
editor->setSingleStep(0.1);
editor->setDecimals(1);
return editor;
}
case NLGEORGES::UType::Color:
{
return new QColorDialog();
}
default: // UType::String
{
QLineEdit *editor = new QLineEdit(parent);
return editor;
}
}
}
}
return 0;
}
void FormDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
const NLGEORGES::UType *type = dynamic_cast<const CGeorgesFormModel *>(index.model())->
getItem(index)->getFormElm()->getType();
int numDefinitions = type->getNumDefinition();
QString value = index.model()->data(index, Qt::DisplayRole).toString();
if (numDefinitions)
{
QComboBox *cb = static_cast<QComboBox*>(editor);
cb->setCurrentIndex(cb->findText(value));
//cb->setIconSize()
}
else
{
switch (type->getType())
{
case NLGEORGES::UType::UnsignedInt:
case NLGEORGES::UType::SignedInt:
{
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
spinBox->setValue((int)value.toDouble());
break;
}
case NLGEORGES::UType::Double:
{
QDoubleSpinBox *spinBox = static_cast<QDoubleSpinBox*>(editor);
spinBox->setValue(value.toDouble());
break;
}
case NLGEORGES::UType::Color:
{
break;
}
default:
{
QLineEdit *textEdit = static_cast<QLineEdit*>(editor);
textEdit->setText(value);
break;
}
}
}
}
void FormDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
const NLGEORGES::UType *type = dynamic_cast<const CGeorgesFormModel *>(index.model())->
getItem(index)->getFormElm()->getType();
int numDefinitions = type->getNumDefinition();
if (numDefinitions)
{
QComboBox *comboBox = static_cast<QComboBox*>(editor);
QString value = comboBox->currentText();
QString oldValue = index.model()->data(index, Qt::DisplayRole).toString();
if (value == oldValue)
{
// nothing's changed
}
else
{
nldebug(QString("setModelData from %1 to %2")
.arg(oldValue).arg(value).toStdString().c_str());
model->setData(index, value, Qt::EditRole);
}
}
else
{
switch (type->getType())
{
case NLGEORGES::UType::UnsignedInt:
case NLGEORGES::UType::SignedInt:
{
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
int value = spinBox->value();
QString oldValue = index.model()->data(index, Qt::DisplayRole).toString();
if (QString("%1").arg(value) == oldValue)
{
// nothing's changed
}
else
{
nldebug(QString("setModelData from %1 to %2")
.arg(oldValue).arg(value).toStdString().c_str());
model->setData(index, value, Qt::EditRole);
}
break;
}
case NLGEORGES::UType::Double:
{
QDoubleSpinBox *spinBox = static_cast<QDoubleSpinBox*>(editor);
double value = spinBox->value();
QString oldValue = index.model()->data(index, Qt::DisplayRole).toString();
if (QString("%1").arg(value) == oldValue)
{
// nothing's changed
}
else
{
nldebug(QString("setModelData from %1 to %2")
.arg(oldValue).arg(value).toStdString().c_str());
model->setData(index, value, Qt::EditRole);
}
break;
}
case NLGEORGES::UType::Color:
{
break; // TODO
}
default: // UType::String
{
QLineEdit *textEdit = static_cast<QLineEdit*>(editor);
QString value = textEdit->text();
QString oldValue = index.model()->data(index, Qt::DisplayRole).toString();
if (value == oldValue)
{
// nothing's changed
}
else
{
nldebug(QString("setModelData from %1 to %2")
.arg(oldValue).arg(value).toStdString().c_str());
model->setData(index, value, Qt::EditRole);
}
break;
}
}
}
}
void FormDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QRect r = option.rect;
editor->setGeometry(r);
//option.decorationAlignment = QStyleOptionViewItem::Right;
}
void FormDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItemV4 optionV4 = option;
optionV4.decorationPosition = QStyleOptionViewItem::Right;
//optionV4.decorationSize = QSize(32,32);
initStyleOption(&optionV4, index);
QStyledItemDelegate::paint(painter,optionV4,index);
//QStyle *style = optionV4.widget? optionV4.widget->style() : QApplication::style();
//QTextDocument doc;
//doc.setHtml(optionV4.text);
///// Painting item without text
//optionV4.text = QString();
//style->drawControl(QStyle::CE_ItemViewItem, &optionV4, painter);
//QAbstractTextDocumentLayout::PaintContext ctx;
//// Highlighting text if item is selected
//if (optionV4.state & QStyle::State_Selected)
// ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::HighlightedText));
//QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &optionV4);
//painter->save();
//painter->translate(textRect.topLeft());
//painter->setClipRect(textRect.translated(-textRect.topLeft()));
//doc.documentLayout()->draw(painter, ctx);
//painter->restore();
}
} /* namespace NLQT */

View file

@ -0,0 +1,45 @@
/*
Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
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/>.
*/
#ifndef FORMDELEGATE_H
#define FORMDELEGATE_H
#include <QStyledItemDelegate>
namespace NLQT
{
class FormDelegate : public QStyledItemDelegate
{
public:
FormDelegate(QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const;
void paint ( QPainter * painter, const QStyleOptionViewItem & option,
const QModelIndex & index ) const;
};
}
#endif // FORMDELEGATE_H

View file

@ -24,10 +24,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// NeL includes // NeL includes
#include <nel/georges/u_type.h> #include <nel/georges/u_type.h>
namespace NLQT { namespace NLQT
{
CFormItem::CFormItem(NLGEORGES::UFormElm* elm, const QList<QVariant> &data, CFormItem *parent, CFormItem::CFormItem(NLGEORGES::UFormElm* elm, const QList<QVariant> &data, CFormItem *parent,
NLGEORGES::UFormElm::TWhereIsValue wV, NLGEORGES::UFormElm::TWhereIsNode wN) { NLGEORGES::UFormElm::TWhereIsValue wV, NLGEORGES::UFormElm::TWhereIsNode wN)
{
parentItem = parent; parentItem = parent;
itemData = data; itemData = data;
formElm = elm; formElm = elm;
@ -35,27 +37,33 @@ namespace NLQT {
whereN = wN; whereN = wN;
} }
CFormItem::~CFormItem() { CFormItem::~CFormItem()
{
qDeleteAll(childItems); qDeleteAll(childItems);
} }
void CFormItem::appendChild(CFormItem *item) { void CFormItem::appendChild(CFormItem *item)
{
childItems.append(item); childItems.append(item);
} }
CFormItem *CFormItem::child(int row) { CFormItem *CFormItem::child(int row)
{
return childItems.value(row); return childItems.value(row);
} }
int CFormItem::childCount() const { int CFormItem::childCount() const
{
return childItems.count(); return childItems.count();
} }
int CFormItem::columnCount() const { int CFormItem::columnCount() const
{
return itemData.count(); return itemData.count();
} }
QVariant CFormItem::data(int column) const { QVariant CFormItem::data(int column) const
{
return itemData.value(column); return itemData.value(column);
} }
@ -64,22 +72,27 @@ namespace NLQT {
return parentItem; return parentItem;
} }
int CFormItem::row() const { int CFormItem::row() const
{
if (parentItem) if (parentItem)
return parentItem->childItems.indexOf(const_cast<CFormItem*>(this)); return parentItem->childItems.indexOf(const_cast<CFormItem*>(this));
return 0; return 0;
} }
bool CFormItem::setData(int column, const QVariant &value) { bool CFormItem::setData(int column, const QVariant &value)
{
if (column < 0 || column >= itemData.size()) if (column < 0 || column >= itemData.size())
return false; return false;
itemData[column] = value; itemData[column] = value;
if (formElm->isAtom()) { if (formElm->isAtom())
{
const NLGEORGES::UType *type = formElm->getType(); const NLGEORGES::UType *type = formElm->getType();
if (type) { if (type)
switch (type->getType()) { {
switch (type->getType())
{
case NLGEORGES::UType::UnsignedInt: case NLGEORGES::UType::UnsignedInt:
case NLGEORGES::UType::SignedInt: case NLGEORGES::UType::SignedInt:
case NLGEORGES::UType::Double: case NLGEORGES::UType::Double:

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef FORMITEM_H #ifndef FORMITEM_H
@ -26,7 +26,8 @@
#include <QList> #include <QList>
#include <QVariant> #include <QVariant>
namespace NLQT { namespace NLQT
{
class CFormItem class CFormItem
@ -48,10 +49,12 @@ namespace NLQT {
CFormItem *parent(); CFormItem *parent();
bool setData(int column, const QVariant &value); bool setData(int column, const QVariant &value);
NLGEORGES::UFormElm* getFormElm() {return formElm;}; NLGEORGES::UFormElm* getFormElm() {return formElm;};
NLGEORGES::UFormElm::TWhereIsValue CFormItem::valueFrom() { NLGEORGES::UFormElm::TWhereIsValue CFormItem::valueFrom()
{
return whereV; return whereV;
} }
NLGEORGES::UFormElm::TWhereIsNode CFormItem::nodeFrom() { NLGEORGES::UFormElm::TWhereIsNode CFormItem::nodeFrom()
{
return whereN; return whereN;
} }
@ -65,4 +68,4 @@ namespace NLQT {
}; // CFormItem }; // CFormItem
} }
#endif // FORMITEM_H #endif // FORMITEM_H

View file

@ -29,15 +29,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
using namespace NLGEORGES; using namespace NLGEORGES;
namespace NLQT { namespace NLQT
{
CGeorges::CGeorges(): FormLoader(0) { CGeorges::CGeorges(): FormLoader(0)
{
FormLoader = UFormLoader::createLoader(); FormLoader = UFormLoader::createLoader();
} }
CGeorges::~CGeorges() {} CGeorges::~CGeorges()
{
}
UForm *CGeorges::loadForm(std::string formName) { UForm *CGeorges::loadForm(std::string formName)
{
UForm *form = FormLoader->loadForm(formName.c_str()); UForm *form = FormLoader->loadForm(formName.c_str());
return form; return form;

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef GEORGES_H #ifndef GEORGES_H
@ -38,15 +38,16 @@ namespace NLGEORGES
using namespace NLGEORGES; using namespace NLGEORGES;
namespace NLQT { namespace NLQT
/**
@class CGeorges
A CGeorges class loading and viewing sheets.
*/
class CGeorges
{ {
public:
/**
@class CGeorges
A CGeorges class loading and viewing sheets.
*/
class CGeorges
{
public:
/// Default constructor. /// Default constructor.
CGeorges(); CGeorges();
virtual ~CGeorges(); virtual ~CGeorges();
@ -57,7 +58,7 @@ public:
// A form loader // A form loader
UFormLoader *FormLoader; UFormLoader *FormLoader;
};/* class CGeorges */ };/* class CGeorges */
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -30,11 +30,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
using namespace NLMISC; using namespace NLMISC;
namespace NLQT { namespace NLQT
{
CGeorgesDirTreeDialog::CGeorgesDirTreeDialog(QString ldPath, QWidget *parent): CGeorgesDirTreeDialog::CGeorgesDirTreeDialog(QString ldPath, QWidget *parent)
QDockWidget(parent), :QDockWidget(parent), _ldPath(ldPath)
_ldPath(ldPath){ {
_ui.setupUi(this); _ui.setupUi(this);
@ -72,10 +73,13 @@ namespace NLQT {
QFileInfo info(_ldPath); QFileInfo info(_ldPath);
if (!_ldPath.isEmpty() && info.isDir()) { if (!_ldPath.isEmpty() && info.isDir())
{
_dirModel->setRootPath(_ldPath); _dirModel->setRootPath(_ldPath);
_ui.dirTree->setRootIndex(_dirModel->index(_ldPath)); _ui.dirTree->setRootIndex(_dirModel->index(_ldPath));
} else { }
else
{
_dirModel->setRootPath(QDir::currentPath()); _dirModel->setRootPath(QDir::currentPath());
} }
@ -87,44 +91,52 @@ namespace NLQT {
this, SLOT(fileSelected(QModelIndex)));*/ this, SLOT(fileSelected(QModelIndex)));*/
connect(_ui.dirTree, SIGNAL(activated(QModelIndex)), connect(_ui.dirTree, SIGNAL(activated(QModelIndex)),
this, SLOT(fileSelected(QModelIndex))); this, SLOT(fileSelected(QModelIndex)));
} }
CGeorgesDirTreeDialog::~CGeorgesDirTreeDialog() { CGeorgesDirTreeDialog::~CGeorgesDirTreeDialog()
{
delete _dirModel; delete _dirModel;
} }
void CGeorgesDirTreeDialog::fileSelected(QModelIndex index) { void CGeorgesDirTreeDialog::fileSelected(QModelIndex index)
{
QString name; QString name;
if (index.isValid() && !_dirModel->isDir(index)) { if (index.isValid() && !_dirModel->isDir(index))
{
Q_EMIT selectedForm(_dirModel->fileName(index)); Q_EMIT selectedForm(_dirModel->fileName(index));
} }
} }
void CGeorgesDirTreeDialog::changeFile(QString file) { void CGeorgesDirTreeDialog::changeFile(QString file)
{
QModelIndex index = _dirModel->index(file); QModelIndex index = _dirModel->index(file);
//_dirModel->; //_dirModel->;
_ui.dirTree->selectionModel()->select(index,QItemSelectionModel::ClearAndSelect); _ui.dirTree->selectionModel()->select(index,QItemSelectionModel::ClearAndSelect);
_ui.dirTree->scrollTo(index,QAbstractItemView::PositionAtCenter); _ui.dirTree->scrollTo(index,QAbstractItemView::PositionAtCenter);
fileSelected(index); fileSelected(index);
} }
void CGeorgesDirTreeDialog::ldPathChanged(QString path) { void CGeorgesDirTreeDialog::ldPathChanged(QString path)
{
_ldPath = path; _ldPath = path;
QFileInfo info(_ldPath); QFileInfo info(_ldPath);
delete _dirModel; delete _dirModel;
if (!_ldPath.isEmpty() && info.isDir()) { if (!_ldPath.isEmpty() && info.isDir())
{
_dirModel = new CFileSystemModel(_ldPath); _dirModel = new CFileSystemModel(_ldPath);
_ui.dirTree->setModel(_dirModel); _ui.dirTree->setModel(_dirModel);
_dirModel->setRootPath(_ldPath); _dirModel->setRootPath(_ldPath);
_ui.dirTree->setRootIndex(_dirModel->index(_ldPath)); _ui.dirTree->setRootIndex(_dirModel->index(_ldPath));
} else { }
else
{
_dirModel = new CFileSystemModel(""); _dirModel = new CFileSystemModel("");
_ui.dirTree->setModel(_dirModel); _ui.dirTree->setModel(_dirModel);
_dirModel->setRootPath(QDir::currentPath()); _dirModel->setRootPath(QDir::currentPath());
_ldPath = ""; _ldPath = "";
} }
} }
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef GEORGES_DIRTREE_DIALOG_H #ifndef GEORGES_DIRTREE_DIALOG_H
@ -30,34 +30,35 @@
#include "ui_georges_dirtree_form.h" #include "ui_georges_dirtree_form.h"
#include "filesystem_model.h" #include "filesystem_model.h"
namespace NLQT { namespace NLQT
class CGeorgesDirTreeDialog: public QDockWidget
{ {
class CGeorgesDirTreeDialog: public QDockWidget
{
Q_OBJECT Q_OBJECT
public: public:
CGeorgesDirTreeDialog(QString ldPath, QWidget *parent = 0); CGeorgesDirTreeDialog(QString ldPath, QWidget *parent = 0);
~CGeorgesDirTreeDialog(); ~CGeorgesDirTreeDialog();
private: private:
Ui::CGeorgesDirTreeDialog _ui; Ui::CGeorgesDirTreeDialog _ui;
CFileSystemModel *_dirModel; CFileSystemModel *_dirModel;
QString _ldPath; QString _ldPath;
Q_SIGNALS: Q_SIGNALS:
void selectedForm(QString); void selectedForm(QString);
public Q_SLOTS: public Q_SLOTS:
void ldPathChanged(QString path); void ldPathChanged(QString path);
private Q_SLOTS: private Q_SLOTS:
void fileSelected(QModelIndex index); void fileSelected(QModelIndex index);
void changeFile(QString file); void changeFile(QString file);
friend class CMainWindow; friend class CMainWindow;
}; /* CGEorgesDirTreeDialog */ }; /* CGEorgesDirTreeDialog */
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -34,12 +34,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#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 "spindelegate.h" #include "formdelegate.h"
using namespace NLMISC; using namespace NLMISC;
using namespace NLGEORGES; using namespace NLGEORGES;
namespace NLQT { namespace NLQT
{
CGeorgesTreeViewDialog::CGeorgesTreeViewDialog(QWidget *parent /*= 0*/, bool emptyView /*= false*/) CGeorgesTreeViewDialog::CGeorgesTreeViewDialog(QWidget *parent /*= 0*/, bool emptyView /*= false*/)
: QDockWidget(parent) : QDockWidget(parent)
@ -50,7 +51,8 @@ namespace NLQT {
_ui.setupUi(this); _ui.setupUi(this);
_ui.treeViewTabWidget->setTabEnabled (2,false); _ui.treeViewTabWidget->setTabEnabled (2,false);
if (emptyView) { if (emptyView)
{
_ui.treeViewTabWidget->clear(); _ui.treeViewTabWidget->clear();
setWindowTitle("Form Area"); setWindowTitle("Form Area");
} }
@ -59,8 +61,8 @@ namespace NLQT {
_ui.checkBoxDefaults->setStyleSheet("background-color: rgba(255,0,0,30)"); _ui.checkBoxDefaults->setStyleSheet("background-color: rgba(255,0,0,30)");
_form = 0; _form = 0;
SpinBoxDelegate *spindelegate = new SpinBoxDelegate(this); FormDelegate *formdelegate = new FormDelegate(this);
_ui.treeView->setItemDelegateForColumn(1, spindelegate); _ui.treeView->setItemDelegateForColumn(1, formdelegate);
connect(_ui.treeView, SIGNAL(doubleClicked (QModelIndex)), connect(_ui.treeView, SIGNAL(doubleClicked (QModelIndex)),
@ -77,15 +79,18 @@ namespace NLQT {
//settings.setValue("dirViewGeometry", saveGeometry()); //settings.setValue("dirViewGeometry", saveGeometry());
} }
void CGeorgesTreeViewDialog::selectedForm(QString formName) { void CGeorgesTreeViewDialog::selectedForm(QString formName)
{
_form = Modules::georges().loadForm(formName.toStdString()); _form = Modules::georges().loadForm(formName.toStdString());
if (_form) { if (_form)
{
UFormElm *root = 0; UFormElm *root = 0;
root = &_form->getRootNode(); root = &_form->getRootNode();
QStringList parents; QStringList parents;
for (uint i = 0; i < _form->getNumParent(); i++) { for (uint i = 0; i < _form->getNumParent(); i++)
{
UForm *u = _form->getParentForm(i); UForm *u = _form->getParentForm(i);
parents << u->getFilename().c_str(); parents << u->getFilename().c_str();
} }
@ -93,7 +98,8 @@ namespace NLQT {
QString comments; QString comments;
comments = _form->getComment().c_str(); comments = _form->getComment().c_str();
if (!comments.isEmpty()) { if (!comments.isEmpty())
{
_ui.treeViewTabWidget->setTabEnabled (1,true); _ui.treeViewTabWidget->setTabEnabled (1,true);
_ui.commentEdit->setPlainText(comments); _ui.commentEdit->setPlainText(comments);
} }
@ -103,7 +109,8 @@ namespace NLQT {
_form->getDependencies(dependencies); _form->getDependencies(dependencies);
QMap< QString, QStringList> deps; QMap< QString, QStringList> deps;
Q_FOREACH(std::string str, dependencies) { Q_FOREACH(std::string str, dependencies)
{
QString file = str.c_str(); QString file = str.c_str();
if (file == formName) continue; if (file == formName) continue;
deps[file.remove(0,file.indexOf(".")+1)] << str.c_str(); deps[file.remove(0,file.indexOf(".")+1)] << str.c_str();
@ -112,7 +119,8 @@ namespace NLQT {
nlinfo("dfn's %d",deps["dfn"].count()); nlinfo("dfn's %d",deps["dfn"].count());
//nlwarning(strList.join(";").toStdString().c_str()); //nlwarning(strList.join(";").toStdString().c_str());
if (root) { if (root)
{
loadedForm = formName; loadedForm = formName;
CGeorgesFormModel *model = new CGeorgesFormModel(root,deps,comments,parents); CGeorgesFormModel *model = new CGeorgesFormModel(root,deps,comments,parents);
@ -137,8 +145,10 @@ namespace NLQT {
} }
} }
void CGeorgesTreeViewDialog::modifiedFile( ) { void CGeorgesTreeViewDialog::modifiedFile( )
if (!_modified) { {
if (!_modified)
{
_modified = true; _modified = true;
setWindowTitle(windowTitle()+"*"); setWindowTitle(windowTitle()+"*");
Modules::mainWin().setWindowTitle(Modules::mainWin().windowTitle()+"*"); Modules::mainWin().setWindowTitle(Modules::mainWin().windowTitle()+"*");
@ -146,13 +156,17 @@ namespace NLQT {
} }
} }
void CGeorgesTreeViewDialog::write( ) { void CGeorgesTreeViewDialog::write( )
{
COFile file; COFile file;
std::string s = CPath::lookup(loadedForm.toStdString()); std::string s = CPath::lookup(loadedForm.toStdString());
if (file.open (s)) { if (file.open (s))
try { {
if (loadedForm.contains(".typ")) { try
{
if (loadedForm.contains(".typ"))
{
//nlassert (Type != NULL); //nlassert (Type != NULL);
//// Write the file //// Write the file
@ -167,7 +181,9 @@ namespace NLQT {
//flushValueChange (); //flushValueChange ();
//UpdateAllViews (NULL); //UpdateAllViews (NULL);
//return TRUE; //return TRUE;
} else if (loadedForm.contains(".dfn")) { }
else if (loadedForm.contains(".dfn"))
{
//nlassert (Dfn != NULL); //nlassert (Dfn != NULL);
//// Write the file //// Write the file
@ -180,7 +196,9 @@ namespace NLQT {
//modify (NULL, NULL, false); //modify (NULL, NULL, false);
//UpdateAllViews (NULL); //UpdateAllViews (NULL);
//return TRUE; //return TRUE;
} else { }
else
{
nlassert (_form != NULL); nlassert (_form != NULL);
// Write the file // Write the file
@ -205,16 +223,23 @@ namespace NLQT {
// Get the left view // Get the left view
//CView* pView = getLeftView (); //CView* pView = getLeftView ();
} }
} catch (Exception &e) { }
catch (Exception &e)
{
nlerror("Error while loading file: %s", e.what()); nlerror("Error while loading file: %s", e.what());
} }
} else { //if (!file.open()) }
else
{ //if (!file.open())
nlerror("Can't open the file %s for writing.", s); nlerror("Can't open the file %s for writing.", s);
} }
} }
void CGeorgesTreeViewDialog::doubleClicked ( const QModelIndex & index ) { void CGeorgesTreeViewDialog::doubleClicked ( const QModelIndex & index )
if (index.column() == 1) return; {
if (index.column() == 1)
return;
CFormItem *item = static_cast<CFormItem*>(index.internalPointer()); CFormItem *item = static_cast<CFormItem*>(index.internalPointer());
QString value = item->data(1).toString(); QString value = item->data(1).toString();
@ -222,7 +247,8 @@ namespace NLQT {
if (!path.isEmpty() && !path.contains(".shape")) if (!path.isEmpty() && !path.contains(".shape"))
Q_EMIT changeFile(path); Q_EMIT changeFile(path);
if (path.contains(".shape")) { if (path.contains(".shape"))
{
Modules::objView().resetScene(); Modules::objView().resetScene();
Modules::config().configRemapExtensions(); Modules::config().configRemapExtensions();
Modules::objView().loadMesh(path.toStdString(),""); Modules::objView().loadMesh(path.toStdString(),"");
@ -230,37 +256,55 @@ namespace NLQT {
int i = 0; int i = 0;
} }
void CGeorgesTreeViewDialog::closeEvent(QCloseEvent *event) { void CGeorgesTreeViewDialog::closeEvent(QCloseEvent *event)
if (Modules::mainWin().getEmptyView() == this) { {
if (Modules::mainWin().getEmptyView() == this)
{
event->ignore(); event->ignore();
} else { }
else
{
Modules::mainWin().getTreeViewList().removeOne(this); Modules::mainWin().getTreeViewList().removeOne(this);
if(!Modules::mainWin().getTreeViewList().size()) { if(!Modules::mainWin().getTreeViewList().size())
{
Modules::mainWin().createEmptyView(); Modules::mainWin().createEmptyView();
} }
deleteLater(); deleteLater();
} }
} }
void CGeorgesTreeViewDialog::showParentRows(int newState) { void CGeorgesTreeViewDialog::showParentRows(int newState)
{
CGeorgesFormProxyModel * mp = dynamic_cast<CGeorgesFormProxyModel *>(_ui.treeView->model()); CGeorgesFormProxyModel * mp = dynamic_cast<CGeorgesFormProxyModel *>(_ui.treeView->model());
CGeorgesFormModel *m = qobject_cast<CGeorgesFormModel *>(mp->sourceModel()); CGeorgesFormModel *m = dynamic_cast<CGeorgesFormModel *>(mp->sourceModel());
for (int i = 0; i < m->rowCount(); i++) { for (int i = 0; i < m->rowCount(); i++)
{
const QModelIndex in = m->index(i,0); const QModelIndex in = m->index(i,0);
if (m->getItem(in)->nodeFrom() == UFormElm::NodeParentForm) { if (m->getItem(in)->nodeFrom() == UFormElm::NodeParentForm)
if (newState == Qt::Checked) { {
if (newState == Qt::Checked)
{
_ui.treeView->setRowHidden(in.row(),in.parent(),false); _ui.treeView->setRowHidden(in.row(),in.parent(),false);
} else { }
else
{
_ui.treeView->setRowHidden(in.row(),in.parent(),true); _ui.treeView->setRowHidden(in.row(),in.parent(),true);
} }
} else { // search childs // recursive? }
for (int j = 0; j < m->rowCount(in); j++) { else
{ // search childs // recursive?
for (int j = 0; j < m->rowCount(in); j++)
{
const QModelIndex in2 = m->index(j,0,in); const QModelIndex in2 = m->index(j,0,in);
if (m->getItem(in2)->nodeFrom() == UFormElm::NodeParentForm) { if (m->getItem(in2)->nodeFrom() == UFormElm::NodeParentForm)
if (newState == Qt::Checked) { {
if (newState == Qt::Checked)
{
_ui.treeView->setRowHidden(in2.row(),in,false); _ui.treeView->setRowHidden(in2.row(),in,false);
} else { }
else
{
_ui.treeView->setRowHidden(in2.row(),in,true); _ui.treeView->setRowHidden(in2.row(),in,true);
} }
} }
@ -268,4 +312,5 @@ namespace NLQT {
} // end of search childs } // end of search childs
} }
} }
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -37,7 +37,8 @@ namespace NLGEORGES
using namespace NLGEORGES; using namespace NLGEORGES;
namespace NLQT { namespace NLQT
{
class CGeorgesTreeViewDialog: public QDockWidget class CGeorgesTreeViewDialog: public QDockWidget
{ {

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "georgesform_model.h" #include "georgesform_model.h"
@ -38,11 +38,12 @@
using namespace NLGEORGES; using namespace NLGEORGES;
namespace NLQT { namespace NLQT
{
CGeorgesFormModel::CGeorgesFormModel(UFormElm *rootElm, QMap< QString, QStringList> deps, CGeorgesFormModel::CGeorgesFormModel(UFormElm *rootElm, QMap< QString, QStringList> deps,
QString comment, QStringList parents, QObject *parent) : QAbstractItemModel(parent) { QString comment, QStringList parents, QObject *parent) : QAbstractItemModel(parent)
{
QList<QVariant> rootData; QList<QVariant> rootData;
rootData << "Value" << "Data" << "Extra" << "Type"; rootData << "Value" << "Data" << "Extra" << "Type";
_rootElm = rootElm; _rootElm = rootElm;
@ -55,18 +56,20 @@ namespace NLQT {
setupModelData(); setupModelData();
} }
CGeorgesFormModel::~CGeorgesFormModel() { CGeorgesFormModel::~CGeorgesFormModel()
{
delete _rootItem; delete _rootItem;
} }
/******************************************************************************/ /******************************************************************************/
QVariant CGeorgesFormModel::data(const QModelIndex &p_index, int p_role) const { QVariant CGeorgesFormModel::data(const QModelIndex &p_index, int p_role) const
{
if (!p_index.isValid()) if (!p_index.isValid())
return QVariant(); return QVariant();
switch (p_role) { switch (p_role)
{
case Qt::DisplayRole: case Qt::DisplayRole:
{ {
return getItem(p_index)->data(p_index.column()); return getItem(p_index)->data(p_index.column());
@ -81,7 +84,8 @@ namespace NLQT {
} }
case Qt::DecorationRole: case Qt::DecorationRole:
{ {
if (p_index.column() == 2) { if (p_index.column() == 2)
{
//p_index. //p_index.
QModelIndex in = index(p_index.row(),p_index.column()-1,p_index.parent()); QModelIndex in = index(p_index.row(),p_index.column()-1,p_index.parent());
CFormItem *item = getItem(in); CFormItem *item = getItem(in);
@ -89,9 +93,12 @@ namespace NLQT {
QString value = item->data(1).toString(); QString value = item->data(1).toString();
//QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str(); //QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str();
if (value.contains(".shape")) { if (value.contains(".shape"))
{
return QIcon(":/images/pqrticles.png"); return QIcon(":/images/pqrticles.png");
} else if(value.contains(".tga") || value.contains(".png")) { }
else if(value.contains(".tga") || value.contains(".png"))
{
qDebug() << p_index << p_role; qDebug() << p_index << p_role;
QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str(); QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str();
return QIcon(":/images/pqrticles.png"); return QIcon(":/images/pqrticles.png");
@ -107,10 +114,13 @@ namespace NLQT {
/******************************************************************************/ /******************************************************************************/
CFormItem *CGeorgesFormModel::getItem(const QModelIndex &index) const { CFormItem *CGeorgesFormModel::getItem(const QModelIndex &index) const
if (index.isValid()) { {
if (index.isValid())
{
CFormItem *item = static_cast<CFormItem*>(index.internalPointer()); CFormItem *item = static_cast<CFormItem*>(index.internalPointer());
if (item) return item; if (item)
return item;
} }
return _rootItem; return _rootItem;
} }
@ -118,7 +128,8 @@ namespace NLQT {
/******************************************************************************/ /******************************************************************************/
bool CGeorgesFormModel::setData(const QModelIndex &index, const QVariant &value, bool CGeorgesFormModel::setData(const QModelIndex &index, const QVariant &value,
int role) { int role)
{
if (role != Qt::EditRole) if (role != Qt::EditRole)
return false; return false;
@ -230,20 +241,24 @@ namespace NLQT {
void CGeorgesFormModel::loadFormData(UFormElm *root, CFormItem *parent) { void CGeorgesFormModel::loadFormData(UFormElm *root, CFormItem *parent) {
if (!root) return; if (!root)
return;
uint num = 0; uint num = 0;
UFormElm::TWhereIsNode *whereN = new UFormElm::TWhereIsNode; UFormElm::TWhereIsNode *whereN = new UFormElm::TWhereIsNode;
UFormElm::TWhereIsValue *whereV = new UFormElm::TWhereIsValue; UFormElm::TWhereIsValue *whereV = new UFormElm::TWhereIsValue;
if (root->isStruct()) { if (root->isStruct())
{
//((CFormElm*)root)->getForm()->getComment(); //((CFormElm*)root)->getForm()->getComment();
uint structSize = 0; uint structSize = 0;
root->getStructSize(structSize); root->getStructSize(structSize);
while (num < structSize) { while (num < structSize)
{
// Append a new item to the current parent's list of children. // Append a new item to the current parent's list of children.
std::string elmName; std::string elmName;
if(root->getStructNodeName(num, elmName)) { if(root->getStructNodeName(num, elmName))
{
QList<QVariant> columnData; QList<QVariant> columnData;
//QVariant value; //QVariant value;
std::string value; std::string value;
@ -253,8 +268,10 @@ namespace NLQT {
//double value_double; //double value_double;
QString elmtType = ""; QString elmtType = "";
UFormElm *elmt = 0; UFormElm *elmt = 0;
if(root->getNodeByName(&elmt, elmName.c_str(), whereN, true)) { if(root->getNodeByName(&elmt, elmName.c_str(), whereN, true))
if (elmt) { {
if (elmt)
{
if (elmt->isArray()) if (elmt->isArray())
elmtType = "Array"; elmtType = "Array";
if (elmt->isStruct()) if (elmt->isStruct())
@ -263,10 +280,12 @@ namespace NLQT {
elmtType = "Atom"; elmtType = "Atom";
uint numDefinitions = 0; uint numDefinitions = 0;
const UType *type = elmt->getType(); const UType *type = elmt->getType();
if (type) { if (type)
{
numDefinitions = type->getNumDefinition(); numDefinitions = type->getNumDefinition();
root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV); root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV);
switch (type->getType()) { switch (type->getType())
{
case UType::UnsignedInt: case UType::UnsignedInt:
value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble()).toStdString(); value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble()).toStdString();
elmtType.append("_uint");break; elmtType.append("_uint");break;
@ -285,21 +304,26 @@ namespace NLQT {
} }
} }
if (numDefinitions) { if (numDefinitions)
{
std::string l, v; std::string l, v;
QString tmpLabel, tmpValue; QString tmpLabel, tmpValue;
for (uint i = 0; i < numDefinitions; i++) { for (uint i = 0; i < numDefinitions; i++)
{
type->getDefinition(i,l,v); type->getDefinition(i,l,v);
tmpLabel = l.c_str(); tmpLabel = l.c_str();
tmpValue = v.c_str(); tmpValue = v.c_str();
if (type->getType() == UType::SignedInt) { if (type->getType() == UType::SignedInt)
{
if (QString("%1").arg(value.c_str()).toDouble() == tmpValue.toDouble()) { if (QString("%1").arg(value.c_str()).toDouble() == tmpValue.toDouble()) {
value = l; value = l;
break; break;
} }
} }
if (type->getType() == UType::String) { if (type->getType() == UType::String)
if (QString(value.c_str()) == tmpValue) { {
if (QString(value.c_str()) == tmpValue)
{
value = l; value = l;
break; break;
} }
@ -307,11 +331,13 @@ namespace NLQT {
} }
} }
} }
if (elmt->isVirtualStruct()){ if (elmt->isVirtualStruct())
{
root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV); root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV);
elmtType = "VirtualStruct"; elmtType = "VirtualStruct";
} }
switch (*whereN) { switch (*whereN)
{
case UFormElm::NodeForm: case UFormElm::NodeForm:
elmtType.append("_fromForm"); break; elmtType.append("_fromForm"); break;
case UFormElm::NodeParentForm: case UFormElm::NodeParentForm:
@ -323,7 +349,8 @@ namespace NLQT {
default: default:
elmtType.append("_noNode"); elmtType.append("_noNode");
} }
switch (*whereV) { switch (*whereV)
{
case UFormElm::ValueForm: case UFormElm::ValueForm:
elmtType.append("_formValue"); break; elmtType.append("_formValue"); break;
case UFormElm::ValueParentForm: case UFormElm::ValueParentForm:
@ -341,7 +368,9 @@ namespace NLQT {
// parents << parents.last()->child(parents.last()->childCount()-1); // parents << parents.last()->child(parents.last()->childCount()-1);
//} //}
loadFormData(elmt, parent->child(parent->childCount()-1)); loadFormData(elmt, parent->child(parent->childCount()-1));
} else { }
else
{
// add Defaults // add Defaults
//columnData << QString(elmName.c_str()) << QString("default") << QString("default"); //columnData << QString(elmName.c_str()) << QString("default") << QString("default");
//parent->appendChild(new CFormItem(elmt, columnData, parent, UFormElm::ValueDefaultDfn, UFormElm::NodeDfn)); //parent->appendChild(new CFormItem(elmt, columnData, parent, UFormElm::ValueDefaultDfn, UFormElm::NodeDfn));
@ -352,25 +381,30 @@ namespace NLQT {
num++; num++;
} }
} }
if (root->isArray()) { if (root->isArray())
{
uint arraySize = 0; uint arraySize = 0;
root->getArraySize(arraySize); root->getArraySize(arraySize);
while (num < arraySize) { while (num < arraySize)
{
std::string elmName; std::string elmName;
if(root->getArrayNodeName(elmName, num)) { if(root->getArrayNodeName(elmName, num))
{
QList<QVariant> columnData; QList<QVariant> columnData;
std::string value; std::string value;
QString elmtType = ""; QString elmtType = "";
//root->getValueByName(value, elmName.c_str()); //root->getValueByName(value, elmName.c_str());
UFormElm *elmt = 0; UFormElm *elmt = 0;
if(root->getArrayNode(&elmt,0) && elmt) { if(root->getArrayNode(&elmt,0) && elmt)
{
if (elmt->isArray()) if (elmt->isArray())
elmtType = "Array"; elmtType = "Array";
if (elmt->isStruct()) { if (elmt->isStruct()) {
elmtType = "Struct"; elmtType = "Struct";
} }
if (elmt->isAtom()) { if (elmt->isAtom())
{
elmt->getValue(value); elmt->getValue(value);
elmtType = "Atom"; elmtType = "Atom";
} }
@ -388,12 +422,14 @@ namespace NLQT {
/******************************************************************************/ /******************************************************************************/
void CGeorgesFormModel::loadFormHeader() { void CGeorgesFormModel::loadFormHeader()
{
CFormItem *fi_pars = new CFormItem(_rootElm, QList<QVariant>() << "parents", _rootItem); CFormItem *fi_pars = new CFormItem(_rootElm, QList<QVariant>() << "parents", _rootItem);
_rootItem->appendChild(fi_pars); _rootItem->appendChild(fi_pars);
Q_FOREACH(QString str, _parents) { Q_FOREACH(QString str, _parents)
{
fi_pars->appendChild(new CFormItem(_rootElm, QList<QVariant>() << str, fi_pars)); fi_pars->appendChild(new CFormItem(_rootElm, QList<QVariant>() << str, fi_pars));
} }
@ -433,7 +469,8 @@ namespace NLQT {
/******************************************************************************/ /******************************************************************************/
void CGeorgesFormModel::setupModelData() { void CGeorgesFormModel::setupModelData()
{
loadFormHeader(); loadFormHeader();
loadFormData(_rootElm, _rootItem); loadFormData(_rootElm, _rootItem);
} }

View file

@ -32,12 +32,13 @@ namespace NLGEORGES {
class UFormElm; class UFormElm;
} }
namespace NLQT { namespace NLQT
{
class CFormItem; class CFormItem;
class CGeorgesFormModel : public QAbstractItemModel { class CGeorgesFormModel : public QAbstractItemModel
Q_OBJECT {
public: public:
CGeorgesFormModel(NLGEORGES::UFormElm *root, QMap< QString, QStringList> deps, CGeorgesFormModel(NLGEORGES::UFormElm *root, QMap< QString, QStringList> deps,

View file

@ -21,7 +21,8 @@
// NeL includes // NeL includes
#include <nel/misc/debug.h> #include <nel/misc/debug.h>
namespace NLQT { namespace NLQT
{
bool CGeorgesFormProxyModel::filterAcceptsRow(int sourceRow, bool CGeorgesFormProxyModel::filterAcceptsRow(int sourceRow,
const QModelIndex &sourceParent) const const QModelIndex &sourceParent) const

View file

@ -23,13 +23,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Qt includes // Qt includes
#include <QSortFilterProxyModel> #include <QSortFilterProxyModel>
namespace NLQT { namespace NLQT
{
class CGeorgesFormProxyModel : public QSortFilterProxyModel { class CGeorgesFormProxyModel : public QSortFilterProxyModel
{
public: public:
CGeorgesFormProxyModel(QObject *parent = 0): QSortFilterProxyModel(parent){} CGeorgesFormProxyModel(QObject *parent = 0): QSortFilterProxyModel(parent)
~CGeorgesFormProxyModel() {} {
}
~CGeorgesFormProxyModel()
{
}
protected: protected:
virtual bool filterAcceptsColumn ( int source_column, const QModelIndex & source_parent ) const ; virtual bool filterAcceptsColumn ( int source_column, const QModelIndex & source_parent ) const ;

View file

@ -30,10 +30,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Project includes // Project includes
#include "qt_displayer.h" #include "qt_displayer.h"
namespace NLQT { namespace NLQT
{
CGeorgesLogDialog::CGeorgesLogDialog(QWidget *parent): CGeorgesLogDialog::CGeorgesLogDialog(QWidget *parent):
QDockWidget(parent){ QDockWidget(parent)
{
_ui.setupUi(this); _ui.setupUi(this);
@ -46,7 +48,8 @@ namespace NLQT {
} }
CGeorgesLogDialog::~CGeorgesLogDialog() { CGeorgesLogDialog::~CGeorgesLogDialog()
{
NLMISC::ErrorLog->removeDisplayer(_displayer); NLMISC::ErrorLog->removeDisplayer(_displayer);
NLMISC::WarningLog->removeDisplayer(_displayer); NLMISC::WarningLog->removeDisplayer(_displayer);
NLMISC::DebugLog->removeDisplayer(_displayer); NLMISC::DebugLog->removeDisplayer(_displayer);

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef LOG_DIALOG_H #ifndef LOG_DIALOG_H
@ -30,24 +30,24 @@
// Project includes // Project includes
#include "ui_log_form.h" #include "ui_log_form.h"
namespace NLQT { namespace NLQT
{
class CQtDisplayer; class CQtDisplayer;
class CGeorgesLogDialog: public QDockWidget class CGeorgesLogDialog: public QDockWidget
{ {
Q_OBJECT
public: public:
CGeorgesLogDialog(QWidget *parent = 0); CGeorgesLogDialog(QWidget *parent = 0);
~CGeorgesLogDialog(); ~CGeorgesLogDialog();
private: private:
Ui::CGeorgesLogDialog _ui; Ui::CGeorgesLogDialog _ui;
CQtDisplayer *_displayer; CQtDisplayer *_displayer;
friend class CMainWindow; friend class CMainWindow;
}; /* CGeorgesLogDialog */ }; /* CGeorgesLogDialog */
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -33,17 +33,20 @@
using namespace std; using namespace std;
using namespace NLMISC; using namespace NLMISC;
namespace NLQT { namespace NLQT
{
namespace { namespace
{
CFileDisplayer *s_FileDisplayer = NULL; CFileDisplayer *s_FileDisplayer = NULL;
} /* anonymous namespace */ } /* anonymous namespace */
} /* namespace NLQT */ } /* namespace NLQT */
void messageHandler(QtMsgType p_type, const char* p_msg) { void messageHandler(QtMsgType p_type, const char* p_msg)
{
fprintf(stderr, "%s\n", p_msg); fprintf(stderr, "%s\n", p_msg);
@ -51,7 +54,8 @@ void messageHandler(QtMsgType p_type, const char* p_msg) {
file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text); file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text);
QChar code; QChar code;
switch (p_type) { switch (p_type)
{
case QtDebugMsg: code = 'D'; break; case QtDebugMsg: code = 'D'; break;
case QtWarningMsg: code = 'W'; break; case QtWarningMsg: code = 'W'; break;
case QtCriticalMsg: code = 'C'; break; case QtCriticalMsg: code = 'C'; break;

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "main_window.h" #include "main_window.h"
@ -36,14 +36,13 @@
using namespace std; using namespace std;
using namespace NLMISC; using namespace NLMISC;
namespace NLQT { namespace NLQT
CMainWindow::CMainWindow(QWidget *parent)
: QMainWindow(parent),
_GeorgesLogDialog(0), _ObjectViewerDialog(0),
_GeorgesDirTreeDialog(0)
{ {
CMainWindow::CMainWindow(QWidget *parent)
: QMainWindow(parent), _GeorgesLogDialog(0), _ObjectViewerDialog(0),
_GeorgesDirTreeDialog(0)
{
setWindowTitle("Qt Georges Editor"); setWindowTitle("Qt Georges Editor");
setDockNestingEnabled(true); setDockNestingEnabled(true);
@ -62,15 +61,18 @@ CMainWindow::CMainWindow(QWidget *parent)
// load and set leveldesign path from config // load and set leveldesign path from config
QString ldPath = Modules::config().configLeveldesignPath().c_str(); QString ldPath = Modules::config().configLeveldesignPath().c_str();
QFileInfo info(ldPath); QFileInfo info(ldPath);
if (!info.isDir()) ldPath = ""; if (!info.isDir())
ldPath = "";
// create georges dir dock widget // create georges dir dock widget
_GeorgesDirTreeDialog = new CGeorgesDirTreeDialog(ldPath, this); _GeorgesDirTreeDialog = new CGeorgesDirTreeDialog(ldPath, this);
addDockWidget(Qt::LeftDockWidgetArea, _GeorgesDirTreeDialog); addDockWidget(Qt::LeftDockWidgetArea, _GeorgesDirTreeDialog);
if (ldPath == "") { if (ldPath == "")
{
if (QMessageBox::information(this, tr("Missing leveldesign path"), if (QMessageBox::information(this, tr("Missing leveldesign path"),
tr("Your leveldesign path seems to be empty or incorrect.\nDo you want to set it now?"), tr("Your leveldesign path seems to be empty or incorrect.\nDo you want to set it now?"),
QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok) { QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok)
{
settings(); settings();
} }
} }
@ -106,10 +108,10 @@ CMainWindow::CMainWindow(QWidget *parent)
connect(_GeorgesDirTreeDialog, SIGNAL(selectedForm(QString)), connect(_GeorgesDirTreeDialog, SIGNAL(selectedForm(QString)),
this, SLOT(openTreeView(QString))); this, SLOT(openTreeView(QString)));
} }
CMainWindow::~CMainWindow() CMainWindow::~CMainWindow()
{ {
// save state & geometry of window and widgets // save state & geometry of window and widgets
QSettings settings("georges_editor_qt.ini", QSettings::IniFormat); QSettings settings("georges_editor_qt.ini", QSettings::IniFormat);
settings.beginGroup("WindowSettings"); settings.beginGroup("WindowSettings");
@ -125,31 +127,38 @@ CMainWindow::~CMainWindow()
delete _ObjectViewerDialog; delete _ObjectViewerDialog;
delete _GeorgesDirTreeDialog; delete _GeorgesDirTreeDialog;
delete _GeorgesLogDialog; delete _GeorgesLogDialog;
} }
void CMainWindow::openTreeView(QString file) { void CMainWindow::openTreeView(QString file)
{
// create or/and raise tree view dock widget for current file // create or/and raise tree view dock widget for current file
setCurrentFile(file); setCurrentFile(file);
CGeorgesTreeViewDialog *newView = 0; CGeorgesTreeViewDialog *newView = 0;
Q_FOREACH(CGeorgesTreeViewDialog* dlg, _treeViewList) { Q_FOREACH(CGeorgesTreeViewDialog* dlg, _treeViewList)
{
if (dlg->loadedForm == file) if (dlg->loadedForm == file)
newView = dlg; newView = dlg;
} }
if (!newView) { if (!newView)
{
newView = new CGeorgesTreeViewDialog(this); newView = new CGeorgesTreeViewDialog(this);
//newView->setAllowedAreas(Qt::TopDockWidgetArea | Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); //newView->setAllowedAreas(Qt::TopDockWidgetArea | Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
newView->setWindowTitle(file); newView->setWindowTitle(file);
if (_treeViewList.isEmpty()) { if (_treeViewList.isEmpty())
{
_emptyView->deleteLater(); _emptyView->deleteLater();
addDockWidget(Qt::TopDockWidgetArea, newView); addDockWidget(Qt::TopDockWidgetArea, newView);
} else { }
else
{
tabifyDockWidget(_treeViewList.first(),newView); tabifyDockWidget(_treeViewList.first(),newView);
QTabBar* tb = Modules::mainWin().getTabBar(); QTabBar* tb = Modules::mainWin().getTabBar();
if (tb) { if (tb)
{
disconnect(tb, SIGNAL(currentChanged ( int ) ), disconnect(tb, SIGNAL(currentChanged ( int ) ),
this,SLOT(tabChanged(int))); this,SLOT(tabChanged(int)));
connect(tb, SIGNAL(currentChanged ( int ) ), connect(tb, SIGNAL(currentChanged ( int ) ),
@ -167,10 +176,10 @@ void CMainWindow::openTreeView(QString file) {
_saveAction, SLOT(setEnabled(bool))); _saveAction, SLOT(setEnabled(bool)));
} }
newView->raise(); newView->raise();
} }
void CMainWindow::settings() void CMainWindow::settings()
{ {
CSettingsDialog _settingsDialog(this); CSettingsDialog _settingsDialog(this);
connect(&_settingsDialog,SIGNAL(ldPathChanged(QString)), connect(&_settingsDialog,SIGNAL(ldPathChanged(QString)),
@ -178,23 +187,23 @@ void CMainWindow::settings()
//_settingsDialog.show(); //_settingsDialog.show();
_settingsDialog.exec(); _settingsDialog.exec();
} }
void CMainWindow::about() void CMainWindow::about()
{ {
QMessageBox::about(this, tr("About Georges Viewer Qt"), QMessageBox::about(this, tr("About Georges Viewer Qt"),
tr("<h2>Georges Viewer Qt</h2>" tr("<h2>Georges Viewer Qt</h2>"
"Author: aquiles<br>Credits:Thx to dnk-88 for parts of his code")); "Author: aquiles<br>Credits:Thx to dnk-88 for parts of his code"));
} }
void CMainWindow::updateStatusBar() void CMainWindow::updateStatusBar()
{ {
//if (_isGraphicsInitialized) //if (_isGraphicsInitialized)
// statusBar()->showMessage(QString(Modules::objView().getDriver()->getVideocardInformation())); // statusBar()->showMessage(QString(Modules::objView().getDriver()->getVideocardInformation()));
} }
void CMainWindow::open() void CMainWindow::open()
{ {
/*QStringList fileNames = QFileDialog::getOpenFileNames(this, /*QStringList fileNames = QFileDialog::getOpenFileNames(this,
tr("Open NeL data file"), _lastDir, tr("Open NeL data file"), _lastDir,
tr("All NeL files (*.shape *.ps);;" tr("All NeL files (*.shape *.ps);;"
@ -222,10 +231,10 @@ void CMainWindow::open()
_SlotManagerDialog->updateUiSlots(); _SlotManagerDialog->updateUiSlots();
} }
setCursor(Qt::ArrowCursor);*/ setCursor(Qt::ArrowCursor);*/
} }
void CMainWindow::save() void CMainWindow::save()
{ {
if(!_currentView) if(!_currentView)
return; return;
@ -236,21 +245,21 @@ void CMainWindow::save()
_saveAction->setEnabled(false); _saveAction->setEnabled(false);
setCursor(Qt::ArrowCursor); setCursor(Qt::ArrowCursor);
} }
void CMainWindow::create() void CMainWindow::create()
{ {
} }
void CMainWindow::createEmptyView() void CMainWindow::createEmptyView()
{ {
_emptyView = new CGeorgesTreeViewDialog(this, true); _emptyView = new CGeorgesTreeViewDialog(this, true);
//_emptyView->setAllowedAreas(Qt::TopDockWidgetArea); //_emptyView->setAllowedAreas(Qt::TopDockWidgetArea);
addDockWidget(Qt::TopDockWidgetArea,_emptyView); addDockWidget(Qt::TopDockWidgetArea,_emptyView);
} }
void CMainWindow::createActions() void CMainWindow::createActions()
{ {
_openAction = new QAction(tr("&Open..."), this); _openAction = new QAction(tr("&Open..."), this);
_openAction->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOpenButton)); _openAction->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOpenButton));
_openAction->setShortcut(QKeySequence::Open); _openAction->setShortcut(QKeySequence::Open);
@ -299,10 +308,10 @@ void CMainWindow::createActions()
connect(recentFileActs[i], SIGNAL(triggered()), connect(recentFileActs[i], SIGNAL(triggered()),
this, SLOT(openRecentFile())); this, SLOT(openRecentFile()));
} }
} }
void CMainWindow::createMenus() void CMainWindow::createMenus()
{ {
_fileMenu = menuBar()->addMenu(tr("&File")); _fileMenu = menuBar()->addMenu(tr("&File"));
_fileMenu->addAction(_createAction); _fileMenu->addAction(_createAction);
_fileMenu->addAction(_openAction); _fileMenu->addAction(_openAction);
@ -320,7 +329,8 @@ void CMainWindow::createMenus()
_viewMenu->addAction(_GeorgesDirTreeDialog->toggleViewAction()); _viewMenu->addAction(_GeorgesDirTreeDialog->toggleViewAction());
_toolsMenu = menuBar()->addMenu(tr("&Tools")); _toolsMenu = menuBar()->addMenu(tr("&Tools"));
if (_ObjectViewerDialog) { if (_ObjectViewerDialog)
{
_toolsMenu->addAction(_ObjectViewerDialog->toggleViewAction()); _toolsMenu->addAction(_ObjectViewerDialog->toggleViewAction());
_ObjectViewerDialog->toggleViewAction()->setIcon(QIcon(":/images/pqrticles.png")); _ObjectViewerDialog->toggleViewAction()->setIcon(QIcon(":/images/pqrticles.png"));
} }
@ -332,10 +342,10 @@ void CMainWindow::createMenus()
_helpMenu = menuBar()->addMenu(tr("&Help")); _helpMenu = menuBar()->addMenu(tr("&Help"));
_helpMenu->addAction(_aboutAction); _helpMenu->addAction(_aboutAction);
_helpMenu->addAction(_aboutQtAction); _helpMenu->addAction(_aboutQtAction);
} }
void CMainWindow::createToolBars() void CMainWindow::createToolBars()
{ {
_fileToolBar = addToolBar(tr("&File")); _fileToolBar = addToolBar(tr("&File"));
_fileToolBar->addAction(_createAction); _fileToolBar->addAction(_createAction);
_fileToolBar->addAction(_openAction); _fileToolBar->addAction(_openAction);
@ -344,26 +354,28 @@ void CMainWindow::createToolBars()
_toolsBar = addToolBar(tr("&Tools")); _toolsBar = addToolBar(tr("&Tools"));
if (_ObjectViewerDialog) if (_ObjectViewerDialog)
_toolsBar->addAction(_ObjectViewerDialog->toggleViewAction()); _toolsBar->addAction(_ObjectViewerDialog->toggleViewAction());
} }
void CMainWindow::createStatusBar() void CMainWindow::createStatusBar()
{ {
statusBar()->showMessage(tr("StatusReady")); statusBar()->showMessage(tr("StatusReady"));
} }
void CMainWindow::cfcbQtStyle(NLMISC::CConfigFile::CVar &var) void CMainWindow::cfcbQtStyle(NLMISC::CConfigFile::CVar &var)
{ {
QApplication::setStyle(QStyleFactory::create(var.asString().c_str())); QApplication::setStyle(QStyleFactory::create(var.asString().c_str()));
} }
void CMainWindow::cfcbQtPalette(NLMISC::CConfigFile::CVar &var) void CMainWindow::cfcbQtPalette(NLMISC::CConfigFile::CVar &var)
{ {
if (var.asBool()) QApplication::setPalette(QApplication::style()->standardPalette()); if (var.asBool())
else QApplication::setPalette(_originalPalette); QApplication::setPalette(QApplication::style()->standardPalette());
} else
QApplication::setPalette(_originalPalette);
}
QTabBar* CMainWindow::getTabBar() QTabBar* CMainWindow::getTabBar()
{ {
// get the QTabBar // get the QTabBar
QList<QTabBar *> tabList = findChildren<QTabBar *>(); QList<QTabBar *> tabList = findChildren<QTabBar *>();
//tabList = _mainWindow->findChildren<QTabBar *>(); //tabList = _mainWindow->findChildren<QTabBar *>();
@ -371,7 +383,8 @@ QTabBar* CMainWindow::getTabBar()
// arg(QString::number((int)_mainWindow,16)). // arg(QString::number((int)_mainWindow,16)).
// toStdString().c_str()); // toStdString().c_str());
QTabBar *tb = 0; QTabBar *tb = 0;
Q_FOREACH(QTabBar *tabBar, tabList){ Q_FOREACH(QTabBar *tabBar, tabList)
{
if (tabBar->parent() != this) if (tabBar->parent() != this)
continue; continue;
//nlinfo(QString("%1 %2 %3 %4").arg(tabBar->objectName()). //nlinfo(QString("%1 %2 %3 %4").arg(tabBar->objectName()).
@ -379,18 +392,20 @@ QTabBar* CMainWindow::getTabBar()
// arg(QString::number((int)tabBar->parentWidget(),16)). // arg(QString::number((int)tabBar->parentWidget(),16)).
// arg(QString::number((int)tabBar->parent(),16)). // arg(QString::number((int)tabBar->parent(),16)).
// toStdString().c_str()); // toStdString().c_str());
for (int i = 0; i < tabBar->count(); i++) { for (int i = 0; i < tabBar->count(); i++)
{
QString currentTab = tabBar->tabText(i); QString currentTab = tabBar->tabText(i);
//nlinfo(currentTab.toStdString().c_str()); //nlinfo(currentTab.toStdString().c_str());
} }
tb = tabBar; tb = tabBar;
} }
return tb; return tb;
} }
void CMainWindow::tabChanged(int index) void CMainWindow::tabChanged(int index)
{ {
if (index == -1) { if (index == -1)
{
setWindowTitle("Qt Georges Editor"); setWindowTitle("Qt Georges Editor");
return; return;
} }
@ -398,8 +413,10 @@ void CMainWindow::tabChanged(int index)
QTabBar *tb = getTabBar(); QTabBar *tb = getTabBar();
//nlinfo(QString("%1").arg(index).toStdString().c_str()); //nlinfo(QString("%1").arg(index).toStdString().c_str());
Q_FOREACH(CGeorgesTreeViewDialog* dlg, _treeViewList) { Q_FOREACH(CGeorgesTreeViewDialog* dlg, _treeViewList)
if (dlg->windowTitle() == tb->tabText(index)) { {
if (dlg->windowTitle() == tb->tabText(index))
{
//nlinfo(QString("%1 modified %2").arg(tb->tabText(index)). //nlinfo(QString("%1 modified %2").arg(tb->tabText(index)).
// arg(dlg->modified()). // arg(dlg->modified()).
// toStdString().c_str()); // toStdString().c_str());
@ -408,7 +425,7 @@ void CMainWindow::tabChanged(int index)
_saveAction->setEnabled(dlg->modified()); _saveAction->setEnabled(dlg->modified());
} }
} }
} }
void CMainWindow::openRecentFile() void CMainWindow::openRecentFile()
{ {
@ -436,7 +453,8 @@ void CMainWindow::tabChanged(int index)
settings.setValue("List",files); settings.setValue("List",files);
settings.endGroup(); settings.endGroup();
Q_FOREACH (QWidget *widget, QApplication::topLevelWidgets()) { Q_FOREACH (QWidget *widget, QApplication::topLevelWidgets())
{
CMainWindow *mainWin = qobject_cast<CMainWindow *>(widget); CMainWindow *mainWin = qobject_cast<CMainWindow *>(widget);
if (mainWin) if (mainWin)
mainWin->updateRecentFileActions(); mainWin->updateRecentFileActions();
@ -451,7 +469,8 @@ void CMainWindow::tabChanged(int index)
settings.endGroup(); settings.endGroup();
int numRecentFiles = qMin(files.size(), (int)MaxRecentFiles); int numRecentFiles = qMin(files.size(), (int)MaxRecentFiles);
for (int i = 0; i < numRecentFiles; ++i) { for (int i = 0; i < numRecentFiles; ++i)
{
QString text = tr("&%1 %2").arg(i + 1).arg(QFileInfo(files[i]).fileName()); QString text = tr("&%1 %2").arg(i + 1).arg(QFileInfo(files[i]).fileName());
recentFileActs[i]->setText(text); recentFileActs[i]->setText(text);
recentFileActs[i]->setData(files[i]); recentFileActs[i]->setData(files[i]);
@ -483,6 +502,7 @@ void CMainWindow::tabChanged(int index)
setCurrentFile(fileName); setCurrentFile(fileName);
//statusBar()->showMessage(tr("File loaded"), 2000); //statusBar()->showMessage(tr("File loaded"), 2000);
} }
} /* namespace NLQT */ } /* namespace NLQT */
/* end of file */ /* end of file */

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -33,23 +33,24 @@
// Project includes // Project includes
namespace NLMISC { namespace NLMISC
{
class CConfigFile; class CConfigFile;
} }
namespace NLQT { namespace NLQT
{
class CGeorgesLogDialog; class CGeorgesLogDialog;
class CObjectViewerDialog; class CObjectViewerDialog;
class CGeorgesDirTreeDialog; class CGeorgesDirTreeDialog;
class CGeorgesTreeViewDialog; class CGeorgesTreeViewDialog;
class CMainWindow : public QMainWindow
class CMainWindow : public QMainWindow {
{
Q_OBJECT Q_OBJECT
public: public:
CMainWindow(QWidget *parent = 0); CMainWindow(QWidget *parent = 0);
~CMainWindow(); ~CMainWindow();
@ -58,7 +59,7 @@ public:
QTabBar* getTabBar(); QTabBar* getTabBar();
void createEmptyView(); void createEmptyView();
private Q_SLOTS: private Q_SLOTS:
void open(); void open();
void create(); void create();
void save(); void save();
@ -69,7 +70,7 @@ private Q_SLOTS:
void tabChanged(int); void tabChanged(int);
void openRecentFile(); void openRecentFile();
private: private:
void createActions(); void createActions();
void createMenus(); void createMenus();
void createToolBars(); void createToolBars();
@ -115,7 +116,7 @@ private:
enum { MaxRecentFiles = 5 }; enum { MaxRecentFiles = 5 };
QAction *recentFileActs[MaxRecentFiles]; QAction *recentFileActs[MaxRecentFiles];
};/* class CMainWindow */ };/* class CMainWindow */
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "object_viewer.h" #include "object_viewer.h"
@ -49,32 +49,33 @@ using namespace std;
using namespace NLMISC; using namespace NLMISC;
using namespace NL3D; using namespace NL3D;
namespace NLQT { namespace NLQT
{
CObjectViewer::CObjectViewer() CObjectViewer::CObjectViewer()
: _Driver(NULL), : _Driver(NULL),
_phi(0), _psi(0),_dist(20), _phi(0), _psi(0),_dist(20),
_CurrentInstance("") _CurrentInstance("")
{ {
} }
CObjectViewer::~CObjectViewer() CObjectViewer::~CObjectViewer()
{ {
} }
void CObjectViewer::reinit(nlWindow wnd, uint16 w, uint16 h) void CObjectViewer::reinit(nlWindow wnd, uint16 w, uint16 h)
{ {
nldebug("CObjectViewert::reinit"); nldebug("CObjectViewert::reinit");
//release(); //release();
//init(wnd, w, h); //init(wnd, w, h);
_Driver->setDisplay(wnd, NL3D::UDriver::CMode(w, h, 32)); _Driver->setDisplay(wnd, NL3D::UDriver::CMode(w, h, 32));
} }
void CObjectViewer::init(nlWindow wnd, uint16 w, uint16 h) void CObjectViewer::init(nlWindow wnd, uint16 w, uint16 h)
{ {
//H_AUTO2 //H_AUTO2
nldebug("CObjectViewer::init"); nldebug("CObjectViewer::init");
@ -138,10 +139,10 @@ void CObjectViewer::init(nlWindow wnd, uint16 w, uint16 h)
_MouseListener->setFrustrum(Modules::objView().getScene()->getCam().getFrustum()); _MouseListener->setFrustrum(Modules::objView().getScene()->getCam().getFrustum());
_MouseListener->setHotSpot(hotSpot); _MouseListener->setHotSpot(hotSpot);
_MouseListener->setMouseMode(U3dMouseListener::edit3d); _MouseListener->setMouseMode(U3dMouseListener::edit3d);
} }
void CObjectViewer::release() void CObjectViewer::release()
{ {
//H_AUTO2 //H_AUTO2
nldebug("CObjectViewer::release"); nldebug("CObjectViewer::release");
@ -166,34 +167,34 @@ void CObjectViewer::release()
_Driver->release(); _Driver->release();
delete _Driver; delete _Driver;
_Driver = NULL; _Driver = NULL;
} }
void CObjectViewer::updateInput() void CObjectViewer::updateInput()
{ {
_Driver->EventServer.pump(); _Driver->EventServer.pump();
// New matrix from camera // New matrix from camera
_Scene->getCam().setTransformMode(NL3D::UTransformable::DirectMatrix); _Scene->getCam().setTransformMode(NL3D::UTransformable::DirectMatrix);
_Scene->getCam().setMatrix (_MouseListener->getViewMatrix()); _Scene->getCam().setMatrix (_MouseListener->getViewMatrix());
} }
void CObjectViewer::renderDriver() void CObjectViewer::renderDriver()
{ {
_Driver->clearBuffers(_BackgroundColor); _Driver->clearBuffers(_BackgroundColor);
} }
void CObjectViewer::renderScene() void CObjectViewer::renderScene()
{ {
// render the scene // render the scene
_Scene->render(); _Scene->render();
} }
void CObjectViewer::renderDebug2D() void CObjectViewer::renderDebug2D()
{ {
} }
void CObjectViewer::saveScreenshot(const std::string &nameFile, bool jpg, bool png, bool tga) void CObjectViewer::saveScreenshot(const std::string &nameFile, bool jpg, bool png, bool tga)
{ {
//H_AUTO2 //H_AUTO2
// FIXME: create screenshot path if it doesn't exist! // FIXME: create screenshot path if it doesn't exist!
@ -226,10 +227,10 @@ void CObjectViewer::saveScreenshot(const std::string &nameFile, bool jpg, bool p
bitmap.writeTGA(outputFile, 24, false); bitmap.writeTGA(outputFile, 24, false);
nlinfo("Screenshot '%s' saved", newfilename.c_str()); nlinfo("Screenshot '%s' saved", newfilename.c_str());
} }
} }
bool CObjectViewer::loadMesh(const std::string &meshFileName, const std::string &skelFileName) bool CObjectViewer::loadMesh(const std::string &meshFileName, const std::string &skelFileName)
{ {
CPath::addSearchPath(CFile::getPath(meshFileName), false, false); CPath::addSearchPath(CFile::getPath(meshFileName), false, false);
// create instance of the mesh character // create instance of the mesh character
@ -255,10 +256,10 @@ bool CObjectViewer::loadMesh(const std::string &meshFileName, const std::string
entity._AnimationSet = _Driver->createAnimationSet(false); entity._AnimationSet = _Driver->createAnimationSet(false);
entity._PlayList = _PlayListManager->createPlayList(entity._AnimationSet); entity._PlayList = _PlayListManager->createPlayList(entity._AnimationSet);
return true; return true;
} }
void CObjectViewer::resetScene() void CObjectViewer::resetScene()
{ {
deleteEntities(); deleteEntities();
// Reset camera. // Reset camera.
@ -273,10 +274,10 @@ void CObjectViewer::resetScene()
_CurrentInstance = ""; _CurrentInstance = "";
nlinfo("Scene cleared"); nlinfo("Scene cleared");
} }
void CObjectViewer::updateCamera(float deltaPsi, float deltaPhi, float deltaDist) void CObjectViewer::updateCamera(float deltaPsi, float deltaPhi, float deltaDist)
{ {
_phi += deltaPhi; _phi += deltaPhi;
_psi += deltaPsi; _psi += deltaPsi;
_dist += deltaDist; _dist += deltaDist;
@ -298,60 +299,60 @@ void CObjectViewer::updateCamera(float deltaPsi, float deltaPhi, float deltaDist
NLMISC::CVector camera = m0 * NLMISC::CVector(_dist,0,0); NLMISC::CVector camera = m0 * NLMISC::CVector(_dist,0,0);
_Scene->getCam().lookAt(camera, up); _Scene->getCam().lookAt(camera, up);
} }
void CObjectViewer::setBackgroundColor(NLMISC::CRGBA backgroundColor) void CObjectViewer::setBackgroundColor(NLMISC::CRGBA backgroundColor)
{ {
_BackgroundColor = backgroundColor; _BackgroundColor = backgroundColor;
// config file variable changes // config file variable changes
Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.R, 0); Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.R, 0);
Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.G, 1); Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.G, 1);
Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.B, 2); Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.B, 2);
} }
void CObjectViewer::setGraphicsDriver(bool Direct3D) void CObjectViewer::setGraphicsDriver(bool Direct3D)
{ {
_Direct3D = Direct3D; _Direct3D = Direct3D;
if (_Direct3D) Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("Direct3D"); if (_Direct3D) Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("Direct3D");
else Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("OpenGL"); else Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("OpenGL");
} }
void CObjectViewer::setSizeViewport(uint16 w, uint16 h) void CObjectViewer::setSizeViewport(uint16 w, uint16 h)
{ {
_Scene->getCam().setPerspective((float)Pi/2.f, (float)w/h, 0.1f, 1000); _Scene->getCam().setPerspective((float)Pi/2.f, (float)w/h, 0.1f, 1000);
} }
void CObjectViewer::getSizeViewport(float &left, float &right, float &bottom, float &top, float &znear, float &zfar) void CObjectViewer::getSizeViewport(float &left, float &right, float &bottom, float &top, float &znear, float &zfar)
{ {
//_Scene->getCam().setPerspective((float)Pi/2.f, (float)w/h, 0.1f, 1000); //_Scene->getCam().setPerspective((float)Pi/2.f, (float)w/h, 0.1f, 1000);
_Scene->getCam().getFrustum(left, right, bottom, top, znear, zfar); _Scene->getCam().getFrustum(left, right, bottom, top, znear, zfar);
} }
void CObjectViewer::setCurrentObject(const std::string &name) void CObjectViewer::setCurrentObject(const std::string &name)
{ {
if ((_Entities.count(name) != 0) || ( name.empty() )) _CurrentInstance = name; if ((_Entities.count(name) != 0) || ( name.empty() )) _CurrentInstance = name;
else nlerror ("Entity %s not found", name.c_str()); else nlerror ("Entity %s not found", name.c_str());
nlinfo("set current entity %s", _CurrentInstance.c_str()); nlinfo("set current entity %s", _CurrentInstance.c_str());
} }
CEntity& CObjectViewer::getEntity(const std::string &name) CEntity& CObjectViewer::getEntity(const std::string &name)
{ {
if ( _Entities.count(name) == 0) nlerror("Entity %s not found", name.c_str()); if ( _Entities.count(name) == 0) nlerror("Entity %s not found", name.c_str());
EIT eit = _Entities.find (name); EIT eit = _Entities.find (name);
return (*eit).second; return (*eit).second;
} }
void CObjectViewer::getListObjects(std::vector<std::string> &listObj) void CObjectViewer::getListObjects(std::vector<std::string> &listObj)
{ {
listObj.clear(); listObj.clear();
for (EIT eit = _Entities.begin(); eit != _Entities.end(); ++eit) for (EIT eit = _Entities.begin(); eit != _Entities.end(); ++eit)
listObj.push_back((*eit).second._Name); listObj.push_back((*eit).second._Name);
} }
void CObjectViewer::deleteEntity(CEntity &entity) void CObjectViewer::deleteEntity(CEntity &entity)
{ {
if (entity._PlayList != NULL) if (entity._PlayList != NULL)
{ {
_PlayListManager->deletePlayList (entity._PlayList); _PlayListManager->deletePlayList (entity._PlayList);
@ -377,26 +378,26 @@ void CObjectViewer::deleteEntity(CEntity &entity)
_Scene->deleteInstance(entity._Instance); _Scene->deleteInstance(entity._Instance);
entity._Instance = NULL; entity._Instance = NULL;
} }
} }
void CObjectViewer::deleteEntities() void CObjectViewer::deleteEntities()
{ {
for (EIT eit = _Entities.begin(); eit != _Entities.end(); ++eit) for (EIT eit = _Entities.begin(); eit != _Entities.end(); ++eit)
{ {
CEntity &entity = (*eit).second; CEntity &entity = (*eit).second;
deleteEntity(entity); deleteEntity(entity);
} }
_Entities.clear(); _Entities.clear();
} }
void CObjectViewer::cfcbBackgroundColor(NLMISC::CConfigFile::CVar &var) void CObjectViewer::cfcbBackgroundColor(NLMISC::CConfigFile::CVar &var)
{ {
// read variable from config file // read variable from config file
_BackgroundColor = CRGBA(var.asInt(0), var.asInt(1), var.asInt(2)); _BackgroundColor = CRGBA(var.asInt(0), var.asInt(1), var.asInt(2));
} }
void CObjectViewer::cfcbGraphicsDriver(NLMISC::CConfigFile::CVar &var) void CObjectViewer::cfcbGraphicsDriver(NLMISC::CConfigFile::CVar &var)
{ {
// Choose driver opengl to work correctly under Linux example // Choose driver opengl to work correctly under Linux example
_Direct3D = false; //_Driver = OpenGL; _Direct3D = false; //_Driver = OpenGL;
@ -406,6 +407,6 @@ void CObjectViewer::cfcbGraphicsDriver(NLMISC::CConfigFile::CVar &var)
else if (driver == "OpenGL") _Direct3D = false; //m_Driver = OpenGL; else if (driver == "OpenGL") _Direct3D = false; //m_Driver = OpenGL;
else nlwarning("Invalid driver specified, defaulting to OpenGL"); else nlwarning("Invalid driver specified, defaulting to OpenGL");
#endif #endif
} }
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef OBJECT_VIEWER_H #ifndef OBJECT_VIEWER_H
@ -33,7 +33,8 @@
// Project includes // Project includes
#include "entity.h" #include "entity.h"
namespace NL3D { namespace NL3D
{
class UDriver; class UDriver;
class UScene; class UScene;
class ULight; class ULight;
@ -48,15 +49,16 @@ namespace NL3D {
namespace NLQT namespace NLQT
@brief namespace NLQT @brief namespace NLQT
*/ */
namespace NLQT { namespace NLQT
/**
@class CObjectViewer
A CObjectViewer class loading and viewing shape, particle system files.
*/
class CObjectViewer
{ {
public:
/**
@class CObjectViewer
A CObjectViewer class loading and viewing shape, particle system files.
*/
class CObjectViewer
{
public:
/// Default constructor. /// Default constructor.
CObjectViewer(); CObjectViewer();
@ -153,7 +155,7 @@ public:
/// @return pointer to the UPlayListManager /// @return pointer to the UPlayListManager
inline NL3D::UPlayListManager *getPlayListManager() { return _PlayListManager; } inline NL3D::UPlayListManager *getPlayListManager() { return _PlayListManager; }
private: private:
void deleteEntity (CEntity &entity); void deleteEntity (CEntity &entity);
/// Delete all entities /// Delete all entities
@ -184,7 +186,7 @@ private:
// a temporary solution, and later remove // a temporary solution, and later remove
friend class CAnimationSetDialog; friend class CAnimationSetDialog;
};/* class CObjectViewer */ };/* class CObjectViewer */
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "objectviewer_dialog.h" #include "objectviewer_dialog.h"
@ -39,11 +39,12 @@
using namespace std; using namespace std;
using namespace NL3D; using namespace NL3D;
namespace NLQT { namespace NLQT
CObjectViewerDialog::CObjectViewerDialog(QWidget *parent)
: _isGraphicsInitialized(false), _isGraphicsEnabled(false), QDockWidget(parent)
{ {
CObjectViewerDialog::CObjectViewerDialog(QWidget *parent)
: _isGraphicsInitialized(false), _isGraphicsEnabled(false), QDockWidget(parent)
{
_ui.setupUi(this); _ui.setupUi(this);
//widget = new QWidget(dockWidgetContents); //widget = new QWidget(dockWidgetContents);
@ -66,14 +67,15 @@ CObjectViewerDialog::CObjectViewerDialog(QWidget *parent)
// timer->start(); // <- timeout 0 // timer->start(); // <- timeout 0
// it's heavy on cpu, though, when no 3d driver initialized :) // it's heavy on cpu, though, when no 3d driver initialized :)
_mainTimer->start(5); // 25fps _mainTimer->start(5); // 25fps
} }
CObjectViewerDialog::~CObjectViewerDialog() { CObjectViewerDialog::~CObjectViewerDialog()
{
_mainTimer->stop(); _mainTimer->stop();
} }
void CObjectViewerDialog::init() void CObjectViewerDialog::init()
{ {
connect(this, SIGNAL(topLevelChanged(bool)), connect(this, SIGNAL(topLevelChanged(bool)),
this, SLOT(topLevelChanged(bool))); this, SLOT(topLevelChanged(bool)));
//H_AUTO2 //H_AUTO2
@ -85,10 +87,10 @@ void CObjectViewerDialog::init()
Modules::objView().init((nlWindow)_nlw->winId(), 20, 20); Modules::objView().init((nlWindow)_nlw->winId(), 20, 20);
setMouseTracking(true); setMouseTracking(true);
} }
void CObjectViewerDialog::setVisible(bool visible) void CObjectViewerDialog::setVisible(bool visible)
{ {
// called by show() // called by show()
// code assuming visible window needed to init the 3d driver // code assuming visible window needed to init the 3d driver
if (visible != isVisible()) if (visible != isVisible())
@ -104,10 +106,10 @@ void CObjectViewerDialog::setVisible(bool visible)
QDockWidget::setVisible(false); QDockWidget::setVisible(false);
} }
} }
} }
void CObjectViewerDialog::updateInitialization(bool visible) void CObjectViewerDialog::updateInitialization(bool visible)
{ {
//nldebug("CMainWindow::updateInitialization"); //nldebug("CMainWindow::updateInitialization");
bool done; bool done;
do do
@ -147,10 +149,10 @@ void CObjectViewerDialog::updateInitialization(bool visible)
} while (!done); } while (!done);
} }
void CObjectViewerDialog::updateRender() void CObjectViewerDialog::updateRender()
{ {
//nldebug("CMainWindow::updateRender"); //nldebug("CMainWindow::updateRender");
updateInitialization(isVisible()); updateInitialization(isVisible());
@ -242,62 +244,62 @@ void CObjectViewerDialog::updateRender()
Modules::objView().getDriver()->swapBuffers(); Modules::objView().getDriver()->swapBuffers();
} }
} }
} }
void CObjectViewerDialog::release() void CObjectViewerDialog::release()
{ {
//H_AUTO2 //H_AUTO2
nldebug("CObjectViewerDialog::release"); nldebug("CObjectViewerDialog::release");
Modules::objView().release(); Modules::objView().release();
} }
void CObjectViewerDialog::reinit() void CObjectViewerDialog::reinit()
{ {
//H_AUTO2 //H_AUTO2
nldebug("CObjectViewerDialog::reinit"); nldebug("CObjectViewerDialog::reinit");
Modules::objView().release(); Modules::objView().release();
//Modules::objView().reinit(_ui.frame->winId(), width(), height()); //Modules::objView().reinit(_ui.frame->winId(), width(), height());
} }
QAction *CObjectViewerDialog::createSaveScreenshotAction(QObject *parent) QAction *CObjectViewerDialog::createSaveScreenshotAction(QObject *parent)
{ {
QAction *action = new QAction(parent); QAction *action = new QAction(parent);
connect(action, SIGNAL(triggered()), this, SLOT(saveScreenshot())); connect(action, SIGNAL(triggered()), this, SLOT(saveScreenshot()));
return action; return action;
} }
QAction *CObjectViewerDialog::createSetBackgroundColor(QObject *parent) QAction *CObjectViewerDialog::createSetBackgroundColor(QObject *parent)
{ {
QAction *action = new QAction(parent); QAction *action = new QAction(parent);
connect(action, SIGNAL(triggered()), this, SLOT(setBackgroundColor())); connect(action, SIGNAL(triggered()), this, SLOT(setBackgroundColor()));
return action; return action;
} }
void CObjectViewerDialog::saveScreenshot() void CObjectViewerDialog::saveScreenshot()
{ {
Modules::objView().saveScreenshot("screenshot", false, true, false); Modules::objView().saveScreenshot("screenshot", false, true, false);
} }
void CObjectViewerDialog::setBackgroundColor() void CObjectViewerDialog::setBackgroundColor()
{ {
QColor color = QColorDialog::getColor(QColor(Modules::objView().getBackgroundColor().R, QColor color = QColorDialog::getColor(QColor(Modules::objView().getBackgroundColor().R,
Modules::objView().getBackgroundColor().G, Modules::objView().getBackgroundColor().G,
Modules::objView().getBackgroundColor().B)); Modules::objView().getBackgroundColor().B));
Modules::objView().setBackgroundColor(NLMISC::CRGBA(color.red(), color.green(), color.blue())); Modules::objView().setBackgroundColor(NLMISC::CRGBA(color.red(), color.green(), color.blue()));
} }
void CObjectViewerDialog::topLevelChanged ( bool topLevel ) { void CObjectViewerDialog::topLevelChanged ( bool topLevel ) {
//nldebug("CObjectViewerDialog::topLevelChanged topLevel:%d",topLevel); //nldebug("CObjectViewerDialog::topLevelChanged topLevel:%d",topLevel);
nldebug("CObjectViewerDialog::topLevelChanged winId:%d",winId()); nldebug("CObjectViewerDialog::topLevelChanged winId:%d",winId());
// winId changing when re/docking // winId changing when re/docking
//Modules::georges().init(); //Modules::georges().init();
Modules::objView().reinit((nlWindow)_nlw->winId(), _nlw->width(), _nlw->height()); Modules::objView().reinit((nlWindow)_nlw->winId(), _nlw->width(), _nlw->height());
} }
void CObjectViewerDialog::resizeEvent(QResizeEvent *resizeEvent) void CObjectViewerDialog::resizeEvent(QResizeEvent *resizeEvent)
{ {
QDockWidget::resizeEvent(resizeEvent); QDockWidget::resizeEvent(resizeEvent);
if (Modules::objView().getDriver()) if (Modules::objView().getDriver())
Modules::objView().setSizeViewport(resizeEvent->size().width(), resizeEvent->size().height()); Modules::objView().setSizeViewport(resizeEvent->size().width(), resizeEvent->size().height());
@ -307,10 +309,10 @@ void CObjectViewerDialog::resizeEvent(QResizeEvent *resizeEvent)
// Resizing the window after switching drivers a few times becomes slow. // Resizing the window after switching drivers a few times becomes slow.
// There is probably something inside the drivers not being released properly. // There is probably something inside the drivers not being released properly.
} }
void CObjectViewerDialog::wheelEvent(QWheelEvent *event) void CObjectViewerDialog::wheelEvent(QWheelEvent *event)
{ {
//nldebug("CObjectViewerDialog::wheelEvent"); //nldebug("CObjectViewerDialog::wheelEvent");
// Get relative positions. // Get relative positions.
float fX = 1.0f - (float)event->pos().x() / this->width(); float fX = 1.0f - (float)event->pos().x() / this->width();
@ -323,9 +325,10 @@ void CObjectViewerDialog::wheelEvent(QWheelEvent *event)
else else
Modules::objView().getDriver()->EventServer.postEvent(new NLMISC::CEventMouseWheel(-fX, fY, buttons, false, this)); Modules::objView().getDriver()->EventServer.postEvent(new NLMISC::CEventMouseWheel(-fX, fY, buttons, false, this));
} }
uint32 CObjectViewerDialog::getNelButtons(QMouseEvent *event) { uint32 CObjectViewerDialog::getNelButtons(QMouseEvent *event)
{
//nldebug("CObjectViewerDialog::getNelButtons"); //nldebug("CObjectViewerDialog::getNelButtons");
uint32 buttons = NLMISC::noButton; uint32 buttons = NLMISC::noButton;
if(event->buttons() & Qt::LeftButton) buttons |= NLMISC::leftButton; if(event->buttons() & Qt::LeftButton) buttons |= NLMISC::leftButton;
@ -336,9 +339,10 @@ uint32 CObjectViewerDialog::getNelButtons(QMouseEvent *event) {
if(event->modifiers() & Qt::AltModifier) buttons |= NLMISC::altButton; if(event->modifiers() & Qt::AltModifier) buttons |= NLMISC::altButton;
return buttons; return buttons;
} }
uint32 CObjectViewerDialog::getNelButtons(QWheelEvent *event) { uint32 CObjectViewerDialog::getNelButtons(QWheelEvent *event)
{
//nldebug("CObjectViewerDialog::getNelButtons"); //nldebug("CObjectViewerDialog::getNelButtons");
uint32 buttons = NLMISC::noButton; uint32 buttons = NLMISC::noButton;
if(event->buttons() & Qt::LeftButton) buttons |= NLMISC::leftButton; if(event->buttons() & Qt::LeftButton) buttons |= NLMISC::leftButton;
@ -349,9 +353,10 @@ uint32 CObjectViewerDialog::getNelButtons(QWheelEvent *event) {
if(event->modifiers() & Qt::AltModifier) buttons |= NLMISC::altButton; if(event->modifiers() & Qt::AltModifier) buttons |= NLMISC::altButton;
return buttons; return buttons;
} }
void CObjectViewerDialog::mousePressEvent(QMouseEvent *event) { void CObjectViewerDialog::mousePressEvent(QMouseEvent *event)
{
//nldebug("CObjectViewerDialog::mousePressEvent"); //nldebug("CObjectViewerDialog::mousePressEvent");
// Get relative positions. // Get relative positions.
float fX = 1.0f - (float)event->pos().x() / this->width(); float fX = 1.0f - (float)event->pos().x() / this->width();
@ -372,9 +377,10 @@ void CObjectViewerDialog::mousePressEvent(QMouseEvent *event) {
Modules::objView().getDriver()->EventServer.postEvent( Modules::objView().getDriver()->EventServer.postEvent(
new NLMISC::CEventMouseDown( -fX, fY, new NLMISC::CEventMouseDown( -fX, fY,
(NLMISC::TMouseButton)(NLMISC::rightButton|(buttons&~(NLMISC::rightButton|NLMISC::leftButton|NLMISC::middleButton))), this)); (NLMISC::TMouseButton)(NLMISC::rightButton|(buttons&~(NLMISC::rightButton|NLMISC::leftButton|NLMISC::middleButton))), this));
} }
void CObjectViewerDialog::mouseReleaseEvent(QMouseEvent *event) { void CObjectViewerDialog::mouseReleaseEvent(QMouseEvent *event)
{
//nldebug("CObjectViewerDialog::mouseReleaseEvent"); //nldebug("CObjectViewerDialog::mouseReleaseEvent");
// Get relative positions. // Get relative positions.
float fX = 1.0f - (float)event->pos().x() / this->width(); float fX = 1.0f - (float)event->pos().x() / this->width();
@ -392,9 +398,10 @@ void CObjectViewerDialog::mouseReleaseEvent(QMouseEvent *event) {
if(event->button() == Qt::RightButton) if(event->button() == Qt::RightButton)
Modules::objView().getDriver()->EventServer.postEvent( Modules::objView().getDriver()->EventServer.postEvent(
new NLMISC::CEventMouseUp( -fX, fY, NLMISC::rightButton, this)); new NLMISC::CEventMouseUp( -fX, fY, NLMISC::rightButton, this));
} }
void CObjectViewerDialog::mouseMoveEvent(QMouseEvent *event) { void CObjectViewerDialog::mouseMoveEvent(QMouseEvent *event)
{
//nldebug("CObjectViewerDialog::mouseMoveEvent"); //nldebug("CObjectViewerDialog::mouseMoveEvent");
// Get relative positions. // Get relative positions.
float fX = 1.0f - (float)event->pos().x() / this->width(); float fX = 1.0f - (float)event->pos().x() / this->width();
@ -403,6 +410,6 @@ void CObjectViewerDialog::mouseMoveEvent(QMouseEvent *event) {
if ((fX == 0.5f) && (fY == 0.5f)) return; if ((fX == 0.5f) && (fY == 0.5f)) return;
NLMISC::TMouseButton buttons = (NLMISC::TMouseButton)getNelButtons(event); NLMISC::TMouseButton buttons = (NLMISC::TMouseButton)getNelButtons(event);
Modules::objView().getDriver()->EventServer.postEvent(new NLMISC::CEventMouseMove(-fX, fY, buttons, this)); Modules::objView().getDriver()->EventServer.postEvent(new NLMISC::CEventMouseMove(-fX, fY, buttons, this));
} }
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef OBJECTVIEWER_DIALOG_H #ifndef OBJECTVIEWER_DIALOG_H
@ -45,13 +45,14 @@ typedef QGLWidget QNLWidget;
class QAction; class QAction;
namespace NLQT { namespace NLQT
class CObjectViewerDialog: public QDockWidget, public NLMISC::IEventEmitter
{ {
class CObjectViewerDialog: public QDockWidget, public NLMISC::IEventEmitter
{
Q_OBJECT Q_OBJECT
public: public:
CObjectViewerDialog(QWidget *parent = 0); CObjectViewerDialog(QWidget *parent = 0);
~CObjectViewerDialog(); ~CObjectViewerDialog();
@ -65,7 +66,7 @@ public:
QAction *createSaveScreenshotAction(QObject *parent); QAction *createSaveScreenshotAction(QObject *parent);
QAction *createSetBackgroundColor(QObject *parent); QAction *createSetBackgroundColor(QObject *parent);
private Q_SLOTS: private Q_SLOTS:
void updateRender(); void updateRender();
void saveScreenshot(); void saveScreenshot();
@ -76,7 +77,7 @@ private Q_SLOTS:
void topLevelChanged(bool topLevel); void topLevelChanged(bool topLevel);
protected: protected:
virtual void resizeEvent(QResizeEvent *resizeEvent); virtual void resizeEvent(QResizeEvent *resizeEvent);
virtual void mousePressEvent(QMouseEvent *event); virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event); virtual void mouseReleaseEvent(QMouseEvent *event);
@ -86,7 +87,7 @@ protected:
uint32 getNelButtons(QMouseEvent *event); uint32 getNelButtons(QMouseEvent *event);
uint32 getNelButtons(QWheelEvent *event); uint32 getNelButtons(QWheelEvent *event);
private: private:
CObjectViewerDialog(const CObjectViewerDialog &); CObjectViewerDialog(const CObjectViewerDialog &);
CObjectViewerDialog &operator=(const CObjectViewerDialog &); CObjectViewerDialog &operator=(const CObjectViewerDialog &);
@ -101,7 +102,7 @@ private:
QNLWidget * _nlw; QNLWidget * _nlw;
friend class CMainWindow; friend class CMainWindow;
}; /* CObjectViewerDialog */ }; /* CObjectViewerDialog */
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -24,14 +24,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <nel/misc/debug.h> #include <nel/misc/debug.h>
#include <nel/misc/file.h> #include <nel/misc/file.h>
namespace NLQT { namespace NLQT
{
CQtDisplayer::CQtDisplayer(QPlainTextEdit *dlgDebug, bool eraseLastLog, const char *displayerName, bool raw) CQtDisplayer::CQtDisplayer(QPlainTextEdit *dlgDebug, bool eraseLastLog, const char *displayerName, bool raw)
: NLMISC::IDisplayer (displayerName), _NeedHeader(true), _LastLogSizeChecked(0), _Raw(raw) { : NLMISC::IDisplayer (displayerName), _NeedHeader(true), _LastLogSizeChecked(0), _Raw(raw)
{
setParam(dlgDebug,eraseLastLog); setParam(dlgDebug,eraseLastLog);
} }
CQtDisplayer::CQtDisplayer() : IDisplayer (""), _NeedHeader(true), _LastLogSizeChecked(0), _Raw(false) { CQtDisplayer::CQtDisplayer()
: IDisplayer (""), _NeedHeader(true), _LastLogSizeChecked(0), _Raw(false)
{
; ;
} }
@ -39,12 +43,14 @@ namespace NLQT {
; ;
} }
void CQtDisplayer::setParam (QPlainTextEdit *dlgDebug, bool eraseLastLog) { void CQtDisplayer::setParam (QPlainTextEdit *dlgDebug, bool eraseLastLog)
{
m_DlgDebug=dlgDebug; m_DlgDebug=dlgDebug;
//dlgDebug->dlgDbgText->WriteText("test"); //dlgDebug->dlgDbgText->WriteText("test");
} }
void CQtDisplayer::doDisplay ( const NLMISC::CLog::TDisplayInfo& args, const char *message ) { void CQtDisplayer::doDisplay ( const NLMISC::CLog::TDisplayInfo& args, const char *message )
{
bool needSpace = false; bool needSpace = false;
std::string str; std::string str;
@ -58,7 +64,8 @@ namespace NLQT {
needSpace = true; needSpace = true;
} }
if (args.LogType != NLMISC::CLog::LOG_NO && !_Raw) { if (args.LogType != NLMISC::CLog::LOG_NO && !_Raw)
{
if (needSpace) { str += " "; needSpace = false; } if (needSpace) { str += " "; needSpace = false; }
str += logTypeToString(args.LogType); str += logTypeToString(args.LogType);
if (args.LogType == NLMISC::CLog::LOG_WARNING) if (args.LogType == NLMISC::CLog::LOG_WARNING)
@ -92,13 +99,20 @@ namespace NLQT {
needSpace = true; needSpace = true;
}*/ }*/
if (args.FuncName != NULL && !_Raw) { if (args.FuncName != NULL && !_Raw)
if (needSpace) { str += " "; needSpace = false; } {
if (needSpace)
{
str += " "; needSpace = false;
}
str += args.FuncName; str += args.FuncName;
needSpace = true; needSpace = true;
} }
if (needSpace) { str += " : "; needSpace = false; } if (needSpace)
{
str += " : "; needSpace = false;
}
str += message; str += message;

View file

@ -28,10 +28,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Qt includes // Qt includes
#include <QPlainTextEdit> #include <QPlainTextEdit>
namespace NLQT { namespace NLQT
{
class CQtDisplayer : virtual public NLMISC::IDisplayer class CQtDisplayer : virtual public NLMISC::IDisplayer
{ {
public: public:
CQtDisplayer(QPlainTextEdit *dlgDebug, bool eraseLastLog = false, const char *displayerName = "", bool raw = false); CQtDisplayer(QPlainTextEdit *dlgDebug, bool eraseLastLog = false, const char *displayerName = "", bool raw = false);
CQtDisplayer(); CQtDisplayer();

View file

@ -31,7 +31,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
using namespace NLMISC; using namespace NLMISC;
namespace NLQT { namespace NLQT
{
CSettingsDialog::CSettingsDialog(QWidget *parent) CSettingsDialog::CSettingsDialog(QWidget *parent)
: QDialog(parent) : QDialog(parent)
@ -72,7 +73,8 @@ namespace NLQT {
QFileDialog dialog(this); QFileDialog dialog(this);
dialog.setOption(QFileDialog::ShowDirsOnly, true); dialog.setOption(QFileDialog::ShowDirsOnly, true);
dialog.setFileMode(QFileDialog::Directory); dialog.setFileMode(QFileDialog::Directory);
if (dialog.exec()) { if (dialog.exec())
{
QString newPath = dialog.selectedFiles().first(); QString newPath = dialog.selectedFiles().first();
if (!newPath.isEmpty()) if (!newPath.isEmpty())
{ {
@ -137,9 +139,12 @@ namespace NLQT {
list.push_back(str); list.push_back(str);
} }
if (list.empty()) { if (list.empty())
{
Modules::config().getConfigFile().getVar("SearchPaths").forceAsString(""); Modules::config().getConfigFile().getVar("SearchPaths").forceAsString("");
} else { }
else
{
Modules::config().getConfigFile().getVar("SearchPaths").forceAsString(""); Modules::config().getConfigFile().getVar("SearchPaths").forceAsString("");
Modules::config().getConfigFile().getVar("SearchPaths").setAsString(list); Modules::config().getConfigFile().getVar("SearchPaths").setAsString(list);
} }
@ -197,4 +202,5 @@ namespace NLQT {
ui.leveldesignPath->setText(QFileDialog::getExistingDirectory(this, tr("Open Directory"), ui.leveldesignPath->setText(QFileDialog::getExistingDirectory(this, tr("Open Directory"),
QDir::currentPath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks)); QDir::currentPath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks));
} }
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -1,19 +1,19 @@
/* /*
Georges Editor Qt Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com> Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef SETTINGS_DIALOG_H #ifndef SETTINGS_DIALOG_H
@ -29,20 +29,21 @@
// Project includes // Project includes
namespace NLQT { namespace NLQT
class CSettingsDialog: public QDialog
{ {
class CSettingsDialog: public QDialog
{
Q_OBJECT Q_OBJECT
public: public:
CSettingsDialog(QWidget *parent = 0); CSettingsDialog(QWidget *parent = 0);
~CSettingsDialog(); ~CSettingsDialog();
Q_SIGNALS: Q_SIGNALS:
void ldPathChanged(QString); void ldPathChanged(QString);
private Q_SLOTS: private Q_SLOTS:
void addPath(); void addPath();
void removePath(); void removePath();
void upPath(); void upPath();
@ -50,7 +51,7 @@ private Q_SLOTS:
void applyPressed(); void applyPressed();
void browseLeveldesignPath(); void browseLeveldesignPath();
private: private:
void cfcbGraphicsDrivers(NLMISC::CConfigFile::CVar &var); void cfcbGraphicsDrivers(NLMISC::CConfigFile::CVar &var);
void cfcbSoundDrivers(NLMISC::CConfigFile::CVar &var); void cfcbSoundDrivers(NLMISC::CConfigFile::CVar &var);
void cfcbSearchPaths(NLMISC::CConfigFile::CVar &var); void cfcbSearchPaths(NLMISC::CConfigFile::CVar &var);
@ -58,7 +59,7 @@ private:
Ui::CSettingsDialog ui; Ui::CSettingsDialog ui;
}; /* class CSettingsDialog */ }; /* class CSettingsDialog */
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -1,275 +0,0 @@
/*
Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
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/>.
*/
#include "spindelegate.h"
// NeL includes
#include <nel/misc/debug.h>
#include <nel/georges/u_type.h>
#include <nel/georges/u_form_elm.h>
// Qt includes
#include <QSpinBox>
#include <QLineEdit>
#include <QDoubleSpinBox>
#include <QColorDialog>
#include <QComboBox>
#include <QApplication>
#include <QTextDocument>
#include <QAbstractTextDocumentLayout>
#include <QPainter>
// Project includes
#include "georgesform_model.h"
#include "formitem.h"
namespace NLQT {
SpinBoxDelegate::SpinBoxDelegate(QObject *parent)
: QStyledItemDelegate(parent)
{
}
QWidget *SpinBoxDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem & option ,
const QModelIndex &index) const
{
CFormItem *item = static_cast<CFormItem*>(index.internalPointer());
QString value = item->data(1).toString();
if (value.isEmpty())
return 0;
const NLGEORGES::UType *type = qobject_cast<const CGeorgesFormModel *>(index.model())->
getItem(index)->getFormElm()->getType();
if(type) {
int numDefinitions = type->getNumDefinition();
if (numDefinitions) {
std::string l, v;
QString label,value;
QComboBox *editor = new QComboBox(parent);
for (int i = 0; i < numDefinitions; i++) {
type->getDefinition(i,l,v);
label = l.c_str();
value = v.c_str();
editor->addItem(label);
}
return editor;
} else {
switch (type->getType()) {
case NLGEORGES::UType::UnsignedInt:
case NLGEORGES::UType::SignedInt:
{
QSpinBox *editor = new QSpinBox(parent);
//QString min = QString(type->getMin().c_str());
//QString max = QString(type->getMax().c_str());
//QString inc = QString(type->getIncrement().c_str());
//nldebug(QString("min %1 max %2 inc %3").arg(min).arg(max).arg(inc).toStdString().c_str());
// TODO: use saved min/max values
editor->setMinimum(-99999);
editor->setMaximum(99999);
editor->setSingleStep(1);
return editor;
}
case NLGEORGES::UType::Double:
{
QDoubleSpinBox *editor = new QDoubleSpinBox(parent);
//QString min = QString(type->getMin().c_str());
//QString max = QString(type->getMax().c_str());
//QString inc = QString(type->getIncrement().c_str());
//nldebug(QString("min %1 max %2 inc %3").arg(min).arg(max).arg(inc).toStdString().c_str());
// TODO: use saved min/max values
editor->setMinimum(-99999);
editor->setMaximum(99999);
editor->setSingleStep(0.1);
editor->setDecimals(1);
return editor;
}
case NLGEORGES::UType::Color:
{
return new QColorDialog();
}
default: // UType::String
{
QLineEdit *editor = new QLineEdit(parent);
return editor;
}
}
}
}
return 0;
}
void SpinBoxDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
const NLGEORGES::UType *type = qobject_cast<const CGeorgesFormModel *>(index.model())->
getItem(index)->getFormElm()->getType();
int numDefinitions = type->getNumDefinition();
QString value = index.model()->data(index, Qt::DisplayRole).toString();
if (numDefinitions) {
QComboBox *cb = static_cast<QComboBox*>(editor);
cb->setCurrentIndex(cb->findText(value));
//cb->setIconSize()
} else {
switch (type->getType()) {
case NLGEORGES::UType::UnsignedInt:
case NLGEORGES::UType::SignedInt:
{
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
spinBox->setValue((int)value.toDouble());
break;
}
case NLGEORGES::UType::Double:
{
QDoubleSpinBox *spinBox = static_cast<QDoubleSpinBox*>(editor);
spinBox->setValue(value.toDouble());
break;
}
case NLGEORGES::UType::Color:
{
break;
}
default:
{
QLineEdit *textEdit = static_cast<QLineEdit*>(editor);
textEdit->setText(value);
break;
}
}
}
}
void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
const NLGEORGES::UType *type = qobject_cast<const CGeorgesFormModel *>(index.model())->
getItem(index)->getFormElm()->getType();
int numDefinitions = type->getNumDefinition();
if (numDefinitions) {
QComboBox *comboBox = static_cast<QComboBox*>(editor);
QString value = comboBox->currentText();
QString oldValue = index.model()->data(index, Qt::DisplayRole).toString();
if (value == oldValue) {
// nothing's changed
} else {
nldebug(QString("setModelData from %1 to %2")
.arg(oldValue).arg(value).toStdString().c_str());
model->setData(index, value, Qt::EditRole);
}
} else {
switch (type->getType()) {
case NLGEORGES::UType::UnsignedInt:
case NLGEORGES::UType::SignedInt:
{
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
int value = spinBox->value();
QString oldValue = index.model()->data(index, Qt::DisplayRole).toString();
if (QString("%1").arg(value) == oldValue) {
// nothing's changed
} else {
nldebug(QString("setModelData from %1 to %2")
.arg(oldValue).arg(value).toStdString().c_str());
model->setData(index, value, Qt::EditRole);
}
break;
}
case NLGEORGES::UType::Double:
{
QDoubleSpinBox *spinBox = static_cast<QDoubleSpinBox*>(editor);
double value = spinBox->value();
QString oldValue = index.model()->data(index, Qt::DisplayRole).toString();
if (QString("%1").arg(value) == oldValue) {
// nothing's changed
} else {
nldebug(QString("setModelData from %1 to %2")
.arg(oldValue).arg(value).toStdString().c_str());
model->setData(index, value, Qt::EditRole);
}
break;
}
case NLGEORGES::UType::Color:
{
break; // TODO
}
default: // UType::String
{
QLineEdit *textEdit = static_cast<QLineEdit*>(editor);
QString value = textEdit->text();
QString oldValue = index.model()->data(index, Qt::DisplayRole).toString();
if (value == oldValue) {
// nothing's changed
} else {
nldebug(QString("setModelData from %1 to %2")
.arg(oldValue).arg(value).toStdString().c_str());
model->setData(index, value, Qt::EditRole);
}
break;
}
}
}
}
void SpinBoxDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QRect r = option.rect;
editor->setGeometry(r);
//option.decorationAlignment = QStyleOptionViewItem::Right;
}
void SpinBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItemV4 optionV4 = option;
optionV4.decorationPosition = QStyleOptionViewItem::Right;
//optionV4.decorationSize = QSize(32,32);
initStyleOption(&optionV4, index);
QStyledItemDelegate::paint(painter,optionV4,index);
//QStyle *style = optionV4.widget? optionV4.widget->style() : QApplication::style();
//QTextDocument doc;
//doc.setHtml(optionV4.text);
///// Painting item without text
//optionV4.text = QString();
//style->drawControl(QStyle::CE_ItemViewItem, &optionV4, painter);
//QAbstractTextDocumentLayout::PaintContext ctx;
//// Highlighting text if item is selected
//if (optionV4.state & QStyle::State_Selected)
// ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::HighlightedText));
//QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &optionV4);
//painter->save();
//painter->translate(textRect.topLeft());
//painter->setClipRect(textRect.translated(-textRect.topLeft()));
//doc.documentLayout()->draw(painter, ctx);
//painter->restore();
}
}

View file

@ -1,44 +0,0 @@
/*
Georges Editor Qt
Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
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/>.
*/
#ifndef DELEGATE_H
#define DELEGATE_H
#include <QStyledItemDelegate>
namespace NLQT {
class SpinBoxDelegate : public QStyledItemDelegate
{
public:
SpinBoxDelegate(QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const;
void paint ( QPainter * painter, const QStyleOptionViewItem & option,
const QModelIndex & index ) const;
};
}
#endif