Skip to main content
Inspiring
October 3, 2013
Question

How to change position of inline objects

  • October 3, 2013
  • 0 replies
  • 467 views

Hello All,

I am trying to create an inline image frame within a text frame. and then I am trying to position the inline Image frame with Aboveline option.

But it doesn't work. I am able to sucessfully create the inline frame with help available in Snippet project. But when I try to set the position it fails not sure why. This is in InDesign CS6.

I am trying to do the following:

InterfacePtr<ITextModel> textModel(storyUIDRef, UseDefaultIID());
if(!textModel)

{
   break;
}
InterfacePtr<IGeometry> pageItemGeometry(frameUIDRef, UseDefaultIID());
if (pageItemGeometry == nil) {
        break;
}

  // Insert character in text flow to anchor the inline.
boost::shared_ptr<WideString> insertMe(new WideString);

insertMe->Append(kTextChar_Inline);
InterfacePtr<ITextModelCmds> textModelCmds(textModel, UseDefaultIID());
InterfacePtr<ICommand> insertTextCmd(textModelCmds->InsertCmd(whereTextIndex, insertMe));
status = CmdUtils::ProcessCommand(insertTextCmd);
if(status != kSuccess) {
        break;
  }

  // Change the page item into an inline.
InterfacePtr<ICommand> changeILGCmd(CmdUtils::CreateCommand(kChangeILGCmdBoss));
if (changeILGCmd == nil) {
        break;
}
InterfacePtr<IRangeData> rangeData(changeILGCmd, UseDefaultIID());
if (rangeData == nil) {
        break;
}
rangeData->Set(whereTextIndex, whereTextIndex);
InterfacePtr<IUIDData> ilgUIDData(changeILGCmd, UseDefaultIID());
if (ilgUIDData == nil) {
        break;
}
ilgUIDData->Set(frameUIDRef);
changeILGCmd->SetItemList(UIDList(textModel));
status = CmdUtils::ProcessCommand(changeILGCmd);

InterfacePtr<ITextModel> textModel(storyUIDRef, UseDefaultIID());
if(!textModel) {
        break;
}
InterfacePtr<IGeometry> pageItemGeometry(frameUIDRef, UseDefaultIID());
if (pageItemGeometry == nil) {
        break;
}

// Insert character in text flow to anchor the inline.
boost::shared_ptr<WideString> insertMe(new WideString);

insertMe->Append(kTextChar_Inline);
InterfacePtr<ITextModelCmds> textModelCmds(textModel, UseDefaultIID());
InterfacePtr<ICommand> insertTextCmd(textModelCmds->InsertCmd(whereTextIndex, insertMe));
status = CmdUtils::ProcessCommand(insertTextCmd);
if(status != kSuccess) {
        break;
}

// Change the page item into an inline.
InterfacePtr<ICommand> changeILGCmd(CmdUtils::CreateCommand(kChangeILGCmdBoss));
if (changeILGCmd == nil) {
       break;
}
InterfacePtr<IRangeData> rangeData(changeILGCmd, UseDefaultIID());
if (rangeData == nil) {
        break;
}
rangeData->Set(whereTextIndex, whereTextIndex);
InterfacePtr<IUIDData> ilgUIDData(changeILGCmd, UseDefaultIID());
if (ilgUIDData == nil) {
        break;
}
ilgUIDData->Set(frameUIDRef);
changeILGCmd->SetItemList(UIDList(textModel));
status = CmdUtils::ProcessCommand(changeILGCmd);

//this created an Inline frame

UIDList newList;

newList = changeILGCmd->GetItemListReference();

// trying to set the position through newList

In the snippet its with active selection which i don't have here. Thus am trying to use the newList. I also tried IAnchoredObjectData command with the newList. Even that is not successful.

Is there something wrong what i am doing.

If someone has already tried this before please do let me know.

Thanks all in Advance.

Regards

Farzana.

This topic has been closed for replies.