From 7eca51b27434a5d02ccb30dbdd9864fd5403c4a8 Mon Sep 17 00:00:00 2001 From: aquiles Date: Tue, 2 Nov 2010 15:25:36 +0100 Subject: [PATCH] Changed: #1150 Code Cleanup --- .../georges_editor_qt/src/CMakeLists.txt | 4 +- .../src/filesystem_model.cpp | 51 +- .../georges_editor_qt/src/filesystem_model.h | 27 +- .../georges_editor_qt/src/formdelegate.cpp | 302 ++++++ .../georges_editor_qt/src/formdelegate.h | 45 + .../georges_editor_qt/src/formitem.cpp | 67 +- .../georges_editor_qt/src/formitem.h | 93 +- .../georges_editor_qt/src/georges.cpp | 13 +- .../georges_editor_qt/src/georges.h | 57 +- .../src/georges_dirtree_dialog.cpp | 186 ++-- .../src/georges_dirtree_dialog.h | 65 +- .../src/georges_treeview_dialog.cpp | 133 ++- .../src/georges_treeview_dialog.h | 3 +- .../src/georgesform_model.cpp | 313 ++++--- .../georges_editor_qt/src/georgesform_model.h | 7 +- .../src/georgesform_proxy_model.cpp | 3 +- .../src/georgesform_proxy_model.h | 16 +- .../georges_editor_qt/src/log_dialog.cpp | 9 +- .../georges_editor_qt/src/log_dialog.h | 50 +- .../georges_editor_qt/src/main.cpp | 50 +- .../georges_editor_qt/src/main_window.cpp | 856 +++++++++--------- .../georges_editor_qt/src/main_window.h | 157 ++-- .../georges_editor_qt/src/object_viewer.cpp | 699 +++++++------- .../georges_editor_qt/src/object_viewer.h | 282 +++--- .../src/objectviewer_dialog.cpp | 655 +++++++------- .../src/objectviewer_dialog.h | 111 +-- .../georges_editor_qt/src/qt_displayer.cpp | 56 +- .../georges_editor_qt/src/qt_displayer.h | 6 +- .../georges_editor_qt/src/settings_dialog.cpp | 16 +- .../georges_editor_qt/src/settings_dialog.h | 75 +- .../georges_editor_qt/src/spindelegate.cpp | 275 ------ .../georges_editor_qt/src/spindelegate.h | 44 - 32 files changed, 2476 insertions(+), 2250 deletions(-) create mode 100644 code/ryzom/tools/leveldesign/georges_editor_qt/src/formdelegate.cpp create mode 100644 code/ryzom/tools/leveldesign/georges_editor_qt/src/formdelegate.h delete mode 100644 code/ryzom/tools/leveldesign/georges_editor_qt/src/spindelegate.cpp delete mode 100644 code/ryzom/tools/leveldesign/georges_editor_qt/src/spindelegate.h diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/CMakeLists.txt b/code/ryzom/tools/leveldesign/georges_editor_qt/src/CMakeLists.txt index 9c4f37aaf..11f3314ae 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/CMakeLists.txt +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/CMakeLists.txt @@ -2,8 +2,8 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${LI INCLUDE( ${QT_USE_FILE} ) FILE(GLOB GEORGES_EDITOR_SRC *.cpp) -SET(GEORGES_EDITOR_HDR georges_dirtree_dialog.h georges_treeview_dialog.h georgesform_model.h main_window.h - log_dialog.h objectviewer_dialog.h settings_dialog.h) +SET(GEORGES_EDITOR_HDR georges_dirtree_dialog.h georges_treeview_dialog.h main_window.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_RCS georges_editor_qt.qrc) diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/filesystem_model.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/filesystem_model.cpp index 3c52fcf78..67033af2c 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/filesystem_model.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/filesystem_model.cpp @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "filesystem_model.h" @@ -21,26 +21,31 @@ #include #include -namespace NLQT { +namespace NLQT +{ CFileSystemModel::CFileSystemModel(QString ldPath, QObject *parent) : QFileSystemModel(parent), - _ldPath(ldPath){ + _ldPath(ldPath) + { } - CFileSystemModel::~CFileSystemModel() { + CFileSystemModel::~CFileSystemModel() + { } QVariant CFileSystemModel::data(const QModelIndex& index, int role) const { - - if (role == Qt::DecorationRole) { + + if (role == Qt::DecorationRole) + { if (_ldPath.isEmpty()) return QVariant(); if (isDir(index)) return QApplication::style()->standardIcon(QStyle::SP_DirIcon); } - if (_ldPath.isEmpty() && role == Qt::DisplayRole) { + if (_ldPath.isEmpty() && role == Qt::DisplayRole) + { if (index.parent().isValid()) return QVariant(); return QString("Set a correct leveldesign path ..."); @@ -55,10 +60,14 @@ namespace NLQT { int CFileSystemModel::rowCount(const QModelIndex &parent) const { - if (_ldPath.isEmpty()) { - if(parent.isValid()) { + if (_ldPath.isEmpty()) + { + if(parent.isValid()) + { return 0; - } else { + } + else + { return qMin(QFileSystemModel::rowCount(parent),1); } } diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/filesystem_model.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/filesystem_model.h index 7e5ccdbd3..90b93b297 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/filesystem_model.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/filesystem_model.h @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifndef FILESYSTEM_MODEL_H @@ -21,7 +21,8 @@ #include -namespace NLQT { +namespace NLQT +{ class CFileSystemModel : public QFileSystemModel { diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/formdelegate.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/formdelegate.cpp new file mode 100644 index 000000000..2dc637058 --- /dev/null +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/formdelegate.cpp @@ -0,0 +1,302 @@ +/* +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel + +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 . +*/ + +#include "formdelegate.h" + +// NeL includes +#include +#include +#include + +// Qt includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +// 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(index.internalPointer()); + QString value = item->data(1).toString(); + + if (value.isEmpty()) + return 0; + + const NLGEORGES::UType *type = dynamic_cast(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(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(editor); + cb->setCurrentIndex(cb->findText(value)); + //cb->setIconSize() + } + else + { + switch (type->getType()) + { + case NLGEORGES::UType::UnsignedInt: + case NLGEORGES::UType::SignedInt: + { + QSpinBox *spinBox = static_cast(editor); + spinBox->setValue((int)value.toDouble()); + break; + } + case NLGEORGES::UType::Double: + { + QDoubleSpinBox *spinBox = static_cast(editor); + spinBox->setValue(value.toDouble()); + break; + } + case NLGEORGES::UType::Color: + { + break; + } + default: + { + QLineEdit *textEdit = static_cast(editor); + textEdit->setText(value); + break; + } + } + } + } + + void FormDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const + { + const NLGEORGES::UType *type = dynamic_cast(index.model())-> + getItem(index)->getFormElm()->getType(); + int numDefinitions = type->getNumDefinition(); + + if (numDefinitions) + { + QComboBox *comboBox = static_cast(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(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(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(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 */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/formdelegate.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/formdelegate.h new file mode 100644 index 000000000..589ebad64 --- /dev/null +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/formdelegate.h @@ -0,0 +1,45 @@ +/* +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel + +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 . +*/ + +#ifndef FORMDELEGATE_H +#define FORMDELEGATE_H + +#include + +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 diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/formitem.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/formitem.cpp index aa2f4ce7c..74f3f5625 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/formitem.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/formitem.cpp @@ -24,10 +24,12 @@ along with this program. If not, see . // NeL includes #include -namespace NLQT { +namespace NLQT +{ CFormItem::CFormItem(NLGEORGES::UFormElm* elm, const QList &data, CFormItem *parent, - NLGEORGES::UFormElm::TWhereIsValue wV, NLGEORGES::UFormElm::TWhereIsNode wN) { + NLGEORGES::UFormElm::TWhereIsValue wV, NLGEORGES::UFormElm::TWhereIsNode wN) + { parentItem = parent; itemData = data; formElm = elm; @@ -35,27 +37,33 @@ namespace NLQT { whereN = wN; } - CFormItem::~CFormItem() { + CFormItem::~CFormItem() + { qDeleteAll(childItems); } - void CFormItem::appendChild(CFormItem *item) { + void CFormItem::appendChild(CFormItem *item) + { childItems.append(item); } - CFormItem *CFormItem::child(int row) { + CFormItem *CFormItem::child(int row) + { return childItems.value(row); } - int CFormItem::childCount() const { + int CFormItem::childCount() const + { return childItems.count(); } - int CFormItem::columnCount() const { + int CFormItem::columnCount() const + { return itemData.count(); } - QVariant CFormItem::data(int column) const { + QVariant CFormItem::data(int column) const + { return itemData.value(column); } @@ -64,36 +72,41 @@ namespace NLQT { return parentItem; } - int CFormItem::row() const { + int CFormItem::row() const + { if (parentItem) return parentItem->childItems.indexOf(const_cast(this)); return 0; } - bool CFormItem::setData(int column, const QVariant &value) { + bool CFormItem::setData(int column, const QVariant &value) + { if (column < 0 || column >= itemData.size()) return false; itemData[column] = value; - if (formElm->isAtom()) { + if (formElm->isAtom()) + { const NLGEORGES::UType *type = formElm->getType(); - if (type) { - switch (type->getType()) { - case NLGEORGES::UType::UnsignedInt: - case NLGEORGES::UType::SignedInt: - case NLGEORGES::UType::Double: - case NLGEORGES::UType::String: - nldebug(QString("string %1 %2") - .arg(itemData[0].toString()).arg(value.toString()) - .toStdString().c_str()); - parentItem->formElm->setValueByName( - value.toString().toStdString().c_str(),itemData[0].toString().toStdString().c_str()); - break; - case NLGEORGES::UType::Color: - break; - default: - break; + if (type) + { + switch (type->getType()) + { + case NLGEORGES::UType::UnsignedInt: + case NLGEORGES::UType::SignedInt: + case NLGEORGES::UType::Double: + case NLGEORGES::UType::String: + nldebug(QString("string %1 %2") + .arg(itemData[0].toString()).arg(value.toString()) + .toStdString().c_str()); + parentItem->formElm->setValueByName( + value.toString().toStdString().c_str(),itemData[0].toString().toStdString().c_str()); + break; + case NLGEORGES::UType::Color: + break; + default: + break; } } } diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/formitem.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/formitem.h index c10d39c84..b5d27687a 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/formitem.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/formitem.h @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifndef FORMITEM_H @@ -26,43 +26,46 @@ #include #include -namespace NLQT { +namespace NLQT +{ - class CFormItem + class CFormItem - { - public: - CFormItem(NLGEORGES::UFormElm *elm, const QList &data, - CFormItem *parent = 0, - NLGEORGES::UFormElm::TWhereIsValue = NLGEORGES::UFormElm::ValueForm, - NLGEORGES::UFormElm::TWhereIsNode = NLGEORGES::UFormElm::NodeForm); - ~CFormItem(); + { + public: + CFormItem(NLGEORGES::UFormElm *elm, const QList &data, + CFormItem *parent = 0, + NLGEORGES::UFormElm::TWhereIsValue = NLGEORGES::UFormElm::ValueForm, + NLGEORGES::UFormElm::TWhereIsNode = NLGEORGES::UFormElm::NodeForm); + ~CFormItem(); - void appendChild(CFormItem *child); + void appendChild(CFormItem *child); - CFormItem *child(int row); - int childCount() const; - int columnCount() const; - QVariant data(int column) const; - int row() const; - CFormItem *parent(); - bool setData(int column, const QVariant &value); - NLGEORGES::UFormElm* getFormElm() {return formElm;}; - NLGEORGES::UFormElm::TWhereIsValue CFormItem::valueFrom() { - return whereV; - } - NLGEORGES::UFormElm::TWhereIsNode CFormItem::nodeFrom() { - return whereN; - } + CFormItem *child(int row); + int childCount() const; + int columnCount() const; + QVariant data(int column) const; + int row() const; + CFormItem *parent(); + bool setData(int column, const QVariant &value); + NLGEORGES::UFormElm* getFormElm() {return formElm;}; + NLGEORGES::UFormElm::TWhereIsValue CFormItem::valueFrom() + { + return whereV; + } + NLGEORGES::UFormElm::TWhereIsNode CFormItem::nodeFrom() + { + return whereN; + } - private: - QList childItems; - QList itemData; - CFormItem *parentItem; - NLGEORGES::UFormElm* formElm; - NLGEORGES::UFormElm::TWhereIsValue whereV; - NLGEORGES::UFormElm::TWhereIsNode whereN; - }; // CFormItem + private: + QList childItems; + QList itemData; + CFormItem *parentItem; + NLGEORGES::UFormElm* formElm; + NLGEORGES::UFormElm::TWhereIsValue whereV; + NLGEORGES::UFormElm::TWhereIsNode whereN; + }; // CFormItem } - #endif // FORMITEM_H \ No newline at end of file +#endif // FORMITEM_H diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges.cpp index aea247813..854ebe3a7 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges.cpp @@ -29,15 +29,20 @@ along with this program. If not, see . using namespace NLGEORGES; -namespace NLQT { +namespace NLQT +{ - CGeorges::CGeorges(): FormLoader(0) { + CGeorges::CGeorges(): FormLoader(0) + { 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()); return form; diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges.h index aa1aac4f0..6303bf13a 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges.h @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifndef GEORGES_H @@ -38,26 +38,27 @@ namespace NLGEORGES using namespace NLGEORGES; -namespace NLQT { - -/** -@class CGeorges -A CGeorges class loading and viewing sheets. -*/ -class CGeorges +namespace NLQT { -public: - /// Default constructor. - CGeorges(); - virtual ~CGeorges(); - // Load the given form root - UForm* loadForm(std::string formName); + /** + @class CGeorges + A CGeorges class loading and viewing sheets. + */ + class CGeorges + { + public: + /// Default constructor. + CGeorges(); + virtual ~CGeorges(); - // A form loader - UFormLoader *FormLoader; + // Load the given form root + UForm* loadForm(std::string formName); -};/* class CGeorges */ + // A form loader + UFormLoader *FormLoader; + + };/* class CGeorges */ } /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_dirtree_dialog.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_dirtree_dialog.cpp index a0f150f87..d05ebd605 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_dirtree_dialog.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_dirtree_dialog.cpp @@ -30,101 +30,113 @@ along with this program. If not, see . using namespace NLMISC; -namespace NLQT { +namespace NLQT +{ - CGeorgesDirTreeDialog::CGeorgesDirTreeDialog(QString ldPath, QWidget *parent): - QDockWidget(parent), - _ldPath(ldPath){ + CGeorgesDirTreeDialog::CGeorgesDirTreeDialog(QString ldPath, QWidget *parent) + :QDockWidget(parent), _ldPath(ldPath) + { - _ui.setupUi(this); + _ui.setupUi(this); - //QStyleOptionViewItem myButtonOption; - // const QStyleOptionViewItem *buttonOption = + //QStyleOptionViewItem myButtonOption; + // const QStyleOptionViewItem *buttonOption = // qstyleoption_cast(_ui.dirTree->style()); - /*setStyleSheet(" \ - QTreeView { \ - alternate-background-color: yellow; \ - } \ - QTreeView::item { \ - border: 1px solid #d9d9d9; \ - border-top-color: transparent; \ - border-bottom-color: transparent; \ - } \ - QTreeView::item:hover { \ - background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e7effd, stop: 1 #cbdaf1);\ - border: 1px solid #bfcde4; \ - } \ - QTreeView::item:selected { \ - border: 1px solid #567dbc; \ - } \ - QTreeView::item:selected:active{ \ - background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc);\ - } \ - QTreeView::item:selected:!active { \ - background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6b9be8, stop: 1 #577fbf);\ - }\ - ");*/ - //QString leveldata = Modules::config().getConfigFile().getVar("SearchPaths").asString().c_str(); + /*setStyleSheet(" \ + QTreeView { \ + alternate-background-color: yellow; \ + } \ + QTreeView::item { \ + border: 1px solid #d9d9d9; \ + border-top-color: transparent; \ + border-bottom-color: transparent; \ + } \ + QTreeView::item:hover { \ + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e7effd, stop: 1 #cbdaf1);\ + border: 1px solid #bfcde4; \ + } \ + QTreeView::item:selected { \ + border: 1px solid #567dbc; \ + } \ + QTreeView::item:selected:active{ \ + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc);\ + } \ + QTreeView::item:selected:!active { \ + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6b9be8, stop: 1 #577fbf);\ + }\ + ");*/ + //QString leveldata = Modules::config().getConfigFile().getVar("SearchPaths").asString().c_str(); - _dirModel = new CFileSystemModel(_ldPath); - _ui.dirTree->setModel(_dirModel); - - QFileInfo info(_ldPath); - - if (!_ldPath.isEmpty() && info.isDir()) { - _dirModel->setRootPath(_ldPath); - _ui.dirTree->setRootIndex(_dirModel->index(_ldPath)); - } else { - _dirModel->setRootPath(QDir::currentPath()); - } - - _ui.dirTree->setAnimated(false); - _ui.dirTree->setIndentation(20); - //_ui.dirTree->setSortingEnabled(true); - - /*connect(_ui.dirTree, SIGNAL(clicked(QModelIndex)), - this, SLOT(fileSelected(QModelIndex)));*/ - connect(_ui.dirTree, SIGNAL(activated(QModelIndex)), - this, SLOT(fileSelected(QModelIndex))); -} - -CGeorgesDirTreeDialog::~CGeorgesDirTreeDialog() { - delete _dirModel; -} - -void CGeorgesDirTreeDialog::fileSelected(QModelIndex index) { - QString name; - if (index.isValid() && !_dirModel->isDir(index)) { - Q_EMIT selectedForm(_dirModel->fileName(index)); - } -} - -void CGeorgesDirTreeDialog::changeFile(QString file) { - QModelIndex index = _dirModel->index(file); - //_dirModel->; - _ui.dirTree->selectionModel()->select(index,QItemSelectionModel::ClearAndSelect); - _ui.dirTree->scrollTo(index,QAbstractItemView::PositionAtCenter); - fileSelected(index); -} - -void CGeorgesDirTreeDialog::ldPathChanged(QString path) { - _ldPath = path; - QFileInfo info(_ldPath); - - delete _dirModel; - - if (!_ldPath.isEmpty() && info.isDir()) { _dirModel = new CFileSystemModel(_ldPath); _ui.dirTree->setModel(_dirModel); - _dirModel->setRootPath(_ldPath); - _ui.dirTree->setRootIndex(_dirModel->index(_ldPath)); - } else { - _dirModel = new CFileSystemModel(""); - _ui.dirTree->setModel(_dirModel); - _dirModel->setRootPath(QDir::currentPath()); - _ldPath = ""; + + QFileInfo info(_ldPath); + + if (!_ldPath.isEmpty() && info.isDir()) + { + _dirModel->setRootPath(_ldPath); + _ui.dirTree->setRootIndex(_dirModel->index(_ldPath)); + } + else + { + _dirModel->setRootPath(QDir::currentPath()); + } + + _ui.dirTree->setAnimated(false); + _ui.dirTree->setIndentation(20); + //_ui.dirTree->setSortingEnabled(true); + + /*connect(_ui.dirTree, SIGNAL(clicked(QModelIndex)), + this, SLOT(fileSelected(QModelIndex)));*/ + connect(_ui.dirTree, SIGNAL(activated(QModelIndex)), + this, SLOT(fileSelected(QModelIndex))); + } + + CGeorgesDirTreeDialog::~CGeorgesDirTreeDialog() + { + delete _dirModel; + } + + void CGeorgesDirTreeDialog::fileSelected(QModelIndex index) + { + QString name; + if (index.isValid() && !_dirModel->isDir(index)) + { + Q_EMIT selectedForm(_dirModel->fileName(index)); + } + } + + void CGeorgesDirTreeDialog::changeFile(QString file) + { + QModelIndex index = _dirModel->index(file); + //_dirModel->; + _ui.dirTree->selectionModel()->select(index,QItemSelectionModel::ClearAndSelect); + _ui.dirTree->scrollTo(index,QAbstractItemView::PositionAtCenter); + fileSelected(index); + } + + void CGeorgesDirTreeDialog::ldPathChanged(QString path) + { + _ldPath = path; + QFileInfo info(_ldPath); + + delete _dirModel; + + if (!_ldPath.isEmpty() && info.isDir()) + { + _dirModel = new CFileSystemModel(_ldPath); + _ui.dirTree->setModel(_dirModel); + _dirModel->setRootPath(_ldPath); + _ui.dirTree->setRootIndex(_dirModel->index(_ldPath)); + } + else + { + _dirModel = new CFileSystemModel(""); + _ui.dirTree->setModel(_dirModel); + _dirModel->setRootPath(QDir::currentPath()); + _ldPath = ""; + } } -} } /* namespace NLQT */ \ No newline at end of file diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_dirtree_dialog.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_dirtree_dialog.h index c8a104dc6..60c42321b 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_dirtree_dialog.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_dirtree_dialog.h @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifndef GEORGES_DIRTREE_DIALOG_H @@ -30,34 +30,35 @@ #include "ui_georges_dirtree_form.h" #include "filesystem_model.h" -namespace NLQT { - -class CGeorgesDirTreeDialog: public QDockWidget +namespace NLQT { - Q_OBJECT -public: - CGeorgesDirTreeDialog(QString ldPath, QWidget *parent = 0); - ~CGeorgesDirTreeDialog(); + class CGeorgesDirTreeDialog: public QDockWidget + { + Q_OBJECT -private: - Ui::CGeorgesDirTreeDialog _ui; + public: + CGeorgesDirTreeDialog(QString ldPath, QWidget *parent = 0); + ~CGeorgesDirTreeDialog(); - CFileSystemModel *_dirModel; - QString _ldPath; - -Q_SIGNALS: - void selectedForm(QString); + private: + Ui::CGeorgesDirTreeDialog _ui; -public Q_SLOTS: - void ldPathChanged(QString path); + CFileSystemModel *_dirModel; + QString _ldPath; -private Q_SLOTS: - void fileSelected(QModelIndex index); - void changeFile(QString file); + Q_SIGNALS: + void selectedForm(QString); + + public Q_SLOTS: + void ldPathChanged(QString path); + + private Q_SLOTS: + void fileSelected(QModelIndex index); + void changeFile(QString file); friend class CMainWindow; -}; /* CGEorgesDirTreeDialog */ + }; /* CGEorgesDirTreeDialog */ } /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.cpp index ff0dd4ac4..6534c15d7 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.cpp @@ -34,12 +34,13 @@ along with this program. If not, see . #include "georgesform_model.h" #include "georgesform_proxy_model.h" #include "formitem.h" -#include "spindelegate.h" +#include "formdelegate.h" using namespace NLMISC; using namespace NLGEORGES; -namespace NLQT { +namespace NLQT +{ CGeorgesTreeViewDialog::CGeorgesTreeViewDialog(QWidget *parent /*= 0*/, bool emptyView /*= false*/) : QDockWidget(parent) @@ -50,7 +51,8 @@ namespace NLQT { _ui.setupUi(this); _ui.treeViewTabWidget->setTabEnabled (2,false); - if (emptyView) { + if (emptyView) + { _ui.treeViewTabWidget->clear(); setWindowTitle("Form Area"); } @@ -59,9 +61,9 @@ namespace NLQT { _ui.checkBoxDefaults->setStyleSheet("background-color: rgba(255,0,0,30)"); _form = 0; - SpinBoxDelegate *spindelegate = new SpinBoxDelegate(this); - _ui.treeView->setItemDelegateForColumn(1, spindelegate); - + FormDelegate *formdelegate = new FormDelegate(this); + _ui.treeView->setItemDelegateForColumn(1, formdelegate); + connect(_ui.treeView, SIGNAL(doubleClicked (QModelIndex)), this, SLOT(doubleClicked (QModelIndex))); @@ -77,15 +79,18 @@ namespace NLQT { //settings.setValue("dirViewGeometry", saveGeometry()); } - void CGeorgesTreeViewDialog::selectedForm(QString formName) { + void CGeorgesTreeViewDialog::selectedForm(QString formName) + { _form = Modules::georges().loadForm(formName.toStdString()); - - if (_form) { + + if (_form) + { UFormElm *root = 0; root = &_form->getRootNode(); QStringList parents; - for (uint i = 0; i < _form->getNumParent(); i++) { + for (uint i = 0; i < _form->getNumParent(); i++) + { UForm *u = _form->getParentForm(i); parents << u->getFilename().c_str(); } @@ -93,7 +98,8 @@ namespace NLQT { QString comments; comments = _form->getComment().c_str(); - if (!comments.isEmpty()) { + if (!comments.isEmpty()) + { _ui.treeViewTabWidget->setTabEnabled (1,true); _ui.commentEdit->setPlainText(comments); } @@ -103,16 +109,18 @@ namespace NLQT { _form->getDependencies(dependencies); QMap< QString, QStringList> deps; - Q_FOREACH(std::string str, dependencies) { + Q_FOREACH(std::string str, dependencies) + { QString file = str.c_str(); if (file == formName) continue; deps[file.remove(0,file.indexOf(".")+1)] << str.c_str(); } nlinfo("typ's %d",deps["typ"].count()); nlinfo("dfn's %d",deps["dfn"].count()); - + //nlwarning(strList.join(";").toStdString().c_str()); - if (root) { + if (root) + { loadedForm = formName; CGeorgesFormModel *model = new CGeorgesFormModel(root,deps,comments,parents); @@ -137,8 +145,10 @@ namespace NLQT { } } - void CGeorgesTreeViewDialog::modifiedFile( ) { - if (!_modified) { + void CGeorgesTreeViewDialog::modifiedFile( ) + { + if (!_modified) + { _modified = true; setWindowTitle(windowTitle()+"*"); Modules::mainWin().setWindowTitle(Modules::mainWin().windowTitle()+"*"); @@ -146,13 +156,17 @@ namespace NLQT { } } - void CGeorgesTreeViewDialog::write( ) { + void CGeorgesTreeViewDialog::write( ) + { COFile file; std::string s = CPath::lookup(loadedForm.toStdString()); - if (file.open (s)) { - try { - if (loadedForm.contains(".typ")) { + if (file.open (s)) + { + try + { + if (loadedForm.contains(".typ")) + { //nlassert (Type != NULL); //// Write the file @@ -167,7 +181,9 @@ namespace NLQT { //flushValueChange (); //UpdateAllViews (NULL); //return TRUE; - } else if (loadedForm.contains(".dfn")) { + } + else if (loadedForm.contains(".dfn")) + { //nlassert (Dfn != NULL); //// Write the file @@ -180,13 +196,15 @@ namespace NLQT { //modify (NULL, NULL, false); //UpdateAllViews (NULL); //return TRUE; - } else { + } + else + { nlassert (_form != NULL); // Write the file /*if (IsModified ()) { - ((CForm*)(UForm*)Form)->Header.MinorVersion++; + ((CForm*)(UForm*)Form)->Header.MinorVersion++; }*/ //((CForm*)(UForm*)Form)->write (xmlStream.getDocument (), lpszPathName, theApp.Georges4CVS); _form->write(file, false); @@ -196,7 +214,7 @@ namespace NLQT { //{ // char message[512]; // smprintf (message, 512, "Error while saving file: %s", xmlStream.getErrorString ()); - //theApp.outputError (message); + //theApp.outputError (message); //} //modify (NULL, NULL, false); //flushValueChange (); @@ -205,16 +223,23 @@ namespace NLQT { // Get the left view //CView* pView = getLeftView (); } - } catch (Exception &e) { + } + catch (Exception &e) + { 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); } } - void CGeorgesTreeViewDialog::doubleClicked ( const QModelIndex & index ) { - if (index.column() == 1) return; + void CGeorgesTreeViewDialog::doubleClicked ( const QModelIndex & index ) + { + if (index.column() == 1) + return; + CFormItem *item = static_cast(index.internalPointer()); QString value = item->data(1).toString(); @@ -222,7 +247,8 @@ namespace NLQT { if (!path.isEmpty() && !path.contains(".shape")) Q_EMIT changeFile(path); - if (path.contains(".shape")) { + if (path.contains(".shape")) + { Modules::objView().resetScene(); Modules::config().configRemapExtensions(); Modules::objView().loadMesh(path.toStdString(),""); @@ -230,37 +256,55 @@ namespace NLQT { int i = 0; } - void CGeorgesTreeViewDialog::closeEvent(QCloseEvent *event) { - if (Modules::mainWin().getEmptyView() == this) { + void CGeorgesTreeViewDialog::closeEvent(QCloseEvent *event) + { + if (Modules::mainWin().getEmptyView() == this) + { event->ignore(); - } else { + } + else + { Modules::mainWin().getTreeViewList().removeOne(this); - if(!Modules::mainWin().getTreeViewList().size()) { + if(!Modules::mainWin().getTreeViewList().size()) + { Modules::mainWin().createEmptyView(); } deleteLater(); } } - void CGeorgesTreeViewDialog::showParentRows(int newState) { + void CGeorgesTreeViewDialog::showParentRows(int newState) + { CGeorgesFormProxyModel * mp = dynamic_cast(_ui.treeView->model()); - CGeorgesFormModel *m = qobject_cast(mp->sourceModel()); + CGeorgesFormModel *m = dynamic_cast(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); - if (m->getItem(in)->nodeFrom() == UFormElm::NodeParentForm) { - if (newState == Qt::Checked) { + if (m->getItem(in)->nodeFrom() == UFormElm::NodeParentForm) + { + if (newState == Qt::Checked) + { _ui.treeView->setRowHidden(in.row(),in.parent(),false); - } else { + } + else + { _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); - if (m->getItem(in2)->nodeFrom() == UFormElm::NodeParentForm) { - if (newState == Qt::Checked) { + if (m->getItem(in2)->nodeFrom() == UFormElm::NodeParentForm) + { + if (newState == Qt::Checked) + { _ui.treeView->setRowHidden(in2.row(),in,false); - } else { + } + else + { _ui.treeView->setRowHidden(in2.row(),in,true); } } @@ -268,4 +312,5 @@ namespace NLQT { } // end of search childs } } + } /* namespace NLQT */ \ No newline at end of file diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.h index d40d2b870..39e7cfbc9 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.h @@ -37,7 +37,8 @@ namespace NLGEORGES using namespace NLGEORGES; -namespace NLQT { +namespace NLQT +{ class CGeorgesTreeViewDialog: public QDockWidget { diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.cpp index 43fa322c0..3ce2c30a6 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.cpp @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "georgesform_model.h" @@ -38,79 +38,89 @@ using namespace NLGEORGES; -namespace NLQT { +namespace NLQT +{ 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 rootData; + rootData << "Value" << "Data" << "Extra" << "Type"; + _rootElm = rootElm; + _rootItem = new CFormItem(_rootElm, rootData); + _dependencies = deps; + _comments = comment; + _parents = parents; + _parentRows = new QList; - QList rootData; - rootData << "Value" << "Data" << "Extra" << "Type"; - _rootElm = rootElm; - _rootItem = new CFormItem(_rootElm, rootData); - _dependencies = deps; - _comments = comment; - _parents = parents; - _parentRows = new QList; - - setupModelData(); + setupModelData(); } - CGeorgesFormModel::~CGeorgesFormModel() { + CGeorgesFormModel::~CGeorgesFormModel() + { 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()) return QVariant(); - switch (p_role) { - case Qt::DisplayRole: - { - return getItem(p_index)->data(p_index.column()); - } - case Qt::BackgroundRole: - { - if (getItem(p_index)->valueFrom() == UFormElm::ValueDefaultDfn) - return QBrush(QColor(255,0,0,30)); - if (getItem(p_index)->nodeFrom() == UFormElm::NodeParentForm) - return QBrush(QColor(0,255,0,30)); - return QVariant(); - } - case Qt::DecorationRole: - { - if (p_index.column() == 2) { - //p_index. - QModelIndex in = index(p_index.row(),p_index.column()-1,p_index.parent()); - CFormItem *item = getItem(in); - - QString value = item->data(1).toString(); - //QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str(); - - if (value.contains(".shape")) { - return QIcon(":/images/pqrticles.png"); - } else if(value.contains(".tga") || value.contains(".png")) { - qDebug() << p_index << p_role; - QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str(); - return QIcon(":/images/pqrticles.png"); - } - } - return QVariant(); - break; - } - default: + switch (p_role) + { + case Qt::DisplayRole: + { + return getItem(p_index)->data(p_index.column()); + } + case Qt::BackgroundRole: + { + if (getItem(p_index)->valueFrom() == UFormElm::ValueDefaultDfn) + return QBrush(QColor(255,0,0,30)); + if (getItem(p_index)->nodeFrom() == UFormElm::NodeParentForm) + return QBrush(QColor(0,255,0,30)); return QVariant(); + } + case Qt::DecorationRole: + { + if (p_index.column() == 2) + { + //p_index. + QModelIndex in = index(p_index.row(),p_index.column()-1,p_index.parent()); + CFormItem *item = getItem(in); + + QString value = item->data(1).toString(); + //QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str(); + + if (value.contains(".shape")) + { + return QIcon(":/images/pqrticles.png"); + } + else if(value.contains(".tga") || value.contains(".png")) + { + qDebug() << p_index << p_role; + QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str(); + return QIcon(":/images/pqrticles.png"); + } + } + return QVariant(); + break; + } + default: + return QVariant(); } } /******************************************************************************/ - CFormItem *CGeorgesFormModel::getItem(const QModelIndex &index) const { - if (index.isValid()) { + CFormItem *CGeorgesFormModel::getItem(const QModelIndex &index) const + { + if (index.isValid()) + { CFormItem *item = static_cast(index.internalPointer()); - if (item) return item; + if (item) + return item; } return _rootItem; } @@ -118,18 +128,19 @@ namespace NLQT { /******************************************************************************/ bool CGeorgesFormModel::setData(const QModelIndex &index, const QVariant &value, - int role) { + int role) + { - if (role != Qt::EditRole) - return false; + if (role != Qt::EditRole) + return false; - CFormItem *item = getItem(index); - bool result = item->setData(index.column(), value); + CFormItem *item = getItem(index); + bool result = item->setData(index.column(), value); - if (result) - Q_EMIT dataChanged(index, index); + if (result) + Q_EMIT dataChanged(index, index); - return result; + return result; } /******************************************************************************/ @@ -142,7 +153,7 @@ namespace NLQT { Qt::ItemFlags returnValue = Qt::ItemIsSelectable | Qt::ItemIsEnabled; if(index.column() == 1) - returnValue |= Qt::ItemIsEditable; + returnValue |= Qt::ItemIsEditable; return returnValue; @@ -229,21 +240,25 @@ namespace NLQT { /******************************************************************************/ void CGeorgesFormModel::loadFormData(UFormElm *root, CFormItem *parent) { - - if (!root) return; + + if (!root) + return; uint num = 0; UFormElm::TWhereIsNode *whereN = new UFormElm::TWhereIsNode; UFormElm::TWhereIsValue *whereV = new UFormElm::TWhereIsValue; - if (root->isStruct()) { + if (root->isStruct()) + { //((CFormElm*)root)->getForm()->getComment(); uint structSize = 0; root->getStructSize(structSize); - while (num < structSize) { + while (num < structSize) + { // Append a new item to the current parent's list of children. std::string elmName; - if(root->getStructNodeName(num, elmName)) { + if(root->getStructNodeName(num, elmName)) + { QList columnData; //QVariant value; std::string value; @@ -253,8 +268,10 @@ namespace NLQT { //double value_double; QString elmtType = ""; UFormElm *elmt = 0; - if(root->getNodeByName(&elmt, elmName.c_str(), whereN, true)) { - if (elmt) { + if(root->getNodeByName(&elmt, elmName.c_str(), whereN, true)) + { + if (elmt) + { if (elmt->isArray()) elmtType = "Array"; if (elmt->isStruct()) @@ -263,43 +280,50 @@ namespace NLQT { elmtType = "Atom"; uint numDefinitions = 0; const UType *type = elmt->getType(); - if (type) { + if (type) + { numDefinitions = type->getNumDefinition(); root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV); - switch (type->getType()) { - case UType::UnsignedInt: - value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble()).toStdString(); - elmtType.append("_uint");break; - case UType::SignedInt: - value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble()).toStdString(); - elmtType.append("_sint");break; - case UType::Double: - value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble(),0,'f',1).toStdString(); - elmtType.append("_double");break; - case UType::String: - elmtType.append("_string");break; - case UType::Color: - elmtType.append("_color");break; - default: - elmtType.append("_unknownType"); + switch (type->getType()) + { + case UType::UnsignedInt: + value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble()).toStdString(); + elmtType.append("_uint");break; + case UType::SignedInt: + value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble()).toStdString(); + elmtType.append("_sint");break; + case UType::Double: + value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble(),0,'f',1).toStdString(); + elmtType.append("_double");break; + case UType::String: + elmtType.append("_string");break; + case UType::Color: + elmtType.append("_color");break; + default: + elmtType.append("_unknownType"); } } - - if (numDefinitions) { + + if (numDefinitions) + { std::string l, v; QString tmpLabel, tmpValue; - for (uint i = 0; i < numDefinitions; i++) { + for (uint i = 0; i < numDefinitions; i++) + { type->getDefinition(i,l,v); tmpLabel = l.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()) { value = l; break; } } - if (type->getType() == UType::String) { - if (QString(value.c_str()) == tmpValue) { + if (type->getType() == UType::String) + { + if (QString(value.c_str()) == tmpValue) + { value = l; break; } @@ -307,11 +331,13 @@ namespace NLQT { } } } - if (elmt->isVirtualStruct()){ + if (elmt->isVirtualStruct()) + { root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV); elmtType = "VirtualStruct"; } - switch (*whereN) { + switch (*whereN) + { case UFormElm::NodeForm: elmtType.append("_fromForm"); break; case UFormElm::NodeParentForm: @@ -323,7 +349,8 @@ namespace NLQT { default: elmtType.append("_noNode"); } - switch (*whereV) { + switch (*whereV) + { case UFormElm::ValueForm: elmtType.append("_formValue"); break; case UFormElm::ValueParentForm: @@ -341,36 +368,43 @@ namespace NLQT { // parents << parents.last()->child(parents.last()->childCount()-1); //} loadFormData(elmt, parent->child(parent->childCount()-1)); - } else { + } + else + { // add Defaults //columnData << QString(elmName.c_str()) << QString("default") << QString("default"); //parent->appendChild(new CFormItem(elmt, columnData, parent, UFormElm::ValueDefaultDfn, UFormElm::NodeDfn)); } } } - + num++; } } - if (root->isArray()) { + if (root->isArray()) + { uint arraySize = 0; root->getArraySize(arraySize); - while (num < arraySize) { + while (num < arraySize) + { std::string elmName; - if(root->getArrayNodeName(elmName, num)) { + if(root->getArrayNodeName(elmName, num)) + { QList columnData; std::string value; QString elmtType = ""; //root->getValueByName(value, elmName.c_str()); - + UFormElm *elmt = 0; - if(root->getArrayNode(&elmt,0) && elmt) { + if(root->getArrayNode(&elmt,0) && elmt) + { if (elmt->isArray()) elmtType = "Array"; if (elmt->isStruct()) { elmtType = "Struct"; } - if (elmt->isAtom()) { + if (elmt->isAtom()) + { elmt->getValue(value); elmtType = "Atom"; } @@ -388,14 +422,16 @@ namespace NLQT { /******************************************************************************/ - void CGeorgesFormModel::loadFormHeader() { - + void CGeorgesFormModel::loadFormHeader() + { + CFormItem *fi_pars = new CFormItem(_rootElm, QList() << "parents", _rootItem); _rootItem->appendChild(fi_pars); - Q_FOREACH(QString str, _parents) { - fi_pars->appendChild(new CFormItem(_rootElm, QList() << str, fi_pars)); - } + Q_FOREACH(QString str, _parents) + { + fi_pars->appendChild(new CFormItem(_rootElm, QList() << str, fi_pars)); + } /*QStringList dfns = _dependencies["dfn"]; QStringList typs = _dependencies["typ"]; @@ -407,33 +443,34 @@ namespace NLQT { _rootItem->appendChild(fi_dep); if (!dfns.isEmpty()) { - CFormItem *fi_dfn = new CFormItem(_rootElm, QList() << "dfn", fi_dep); - fi_dep->appendChild(fi_dfn); - foreach(QString str, dfns) { - fi_dfn->appendChild(new CFormItem(_rootElm, QList() << str, fi_dfn)); - } + CFormItem *fi_dfn = new CFormItem(_rootElm, QList() << "dfn", fi_dep); + fi_dep->appendChild(fi_dfn); + foreach(QString str, dfns) { + fi_dfn->appendChild(new CFormItem(_rootElm, QList() << str, fi_dfn)); + } } if (!typs.isEmpty()) { - CFormItem *fi_typ = new CFormItem(_rootElm, QList() << "typ", fi_dep); - fi_dep->appendChild(fi_typ); - foreach(QString str, typs) { - fi_typ->appendChild(new CFormItem(_rootElm, QList() << str, fi_typ)); - } + CFormItem *fi_typ = new CFormItem(_rootElm, QList() << "typ", fi_dep); + fi_dep->appendChild(fi_typ); + foreach(QString str, typs) { + fi_typ->appendChild(new CFormItem(_rootElm, QList() << str, fi_typ)); + } } if (!_dependencies.isEmpty()) { - CFormItem *fi_other = new CFormItem(_rootElm, QList() << "other", fi_dep); - fi_dep->appendChild(fi_other); - foreach(QStringList list, _dependencies) { - foreach(QString str, list) { - fi_other->appendChild(new CFormItem(_rootElm, QList() << str, fi_other)); - } - } + CFormItem *fi_other = new CFormItem(_rootElm, QList() << "other", fi_dep); + fi_dep->appendChild(fi_other); + foreach(QStringList list, _dependencies) { + foreach(QString str, list) { + fi_other->appendChild(new CFormItem(_rootElm, QList() << str, fi_other)); + } + } }*/ } /******************************************************************************/ - void CGeorgesFormModel::setupModelData() { + void CGeorgesFormModel::setupModelData() + { loadFormHeader(); loadFormData(_rootElm, _rootItem); } diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.h index ce25e82b1..923da9fa1 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.h @@ -32,12 +32,13 @@ namespace NLGEORGES { class UFormElm; } -namespace NLQT { +namespace NLQT +{ class CFormItem; - class CGeorgesFormModel : public QAbstractItemModel { - Q_OBJECT + class CGeorgesFormModel : public QAbstractItemModel + { public: CGeorgesFormModel(NLGEORGES::UFormElm *root, QMap< QString, QStringList> deps, diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_proxy_model.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_proxy_model.cpp index 3847830da..5ab408525 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_proxy_model.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_proxy_model.cpp @@ -21,7 +21,8 @@ // NeL includes #include -namespace NLQT { +namespace NLQT +{ bool CGeorgesFormProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_proxy_model.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_proxy_model.h index 19fc28c41..faff7f553 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_proxy_model.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_proxy_model.h @@ -23,13 +23,19 @@ along with this program. If not, see . // Qt includes #include -namespace NLQT { +namespace NLQT +{ + + class CGeorgesFormProxyModel : public QSortFilterProxyModel + { - class CGeorgesFormProxyModel : public QSortFilterProxyModel { - public: - CGeorgesFormProxyModel(QObject *parent = 0): QSortFilterProxyModel(parent){} - ~CGeorgesFormProxyModel() {} + CGeorgesFormProxyModel(QObject *parent = 0): QSortFilterProxyModel(parent) + { + } + ~CGeorgesFormProxyModel() + { + } protected: virtual bool filterAcceptsColumn ( int source_column, const QModelIndex & source_parent ) const ; diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/log_dialog.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/log_dialog.cpp index ef199154a..be2b7a340 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/log_dialog.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/log_dialog.cpp @@ -30,10 +30,12 @@ along with this program. If not, see . // Project includes #include "qt_displayer.h" -namespace NLQT { +namespace NLQT +{ CGeorgesLogDialog::CGeorgesLogDialog(QWidget *parent): - QDockWidget(parent){ + QDockWidget(parent) + { _ui.setupUi(this); @@ -46,7 +48,8 @@ namespace NLQT { } -CGeorgesLogDialog::~CGeorgesLogDialog() { +CGeorgesLogDialog::~CGeorgesLogDialog() +{ NLMISC::ErrorLog->removeDisplayer(_displayer); NLMISC::WarningLog->removeDisplayer(_displayer); NLMISC::DebugLog->removeDisplayer(_displayer); diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/log_dialog.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/log_dialog.h index 0dab4e9d8..107629412 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/log_dialog.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/log_dialog.h @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifndef LOG_DIALOG_H @@ -30,24 +30,24 @@ // Project includes #include "ui_log_form.h" -namespace NLQT { - class CQtDisplayer; - -class CGeorgesLogDialog: public QDockWidget +namespace NLQT { - Q_OBJECT + class CQtDisplayer; -public: - CGeorgesLogDialog(QWidget *parent = 0); - ~CGeorgesLogDialog(); + class CGeorgesLogDialog: public QDockWidget + { -private: - Ui::CGeorgesLogDialog _ui; + public: + CGeorgesLogDialog(QWidget *parent = 0); + ~CGeorgesLogDialog(); - CQtDisplayer *_displayer; + private: + Ui::CGeorgesLogDialog _ui; - friend class CMainWindow; -}; /* CGeorgesLogDialog */ + CQtDisplayer *_displayer; + + friend class CMainWindow; + }; /* CGeorgesLogDialog */ } /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/main.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/main.cpp index cd2e1ef88..883b19d40 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/main.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/main.cpp @@ -33,33 +33,37 @@ using namespace std; using namespace NLMISC; -namespace NLQT { +namespace NLQT +{ -namespace { + namespace + { -CFileDisplayer *s_FileDisplayer = NULL; + CFileDisplayer *s_FileDisplayer = NULL; -} /* anonymous namespace */ + } /* anonymous namespace */ } /* 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); - QFile file("qt.log"); - file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text); + QFile file("qt.log"); + file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text); - QChar code; - switch (p_type) { - case QtDebugMsg: code = 'D'; break; - case QtWarningMsg: code = 'W'; break; - case QtCriticalMsg: code = 'C'; break; - case QtFatalMsg: code = 'F'; break; - } - QString dt = QDateTime::currentDateTime().toString("yyyyMMdd hh:mm:ss"); + QChar code; + switch (p_type) + { + case QtDebugMsg: code = 'D'; break; + case QtWarningMsg: code = 'W'; break; + case QtCriticalMsg: code = 'C'; break; + case QtFatalMsg: code = 'F'; break; + } + QString dt = QDateTime::currentDateTime().toString("yyyyMMdd hh:mm:ss"); - QTextStream(&file) << QString("%1 [%2] %3\n").arg(dt).arg(code).arg(QString(p_msg)); + QTextStream(&file) << QString("%1 [%2] %3\n").arg(dt).arg(code).arg(QString(p_msg)); } #ifndef DATA_DIR @@ -77,12 +81,12 @@ void messageHandler(QtMsgType p_type, const char* p_msg) { sint main(int argc, char **argv) { - // go nel! + // go nel! { // use log.log if NEL_LOG_IN_FILE and NLQT_USE_LOG_LOG defined as 1 createDebug(NULL, NLQT_USE_LOG_LOG, false); if (QFile::exists("qt.log")) - QFile::remove("qt.log"); + QFile::remove("qt.log"); qInstallMsgHandler(messageHandler); #if NLQT_USE_LOG @@ -101,12 +105,12 @@ sint main(int argc, char **argv) #endif nlinfo("Welcome to NeL!"); - + NLMISC::CPath::remapExtension("tga", "png", true); } - - QApplication app(argc, argv); - + + QApplication app(argc, argv); + Modules::init(); //Modules::mainWin().resize(800,600); Modules::mainWin().show(); diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/main_window.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/main_window.cpp index d2ce4d887..ed54e5a3e 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/main_window.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/main_window.cpp @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "main_window.h" @@ -36,453 +36,473 @@ using namespace std; using namespace NLMISC; -namespace NLQT { - - -CMainWindow::CMainWindow(QWidget *parent) - : QMainWindow(parent), - _GeorgesLogDialog(0), _ObjectViewerDialog(0), - _GeorgesDirTreeDialog(0) +namespace NLQT { - setWindowTitle("Qt Georges Editor"); - setDockNestingEnabled(true); - setCentralWidget(0); - setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); - setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); + CMainWindow::CMainWindow(QWidget *parent) + : QMainWindow(parent), _GeorgesLogDialog(0), _ObjectViewerDialog(0), + _GeorgesDirTreeDialog(0) + { + setWindowTitle("Qt Georges Editor"); - // create log dock widget - _GeorgesLogDialog = new CGeorgesLogDialog(this); - addDockWidget(Qt::RightDockWidgetArea, _GeorgesLogDialog); + setDockNestingEnabled(true); + setCentralWidget(0); + setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); + setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); - // empty form view as placeholder - createEmptyView(); - _currentView = 0; + // create log dock widget + _GeorgesLogDialog = new CGeorgesLogDialog(this); + addDockWidget(Qt::RightDockWidgetArea, _GeorgesLogDialog); - // load and set leveldesign path from config - QString ldPath = Modules::config().configLeveldesignPath().c_str(); - QFileInfo info(ldPath); - if (!info.isDir()) ldPath = ""; + // empty form view as placeholder + createEmptyView(); + _currentView = 0; - // create georges dir dock widget - _GeorgesDirTreeDialog = new CGeorgesDirTreeDialog(ldPath, this); - addDockWidget(Qt::LeftDockWidgetArea, _GeorgesDirTreeDialog); - if (ldPath == "") { - 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?"), - QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok) { - settings(); - } - } + // load and set leveldesign path from config + QString ldPath = Modules::config().configLeveldesignPath().c_str(); + QFileInfo info(ldPath); + if (!info.isDir()) + ldPath = ""; - // create NeL viewport dock widget - _ObjectViewerDialog = new CObjectViewerDialog(this); - //_ObjectViewerDialog->setAllowedAreas(Qt::LeftDockWidgetArea ); - //_ObjectViewerDialog->hide(); - addDockWidget(Qt::LeftDockWidgetArea, _ObjectViewerDialog); - - createActions(); - createMenus(); - createToolBars(); - createStatusBar(); - - //_ObjectViewerDialog->toggleViewAction()->trigger(); - QSettings settings("georges_editor_qt.ini", QSettings::IniFormat); - settings.beginGroup("WindowSettings"); - restoreState(settings.value("QtWindowState").toByteArray()); - restoreGeometry(settings.value("QtWindowGeometry").toByteArray()); - settings.endGroup(); - - // setup Qt style and palette from config file - //_originalPalette = QApplication::palette(); - //Modules::config().setAndCallback("QtStyle", CConfigCallback(this, &CMainWindow::cfcbQtStyle)); - //Modules::config().setAndCallback("QtPalette", CConfigCallback(this, &CMainWindow::cfcbQtPalette)); - - setWindowIcon(QIcon(":/images/khead.png")); - - _statusBarTimer = new QTimer(this); - connect(_statusBarTimer, SIGNAL(timeout()), this, SLOT(updateStatusBar())); - _statusBarTimer->start(5000); - - connect(_GeorgesDirTreeDialog, SIGNAL(selectedForm(QString)), - this, SLOT(openTreeView(QString))); -} - -CMainWindow::~CMainWindow() -{ - // save state & geometry of window and widgets - QSettings settings("georges_editor_qt.ini", QSettings::IniFormat); - settings.beginGroup("WindowSettings"); - settings.setValue("QtWindowState", saveState()); - settings.setValue("QtWindowGeometry", saveGeometry()); - settings.endGroup(); - - //Modules::config().dropCallback("QtPalette"); - //Modules::config().dropCallback("QtStyle"); - - _statusBarTimer->stop(); - - delete _ObjectViewerDialog; - delete _GeorgesDirTreeDialog; - delete _GeorgesLogDialog; -} - -void CMainWindow::openTreeView(QString file) { - // create or/and raise tree view dock widget for current file - - setCurrentFile(file); - - CGeorgesTreeViewDialog *newView = 0; - - Q_FOREACH(CGeorgesTreeViewDialog* dlg, _treeViewList) { - if (dlg->loadedForm == file) - newView = dlg; - } - if (!newView) { - newView = new CGeorgesTreeViewDialog(this); - //newView->setAllowedAreas(Qt::TopDockWidgetArea | Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - newView->setWindowTitle(file); - - if (_treeViewList.isEmpty()) { - _emptyView->deleteLater(); - addDockWidget(Qt::TopDockWidgetArea, newView); - } else { - tabifyDockWidget(_treeViewList.first(),newView); - QTabBar* tb = Modules::mainWin().getTabBar(); - if (tb) { - disconnect(tb, SIGNAL(currentChanged ( int ) ), - this,SLOT(tabChanged(int))); - connect(tb, SIGNAL(currentChanged ( int ) ), - this,SLOT(tabChanged(int))); + // create georges dir dock widget + _GeorgesDirTreeDialog = new CGeorgesDirTreeDialog(ldPath, this); + addDockWidget(Qt::LeftDockWidgetArea, _GeorgesDirTreeDialog); + if (ldPath == "") + { + 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?"), + QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok) + { + settings(); } } - - _treeViewList.append(newView); - newView->selectedForm(file); - _currentView = newView; - connect(newView, SIGNAL(changeFile(QString)), - _GeorgesDirTreeDialog, SLOT(changeFile(QString))); - connect(newView, SIGNAL(modified(bool)), - _saveAction, SLOT(setEnabled(bool))); + // create NeL viewport dock widget + _ObjectViewerDialog = new CObjectViewerDialog(this); + //_ObjectViewerDialog->setAllowedAreas(Qt::LeftDockWidgetArea ); + //_ObjectViewerDialog->hide(); + addDockWidget(Qt::LeftDockWidgetArea, _ObjectViewerDialog); + + createActions(); + createMenus(); + createToolBars(); + createStatusBar(); + + //_ObjectViewerDialog->toggleViewAction()->trigger(); + QSettings settings("georges_editor_qt.ini", QSettings::IniFormat); + settings.beginGroup("WindowSettings"); + restoreState(settings.value("QtWindowState").toByteArray()); + restoreGeometry(settings.value("QtWindowGeometry").toByteArray()); + settings.endGroup(); + + // setup Qt style and palette from config file + //_originalPalette = QApplication::palette(); + //Modules::config().setAndCallback("QtStyle", CConfigCallback(this, &CMainWindow::cfcbQtStyle)); + //Modules::config().setAndCallback("QtPalette", CConfigCallback(this, &CMainWindow::cfcbQtPalette)); + + setWindowIcon(QIcon(":/images/khead.png")); + + _statusBarTimer = new QTimer(this); + connect(_statusBarTimer, SIGNAL(timeout()), this, SLOT(updateStatusBar())); + _statusBarTimer->start(5000); + + connect(_GeorgesDirTreeDialog, SIGNAL(selectedForm(QString)), + this, SLOT(openTreeView(QString))); } - newView->raise(); -} -void CMainWindow::settings() -{ - CSettingsDialog _settingsDialog(this); - - connect(&_settingsDialog,SIGNAL(ldPathChanged(QString)), - _GeorgesDirTreeDialog,SLOT(ldPathChanged(QString))); - - //_settingsDialog.show(); - _settingsDialog.exec(); -} - -void CMainWindow::about() -{ - QMessageBox::about(this, tr("About Georges Viewer Qt"), - tr("

Georges Viewer Qt

" - "Author: aquiles
Credits:Thx to dnk-88 for parts of his code")); -} - -void CMainWindow::updateStatusBar() -{ - //if (_isGraphicsInitialized) - // statusBar()->showMessage(QString(Modules::objView().getDriver()->getVideocardInformation())); -} - -void CMainWindow::open() -{ - /*QStringList fileNames = QFileDialog::getOpenFileNames(this, - tr("Open NeL data file"), _lastDir, - tr("All NeL files (*.shape *.ps);;" - "NeL shape files (*.shape);;" - "NeL particle system files (*.ps)")); - - setCursor(Qt::WaitCursor); - if (!fileNames.isEmpty()) + CMainWindow::~CMainWindow() { + // save state & geometry of window and widgets + QSettings settings("georges_editor_qt.ini", QSettings::IniFormat); + settings.beginGroup("WindowSettings"); + settings.setValue("QtWindowState", saveState()); + settings.setValue("QtWindowGeometry", saveGeometry()); + settings.endGroup(); + + //Modules::config().dropCallback("QtPalette"); + //Modules::config().dropCallback("QtStyle"); + + _statusBarTimer->stop(); + + delete _ObjectViewerDialog; + delete _GeorgesDirTreeDialog; + delete _GeorgesLogDialog; + } + + void CMainWindow::openTreeView(QString file) + { + // create or/and raise tree view dock widget for current file + + setCurrentFile(file); + + CGeorgesTreeViewDialog *newView = 0; + + Q_FOREACH(CGeorgesTreeViewDialog* dlg, _treeViewList) + { + if (dlg->loadedForm == file) + newView = dlg; + } + if (!newView) + { + newView = new CGeorgesTreeViewDialog(this); + //newView->setAllowedAreas(Qt::TopDockWidgetArea | Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + newView->setWindowTitle(file); + + if (_treeViewList.isEmpty()) + { + _emptyView->deleteLater(); + addDockWidget(Qt::TopDockWidgetArea, newView); + } + else + { + tabifyDockWidget(_treeViewList.first(),newView); + QTabBar* tb = Modules::mainWin().getTabBar(); + if (tb) + { + disconnect(tb, SIGNAL(currentChanged ( int ) ), + this,SLOT(tabChanged(int))); + connect(tb, SIGNAL(currentChanged ( int ) ), + this,SLOT(tabChanged(int))); + } + } + + _treeViewList.append(newView); + newView->selectedForm(file); + _currentView = newView; + + connect(newView, SIGNAL(changeFile(QString)), + _GeorgesDirTreeDialog, SLOT(changeFile(QString))); + connect(newView, SIGNAL(modified(bool)), + _saveAction, SLOT(setEnabled(bool))); + } + newView->raise(); + } + + void CMainWindow::settings() + { + CSettingsDialog _settingsDialog(this); + + connect(&_settingsDialog,SIGNAL(ldPathChanged(QString)), + _GeorgesDirTreeDialog,SLOT(ldPathChanged(QString))); + + //_settingsDialog.show(); + _settingsDialog.exec(); + } + + void CMainWindow::about() + { + QMessageBox::about(this, tr("About Georges Viewer Qt"), + tr("

Georges Viewer Qt

" + "Author: aquiles
Credits:Thx to dnk-88 for parts of his code")); + } + + void CMainWindow::updateStatusBar() + { + //if (_isGraphicsInitialized) + // statusBar()->showMessage(QString(Modules::objView().getDriver()->getVideocardInformation())); + } + + void CMainWindow::open() + { + /*QStringList fileNames = QFileDialog::getOpenFileNames(this, + tr("Open NeL data file"), _lastDir, + tr("All NeL files (*.shape *.ps);;" + "NeL shape files (*.shape);;" + "NeL particle system files (*.ps)")); + + setCursor(Qt::WaitCursor); + if (!fileNames.isEmpty()) + { QStringList list = fileNames; QStringList::Iterator it = list.begin(); _lastDir = QFileInfo(*it).absolutePath(); - + QString skelFileName = QFileDialog::getOpenFileName(this, - tr("Open skeleton file"), _lastDir, - tr("NeL skeleton file (*.skel)")); - + tr("Open skeleton file"), _lastDir, + tr("NeL skeleton file (*.skel)")); + while(it != list.end()) { - loadFile(*it, skelFileName); - ++it; + loadFile(*it, skelFileName); + ++it; } _AnimationSetDialog->updateListObject(); _AnimationSetDialog->updateListAnim(); _SlotManagerDialog->updateUiSlots(); - } - setCursor(Qt::ArrowCursor);*/ -} - -void CMainWindow::save() -{ - if(!_currentView) - return; - - setCursor(Qt::WaitCursor); - - _currentView->write(); - setWindowTitle(windowTitle().remove("*")); - _saveAction->setEnabled(false); - - setCursor(Qt::ArrowCursor); -} - -void CMainWindow::create() -{ -} - -void CMainWindow::createEmptyView() -{ - _emptyView = new CGeorgesTreeViewDialog(this, true); - //_emptyView->setAllowedAreas(Qt::TopDockWidgetArea); - addDockWidget(Qt::TopDockWidgetArea,_emptyView); -} - -void CMainWindow::createActions() -{ - _openAction = new QAction(tr("&Open..."), this); - _openAction->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOpenButton)); - _openAction->setShortcut(QKeySequence::Open); - _openAction->setStatusTip(tr("Open an existing file")); - connect(_openAction, SIGNAL(triggered()), this, SLOT(open())); - - _createAction = new QAction(tr("&New..."), this); - _createAction->setIcon(QApplication::style()->standardIcon(QStyle::SP_FileDialogNewFolder)); - _createAction->setShortcut(QKeySequence::New); - _createAction->setStatusTip(tr("Create a new file")); - connect(_createAction, SIGNAL(triggered()), this, SLOT(create())); - - _saveAction = new QAction(tr("&Save..."), this); - _saveAction->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogSaveButton)); - _saveAction->setShortcut(QKeySequence::Save); - _saveAction->setStatusTip(tr("Saves the current file")); - _saveAction->setDisabled(true); - connect(_saveAction, SIGNAL(triggered()), this, SLOT(save())); - - _exitAction = new QAction(tr("E&xit"), this); - _exitAction->setShortcut(QKeySequence::Close); - _exitAction->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCloseButton)); - _exitAction->setStatusTip(tr("Exit the application")); - connect(_exitAction, SIGNAL(triggered()), this, SLOT(close())); - - _setBackColorAction = _ObjectViewerDialog->createSetBackgroundColor(this); - _setBackColorAction->setText(tr("Set &background color")); - _setBackColorAction->setStatusTip(tr("Set background color")); - - _settingsAction = new QAction(tr("&Settings"), this); - _settingsAction->setIcon(QIcon(":/images/preferences.png")); - _settingsAction->setStatusTip(tr("Settings")); - connect(_settingsAction, SIGNAL(triggered()), this, SLOT(settings())); - - _aboutAction = new QAction(tr("&About"), this); - _aboutAction->setStatusTip(tr("Show the application's About box")); - connect(_aboutAction, SIGNAL(triggered()), this, SLOT(about())); - - _aboutQtAction = new QAction(tr("About &Qt"), this); - _aboutQtAction->setStatusTip(tr("Show the Qt library's About box")); - connect(_aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt())); - - for (int i = 0; i < MaxRecentFiles; ++i) { - recentFileActs[i] = new QAction(this); - recentFileActs[i]->setVisible(false); - connect(recentFileActs[i], SIGNAL(triggered()), - this, SLOT(openRecentFile())); - } -} - -void CMainWindow::createMenus() -{ - _fileMenu = menuBar()->addMenu(tr("&File")); - _fileMenu->addAction(_createAction); - _fileMenu->addAction(_openAction); - _fileMenu->addAction(_saveAction); - _separatorAction = _fileMenu->addSeparator(); - for (int i = 0; i < MaxRecentFiles; ++i) - _fileMenu->addAction(recentFileActs[i]); - _fileMenu->addSeparator(); - _fileMenu->addAction(_exitAction); - updateRecentFileActions(); - - _viewMenu = menuBar()->addMenu(tr("&View")); - _viewMenu->addAction(_setBackColorAction); - if (_GeorgesDirTreeDialog) - _viewMenu->addAction(_GeorgesDirTreeDialog->toggleViewAction()); - - _toolsMenu = menuBar()->addMenu(tr("&Tools")); - if (_ObjectViewerDialog) { - _toolsMenu->addAction(_ObjectViewerDialog->toggleViewAction()); - _ObjectViewerDialog->toggleViewAction()->setIcon(QIcon(":/images/pqrticles.png")); - } - _toolsMenu->addSeparator(); - _toolsMenu->addAction(_settingsAction); - - menuBar()->addSeparator(); - - _helpMenu = menuBar()->addMenu(tr("&Help")); - _helpMenu->addAction(_aboutAction); - _helpMenu->addAction(_aboutQtAction); -} - -void CMainWindow::createToolBars() -{ - _fileToolBar = addToolBar(tr("&File")); - _fileToolBar->addAction(_createAction); - _fileToolBar->addAction(_openAction); - _fileToolBar->addAction(_saveAction); - - _toolsBar = addToolBar(tr("&Tools")); - if (_ObjectViewerDialog) - _toolsBar->addAction(_ObjectViewerDialog->toggleViewAction()); -} - -void CMainWindow::createStatusBar() -{ - statusBar()->showMessage(tr("StatusReady")); -} - -void CMainWindow::cfcbQtStyle(NLMISC::CConfigFile::CVar &var) -{ - QApplication::setStyle(QStyleFactory::create(var.asString().c_str())); -} - -void CMainWindow::cfcbQtPalette(NLMISC::CConfigFile::CVar &var) -{ - if (var.asBool()) QApplication::setPalette(QApplication::style()->standardPalette()); - else QApplication::setPalette(_originalPalette); -} - -QTabBar* CMainWindow::getTabBar() -{ - // get the QTabBar - QList tabList = findChildren(); - //tabList = _mainWindow->findChildren(); - //nlinfo(QString("%1 %2").arg(QString::number((int)this,16)). - // arg(QString::number((int)_mainWindow,16)). - // toStdString().c_str()); - QTabBar *tb = 0; - Q_FOREACH(QTabBar *tabBar, tabList){ - if (tabBar->parent() != this) - continue; - //nlinfo(QString("%1 %2 %3 %4").arg(tabBar->objectName()). - // arg(QString::number((int)tabBar,16)). - // arg(QString::number((int)tabBar->parentWidget(),16)). - // arg(QString::number((int)tabBar->parent(),16)). - // toStdString().c_str()); - for (int i = 0; i < tabBar->count(); i++) { - QString currentTab = tabBar->tabText(i); - //nlinfo(currentTab.toStdString().c_str()); } - tb = tabBar; - } - return tb; -} - -void CMainWindow::tabChanged(int index) -{ - if (index == -1) { - setWindowTitle("Qt Georges Editor"); - return; + setCursor(Qt::ArrowCursor);*/ } - QTabBar *tb = getTabBar(); - //nlinfo(QString("%1").arg(index).toStdString().c_str()); - - Q_FOREACH(CGeorgesTreeViewDialog* dlg, _treeViewList) { - if (dlg->windowTitle() == tb->tabText(index)) { - //nlinfo(QString("%1 modified %2").arg(tb->tabText(index)). - // arg(dlg->modified()). + void CMainWindow::save() + { + if(!_currentView) + return; + + setCursor(Qt::WaitCursor); + + _currentView->write(); + setWindowTitle(windowTitle().remove("*")); + _saveAction->setEnabled(false); + + setCursor(Qt::ArrowCursor); + } + + void CMainWindow::create() + { + } + + void CMainWindow::createEmptyView() + { + _emptyView = new CGeorgesTreeViewDialog(this, true); + //_emptyView->setAllowedAreas(Qt::TopDockWidgetArea); + addDockWidget(Qt::TopDockWidgetArea,_emptyView); + } + + void CMainWindow::createActions() + { + _openAction = new QAction(tr("&Open..."), this); + _openAction->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOpenButton)); + _openAction->setShortcut(QKeySequence::Open); + _openAction->setStatusTip(tr("Open an existing file")); + connect(_openAction, SIGNAL(triggered()), this, SLOT(open())); + + _createAction = new QAction(tr("&New..."), this); + _createAction->setIcon(QApplication::style()->standardIcon(QStyle::SP_FileDialogNewFolder)); + _createAction->setShortcut(QKeySequence::New); + _createAction->setStatusTip(tr("Create a new file")); + connect(_createAction, SIGNAL(triggered()), this, SLOT(create())); + + _saveAction = new QAction(tr("&Save..."), this); + _saveAction->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogSaveButton)); + _saveAction->setShortcut(QKeySequence::Save); + _saveAction->setStatusTip(tr("Saves the current file")); + _saveAction->setDisabled(true); + connect(_saveAction, SIGNAL(triggered()), this, SLOT(save())); + + _exitAction = new QAction(tr("E&xit"), this); + _exitAction->setShortcut(QKeySequence::Close); + _exitAction->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCloseButton)); + _exitAction->setStatusTip(tr("Exit the application")); + connect(_exitAction, SIGNAL(triggered()), this, SLOT(close())); + + _setBackColorAction = _ObjectViewerDialog->createSetBackgroundColor(this); + _setBackColorAction->setText(tr("Set &background color")); + _setBackColorAction->setStatusTip(tr("Set background color")); + + _settingsAction = new QAction(tr("&Settings"), this); + _settingsAction->setIcon(QIcon(":/images/preferences.png")); + _settingsAction->setStatusTip(tr("Settings")); + connect(_settingsAction, SIGNAL(triggered()), this, SLOT(settings())); + + _aboutAction = new QAction(tr("&About"), this); + _aboutAction->setStatusTip(tr("Show the application's About box")); + connect(_aboutAction, SIGNAL(triggered()), this, SLOT(about())); + + _aboutQtAction = new QAction(tr("About &Qt"), this); + _aboutQtAction->setStatusTip(tr("Show the Qt library's About box")); + connect(_aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt())); + + for (int i = 0; i < MaxRecentFiles; ++i) { + recentFileActs[i] = new QAction(this); + recentFileActs[i]->setVisible(false); + connect(recentFileActs[i], SIGNAL(triggered()), + this, SLOT(openRecentFile())); + } + } + + void CMainWindow::createMenus() + { + _fileMenu = menuBar()->addMenu(tr("&File")); + _fileMenu->addAction(_createAction); + _fileMenu->addAction(_openAction); + _fileMenu->addAction(_saveAction); + _separatorAction = _fileMenu->addSeparator(); + for (int i = 0; i < MaxRecentFiles; ++i) + _fileMenu->addAction(recentFileActs[i]); + _fileMenu->addSeparator(); + _fileMenu->addAction(_exitAction); + updateRecentFileActions(); + + _viewMenu = menuBar()->addMenu(tr("&View")); + _viewMenu->addAction(_setBackColorAction); + if (_GeorgesDirTreeDialog) + _viewMenu->addAction(_GeorgesDirTreeDialog->toggleViewAction()); + + _toolsMenu = menuBar()->addMenu(tr("&Tools")); + if (_ObjectViewerDialog) + { + _toolsMenu->addAction(_ObjectViewerDialog->toggleViewAction()); + _ObjectViewerDialog->toggleViewAction()->setIcon(QIcon(":/images/pqrticles.png")); + } + _toolsMenu->addSeparator(); + _toolsMenu->addAction(_settingsAction); + + menuBar()->addSeparator(); + + _helpMenu = menuBar()->addMenu(tr("&Help")); + _helpMenu->addAction(_aboutAction); + _helpMenu->addAction(_aboutQtAction); + } + + void CMainWindow::createToolBars() + { + _fileToolBar = addToolBar(tr("&File")); + _fileToolBar->addAction(_createAction); + _fileToolBar->addAction(_openAction); + _fileToolBar->addAction(_saveAction); + + _toolsBar = addToolBar(tr("&Tools")); + if (_ObjectViewerDialog) + _toolsBar->addAction(_ObjectViewerDialog->toggleViewAction()); + } + + void CMainWindow::createStatusBar() + { + statusBar()->showMessage(tr("StatusReady")); + } + + void CMainWindow::cfcbQtStyle(NLMISC::CConfigFile::CVar &var) + { + QApplication::setStyle(QStyleFactory::create(var.asString().c_str())); + } + + void CMainWindow::cfcbQtPalette(NLMISC::CConfigFile::CVar &var) + { + if (var.asBool()) + QApplication::setPalette(QApplication::style()->standardPalette()); + else + QApplication::setPalette(_originalPalette); + } + + QTabBar* CMainWindow::getTabBar() + { + // get the QTabBar + QList tabList = findChildren(); + //tabList = _mainWindow->findChildren(); + //nlinfo(QString("%1 %2").arg(QString::number((int)this,16)). + // arg(QString::number((int)_mainWindow,16)). + // toStdString().c_str()); + QTabBar *tb = 0; + Q_FOREACH(QTabBar *tabBar, tabList) + { + if (tabBar->parent() != this) + continue; + //nlinfo(QString("%1 %2 %3 %4").arg(tabBar->objectName()). + // arg(QString::number((int)tabBar,16)). + // arg(QString::number((int)tabBar->parentWidget(),16)). + // arg(QString::number((int)tabBar->parent(),16)). // toStdString().c_str()); - _currentView = dlg; - setWindowTitle("Qt Georges Editor - " + tb->tabText(index)); - _saveAction->setEnabled(dlg->modified()); + for (int i = 0; i < tabBar->count(); i++) + { + QString currentTab = tabBar->tabText(i); + //nlinfo(currentTab.toStdString().c_str()); + } + tb = tabBar; + } + return tb; + } + + void CMainWindow::tabChanged(int index) + { + if (index == -1) + { + setWindowTitle("Qt Georges Editor"); + return; + } + + QTabBar *tb = getTabBar(); + //nlinfo(QString("%1").arg(index).toStdString().c_str()); + + Q_FOREACH(CGeorgesTreeViewDialog* dlg, _treeViewList) + { + if (dlg->windowTitle() == tb->tabText(index)) + { + //nlinfo(QString("%1 modified %2").arg(tb->tabText(index)). + // arg(dlg->modified()). + // toStdString().c_str()); + _currentView = dlg; + setWindowTitle("Qt Georges Editor - " + tb->tabText(index)); + _saveAction->setEnabled(dlg->modified()); + } } } -} - void CMainWindow::openRecentFile() - { - QAction *action = qobject_cast(sender()); - if (action) - loadFile(action->data().toString()); - } + void CMainWindow::openRecentFile() + { + QAction *action = qobject_cast(sender()); + if (action) + loadFile(action->data().toString()); + } - void CMainWindow::setCurrentFile(const QString &fileName) - { - //curFile = fileName; - //setWindowFilePath(curFile); + void CMainWindow::setCurrentFile(const QString &fileName) + { + //curFile = fileName; + //setWindowFilePath(curFile); - QSettings settings("georges_editor_qt.ini", QSettings::IniFormat); - settings.beginGroup("RecentFileList"); - QStringList files = settings.value("List").toStringList(); - settings.endGroup(); + QSettings settings("georges_editor_qt.ini", QSettings::IniFormat); + settings.beginGroup("RecentFileList"); + QStringList files = settings.value("List").toStringList(); + settings.endGroup(); - files.removeAll(fileName); - files.prepend(fileName); - while (files.size() > MaxRecentFiles) - files.removeLast(); + files.removeAll(fileName); + files.prepend(fileName); + while (files.size() > MaxRecentFiles) + files.removeLast(); - settings.beginGroup("RecentFileList"); - settings.setValue("List",files); - settings.endGroup(); + settings.beginGroup("RecentFileList"); + settings.setValue("List",files); + settings.endGroup(); - Q_FOREACH (QWidget *widget, QApplication::topLevelWidgets()) { - CMainWindow *mainWin = qobject_cast(widget); - if (mainWin) - mainWin->updateRecentFileActions(); - } - } + Q_FOREACH (QWidget *widget, QApplication::topLevelWidgets()) + { + CMainWindow *mainWin = qobject_cast(widget); + if (mainWin) + mainWin->updateRecentFileActions(); + } + } - void CMainWindow::updateRecentFileActions() - { - QSettings settings("georges_editor_qt.ini", QSettings::IniFormat); - settings.beginGroup("RecentFileList"); - QStringList files = settings.value("List").toStringList(); - settings.endGroup(); - int numRecentFiles = qMin(files.size(), (int)MaxRecentFiles); + void CMainWindow::updateRecentFileActions() + { + QSettings settings("georges_editor_qt.ini", QSettings::IniFormat); + settings.beginGroup("RecentFileList"); + QStringList files = settings.value("List").toStringList(); + settings.endGroup(); + int numRecentFiles = qMin(files.size(), (int)MaxRecentFiles); - for (int i = 0; i < numRecentFiles; ++i) { - QString text = tr("&%1 %2").arg(i + 1).arg(QFileInfo(files[i]).fileName()); - recentFileActs[i]->setText(text); - recentFileActs[i]->setData(files[i]); - recentFileActs[i]->setVisible(true); - } - for (int j = numRecentFiles; j < MaxRecentFiles; ++j) - recentFileActs[j]->setVisible(false); + for (int i = 0; i < numRecentFiles; ++i) + { + QString text = tr("&%1 %2").arg(i + 1).arg(QFileInfo(files[i]).fileName()); + recentFileActs[i]->setText(text); + recentFileActs[i]->setData(files[i]); + recentFileActs[i]->setVisible(true); + } + for (int j = numRecentFiles; j < MaxRecentFiles; ++j) + recentFileActs[j]->setVisible(false); - _separatorAction->setVisible(numRecentFiles > 0); - } + _separatorAction->setVisible(numRecentFiles > 0); + } - void CMainWindow::loadFile(const QString &fileName) - { - /*QFile file(fileName); - if (!file.open(QFile::ReadOnly | QFile::Text)) { - QMessageBox::warning(this, tr("Recent Files"), - tr("Cannot read file %1:\n%2.") - .arg(fileName) - .arg(file.errorString())); - return; - } + void CMainWindow::loadFile(const QString &fileName) + { + /*QFile file(fileName); + if (!file.open(QFile::ReadOnly | QFile::Text)) { + QMessageBox::warning(this, tr("Recent Files"), + tr("Cannot read file %1:\n%2.") + .arg(fileName) + .arg(file.errorString())); + return; + } - QTextStream in(&file); - QApplication::setOverrideCursor(Qt::WaitCursor); - textEdit->setPlainText(in.readAll()); - QApplication::restoreOverrideCursor();*/ + QTextStream in(&file); + QApplication::setOverrideCursor(Qt::WaitCursor); + textEdit->setPlainText(in.readAll()); + QApplication::restoreOverrideCursor();*/ + + openTreeView(fileName); + setCurrentFile(fileName); + //statusBar()->showMessage(tr("File loaded"), 2000); + } - openTreeView(fileName); - setCurrentFile(fileName); - //statusBar()->showMessage(tr("File loaded"), 2000); - } } /* namespace NLQT */ /* end of file */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/main_window.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/main_window.h index fa616e7bb..e02577894 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/main_window.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/main_window.h @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ @@ -33,89 +33,90 @@ // Project includes -namespace NLMISC { +namespace NLMISC +{ class CConfigFile; } -namespace NLQT { +namespace NLQT +{ class CGeorgesLogDialog; class CObjectViewerDialog; class CGeorgesDirTreeDialog; class CGeorgesTreeViewDialog; - -class CMainWindow : public QMainWindow -{ - Q_OBJECT + class CMainWindow : public QMainWindow + { + Q_OBJECT -public: - CMainWindow(QWidget *parent = 0); - ~CMainWindow(); + public: + CMainWindow(QWidget *parent = 0); + ~CMainWindow(); - CGeorgesTreeViewDialog* getEmptyView() { return _emptyView;} - QList& getTreeViewList() { return _treeViewList; } - QTabBar* getTabBar(); - void createEmptyView(); - -private Q_SLOTS: - void open(); - void create(); - void save(); - void settings(); - void about(); - void updateStatusBar(); - void openTreeView(QString); - void tabChanged(int); - void openRecentFile(); - -private: - void createActions(); - void createMenus(); - void createToolBars(); - void createStatusBar(); - void createDialogs(); + CGeorgesTreeViewDialog* getEmptyView() { return _emptyView;} + QList& getTreeViewList() { return _treeViewList; } + QTabBar* getTabBar(); + void createEmptyView(); - void loadFile(const QString &fileName); - void updateRecentFileActions(); - void setCurrentFile(const QString &fileName); - - void cfcbQtStyle(NLMISC::CConfigFile::CVar &var); - void cfcbQtPalette(NLMISC::CConfigFile::CVar &var); - - CGeorgesLogDialog *_GeorgesLogDialog; - CObjectViewerDialog *_ObjectViewerDialog; - CGeorgesDirTreeDialog *_GeorgesDirTreeDialog; - QList _treeViewList; - CGeorgesTreeViewDialog *_emptyView; - CGeorgesTreeViewDialog *_currentView; - - QPalette _originalPalette; + private Q_SLOTS: + void open(); + void create(); + void save(); + void settings(); + void about(); + void updateStatusBar(); + void openTreeView(QString); + void tabChanged(int); + void openRecentFile(); - QTimer *_statusBarTimer; + private: + void createActions(); + void createMenus(); + void createToolBars(); + void createStatusBar(); + void createDialogs(); - QMenu *_fileMenu; - QMenu *_viewMenu; - QMenu *_toolsMenu; - QMenu *_helpMenu; - QToolBar *_fileToolBar; - QToolBar *_editToolBar; - QToolBar *_toolsBar; - QAction *_openAction; - QAction *_createAction; - QAction *_saveAction; - QAction *_exitAction; - QAction *_setBackColorAction; - QAction *_settingsAction; - QAction *_aboutAction; - QAction *_aboutQtAction; - QAction *_separatorAction; + void loadFile(const QString &fileName); + void updateRecentFileActions(); + void setCurrentFile(const QString &fileName); + + void cfcbQtStyle(NLMISC::CConfigFile::CVar &var); + void cfcbQtPalette(NLMISC::CConfigFile::CVar &var); + + CGeorgesLogDialog *_GeorgesLogDialog; + CObjectViewerDialog *_ObjectViewerDialog; + CGeorgesDirTreeDialog *_GeorgesDirTreeDialog; + QList _treeViewList; + CGeorgesTreeViewDialog *_emptyView; + CGeorgesTreeViewDialog *_currentView; + + QPalette _originalPalette; + + QTimer *_statusBarTimer; + + QMenu *_fileMenu; + QMenu *_viewMenu; + QMenu *_toolsMenu; + QMenu *_helpMenu; + QToolBar *_fileToolBar; + QToolBar *_editToolBar; + QToolBar *_toolsBar; + QAction *_openAction; + QAction *_createAction; + QAction *_saveAction; + QAction *_exitAction; + QAction *_setBackColorAction; + QAction *_settingsAction; + QAction *_aboutAction; + QAction *_aboutQtAction; + QAction *_separatorAction; - enum { MaxRecentFiles = 5 }; - QAction *recentFileActs[MaxRecentFiles]; + enum { MaxRecentFiles = 5 }; + QAction *recentFileActs[MaxRecentFiles]; -};/* class CMainWindow */ + };/* class CMainWindow */ } /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.cpp index a819d09b3..44e8b2e8d 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.cpp @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "object_viewer.h" @@ -49,363 +49,364 @@ using namespace std; using namespace NLMISC; using namespace NL3D; -namespace NLQT { - -CObjectViewer::CObjectViewer() - : _Driver(NULL), - _phi(0), _psi(0),_dist(20), - _CurrentInstance("") -{ - -} - -CObjectViewer::~CObjectViewer() +namespace NLQT { -} - -void CObjectViewer::reinit(nlWindow wnd, uint16 w, uint16 h) -{ - nldebug("CObjectViewert::reinit"); - - //release(); - //init(wnd, w, h); - _Driver->setDisplay(wnd, NL3D::UDriver::CMode(w, h, 32)); -} - -void CObjectViewer::init(nlWindow wnd, uint16 w, uint16 h) -{ - //H_AUTO2 - nldebug("CObjectViewer::init"); - - // load and set remap extensions from config - //Modules::config().configRemapExtensions(); - - // load and set search paths from config - //Modules::config().configSearchPaths(); - - // set background color from config - Modules::config().setAndCallback("BackgroundColor", CConfigCallback(this, &CObjectViewer::cfcbBackgroundColor)); - - // set graphics driver from config - Modules::config().setAndCallback("GraphicsDriver",CConfigCallback(this,&CObjectViewer::cfcbGraphicsDriver)); - - // create the driver - nlassert(!_Driver); - - _Driver = UDriver::createDriver(NULL, _Direct3D, NULL); - nlassert(_Driver); - - // initialize the window with config file values - _Driver->setDisplay(wnd, NL3D::UDriver::CMode(w, h, 32)); - - _Light = ULight::createLight(); - - // set mode of the light - _Light->setMode(ULight::DirectionalLight); - - // set position of the light - _Light->setPosition(CVector(-20.f, 30.f, 10.f)); - - // white light - _Light->setAmbiant(CRGBA(255, 255, 255)); - - // set and enable the light - _Driver->setLight(0, *_Light); - _Driver->enableLight(0); - - // Create a scene - _Scene = _Driver->createScene(true); - - _PlayListManager = _Scene->createPlayListManager(); - - _Scene->enableLightingSystem(true); - - // create the camera - UCamera camera = _Scene->getCam(); - - camera.setTransformMode (UTransformable::DirectMatrix); - - setSizeViewport(w, h); - - // camera will look at entities - updateCamera(0,0,0); - - NLMISC::CVector hotSpot=NLMISC::CVector(0,0,0); - - _MouseListener = _Driver->create3dMouseListener(); - _MouseListener->setMatrix(Modules::objView().getScene()->getCam().getMatrix()); - _MouseListener->setFrustrum(Modules::objView().getScene()->getCam().getFrustum()); - _MouseListener->setHotSpot(hotSpot); - _MouseListener->setMouseMode(U3dMouseListener::edit3d); -} - -void CObjectViewer::release() -{ - //H_AUTO2 - nldebug("CObjectViewer::release"); - - Modules::config().dropCallback("BackgroundColor"); - Modules::config().dropCallback("GraphicsDriver"); - - _Driver->delete3dMouseListener(_MouseListener); - - // delete all entities - deleteEntities(); - - _Scene->deletePlayListManager(_PlayListManager); - - // delete the scene - _Driver->deleteScene(_Scene); - - // delete the light - delete _Light; - - // release driver - nlassert(_Driver); - _Driver->release(); - delete _Driver; - _Driver = NULL; -} - -void CObjectViewer::updateInput() -{ - _Driver->EventServer.pump(); - - // New matrix from camera - _Scene->getCam().setTransformMode(NL3D::UTransformable::DirectMatrix); - _Scene->getCam().setMatrix (_MouseListener->getViewMatrix()); -} - -void CObjectViewer::renderDriver() -{ - _Driver->clearBuffers(_BackgroundColor); -} - -void CObjectViewer::renderScene() -{ - // render the scene - _Scene->render(); -} - -void CObjectViewer::renderDebug2D() -{ -} - -void CObjectViewer::saveScreenshot(const std::string &nameFile, bool jpg, bool png, bool tga) -{ - //H_AUTO2 - - // FIXME: create screenshot path if it doesn't exist! - - // empty bitmap - CBitmap bitmap; - // copy the driver buffer to the bitmap - _Driver->getBuffer(bitmap); - // create the file name - string filename = std::string("./") + nameFile; - // write the bitmap as a jpg, png or tga to the file - if (jpg) + CObjectViewer::CObjectViewer() + : _Driver(NULL), + _phi(0), _psi(0),_dist(20), + _CurrentInstance("") { - string newfilename = CFile::findNewFile(filename + ".jpg"); - COFile outputFile(newfilename); - bitmap.writeJPG(outputFile, 100); - nlinfo("Screenshot '%s' saved", newfilename.c_str()); - } - if (png) - { - string newfilename = CFile::findNewFile(filename + ".png"); - COFile outputFile(newfilename); - bitmap.writePNG(outputFile, 24); - nlinfo("Screenshot '%s' saved", newfilename.c_str()); - } - if (tga) - { - string newfilename = CFile::findNewFile(filename + ".tga"); - COFile outputFile(newfilename); - bitmap.writeTGA(outputFile, 24, false); - nlinfo("Screenshot '%s' saved", newfilename.c_str()); - } -} -bool CObjectViewer::loadMesh(const std::string &meshFileName, const std::string &skelFileName) -{ - CPath::addSearchPath(CFile::getPath(meshFileName), false, false); - - // create instance of the mesh character - UInstance Entity = _Scene->createInstance(meshFileName); - - USkeleton Skeleton = _Scene->createSkeleton(skelFileName); - - // if we can't create entity, skip it - if (Entity.empty()) return false; - - // create a new entity - EIT eit = (_Entities.insert (make_pair (CFile::getFilenameWithoutExtension(meshFileName), CEntity()))).first; - CEntity &entity = (*eit).second; - - // set the entity up - entity._Name = CFile::getFilenameWithoutExtension(meshFileName); - entity._Instance = Entity; - if (!Skeleton.empty()) - { - entity._Skeleton = Skeleton; - entity._Skeleton.bindSkin (entity._Instance); - } - entity._AnimationSet = _Driver->createAnimationSet(false); - entity._PlayList = _PlayListManager->createPlayList(entity._AnimationSet); - return true; -} - -void CObjectViewer::resetScene() -{ - deleteEntities(); - - // Reset camera. - //.. - - // to load files with the same name but located in different directories - //CPath::clearMap(); - - // load and set search paths from config - //Modules::config().configSearchPaths(); - - _CurrentInstance = ""; - - nlinfo("Scene cleared"); -} - -void CObjectViewer::updateCamera(float deltaPsi, float deltaPhi, float deltaDist) -{ - _phi += deltaPhi; - _psi += deltaPsi; - _dist += deltaDist; - - if(_phi < -NLMISC::Pi/2) _phi -= deltaPhi; - if(_phi > NLMISC::Pi/2) _phi -= deltaPsi; - if (_dist < 1) _dist = 1; - - NLMISC::CQuat q0,q1,q2; - NLMISC::CVector up(0,0,1); - NLMISC::CVector v(0,0,1); - - q0.setAngleAxis(v,_psi); - v = NLMISC::CVector(0,1,0); - q1.setAngleAxis(v,_phi); - q2 = q0 * q1; - NLMISC::CMatrix m0; - m0.setRot(q2); - NLMISC::CVector camera = m0 * NLMISC::CVector(_dist,0,0); - - _Scene->getCam().lookAt(camera, up); -} - -void CObjectViewer::setBackgroundColor(NLMISC::CRGBA backgroundColor) -{ - _BackgroundColor = backgroundColor; - - // config file variable changes - 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.B, 2); -} - -void CObjectViewer::setGraphicsDriver(bool Direct3D) -{ - _Direct3D = Direct3D; - - if (_Direct3D) Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("Direct3D"); - else Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("OpenGL"); -} - -void CObjectViewer::setSizeViewport(uint16 w, uint16 h) -{ - _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) -{ - //_Scene->getCam().setPerspective((float)Pi/2.f, (float)w/h, 0.1f, 1000); - _Scene->getCam().getFrustum(left, right, bottom, top, znear, zfar); -} - -void CObjectViewer::setCurrentObject(const std::string &name) -{ - if ((_Entities.count(name) != 0) || ( name.empty() )) _CurrentInstance = name; - else nlerror ("Entity %s not found", name.c_str()); - nlinfo("set current entity %s", _CurrentInstance.c_str()); -} - -CEntity& CObjectViewer::getEntity(const std::string &name) -{ - if ( _Entities.count(name) == 0) nlerror("Entity %s not found", name.c_str()); - EIT eit = _Entities.find (name); - return (*eit).second; -} - -void CObjectViewer::getListObjects(std::vector &listObj) -{ - listObj.clear(); - for (EIT eit = _Entities.begin(); eit != _Entities.end(); ++eit) - listObj.push_back((*eit).second._Name); -} - -void CObjectViewer::deleteEntity(CEntity &entity) -{ - if (entity._PlayList != NULL) - { - _PlayListManager->deletePlayList (entity._PlayList); - entity._PlayList = NULL; } - if (entity._AnimationSet != NULL) + CObjectViewer::~CObjectViewer() { - _Driver->deleteAnimationSet(entity._AnimationSet); - entity._AnimationSet = NULL; + } - if (!entity._Skeleton.empty()) + void CObjectViewer::reinit(nlWindow wnd, uint16 w, uint16 h) { - entity._Skeleton.detachSkeletonSon(entity._Instance); - - _Scene->deleteSkeleton(entity._Skeleton); - entity._Skeleton = NULL; + nldebug("CObjectViewert::reinit"); + + //release(); + //init(wnd, w, h); + _Driver->setDisplay(wnd, NL3D::UDriver::CMode(w, h, 32)); } - if (!entity._Instance.empty()) + void CObjectViewer::init(nlWindow wnd, uint16 w, uint16 h) { - _Scene->deleteInstance(entity._Instance); - entity._Instance = NULL; - } -} + //H_AUTO2 + nldebug("CObjectViewer::init"); -void CObjectViewer::deleteEntities() -{ - for (EIT eit = _Entities.begin(); eit != _Entities.end(); ++eit) + // load and set remap extensions from config + //Modules::config().configRemapExtensions(); + + // load and set search paths from config + //Modules::config().configSearchPaths(); + + // set background color from config + Modules::config().setAndCallback("BackgroundColor", CConfigCallback(this, &CObjectViewer::cfcbBackgroundColor)); + + // set graphics driver from config + Modules::config().setAndCallback("GraphicsDriver",CConfigCallback(this,&CObjectViewer::cfcbGraphicsDriver)); + + // create the driver + nlassert(!_Driver); + + _Driver = UDriver::createDriver(NULL, _Direct3D, NULL); + nlassert(_Driver); + + // initialize the window with config file values + _Driver->setDisplay(wnd, NL3D::UDriver::CMode(w, h, 32)); + + _Light = ULight::createLight(); + + // set mode of the light + _Light->setMode(ULight::DirectionalLight); + + // set position of the light + _Light->setPosition(CVector(-20.f, 30.f, 10.f)); + + // white light + _Light->setAmbiant(CRGBA(255, 255, 255)); + + // set and enable the light + _Driver->setLight(0, *_Light); + _Driver->enableLight(0); + + // Create a scene + _Scene = _Driver->createScene(true); + + _PlayListManager = _Scene->createPlayListManager(); + + _Scene->enableLightingSystem(true); + + // create the camera + UCamera camera = _Scene->getCam(); + + camera.setTransformMode (UTransformable::DirectMatrix); + + setSizeViewport(w, h); + + // camera will look at entities + updateCamera(0,0,0); + + NLMISC::CVector hotSpot=NLMISC::CVector(0,0,0); + + _MouseListener = _Driver->create3dMouseListener(); + _MouseListener->setMatrix(Modules::objView().getScene()->getCam().getMatrix()); + _MouseListener->setFrustrum(Modules::objView().getScene()->getCam().getFrustum()); + _MouseListener->setHotSpot(hotSpot); + _MouseListener->setMouseMode(U3dMouseListener::edit3d); + } + + void CObjectViewer::release() { + //H_AUTO2 + nldebug("CObjectViewer::release"); + + Modules::config().dropCallback("BackgroundColor"); + Modules::config().dropCallback("GraphicsDriver"); + + _Driver->delete3dMouseListener(_MouseListener); + + // delete all entities + deleteEntities(); + + _Scene->deletePlayListManager(_PlayListManager); + + // delete the scene + _Driver->deleteScene(_Scene); + + // delete the light + delete _Light; + + // release driver + nlassert(_Driver); + _Driver->release(); + delete _Driver; + _Driver = NULL; + } + + void CObjectViewer::updateInput() + { + _Driver->EventServer.pump(); + + // New matrix from camera + _Scene->getCam().setTransformMode(NL3D::UTransformable::DirectMatrix); + _Scene->getCam().setMatrix (_MouseListener->getViewMatrix()); + } + + void CObjectViewer::renderDriver() + { + _Driver->clearBuffers(_BackgroundColor); + } + + void CObjectViewer::renderScene() + { + // render the scene + _Scene->render(); + } + + void CObjectViewer::renderDebug2D() + { + } + + void CObjectViewer::saveScreenshot(const std::string &nameFile, bool jpg, bool png, bool tga) + { + //H_AUTO2 + + // FIXME: create screenshot path if it doesn't exist! + + // empty bitmap + CBitmap bitmap; + // copy the driver buffer to the bitmap + _Driver->getBuffer(bitmap); + // create the file name + string filename = std::string("./") + nameFile; + // write the bitmap as a jpg, png or tga to the file + if (jpg) + { + string newfilename = CFile::findNewFile(filename + ".jpg"); + COFile outputFile(newfilename); + bitmap.writeJPG(outputFile, 100); + nlinfo("Screenshot '%s' saved", newfilename.c_str()); + } + if (png) + { + string newfilename = CFile::findNewFile(filename + ".png"); + COFile outputFile(newfilename); + bitmap.writePNG(outputFile, 24); + nlinfo("Screenshot '%s' saved", newfilename.c_str()); + } + if (tga) + { + string newfilename = CFile::findNewFile(filename + ".tga"); + COFile outputFile(newfilename); + bitmap.writeTGA(outputFile, 24, false); + nlinfo("Screenshot '%s' saved", newfilename.c_str()); + } + } + + bool CObjectViewer::loadMesh(const std::string &meshFileName, const std::string &skelFileName) + { + CPath::addSearchPath(CFile::getPath(meshFileName), false, false); + + // create instance of the mesh character + UInstance Entity = _Scene->createInstance(meshFileName); + + USkeleton Skeleton = _Scene->createSkeleton(skelFileName); + + // if we can't create entity, skip it + if (Entity.empty()) return false; + + // create a new entity + EIT eit = (_Entities.insert (make_pair (CFile::getFilenameWithoutExtension(meshFileName), CEntity()))).first; CEntity &entity = (*eit).second; - deleteEntity(entity); + + // set the entity up + entity._Name = CFile::getFilenameWithoutExtension(meshFileName); + entity._Instance = Entity; + if (!Skeleton.empty()) + { + entity._Skeleton = Skeleton; + entity._Skeleton.bindSkin (entity._Instance); + } + entity._AnimationSet = _Driver->createAnimationSet(false); + entity._PlayList = _PlayListManager->createPlayList(entity._AnimationSet); + return true; } - _Entities.clear(); -} -void CObjectViewer::cfcbBackgroundColor(NLMISC::CConfigFile::CVar &var) -{ - // read variable from config file - _BackgroundColor = CRGBA(var.asInt(0), var.asInt(1), var.asInt(2)); -} + void CObjectViewer::resetScene() + { + deleteEntities(); + + // Reset camera. + //.. + + // to load files with the same name but located in different directories + //CPath::clearMap(); + + // load and set search paths from config + //Modules::config().configSearchPaths(); + + _CurrentInstance = ""; + + nlinfo("Scene cleared"); + } + + void CObjectViewer::updateCamera(float deltaPsi, float deltaPhi, float deltaDist) + { + _phi += deltaPhi; + _psi += deltaPsi; + _dist += deltaDist; + + if(_phi < -NLMISC::Pi/2) _phi -= deltaPhi; + if(_phi > NLMISC::Pi/2) _phi -= deltaPsi; + if (_dist < 1) _dist = 1; + + NLMISC::CQuat q0,q1,q2; + NLMISC::CVector up(0,0,1); + NLMISC::CVector v(0,0,1); + + q0.setAngleAxis(v,_psi); + v = NLMISC::CVector(0,1,0); + q1.setAngleAxis(v,_phi); + q2 = q0 * q1; + NLMISC::CMatrix m0; + m0.setRot(q2); + NLMISC::CVector camera = m0 * NLMISC::CVector(_dist,0,0); + + _Scene->getCam().lookAt(camera, up); + } + + void CObjectViewer::setBackgroundColor(NLMISC::CRGBA backgroundColor) + { + _BackgroundColor = backgroundColor; + + // config file variable changes + 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.B, 2); + } + + void CObjectViewer::setGraphicsDriver(bool Direct3D) + { + _Direct3D = Direct3D; + + if (_Direct3D) Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("Direct3D"); + else Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("OpenGL"); + } + + void CObjectViewer::setSizeViewport(uint16 w, uint16 h) + { + _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) + { + //_Scene->getCam().setPerspective((float)Pi/2.f, (float)w/h, 0.1f, 1000); + _Scene->getCam().getFrustum(left, right, bottom, top, znear, zfar); + } + + void CObjectViewer::setCurrentObject(const std::string &name) + { + if ((_Entities.count(name) != 0) || ( name.empty() )) _CurrentInstance = name; + else nlerror ("Entity %s not found", name.c_str()); + nlinfo("set current entity %s", _CurrentInstance.c_str()); + } + + CEntity& CObjectViewer::getEntity(const std::string &name) + { + if ( _Entities.count(name) == 0) nlerror("Entity %s not found", name.c_str()); + EIT eit = _Entities.find (name); + return (*eit).second; + } + + void CObjectViewer::getListObjects(std::vector &listObj) + { + listObj.clear(); + for (EIT eit = _Entities.begin(); eit != _Entities.end(); ++eit) + listObj.push_back((*eit).second._Name); + } + + void CObjectViewer::deleteEntity(CEntity &entity) + { + if (entity._PlayList != NULL) + { + _PlayListManager->deletePlayList (entity._PlayList); + entity._PlayList = NULL; + } + + if (entity._AnimationSet != NULL) + { + _Driver->deleteAnimationSet(entity._AnimationSet); + entity._AnimationSet = NULL; + } + + if (!entity._Skeleton.empty()) + { + entity._Skeleton.detachSkeletonSon(entity._Instance); + + _Scene->deleteSkeleton(entity._Skeleton); + entity._Skeleton = NULL; + } + + if (!entity._Instance.empty()) + { + _Scene->deleteInstance(entity._Instance); + entity._Instance = NULL; + } + } + + void CObjectViewer::deleteEntities() + { + for (EIT eit = _Entities.begin(); eit != _Entities.end(); ++eit) + { + CEntity &entity = (*eit).second; + deleteEntity(entity); + } + _Entities.clear(); + } + + void CObjectViewer::cfcbBackgroundColor(NLMISC::CConfigFile::CVar &var) + { + // read variable from config file + _BackgroundColor = CRGBA(var.asInt(0), var.asInt(1), var.asInt(2)); + } + + void CObjectViewer::cfcbGraphicsDriver(NLMISC::CConfigFile::CVar &var) + { + // Choose driver opengl to work correctly under Linux example + _Direct3D = false; //_Driver = OpenGL; -void CObjectViewer::cfcbGraphicsDriver(NLMISC::CConfigFile::CVar &var) -{ - // Choose driver opengl to work correctly under Linux example - _Direct3D = false; //_Driver = OpenGL; - #ifdef NL_OS_WINDOWS - std::string driver = var.asString(); - if (driver == "Direct3D") _Direct3D = true; //m_Driver = Direct3D; - else if (driver == "OpenGL") _Direct3D = false; //m_Driver = OpenGL; - else nlwarning("Invalid driver specified, defaulting to OpenGL"); + std::string driver = var.asString(); + if (driver == "Direct3D") _Direct3D = true; //m_Driver = Direct3D; + else if (driver == "OpenGL") _Direct3D = false; //m_Driver = OpenGL; + else nlwarning("Invalid driver specified, defaulting to OpenGL"); #endif -} + } } /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.h index 6da05a64c..2a49f4862 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.h @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifndef OBJECT_VIEWER_H @@ -33,7 +33,8 @@ // Project includes #include "entity.h" -namespace NL3D { +namespace NL3D +{ class UDriver; class UScene; class ULight; @@ -48,143 +49,144 @@ namespace NL3D { namespace NLQT @brief namespace NLQT */ -namespace NLQT { - -/** -@class CObjectViewer -A CObjectViewer class loading and viewing shape, particle system files. -*/ -class CObjectViewer +namespace NLQT { -public: - /// Default constructor. - CObjectViewer(); - - virtual ~CObjectViewer(); - /// Init a driver and create scene. - /// @param wnd - handle window. - /// @param w - width window. - /// @param h - height window. - void init(nlWindow wnd, uint16 w, uint16 h); - - void reinit(nlWindow wnd, uint16 w, uint16 h); + /** + @class CObjectViewer + A CObjectViewer class loading and viewing shape, particle system files. + */ + class CObjectViewer + { + public: + /// Default constructor. + CObjectViewer(); - /// Release class. - void release(); + virtual ~CObjectViewer(); - /// Update mouse and keyboard events. And update camera matrix. - void updateInput(); - - /// Render Driver (clear all buffers and set background color). - void renderDriver(); - - /// Render current scene. - void renderScene(); - - /// Render Debug 2D (stuff for dev). - void renderDebug2D(); + /// Init a driver and create scene. + /// @param wnd - handle window. + /// @param w - width window. + /// @param h - height window. + void init(nlWindow wnd, uint16 w, uint16 h); - /// Make a screenshot of the current scene and save. - void saveScreenshot(const std::string &nameFile, bool jpg, bool png, bool tga); - - /// Load a mesh or particle system and add to current scene. - /// @param meshFileName - name loading shape or ps file. - /// @param skelFileName - name loading skeletin file. - /// @return true if file have been loaded, false if file have not been loaded. - bool loadMesh (const std::string &meshFileName, const std::string &skelFileName); - - /// Reset current scene. - void resetScene(); - - /// Update the navigation camera. - /// @param deltaPsi - delta angle horizontal (radians). - /// @param deltaPhi - delta angle vertical (radians). - /// @param deltaDist - delta distance. - void updateCamera(float deltaPsi, float deltaPhi, float deltaDist); - - /// Set the background color. - /// @param backgroundColor - background color. - void setBackgroundColor(NLMISC::CRGBA backgroundColor); - - /// Set type driver. - /// @param Direct3D - type driver (true - Direct3D) or (false -OpenGL) - void setGraphicsDriver(bool Direct3D); - - /// Set size viewport for correct set perspective - /// @param w - width window. - /// @param h - height window. - void setSizeViewport(uint16 w, uint16 h); - void getSizeViewport(float &left, float &right, float &bottom, float &top, float &znear, float &zfar); - - /// Select instance from the scene - /// @param name - name instance, "" if no instance edited - void setCurrentObject(const std::string &name); - - /// Get current instance from the scene - /// @return name current instance, "" if no instance edited - const std::string& getCurrentObject() { return _CurrentInstance; } - - /// Get entity from the scene - /// @return ref Entity - CEntity& getEntity(const std::string &name); - - /// Get full list instances from the scene - /// @param listObj - ref of return list instances - void getListObjects(std::vector &listObj); - - /// Get value background color. - /// @return background color. - NLMISC::CRGBA getBackgroundColor() { return _BackgroundColor; } - - /// Get type driver. - /// @return true if have used Direct3D driver, false OpenGL driver. - inline bool getDirect3D() { return _Direct3D; } + void reinit(nlWindow wnd, uint16 w, uint16 h); - /// Get a pointer to the driver. - /// @return pointer to the driver. - inline NL3D::UDriver *getDriver() { return _Driver; } - - /// Get a pointer to the scene. - /// @return pointer to the scene. - inline NL3D::UScene *getScene() { return _Scene; } - - /// Get a manager of playlist - /// @return pointer to the UPlayListManager - inline NL3D::UPlayListManager *getPlayListManager() { return _PlayListManager; } - -private: - void deleteEntity (CEntity &entity); + /// Release class. + void release(); - /// Delete all entities - void deleteEntities(); - - /// Load background color from config file, intended for CConfiguration. - void cfcbBackgroundColor(NLMISC::CConfigFile::CVar &var); - void cfcbGraphicsDriver(NLMISC::CConfigFile::CVar &var); - - NLMISC::CRGBA _BackgroundColor; + /// Update mouse and keyboard events. And update camera matrix. + void updateInput(); - NL3D::UDriver *_Driver; - NL3D::UScene *_Scene; - NL3D::UPlayListManager *_PlayListManager; - NL3D::ULight *_Light; - NL3D::UCamera *_Camera; - NL3D::U3dMouseListener *_MouseListener; + /// Render Driver (clear all buffers and set background color). + void renderDriver(); - // The entities storage - CEntities _Entities; - - /// Camera parameters. - float _phi, _psi, _dist; - - bool _Direct3D; - - std::string _CurrentInstance; + /// Render current scene. + void renderScene(); - // a temporary solution, and later remove - friend class CAnimationSetDialog; -};/* class CObjectViewer */ + /// Render Debug 2D (stuff for dev). + void renderDebug2D(); + + /// Make a screenshot of the current scene and save. + void saveScreenshot(const std::string &nameFile, bool jpg, bool png, bool tga); + + /// Load a mesh or particle system and add to current scene. + /// @param meshFileName - name loading shape or ps file. + /// @param skelFileName - name loading skeletin file. + /// @return true if file have been loaded, false if file have not been loaded. + bool loadMesh (const std::string &meshFileName, const std::string &skelFileName); + + /// Reset current scene. + void resetScene(); + + /// Update the navigation camera. + /// @param deltaPsi - delta angle horizontal (radians). + /// @param deltaPhi - delta angle vertical (radians). + /// @param deltaDist - delta distance. + void updateCamera(float deltaPsi, float deltaPhi, float deltaDist); + + /// Set the background color. + /// @param backgroundColor - background color. + void setBackgroundColor(NLMISC::CRGBA backgroundColor); + + /// Set type driver. + /// @param Direct3D - type driver (true - Direct3D) or (false -OpenGL) + void setGraphicsDriver(bool Direct3D); + + /// Set size viewport for correct set perspective + /// @param w - width window. + /// @param h - height window. + void setSizeViewport(uint16 w, uint16 h); + void getSizeViewport(float &left, float &right, float &bottom, float &top, float &znear, float &zfar); + + /// Select instance from the scene + /// @param name - name instance, "" if no instance edited + void setCurrentObject(const std::string &name); + + /// Get current instance from the scene + /// @return name current instance, "" if no instance edited + const std::string& getCurrentObject() { return _CurrentInstance; } + + /// Get entity from the scene + /// @return ref Entity + CEntity& getEntity(const std::string &name); + + /// Get full list instances from the scene + /// @param listObj - ref of return list instances + void getListObjects(std::vector &listObj); + + /// Get value background color. + /// @return background color. + NLMISC::CRGBA getBackgroundColor() { return _BackgroundColor; } + + /// Get type driver. + /// @return true if have used Direct3D driver, false OpenGL driver. + inline bool getDirect3D() { return _Direct3D; } + + /// Get a pointer to the driver. + /// @return pointer to the driver. + inline NL3D::UDriver *getDriver() { return _Driver; } + + /// Get a pointer to the scene. + /// @return pointer to the scene. + inline NL3D::UScene *getScene() { return _Scene; } + + /// Get a manager of playlist + /// @return pointer to the UPlayListManager + inline NL3D::UPlayListManager *getPlayListManager() { return _PlayListManager; } + + private: + void deleteEntity (CEntity &entity); + + /// Delete all entities + void deleteEntities(); + + /// Load background color from config file, intended for CConfiguration. + void cfcbBackgroundColor(NLMISC::CConfigFile::CVar &var); + void cfcbGraphicsDriver(NLMISC::CConfigFile::CVar &var); + + NLMISC::CRGBA _BackgroundColor; + + NL3D::UDriver *_Driver; + NL3D::UScene *_Scene; + NL3D::UPlayListManager *_PlayListManager; + NL3D::ULight *_Light; + NL3D::UCamera *_Camera; + NL3D::U3dMouseListener *_MouseListener; + + // The entities storage + CEntities _Entities; + + /// Camera parameters. + float _phi, _psi, _dist; + + bool _Direct3D; + + std::string _CurrentInstance; + + // a temporary solution, and later remove + friend class CAnimationSetDialog; + };/* class CObjectViewer */ } /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.cpp index 0fb8169ca..ba3aec68b 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.cpp @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "objectviewer_dialog.h" @@ -39,370 +39,377 @@ using namespace std; using namespace NL3D; -namespace NLQT { - -CObjectViewerDialog::CObjectViewerDialog(QWidget *parent) -: _isGraphicsInitialized(false), _isGraphicsEnabled(false), QDockWidget(parent) +namespace NLQT { - _ui.setupUi(this); - //widget = new QWidget(dockWidgetContents); - //widget->setObjectName(QString::fromUtf8("widget")); - + CObjectViewerDialog::CObjectViewerDialog(QWidget *parent) + : _isGraphicsInitialized(false), _isGraphicsEnabled(false), QDockWidget(parent) + { + _ui.setupUi(this); - _nlw = new QNLWidget(_ui.dockWidgetContents); - _nlw->setObjectName(QString::fromUtf8("nlwidget")); - _ui.gridLayout->addWidget(_nlw, 0, 0, 1, 1); - //nlw->setLayout(new QGridLayout(nlw)); - //_ui.widget = nlw; - //QWidget * w = widget(); + //widget = new QWidget(dockWidgetContents); + //widget->setObjectName(QString::fromUtf8("widget")); - _isGraphicsEnabled = true; - // As a special case, a QTimer with a timeout of 0 will time out as soon as all the events in the window system's event queue have been processed. - // This can be used to do heavy work while providing a snappy user interface. - _mainTimer = new QTimer(this); - connect(_mainTimer, SIGNAL(timeout()), this, SLOT(updateRender())); - // timer->start(); // <- timeout 0 - // it's heavy on cpu, though, when no 3d driver initialized :) - _mainTimer->start(5); // 25fps -} + _nlw = new QNLWidget(_ui.dockWidgetContents); + _nlw->setObjectName(QString::fromUtf8("nlwidget")); + _ui.gridLayout->addWidget(_nlw, 0, 0, 1, 1); + //nlw->setLayout(new QGridLayout(nlw)); + //_ui.widget = nlw; + //QWidget * w = widget(); -CObjectViewerDialog::~CObjectViewerDialog() { - _mainTimer->stop(); -} + _isGraphicsEnabled = true; + + // As a special case, a QTimer with a timeout of 0 will time out as soon as all the events in the window system's event queue have been processed. + // This can be used to do heavy work while providing a snappy user interface. + _mainTimer = new QTimer(this); + connect(_mainTimer, SIGNAL(timeout()), this, SLOT(updateRender())); + // timer->start(); // <- timeout 0 + // it's heavy on cpu, though, when no 3d driver initialized :) + _mainTimer->start(5); // 25fps + } + + CObjectViewerDialog::~CObjectViewerDialog() + { + _mainTimer->stop(); + } + + void CObjectViewerDialog::init() + { + connect(this, SIGNAL(topLevelChanged(bool)), + this, SLOT(topLevelChanged(bool))); + //H_AUTO2 + nldebug("CObjectViewerDialog::init %d",_nlw->winId()); -void CObjectViewerDialog::init() -{ - connect(this, SIGNAL(topLevelChanged(bool)), - this, SLOT(topLevelChanged(bool))); - //H_AUTO2 - nldebug("CObjectViewerDialog::init %d",_nlw->winId()); - #ifdef NL_OS_UNIX - dynamic_cast(widget())->makeCurrent(); + dynamic_cast(widget())->makeCurrent(); #endif // NL_OS_UNIX - - Modules::objView().init((nlWindow)_nlw->winId(), 20, 20); - setMouseTracking(true); -} -void CObjectViewerDialog::setVisible(bool visible) -{ - // called by show() - // code assuming visible window needed to init the 3d driver - if (visible != isVisible()) - { - if (visible) - { - QDockWidget::setVisible(true); - updateInitialization(true); - } - else - { - updateInitialization(false); - QDockWidget::setVisible(false); - } + Modules::objView().init((nlWindow)_nlw->winId(), 20, 20); + setMouseTracking(true); } -} -void CObjectViewerDialog::updateInitialization(bool visible) -{ - //nldebug("CMainWindow::updateInitialization"); - bool done; - do + void CObjectViewerDialog::setVisible(bool visible) { - done = true; // set false whenever change - bool wantGraphics = _isGraphicsEnabled && visible; - // bool wantLandscape = wantGraphics && m_IsGraphicsInitialized && isLandscapeEnabled; - - // .. stuff that depends on other stuff goes on top to prioritize deinitialization - - // Landscape - // ... - - // Graphics (Driver) - if (_isGraphicsInitialized) + // called by show() + // code assuming visible window needed to init the 3d driver + if (visible != isVisible()) { - if (!wantGraphics) + if (visible) { - _isGraphicsInitialized = false; - release(); - _mainTimer->stop(); - done = false; + QDockWidget::setVisible(true); + updateInitialization(true); } - - } - else - { - if (wantGraphics) + else { - init(); - _isGraphicsInitialized = true; - _mainTimer->start(5); - done = false; + updateInitialization(false); + QDockWidget::setVisible(false); } } - + } - - } while (!done); -} - -void CObjectViewerDialog::updateRender() -{ - //nldebug("CMainWindow::updateRender"); - updateInitialization(isVisible()); - - //QModelIndex index = _dirModel->setRootPath("D:/Dev/Ryzom/code/ryzom/common/data_leveldesign/leveldesign"); - //_dirTree->setRootIndex(index); - - if (isVisible()) + void CObjectViewerDialog::updateInitialization(bool visible) { - // call all update functions - // 01. Update Utilities (configuration etc) - - // 02. Update Time (deltas) - // ... - - // 03. Update Receive (network, servertime, receive messages) - // ... - - // 04. Update Input (keyboard controls, etc) - if (_isGraphicsInitialized) - Modules::objView().updateInput(); - - // 05. Update Weather (sky, snow, wind, fog, sun) - // ... - - // 06. Update Entities (movement, do after possible tp from incoming messages etc) - // - Move other entities - // - Update self entity - // - Move bullets - // ... - - // 07. Update Landscape (async zone loading near entity) - // ... - - // 08. Update Collisions (entities) - // - Update entities - // - Update move container (swap with Update entities? todo: check code!) - // - Update bullets - // ... - - // 09. Update Animations (playlists) - // - Needs to be either before or after entities, not sure, - // there was a problem with wrong order a while ago!!! - - - //Modules::objView().updateAnimation(_AnimationDialog->getTime()); - - // 10. Update Camera (depends on entities) - // ... - - // 11. Update Interface (login, ui, etc) - // ... - - // 12. Update Sound (sound driver) - // ... - - // 13. Update Send (network, send new position etc) - // ... - - // 14. Update Debug (stuff for dev) - // ... - - if (_isGraphicsInitialized && !Modules::objView().getDriver()->isLost()) + //nldebug("CMainWindow::updateInitialization"); + bool done; + do { - // 01. Render Driver (background color) - Modules::objView().renderDriver(); // clear all buffers - - // 02. Render Sky (sky scene) - // ... - - // 04. Render Scene (entity scene) - Modules::objView().renderScene(); - - // 05. Render Effects (flare) - // ... - - // 06. Render Interface 3D (player names) + done = true; // set false whenever change + bool wantGraphics = _isGraphicsEnabled && visible; + // bool wantLandscape = wantGraphics && m_IsGraphicsInitialized && isLandscapeEnabled; + + // .. stuff that depends on other stuff goes on top to prioritize deinitialization + + // Landscape // ... - // 07. Render Debug 3D + // Graphics (Driver) + if (_isGraphicsInitialized) + { + if (!wantGraphics) + { + _isGraphicsInitialized = false; + release(); + _mainTimer->stop(); + done = false; + } + + } + else + { + if (wantGraphics) + { + init(); + _isGraphicsInitialized = true; + _mainTimer->start(5); + done = false; + } + } + + + + } while (!done); + } + + void CObjectViewerDialog::updateRender() + { + //nldebug("CMainWindow::updateRender"); + updateInitialization(isVisible()); + + //QModelIndex index = _dirModel->setRootPath("D:/Dev/Ryzom/code/ryzom/common/data_leveldesign/leveldesign"); + //_dirTree->setRootIndex(index); + + if (isVisible()) + { + // call all update functions + // 01. Update Utilities (configuration etc) + + // 02. Update Time (deltas) // ... - // 08. Render Interface 2D (chatboxes etc, optionally does have 3d) + // 03. Update Receive (network, servertime, receive messages) // ... - - // 09. Render Debug 2D (stuff for dev) - Modules::objView().renderDebug2D(); - // swap 3d buffers - Modules::objView().getDriver()->swapBuffers(); + // 04. Update Input (keyboard controls, etc) + if (_isGraphicsInitialized) + Modules::objView().updateInput(); + + // 05. Update Weather (sky, snow, wind, fog, sun) + // ... + + // 06. Update Entities (movement, do after possible tp from incoming messages etc) + // - Move other entities + // - Update self entity + // - Move bullets + // ... + + // 07. Update Landscape (async zone loading near entity) + // ... + + // 08. Update Collisions (entities) + // - Update entities + // - Update move container (swap with Update entities? todo: check code!) + // - Update bullets + // ... + + // 09. Update Animations (playlists) + // - Needs to be either before or after entities, not sure, + // there was a problem with wrong order a while ago!!! + + + //Modules::objView().updateAnimation(_AnimationDialog->getTime()); + + // 10. Update Camera (depends on entities) + // ... + + // 11. Update Interface (login, ui, etc) + // ... + + // 12. Update Sound (sound driver) + // ... + + // 13. Update Send (network, send new position etc) + // ... + + // 14. Update Debug (stuff for dev) + // ... + + if (_isGraphicsInitialized && !Modules::objView().getDriver()->isLost()) + { + // 01. Render Driver (background color) + Modules::objView().renderDriver(); // clear all buffers + + // 02. Render Sky (sky scene) + // ... + + // 04. Render Scene (entity scene) + Modules::objView().renderScene(); + + // 05. Render Effects (flare) + // ... + + // 06. Render Interface 3D (player names) + // ... + + // 07. Render Debug 3D + // ... + + // 08. Render Interface 2D (chatboxes etc, optionally does have 3d) + // ... + + // 09. Render Debug 2D (stuff for dev) + Modules::objView().renderDebug2D(); + + // swap 3d buffers + Modules::objView().getDriver()->swapBuffers(); + } } } -} -void CObjectViewerDialog::release() -{ - //H_AUTO2 - nldebug("CObjectViewerDialog::release"); - - Modules::objView().release(); -} + void CObjectViewerDialog::release() + { + //H_AUTO2 + nldebug("CObjectViewerDialog::release"); -void CObjectViewerDialog::reinit() -{ - //H_AUTO2 - nldebug("CObjectViewerDialog::reinit"); - - Modules::objView().release(); - //Modules::objView().reinit(_ui.frame->winId(), width(), height()); -} + Modules::objView().release(); + } -QAction *CObjectViewerDialog::createSaveScreenshotAction(QObject *parent) -{ - QAction *action = new QAction(parent); - connect(action, SIGNAL(triggered()), this, SLOT(saveScreenshot())); - return action; -} + void CObjectViewerDialog::reinit() + { + //H_AUTO2 + nldebug("CObjectViewerDialog::reinit"); -QAction *CObjectViewerDialog::createSetBackgroundColor(QObject *parent) -{ - QAction *action = new QAction(parent); - connect(action, SIGNAL(triggered()), this, SLOT(setBackgroundColor())); - return action; -} + Modules::objView().release(); + //Modules::objView().reinit(_ui.frame->winId(), width(), height()); + } -void CObjectViewerDialog::saveScreenshot() -{ - Modules::objView().saveScreenshot("screenshot", false, true, false); -} + QAction *CObjectViewerDialog::createSaveScreenshotAction(QObject *parent) + { + QAction *action = new QAction(parent); + connect(action, SIGNAL(triggered()), this, SLOT(saveScreenshot())); + return action; + } -void CObjectViewerDialog::setBackgroundColor() -{ - QColor color = QColorDialog::getColor(QColor(Modules::objView().getBackgroundColor().R, - Modules::objView().getBackgroundColor().G, - Modules::objView().getBackgroundColor().B)); - Modules::objView().setBackgroundColor(NLMISC::CRGBA(color.red(), color.green(), color.blue())); -} + QAction *CObjectViewerDialog::createSetBackgroundColor(QObject *parent) + { + QAction *action = new QAction(parent); + connect(action, SIGNAL(triggered()), this, SLOT(setBackgroundColor())); + return action; + } -void CObjectViewerDialog::topLevelChanged ( bool topLevel ) { - //nldebug("CObjectViewerDialog::topLevelChanged topLevel:%d",topLevel); - nldebug("CObjectViewerDialog::topLevelChanged winId:%d",winId()); - // winId changing when re/docking - //Modules::georges().init(); - Modules::objView().reinit((nlWindow)_nlw->winId(), _nlw->width(), _nlw->height()); -} + void CObjectViewerDialog::saveScreenshot() + { + Modules::objView().saveScreenshot("screenshot", false, true, false); + } -void CObjectViewerDialog::resizeEvent(QResizeEvent *resizeEvent) -{ - QDockWidget::resizeEvent(resizeEvent); - if (Modules::objView().getDriver()) - Modules::objView().setSizeViewport(resizeEvent->size().width(), resizeEvent->size().height()); + void CObjectViewerDialog::setBackgroundColor() + { + QColor color = QColorDialog::getColor(QColor(Modules::objView().getBackgroundColor().R, + Modules::objView().getBackgroundColor().G, + Modules::objView().getBackgroundColor().B)); + Modules::objView().setBackgroundColor(NLMISC::CRGBA(color.red(), color.green(), color.blue())); + } - // The OpenGL driver does not resize automatically. - // The Direct3D driver breaks the window mode to include window borders when calling setMode windowed. + void CObjectViewerDialog::topLevelChanged ( bool topLevel ) { + //nldebug("CObjectViewerDialog::topLevelChanged topLevel:%d",topLevel); + nldebug("CObjectViewerDialog::topLevelChanged winId:%d",winId()); + // winId changing when re/docking + //Modules::georges().init(); + Modules::objView().reinit((nlWindow)_nlw->winId(), _nlw->width(), _nlw->height()); + } - // Resizing the window after switching drivers a few times becomes slow. - // There is probably something inside the drivers not being released properly. -} + void CObjectViewerDialog::resizeEvent(QResizeEvent *resizeEvent) + { + QDockWidget::resizeEvent(resizeEvent); + if (Modules::objView().getDriver()) + Modules::objView().setSizeViewport(resizeEvent->size().width(), resizeEvent->size().height()); -void CObjectViewerDialog::wheelEvent(QWheelEvent *event) -{ - //nldebug("CObjectViewerDialog::wheelEvent"); - // Get relative positions. - float fX = 1.0f - (float)event->pos().x() / this->width(); - float fY = 1.0f - (float)event->pos().y() / this->height(); - - // Set the buttons currently pressed. - NLMISC::TMouseButton buttons = (NLMISC::TMouseButton)getNelButtons(event); - if(event->delta() > 0) - Modules::objView().getDriver()->EventServer.postEvent(new NLMISC::CEventMouseWheel(-fX, fY, buttons, true, this)); - else - Modules::objView().getDriver()->EventServer.postEvent(new NLMISC::CEventMouseWheel(-fX, fY, buttons, false, this)); - -} + // The OpenGL driver does not resize automatically. + // The Direct3D driver breaks the window mode to include window borders when calling setMode windowed. -uint32 CObjectViewerDialog::getNelButtons(QMouseEvent *event) { - //nldebug("CObjectViewerDialog::getNelButtons"); - uint32 buttons = NLMISC::noButton; - if(event->buttons() & Qt::LeftButton) buttons |= NLMISC::leftButton; - if(event->buttons() & Qt::RightButton) buttons |= NLMISC::rightButton; - if(event->buttons() & Qt::MidButton) buttons |= NLMISC::middleButton; - if(event->modifiers() & Qt::ControlModifier) buttons |= NLMISC::ctrlButton; - if(event->modifiers() & Qt::ShiftModifier) buttons |= NLMISC::shiftButton; - if(event->modifiers() & Qt::AltModifier) buttons |= NLMISC::altButton; - - return buttons; -} + // Resizing the window after switching drivers a few times becomes slow. + // There is probably something inside the drivers not being released properly. + } -uint32 CObjectViewerDialog::getNelButtons(QWheelEvent *event) { - //nldebug("CObjectViewerDialog::getNelButtons"); - uint32 buttons = NLMISC::noButton; - if(event->buttons() & Qt::LeftButton) buttons |= NLMISC::leftButton; - if(event->buttons() & Qt::RightButton) buttons |= NLMISC::rightButton; - if(event->buttons() & Qt::MidButton) buttons |= NLMISC::middleButton; - if(event->modifiers() & Qt::ControlModifier) buttons |= NLMISC::ctrlButton; - if(event->modifiers() & Qt::ShiftModifier) buttons |= NLMISC::shiftButton; - if(event->modifiers() & Qt::AltModifier) buttons |= NLMISC::altButton; - - return buttons; -} - -void CObjectViewerDialog::mousePressEvent(QMouseEvent *event) { - //nldebug("CObjectViewerDialog::mousePressEvent"); - // Get relative positions. - float fX = 1.0f - (float)event->pos().x() / this->width(); - float fY = 1.0f - (float)event->pos().y() / this->height(); - - // Set the buttons currently pressed. - NLMISC::TMouseButton buttons = (NLMISC::TMouseButton)getNelButtons(event); + void CObjectViewerDialog::wheelEvent(QWheelEvent *event) + { + //nldebug("CObjectViewerDialog::wheelEvent"); + // Get relative positions. + float fX = 1.0f - (float)event->pos().x() / this->width(); + float fY = 1.0f - (float)event->pos().y() / this->height(); - if(event->button() == Qt::LeftButton) - Modules::objView().getDriver()->EventServer.postEvent( + // Set the buttons currently pressed. + NLMISC::TMouseButton buttons = (NLMISC::TMouseButton)getNelButtons(event); + if(event->delta() > 0) + Modules::objView().getDriver()->EventServer.postEvent(new NLMISC::CEventMouseWheel(-fX, fY, buttons, true, this)); + else + Modules::objView().getDriver()->EventServer.postEvent(new NLMISC::CEventMouseWheel(-fX, fY, buttons, false, this)); + + } + + uint32 CObjectViewerDialog::getNelButtons(QMouseEvent *event) + { + //nldebug("CObjectViewerDialog::getNelButtons"); + uint32 buttons = NLMISC::noButton; + if(event->buttons() & Qt::LeftButton) buttons |= NLMISC::leftButton; + if(event->buttons() & Qt::RightButton) buttons |= NLMISC::rightButton; + if(event->buttons() & Qt::MidButton) buttons |= NLMISC::middleButton; + if(event->modifiers() & Qt::ControlModifier) buttons |= NLMISC::ctrlButton; + if(event->modifiers() & Qt::ShiftModifier) buttons |= NLMISC::shiftButton; + if(event->modifiers() & Qt::AltModifier) buttons |= NLMISC::altButton; + + return buttons; + } + + uint32 CObjectViewerDialog::getNelButtons(QWheelEvent *event) + { + //nldebug("CObjectViewerDialog::getNelButtons"); + uint32 buttons = NLMISC::noButton; + if(event->buttons() & Qt::LeftButton) buttons |= NLMISC::leftButton; + if(event->buttons() & Qt::RightButton) buttons |= NLMISC::rightButton; + if(event->buttons() & Qt::MidButton) buttons |= NLMISC::middleButton; + if(event->modifiers() & Qt::ControlModifier) buttons |= NLMISC::ctrlButton; + if(event->modifiers() & Qt::ShiftModifier) buttons |= NLMISC::shiftButton; + if(event->modifiers() & Qt::AltModifier) buttons |= NLMISC::altButton; + + return buttons; + } + + void CObjectViewerDialog::mousePressEvent(QMouseEvent *event) + { + //nldebug("CObjectViewerDialog::mousePressEvent"); + // Get relative positions. + float fX = 1.0f - (float)event->pos().x() / this->width(); + float fY = 1.0f - (float)event->pos().y() / this->height(); + + // Set the buttons currently pressed. + NLMISC::TMouseButton buttons = (NLMISC::TMouseButton)getNelButtons(event); + + if(event->button() == Qt::LeftButton) + Modules::objView().getDriver()->EventServer.postEvent( new NLMISC::CEventMouseDown( -fX, fY, - (NLMISC::TMouseButton)(NLMISC::leftButton|(buttons&~(NLMISC::leftButton|NLMISC::middleButton|NLMISC::rightButton))), this)); - if(event->button() == Qt::MidButton) - Modules::objView().getDriver()->EventServer.postEvent( + (NLMISC::TMouseButton)(NLMISC::leftButton|(buttons&~(NLMISC::leftButton|NLMISC::middleButton|NLMISC::rightButton))), this)); + if(event->button() == Qt::MidButton) + Modules::objView().getDriver()->EventServer.postEvent( new NLMISC::CEventMouseDown( -fX, fY, - (NLMISC::TMouseButton)(NLMISC::middleButton|(buttons&~(NLMISC::middleButton|NLMISC::leftButton|NLMISC::rightButton))), this)); - if(event->button() == Qt::RightButton) - Modules::objView().getDriver()->EventServer.postEvent( + (NLMISC::TMouseButton)(NLMISC::middleButton|(buttons&~(NLMISC::middleButton|NLMISC::leftButton|NLMISC::rightButton))), this)); + if(event->button() == Qt::RightButton) + Modules::objView().getDriver()->EventServer.postEvent( 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) { - //nldebug("CObjectViewerDialog::mouseReleaseEvent"); - // Get relative positions. - float fX = 1.0f - (float)event->pos().x() / this->width(); - float fY = 1.0f - (float)event->pos().y() / this->height(); - - // Set the buttons currently pressed. - NLMISC::TMouseButton buttons = (NLMISC::TMouseButton)getNelButtons(event); + void CObjectViewerDialog::mouseReleaseEvent(QMouseEvent *event) + { + //nldebug("CObjectViewerDialog::mouseReleaseEvent"); + // Get relative positions. + float fX = 1.0f - (float)event->pos().x() / this->width(); + float fY = 1.0f - (float)event->pos().y() / this->height(); - if(event->button() == Qt::LeftButton) - Modules::objView().getDriver()->EventServer.postEvent( + // Set the buttons currently pressed. + NLMISC::TMouseButton buttons = (NLMISC::TMouseButton)getNelButtons(event); + + if(event->button() == Qt::LeftButton) + Modules::objView().getDriver()->EventServer.postEvent( new NLMISC::CEventMouseUp( -fX, fY, NLMISC::leftButton, this)); - if(event->button() == Qt::MidButton) - Modules::objView().getDriver()->EventServer.postEvent( + if(event->button() == Qt::MidButton) + Modules::objView().getDriver()->EventServer.postEvent( new NLMISC::CEventMouseUp( -fX, fY, NLMISC::middleButton, this)); - if(event->button() == Qt::RightButton) - Modules::objView().getDriver()->EventServer.postEvent( + if(event->button() == Qt::RightButton) + Modules::objView().getDriver()->EventServer.postEvent( new NLMISC::CEventMouseUp( -fX, fY, NLMISC::rightButton, this)); -} + } -void CObjectViewerDialog::mouseMoveEvent(QMouseEvent *event) { - //nldebug("CObjectViewerDialog::mouseMoveEvent"); - // Get relative positions. - float fX = 1.0f - (float)event->pos().x() / this->width(); - float fY = 1.0f - (float)event->pos().y() / this->height(); - - if ((fX == 0.5f) && (fY == 0.5f)) return; - NLMISC::TMouseButton buttons = (NLMISC::TMouseButton)getNelButtons(event); - Modules::objView().getDriver()->EventServer.postEvent(new NLMISC::CEventMouseMove(-fX, fY, buttons, this)); -} + void CObjectViewerDialog::mouseMoveEvent(QMouseEvent *event) + { + //nldebug("CObjectViewerDialog::mouseMoveEvent"); + // Get relative positions. + float fX = 1.0f - (float)event->pos().x() / this->width(); + float fY = 1.0f - (float)event->pos().y() / this->height(); + + if ((fX == 0.5f) && (fY == 0.5f)) return; + NLMISC::TMouseButton buttons = (NLMISC::TMouseButton)getNelButtons(event); + Modules::objView().getDriver()->EventServer.postEvent(new NLMISC::CEventMouseMove(-fX, fY, buttons, this)); + } } /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.h index eb80000ab..92c8724e8 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.h @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifndef OBJECTVIEWER_DIALOG_H @@ -45,63 +45,64 @@ typedef QGLWidget QNLWidget; class QAction; -namespace NLQT { - -class CObjectViewerDialog: public QDockWidget, public NLMISC::IEventEmitter +namespace NLQT { - Q_OBJECT -public: - CObjectViewerDialog(QWidget *parent = 0); - ~CObjectViewerDialog(); + class CObjectViewerDialog: public QDockWidget, public NLMISC::IEventEmitter + { + Q_OBJECT - virtual void setVisible(bool visible); - // virtual QPaintEngine* paintEngine() const { return NULL; } + public: + CObjectViewerDialog(QWidget *parent = 0); + ~CObjectViewerDialog(); - void init(); - void release(); - void reinit(); + virtual void setVisible(bool visible); + // virtual QPaintEngine* paintEngine() const { return NULL; } - QAction *createSaveScreenshotAction(QObject *parent); - QAction *createSetBackgroundColor(QObject *parent); + void init(); + void release(); + void reinit(); -private Q_SLOTS: - void updateRender(); + QAction *createSaveScreenshotAction(QObject *parent); + QAction *createSetBackgroundColor(QObject *parent); - void saveScreenshot(); - void setBackgroundColor(); + private Q_SLOTS: + void updateRender(); - void submitEvents(NLMISC::CEventServer &server, bool allWindows) { }; - void emulateMouseRawMode(bool) { }; + void saveScreenshot(); + void setBackgroundColor(); - void topLevelChanged(bool topLevel); + void submitEvents(NLMISC::CEventServer &server, bool allWindows) { }; + void emulateMouseRawMode(bool) { }; -protected: - virtual void resizeEvent(QResizeEvent *resizeEvent); - virtual void mousePressEvent(QMouseEvent *event); - virtual void mouseReleaseEvent(QMouseEvent *event); - virtual void wheelEvent(QWheelEvent *event); - virtual void mouseMoveEvent(QMouseEvent *event); - - uint32 getNelButtons(QMouseEvent *event); - uint32 getNelButtons(QWheelEvent *event); - -private: - CObjectViewerDialog(const CObjectViewerDialog &); - CObjectViewerDialog &operator=(const CObjectViewerDialog &); + void topLevelChanged(bool topLevel); - void updateInitialization(bool visible); + protected: + virtual void resizeEvent(QResizeEvent *resizeEvent); + virtual void mousePressEvent(QMouseEvent *event); + virtual void mouseReleaseEvent(QMouseEvent *event); + virtual void wheelEvent(QWheelEvent *event); + virtual void mouseMoveEvent(QMouseEvent *event); - Ui::CObjectViewerDialog _ui; - - // render stuff - QTimer *_mainTimer; - bool _isGraphicsInitialized, _isGraphicsEnabled; + uint32 getNelButtons(QMouseEvent *event); + uint32 getNelButtons(QWheelEvent *event); - QNLWidget * _nlw; + private: + CObjectViewerDialog(const CObjectViewerDialog &); + CObjectViewerDialog &operator=(const CObjectViewerDialog &); - friend class CMainWindow; -}; /* CObjectViewerDialog */ + void updateInitialization(bool visible); + + Ui::CObjectViewerDialog _ui; + + // render stuff + QTimer *_mainTimer; + bool _isGraphicsInitialized, _isGraphicsEnabled; + + QNLWidget * _nlw; + + friend class CMainWindow; + }; /* CObjectViewerDialog */ } /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/qt_displayer.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/qt_displayer.cpp index 0c49f3447..74b9a3805 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/qt_displayer.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/qt_displayer.cpp @@ -24,14 +24,18 @@ along with this program. If not, see . #include #include -namespace NLQT { +namespace NLQT +{ CQtDisplayer::CQtDisplayer(QPlainTextEdit *dlgDebug, bool eraseLastLog, const char *displayerName, bool raw) - : NLMISC::IDisplayer (displayerName), _NeedHeader(true), _LastLogSizeChecked(0), _Raw(raw) { - setParam(dlgDebug,eraseLastLog); + : NLMISC::IDisplayer (displayerName), _NeedHeader(true), _LastLogSizeChecked(0), _Raw(raw) + { + 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; //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; std::string str; @@ -58,7 +64,8 @@ namespace NLQT { needSpace = true; } - if (args.LogType != NLMISC::CLog::LOG_NO && !_Raw) { + if (args.LogType != NLMISC::CLog::LOG_NO && !_Raw) + { if (needSpace) { str += " "; needSpace = false; } str += logTypeToString(args.LogType); if (args.LogType == NLMISC::CLog::LOG_WARNING) @@ -70,14 +77,14 @@ namespace NLQT { // Write thread identifier /*if ( args.ThreadId != 0 && !_Raw) { - if (needSpace) { str += " "; needSpace = false; } - str += NLMISC::toString(args.ThreadId); - needSpace = true; + if (needSpace) { str += " "; needSpace = false; } + str += NLMISC::toString(args.ThreadId); + needSpace = true; }*/ /*if (!args.ProcessName.empty() && !_Raw) { - if (needSpace) { str += " "; needSpace = false; } - str += args.ProcessName; - needSpace = true; + if (needSpace) { str += " "; needSpace = false; } + str += args.ProcessName; + needSpace = true; }*/ //if (args.FileName != NULL && !_Raw) { @@ -87,22 +94,29 @@ namespace NLQT { //} /*if (args.Line != -1 && !_Raw) { - if (needSpace) { str += " "; needSpace = false; } - str += NLMISC::toString(args.Line); - needSpace = true; + if (needSpace) { str += " "; needSpace = false; } + str += NLMISC::toString(args.Line); + needSpace = true; }*/ - if (args.FuncName != NULL && !_Raw) { - if (needSpace) { str += " "; needSpace = false; } + if (args.FuncName != NULL && !_Raw) + { + if (needSpace) + { + str += " "; needSpace = false; + } str += args.FuncName; needSpace = true; } - if (needSpace) { str += " : "; needSpace = false; } + if (needSpace) + { + str += " : "; needSpace = false; + } str += message; - - + + m_DlgDebug->textCursor().insertText(str.c_str(), format); //m_DlgDebug->setCenterOnScroll(true); m_DlgDebug->centerCursor(); diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/qt_displayer.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/qt_displayer.h index baa4fd371..8aea6d22d 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/qt_displayer.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/qt_displayer.h @@ -28,10 +28,12 @@ along with this program. If not, see . // Qt includes #include -namespace NLQT { +namespace NLQT +{ class CQtDisplayer : virtual public NLMISC::IDisplayer { + public: CQtDisplayer(QPlainTextEdit *dlgDebug, bool eraseLastLog = false, const char *displayerName = "", bool raw = false); CQtDisplayer(); @@ -42,7 +44,7 @@ namespace NLQT { virtual void doDisplay ( const NLMISC::CLog::TDisplayInfo& args, const char *message ); private: - QPlainTextEdit *m_DlgDebug; + QPlainTextEdit *m_DlgDebug; bool _NeedHeader; uint _LastLogSizeChecked; bool _Raw; diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/settings_dialog.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/settings_dialog.cpp index 483c78225..9d3772242 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/settings_dialog.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/settings_dialog.cpp @@ -31,7 +31,8 @@ along with this program. If not, see . using namespace NLMISC; -namespace NLQT { +namespace NLQT +{ CSettingsDialog::CSettingsDialog(QWidget *parent) : QDialog(parent) @@ -72,7 +73,8 @@ namespace NLQT { QFileDialog dialog(this); dialog.setOption(QFileDialog::ShowDirsOnly, true); dialog.setFileMode(QFileDialog::Directory); - if (dialog.exec()) { + if (dialog.exec()) + { QString newPath = dialog.selectedFiles().first(); if (!newPath.isEmpty()) { @@ -137,9 +139,12 @@ namespace NLQT { list.push_back(str); } - if (list.empty()) { + if (list.empty()) + { Modules::config().getConfigFile().getVar("SearchPaths").forceAsString(""); - } else { + } + else + { Modules::config().getConfigFile().getVar("SearchPaths").forceAsString(""); Modules::config().getConfigFile().getVar("SearchPaths").setAsString(list); } @@ -197,4 +202,5 @@ namespace NLQT { ui.leveldesignPath->setText(QFileDialog::getExistingDirectory(this, tr("Open Directory"), QDir::currentPath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks)); } -} /* namespace NLQT */ \ No newline at end of file + +} /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/settings_dialog.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/settings_dialog.h index f894219b6..c1ebebc72 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/settings_dialog.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/settings_dialog.h @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifndef SETTINGS_DIALOG_H @@ -29,36 +29,37 @@ // Project includes -namespace NLQT { - -class CSettingsDialog: public QDialog +namespace NLQT { - Q_OBJECT -public: - CSettingsDialog(QWidget *parent = 0); - ~CSettingsDialog(); + class CSettingsDialog: public QDialog + { + Q_OBJECT -Q_SIGNALS: - void ldPathChanged(QString); + public: + CSettingsDialog(QWidget *parent = 0); + ~CSettingsDialog(); -private Q_SLOTS: - void addPath(); - void removePath(); - void upPath(); - void downPath(); - void applyPressed(); - void browseLeveldesignPath(); - -private: - void cfcbGraphicsDrivers(NLMISC::CConfigFile::CVar &var); - void cfcbSoundDrivers(NLMISC::CConfigFile::CVar &var); - void cfcbSearchPaths(NLMISC::CConfigFile::CVar &var); - void cfcbLeveldesignPath(NLMISC::CConfigFile::CVar &var); - - Ui::CSettingsDialog ui; + Q_SIGNALS: + void ldPathChanged(QString); -}; /* class CSettingsDialog */ + private Q_SLOTS: + void addPath(); + void removePath(); + void upPath(); + void downPath(); + void applyPressed(); + void browseLeveldesignPath(); + + private: + void cfcbGraphicsDrivers(NLMISC::CConfigFile::CVar &var); + void cfcbSoundDrivers(NLMISC::CConfigFile::CVar &var); + void cfcbSearchPaths(NLMISC::CConfigFile::CVar &var); + void cfcbLeveldesignPath(NLMISC::CConfigFile::CVar &var); + + Ui::CSettingsDialog ui; + + }; /* class CSettingsDialog */ } /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/spindelegate.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/spindelegate.cpp deleted file mode 100644 index 73106745e..000000000 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/spindelegate.cpp +++ /dev/null @@ -1,275 +0,0 @@ -/* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel - - 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 . -*/ - -#include "spindelegate.h" - -// NeL includes -#include -#include -#include - -// Qt includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -// 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(index.internalPointer()); - QString value = item->data(1).toString(); - - if (value.isEmpty()) - return 0; - - const NLGEORGES::UType *type = qobject_cast(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(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(editor); - cb->setCurrentIndex(cb->findText(value)); - //cb->setIconSize() - } else { - switch (type->getType()) { - case NLGEORGES::UType::UnsignedInt: - case NLGEORGES::UType::SignedInt: - { - QSpinBox *spinBox = static_cast(editor); - spinBox->setValue((int)value.toDouble()); - break; - } - case NLGEORGES::UType::Double: - { - QDoubleSpinBox *spinBox = static_cast(editor); - spinBox->setValue(value.toDouble()); - break; - } - case NLGEORGES::UType::Color: - { - break; - } - default: - { - QLineEdit *textEdit = static_cast(editor); - textEdit->setText(value); - break; - } - } - } - } - - void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, - const QModelIndex &index) const - { - const NLGEORGES::UType *type = qobject_cast(index.model())-> - getItem(index)->getFormElm()->getType(); - int numDefinitions = type->getNumDefinition(); - - if (numDefinitions) { - QComboBox *comboBox = static_cast(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(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(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(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(); -} - -} diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/spindelegate.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/spindelegate.h deleted file mode 100644 index 907755018..000000000 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/spindelegate.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel - - 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 . -*/ - -#ifndef DELEGATE_H -#define DELEGATE_H - -#include - -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