mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-11-14 11:19:07 +00:00
Changed: #1306 Added basic new form creation. Lots of bugs still.
This commit is contained in:
parent
f7ab1a6ec9
commit
7932d4b7fc
4 changed files with 131 additions and 30 deletions
|
@ -92,6 +92,13 @@ namespace GeorgesQt
|
||||||
addDockWidget(Qt::LeftDockWidgetArea, m_georgesDirTreeDialog);
|
addDockWidget(Qt::LeftDockWidgetArea, m_georgesDirTreeDialog);
|
||||||
restoreDockWidget(m_georgesDirTreeDialog);
|
restoreDockWidget(m_georgesDirTreeDialog);
|
||||||
|
|
||||||
|
// Set the default sheet dir dir to the level design path.
|
||||||
|
m_lastSheetDir = ".";
|
||||||
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
|
settings->beginGroup(Core::Constants::DATA_PATH_SECTION);
|
||||||
|
m_lastSheetDir = settings->value(Core::Constants::LEVELDESIGN_PATH, "l:/leveldesign").toString();
|
||||||
|
settings->endGroup();
|
||||||
|
|
||||||
connect(Core::ICore::instance(), SIGNAL(changeSettings()),
|
connect(Core::ICore::instance(), SIGNAL(changeSettings()),
|
||||||
this, SLOT(settingsChanged()));
|
this, SLOT(settingsChanged()));
|
||||||
connect(m_georgesDirTreeDialog, SIGNAL(selectedForm(const QString)),
|
connect(m_georgesDirTreeDialog, SIGNAL(selectedForm(const QString)),
|
||||||
|
@ -117,9 +124,19 @@ namespace GeorgesQt
|
||||||
loadFile(fileName);
|
loadFile(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GeorgesEditorForm::newFile()
|
void GeorgesEditorForm::newFile()
|
||||||
{
|
{
|
||||||
|
// Assume it is a form, for now. We'll have to retrieve the DFN we'll be using as a base.
|
||||||
|
QString fileName = QFileDialog::getOpenFileName(this, tr("Select Base Form Definition"), m_lastSheetDir, "Form Definition (*.dfn)");
|
||||||
|
if(!fileName.isNull())
|
||||||
|
{
|
||||||
|
// Use the file loader to create the new form.
|
||||||
|
loadFile(fileName, true);
|
||||||
|
|
||||||
|
// Save the folder we just opened for future dialogs.
|
||||||
|
QFileInfo pathInfo( fileName );
|
||||||
|
m_lastSheetDir = pathInfo.absolutePath();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GeorgesEditorForm::save()
|
void GeorgesEditorForm::save()
|
||||||
|
@ -171,26 +188,18 @@ namespace GeorgesQt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GeorgesEditorForm::loadFile(const QString fileName)
|
void GeorgesEditorForm::loadFile(const QString fileName)
|
||||||
|
{
|
||||||
|
loadFile(fileName, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GeorgesEditorForm::loadFile(const QString fileName, bool loadFromDfn)
|
||||||
{
|
{
|
||||||
QFileInfo info(fileName);
|
QFileInfo info(fileName);
|
||||||
|
|
||||||
if (!m_dockedWidgets.size())
|
// Check to see if the form is already loaded, if it is just raise it.
|
||||||
|
if (m_dockedWidgets.size())
|
||||||
{
|
{
|
||||||
CGeorgesTreeViewDialog *dock = new CGeorgesTreeViewDialog(m_mainDock);
|
|
||||||
dock->setUndoStack(m_undoStack);
|
|
||||||
m_lastActiveDock = dock;
|
|
||||||
m_dockedWidgets.append(dock);
|
|
||||||
|
|
||||||
m_mainDock->addDockWidget(Qt::RightDockWidgetArea, m_dockedWidgets.last());
|
|
||||||
connect(m_dockedWidgets.last(), SIGNAL(closing()),
|
|
||||||
this, SLOT(closingTreeView()));
|
|
||||||
connect(m_dockedWidgets.last(), SIGNAL(visibilityChanged(bool)),
|
|
||||||
m_dockedWidgets.last(), SLOT(checkVisibility(bool)));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
Q_FOREACH(CGeorgesTreeViewDialog *wgt, m_dockedWidgets)
|
Q_FOREACH(CGeorgesTreeViewDialog *wgt, m_dockedWidgets)
|
||||||
{
|
{
|
||||||
if (info.fileName() == wgt->loadedForm)
|
if (info.fileName() == wgt->loadedForm)
|
||||||
|
@ -199,18 +208,38 @@ namespace GeorgesQt
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CGeorgesTreeViewDialog *dock = new CGeorgesTreeViewDialog(m_mainDock);
|
}
|
||||||
dock->setUndoStack(m_undoStack);
|
|
||||||
m_dockedWidgets.append(dock);
|
|
||||||
|
|
||||||
connect(m_dockedWidgets.last(), SIGNAL(closing()),
|
CGeorgesTreeViewDialog *dock = new CGeorgesTreeViewDialog(m_mainDock);
|
||||||
this, SLOT(closingTreeView()));
|
dock->setUndoStack(m_undoStack);
|
||||||
connect(m_dockedWidgets.last(), SIGNAL(visibilityChanged(bool)),
|
m_lastActiveDock = dock;
|
||||||
m_dockedWidgets.last(), SLOT(checkVisibility(bool)));
|
m_dockedWidgets.append(dock);
|
||||||
Q_ASSERT(m_dockedWidgets.size() > 1);
|
|
||||||
|
connect(m_dockedWidgets.last(), SIGNAL(closing()), this, SLOT(closingTreeView()));
|
||||||
|
connect(m_dockedWidgets.last(), SIGNAL(visibilityChanged(bool)), m_dockedWidgets.last(), SLOT(checkVisibility(bool)));
|
||||||
|
|
||||||
|
// If there is more than one form open - tabify the new form. If this is the first form open add it to the dock.
|
||||||
|
if(m_dockedWidgets.size() > 1)
|
||||||
|
{
|
||||||
m_mainDock->tabifyDockWidget(m_dockedWidgets.at(m_dockedWidgets.size() - 2), m_dockedWidgets.last());
|
m_mainDock->tabifyDockWidget(m_dockedWidgets.at(m_dockedWidgets.size() - 2), m_dockedWidgets.last());
|
||||||
}
|
}
|
||||||
CForm *form = m_dockedWidgets.last()->getFormByName(info.fileName());
|
else
|
||||||
|
{
|
||||||
|
m_mainDock->addDockWidget(Qt::RightDockWidgetArea, m_dockedWidgets.last());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve the form and load the form.
|
||||||
|
NLGEORGES::CForm *form;
|
||||||
|
if(loadFromDfn)
|
||||||
|
{
|
||||||
|
// Get the form by DFN name.
|
||||||
|
form = m_dockedWidgets.last()->getFormByDfnName(info.fileName());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
form = m_dockedWidgets.last()->getFormByName(info.fileName());
|
||||||
|
}
|
||||||
|
|
||||||
if (form)
|
if (form)
|
||||||
{
|
{
|
||||||
m_dockedWidgets.last()->setForm(form);
|
m_dockedWidgets.last()->setForm(form);
|
||||||
|
@ -224,6 +253,7 @@ namespace GeorgesQt
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
nlwarning("Failed to load form: %s", info.fileName().toStdString().c_str());
|
||||||
m_dockedWidgets.last()->close();
|
m_dockedWidgets.last()->close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ public:
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void open();
|
void open();
|
||||||
void loadFile(const QString fileName);
|
void loadFile(const QString fileName);
|
||||||
|
void loadFile(const QString fileName, bool loadFromDfn);
|
||||||
void newFile();
|
void newFile();
|
||||||
void save();
|
void save();
|
||||||
void settingsChanged();
|
void settingsChanged();
|
||||||
|
@ -66,8 +67,15 @@ private:
|
||||||
|
|
||||||
QMainWindow *m_mainDock;
|
QMainWindow *m_mainDock;
|
||||||
|
|
||||||
|
/// Contains a list of all of the open forms.
|
||||||
QList<CGeorgesTreeViewDialog*> m_dockedWidgets;
|
QList<CGeorgesTreeViewDialog*> m_dockedWidgets;
|
||||||
|
|
||||||
|
/// Contains a pointer to the last known focal change for active documents.
|
||||||
CGeorgesTreeViewDialog *m_lastActiveDock;
|
CGeorgesTreeViewDialog *m_lastActiveDock;
|
||||||
|
|
||||||
|
/// Contains a record of the last directory a sheet file dialog was opened for.
|
||||||
|
QString m_lastSheetDir;
|
||||||
|
|
||||||
}; /* class GeorgesEditorForm */
|
}; /* class GeorgesEditorForm */
|
||||||
|
|
||||||
} /* namespace GeorgesQt */
|
} /* namespace GeorgesQt */
|
||||||
|
|
|
@ -61,6 +61,7 @@ namespace GeorgesQt
|
||||||
// Set the default sheet dir dir to the level design path.
|
// Set the default sheet dir dir to the level design path.
|
||||||
m_lastSheetDir = ".";
|
m_lastSheetDir = ".";
|
||||||
QSettings *settings = Core::ICore::instance()->settings();
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
|
settings->beginGroup(Core::Constants::DATA_PATH_SECTION);
|
||||||
m_lastSheetDir = settings->value(Core::Constants::LEVELDESIGN_PATH, "l:/leveldesign").toString();
|
m_lastSheetDir = settings->value(Core::Constants::LEVELDESIGN_PATH, "l:/leveldesign").toString();
|
||||||
settings->endGroup();
|
settings->endGroup();
|
||||||
|
|
||||||
|
@ -114,11 +115,12 @@ namespace GeorgesQt
|
||||||
m_form = (UForm*)form;
|
m_form = (UForm*)form;
|
||||||
}
|
}
|
||||||
|
|
||||||
CForm* CGeorgesTreeViewDialog::getFormByName(const QString formName)
|
NLGEORGES::CForm* CGeorgesTreeViewDialog::getFormByName(const QString formName)
|
||||||
{
|
{
|
||||||
if(NLMISC::CPath::exists(formName.toStdString()))
|
if(NLMISC::CPath::exists(formName.toStdString()))
|
||||||
{
|
{
|
||||||
return (CForm*)m_georges->loadForm(formName.toStdString());
|
//NLGEORGES::CForm *form = dynamic_cast<NLGEORGES::CForm*>(m_georges->loadForm(formName.toStdString()));
|
||||||
|
return (NLGEORGES::CForm *)m_georges->loadForm(formName.toStdString());
|
||||||
}
|
}
|
||||||
//else
|
//else
|
||||||
//{
|
//{
|
||||||
|
@ -154,9 +156,58 @@ namespace GeorgesQt
|
||||||
// }
|
// }
|
||||||
// return form;
|
// return form;
|
||||||
//}
|
//}
|
||||||
|
nlinfo("File '%s' does not exist!", formName.toStdString().c_str());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NLGEORGES::CForm* CGeorgesTreeViewDialog::getFormByDfnName(const QString dfnName)
|
||||||
|
{
|
||||||
|
if(NLMISC::CPath::exists(dfnName.toStdString()))
|
||||||
|
{
|
||||||
|
// Create a new form object.
|
||||||
|
NLGEORGES::CForm *form = new NLGEORGES::CForm();
|
||||||
|
m_form = form;
|
||||||
|
|
||||||
|
// Retrieve a copy of the root definition.
|
||||||
|
NLGEORGES::CFormDfn *formDfn = dynamic_cast<NLGEORGES::CFormDfn *>(m_georges->loadFormDfn(dfnName.toStdString()));
|
||||||
|
|
||||||
|
// Next we'll use the root node to build a new form.
|
||||||
|
NLGEORGES::CFormElmStruct *fes = dynamic_cast<NLGEORGES::CFormElmStruct *>(getRootNode(0));
|
||||||
|
fes->build(formDfn);
|
||||||
|
|
||||||
|
// And then initialize the held elements;
|
||||||
|
for(uint i = 0; i<NLGEORGES::CForm::HeldElementCount; i++)
|
||||||
|
{
|
||||||
|
fes = dynamic_cast<NLGEORGES::CFormElmStruct *>(getRootNode(i+1));
|
||||||
|
fes->build(formDfn);
|
||||||
|
}
|
||||||
|
|
||||||
|
return form;
|
||||||
|
}
|
||||||
|
nlinfo("File '%s' does not exist!", dfnName.toStdString().c_str());
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
NLGEORGES::CFormElm *CGeorgesTreeViewDialog::getRootNode(uint slot)
|
||||||
|
{
|
||||||
|
NLGEORGES::CForm *form = getFormPtr();
|
||||||
|
|
||||||
|
if(slot == 0)
|
||||||
|
{
|
||||||
|
const NLGEORGES::UFormElm &formElm = form->getRootNode();
|
||||||
|
return (NLGEORGES::CFormElm *)&formElm;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure the slot value is valid and then return the corresponding element.
|
||||||
|
nlassert(slot < NLGEORGES::CForm::HeldElementCount+1);
|
||||||
|
return getFormPtr()->HeldElements[slot-1];
|
||||||
|
}
|
||||||
|
|
||||||
|
NLGEORGES::CForm *CGeorgesTreeViewDialog::getFormPtr()
|
||||||
|
{
|
||||||
|
return dynamic_cast<NLGEORGES::CForm *>(m_form);
|
||||||
|
}
|
||||||
|
|
||||||
void CGeorgesTreeViewDialog::loadFormIntoDialog(CForm *form)
|
void CGeorgesTreeViewDialog::loadFormIntoDialog(CForm *form)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -169,7 +220,8 @@ namespace GeorgesQt
|
||||||
root = &m_form->getRootNode();
|
root = &m_form->getRootNode();
|
||||||
|
|
||||||
QStringList parents;
|
QStringList parents;
|
||||||
for (uint i = 0; i < m_form->getNumParent(); i++)
|
uint cnt = form->getParentCount();
|
||||||
|
for (uint i = 0; i < cnt /*form->getParentCount()*/; i++)
|
||||||
{
|
{
|
||||||
UForm *u = m_form->getParentForm(i);
|
UForm *u = m_form->getParentForm(i);
|
||||||
parents << u->getFilename().c_str();
|
parents << u->getFilename().c_str();
|
||||||
|
|
|
@ -36,6 +36,7 @@ namespace NLGEORGES
|
||||||
{
|
{
|
||||||
class UForm;
|
class UForm;
|
||||||
class CForm;
|
class CForm;
|
||||||
|
class CFormElm;
|
||||||
}
|
}
|
||||||
|
|
||||||
using namespace NLGEORGES;
|
using namespace NLGEORGES;
|
||||||
|
@ -56,7 +57,15 @@ namespace GeorgesQt
|
||||||
bool isModified() {return m_modified;}
|
bool isModified() {return m_modified;}
|
||||||
void setModified(bool m) {m_modified = m;}
|
void setModified(bool m) {m_modified = m;}
|
||||||
|
|
||||||
CForm* getFormByName(const QString);
|
NLGEORGES::CForm* getFormByName(const QString formName);
|
||||||
|
NLGEORGES::CForm* getFormByDfnName(const QString dfnName);
|
||||||
|
|
||||||
|
/// Retrieves the root element based on the slot (document or held elements.)
|
||||||
|
NLGEORGES::CFormElm *getRootNode(uint slot);
|
||||||
|
|
||||||
|
/// Returns the form as a CForm pointer.
|
||||||
|
NLGEORGES::CForm *getFormPtr();
|
||||||
|
|
||||||
void addParentForm(QString parentFormNm);
|
void addParentForm(QString parentFormNm);
|
||||||
|
|
||||||
void write ( );
|
void write ( );
|
||||||
|
@ -67,6 +76,8 @@ namespace GeorgesQt
|
||||||
m_undoStack = stack;
|
m_undoStack = stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
QString loadedForm;
|
QString loadedForm;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
Loading…
Reference in a new issue