Exemple #1
0
void IAction::update (bool updateLeftView, TUpdateRightView rightViewFlag, CGeorgesEditDoc &doc, const char *_FormName)
{
	// Right and left view
	CGeorgesEditView *rightView = doc.getRightView ();
	nlassert (rightView);
	CLeftView *leftView = doc.getLeftView ();
	nlassert (leftView);

	// Update left view ?
	if (updateLeftView)
		doc.updateDocumentStructure ();

	// Set the current view..
	uint subSelection = leftView->getCurrentSelectionId ();
	if (subSelection != _SelId)
	{
		doc.changeSubSelection (_SelId, NULL);
		return;
	}

	if (leftView->getCurrentSelectionId () == 1)
	{
		rightView->HeaderDialog.getFromDocument (*doc.getHeaderPtr ());
	}
	else if (doc.isType ())
	{
		rightView->TypeDialog.getFromDocument (*(doc.getTypePtr()));
	}
	else if (doc.isDfn ())
	{
		rightView->DfnDialog.getFromDocument (*(doc.getDfnPtr()));
	}
	else if (doc.isForm ())
	{
		if (rightViewFlag == DoNothing)
		{
		}
		else if (rightViewFlag == UpdateLabels)
		{
			rightView->FormDialog.updateLabels ();
		}
		else if (rightViewFlag == UpdateValues)
		{
			rightView->FormDialog.updateValues ();
		}
		else if (rightViewFlag == Redraw)
		{
			rightView->FormDialog.getFromDocument ();
		}
	}
}
void CGeorgesEditDoc::updateDocumentStructure ()
{
	RootObject.clean ();

	// Get left view
	CLeftView *leftView = getLeftView ();

	// Backup current selection
	uint selection = 0xffffffff;
	if (IsWindow (*leftView))
		selection = leftView->getCurrentSelectionId ();

	// Read the file
	if (isType())
	{
		// Setup sub object tree 
		RootObject.create (CGeorgesEditDocSub::Null, "Type", 0xffffffff, "NULL", 0xffffffff);
		RootObject.add (CGeorgesEditDocSub::Header, "Header", 0xffffffff, "NULL", 0xffffffff);
		RootObject.add (CGeorgesEditDocSub::Type, "Content", 0xffffffff, "NULL", 0xffffffff);
	}
	else if (isDfn ())
	{
		// Setup sub object tree 
		RootObject.create (CGeorgesEditDocSub::Null, "Dfn", 0xffffffff, "NULL", 0xffffffff);
		RootObject.add (CGeorgesEditDocSub::Header, "Header", 0xffffffff, "NULL", 0xffffffff);
		RootObject.add (CGeorgesEditDocSub::Dfn, "Content", 0xffffffff, "NULL", 0xffffffff);
	}
	else
	{
		// Setup sub object tree 
		RootObject.create (CGeorgesEditDocSub::Null, "Form", 0xffffffff, "NULL", 0xffffffff);
		RootObject.add (CGeorgesEditDocSub::Header, "Header", 0xffffffff, "NULL", 0xffffffff);

		// Get the parents
		CFormElmStruct *rootstruct = &((CForm*)(UForm*)Form)->Elements;
		addStruct (&RootObject, rootstruct, rootstruct->FormDfn, "Content", 0xffffffff, "", 0);

		// Get held objects

		// Write held elements
		uint i;
		for (i=0; i<CForm::HeldElementCount; i++)
		{
			rootstruct = ((CForm*)(UForm*)Form)->HeldElements[i];
			addStruct (&RootObject, rootstruct, rootstruct->FormDfn, ("Hold " + toString (1+i)).c_str (), 0xffffffff, "", i+1);
		}
	}

	// Update left view structure
	leftView->getFromDocument ();

	// Set the old selction flag
	if (selection != 0xffffffff)
	{
		// Reselect backuped node
		leftView->setCurrentSelectionId (selection);
	}
	else
	{
		// Select the content
		leftView->setCurrentSelectionId (2);
	}
}