Answered
IsMasterItemOverriddenOnPage always returns False
- January 19, 2024
- 1 reply
- 364 views
Hello All,
I am trying to identify overridden items on Master page, but IsMasterItemOverriddenOnPage always written false eventhough there present overridden items.
in InDesign document we have 2 Master pages, say C, C2. C has 3 Items (text frames). C2 has parent C but in C2 we deleted those Items using shift + Command (local override).
I am loading list of items on C and checking if it is overridden on C2 using IsMasterItemOverriddenOnPage, but this always returns false. Can someone please help me with some inputs.
{
do
{
IDataBase *db = ::GetDataBase(iDocument);
UIDList masterUIDs(db);
InterfacePtr<IMasterSpreadList> masterSpreadList(iDocument, UseDefaultIID());
if(masterSpreadList == nil)
break;
Utils<IMasterSpreadUtils>()->TopoSortMasterSpread(masterSpreadList, &masterUIDs);
// for(int32 spreadIndex = 0;spreadIndex < masterSpreadList->GetMasterSpreadCount();++spreadIndex)
// masterUIDs.Append(masterSpreadList->GetNthMasterSpreadUID(spreadIndex));
UIDList unusedMasterUID = Utils<IMasterSpreadUtils>()->GetUnusedMasterUIDs(iDocument);
for (UIDList::iterator iter = unusedMasterUID.begin(); iter != unusedMasterUID.end(); ++iter)
{
if(masterUIDs.Contains(*iter))
masterUIDs.Remove(masterUIDs.Location(*iter));
}
if(masterUIDs.IsEmpty())
break;
long size = masterUIDs.size();
for(long i =0; i < size; i++)
{
UID master_page = masterUIDs.At(i);
UIDList ancestors(db);
Utils<IMasterSpreadUtils>()->GetAncestorsOf(masterSpreadList, master_page,&ancestors);
long size_ancestors = ancestors.size();
for(long j =0; j < size_ancestors; j++)
{
UID ancestor_page = ancestors.At(j);
if(ancestor_page.Get() == master_page.Get())
continue;
InterfacePtr<IHierarchy> masterSpreadHierarchy(db, ancestor_page, UseDefaultIID());
if(!masterSpreadHierarchy)
continue;
InterfacePtr<ISpread> iMasterSpread(masterSpreadHierarchy,UseDefaultIID());
if(!iMasterSpread)
continue;
for (int32 j = 0; j < iMasterSpread->GetNumPages() ; ++j)
{
UIDList masterItemsUIDList(db);
iMasterSpread->GetItemsOnPage(j, &masterItemsUIDList, kFalse,kFalse, kFalse);
for(UIDList::iterator masterItemUIDIter = masterItemsUIDList.begin(); masterItemUIDIter != masterItemsUIDList.end(); ++masterItemUIDIter)
{
InterfacePtr<IMasterOverrideable> masterOverrideable(db, *masterItemUIDIter, IID_IMASTEROVERRIDEABLE);
if(masterOverrideable && masterOverrideable->IsMasterNotOverrideable())
masterOverrideable->Set(IMasterOverrideable::kMasterOverrideable);
UIDRef masterItemUIDRef(db, *masterItemUIDIter);
if(Utils<IMasterSpreadUtils>()->IsMasterItemOverriddenOnPage(masterItemUIDRef,UIDRef(db,master_page)) == false)
{
UIDRef overriddenItem;
Utils<IMasterSpreadUtils>()->OverrideMasterPageItem(masterItemUIDRef,UIDRef(db,master_page),ICommand::kRegularUndo,&overriddenItem);
if(overriddenItem)
{
}
}
}
}
}
}
}while(false);
}
