void FxGadgetController::onFxSwitched() { clearGadgets(); bool enabled = false; TFx *fx = m_fxHandle ? m_fxHandle->getFx() : 0; if (fx) { int referenceColumnIndex = fx->getReferenceColumnIndex(); if (referenceColumnIndex == -1) { TObjectHandle *oh = m_tool->getApplication()->getCurrentObject(); if (!oh->getObjectId().isCamera()) { oh->setObjectId(TStageObjectId::CameraId(0)); } enabled = true; } else if (referenceColumnIndex == m_tool->getColumnIndex()) enabled = true; } if (fx && enabled) { m_editingNonZeraryFx = true; TZeraryColumnFx *zfx = 0; if ((zfx = dynamic_cast<TZeraryColumnFx *>(fx)) || dynamic_cast<TLevelColumnFx *>(fx)) // WARNING! quick patch for huge bug: I added the || with TLevelColumnFx; // before, the levels were considered as nonZeraryFx and the edit tool // gadget was not displayed! Vinz { if (zfx) fx = zfx->getZeraryFx(); m_editingNonZeraryFx = false; } // Parse the UI Concepts returned by the fx TParamUIConcept *uiConcepts = 0; int i, count; fx->getParamUIs(uiConcepts, count); for (i = 0; i < count; ++i) { FxGadget *gadget = allocateGadget(uiConcepts[i]); if (gadget) addGadget(gadget); } delete[] uiConcepts; } else m_editingNonZeraryFx = false; m_tool->invalidate(); }
/*! Notify change of current image: update icon and notify level change. If current object is a spline commit spline chenged. If current mode is EditingLevel touch current frame. */ void TTool::notifyImageChanged() { onImageChanged(); if (!m_application) return; m_application->getCurrentScene()->setDirtyFlag(true); if (m_application->getCurrentFrame()->isEditingLevel()) { TXshLevel *xl = m_application->getCurrentLevel()->getLevel(); if (!xl) return; TXshSimpleLevel *sl = xl->getSimpleLevel(); if (!sl) return; TFrameId fid = m_application->getCurrentFrame()->getFid(); sl->touchFrame(fid); // sl->setDirtyFlag(true); IconGenerator::instance()->invalidate(sl, fid); IconGenerator::instance()->invalidateSceneIcon(); } else { TXsheet *xsh = m_application->getCurrentXsheet()->getXsheet(); if (!xsh) return; TObjectHandle *currentObject = m_application->getCurrentObject(); if (currentObject->isSpline()) { m_application->getCurrentObject()->commitSplineChanges(); TStageObject *pegbar = xsh->getStageObject(currentObject->getObjectId()); IconGenerator::instance()->invalidate(pegbar->getSpline()); } else { int row = m_application->getCurrentFrame()->getFrame(); int col = m_application->getCurrentColumn()->getColumnIndex(); if (col < 0) return; TXshCell cell = xsh->getCell(row, col); TXshSimpleLevel *sl = cell.getSimpleLevel(); if (sl) { IconGenerator::instance()->invalidate(sl, cell.m_frameId); sl->touchFrame(cell.m_frameId); IconGenerator::instance()->invalidateSceneIcon(); } } } m_application->getCurrentLevel()->notifyLevelChange(); }