Search code examples
ibm-doors

dxl script to paste the clipboard contents in selected objects


I want to add clipboard contents in existing Object Text using dxl script.

I searched around, including dxl_reference_manual but nothing helped.

The object in selection has some text for example "Already existing text in this object" and clipboard contents for example "My Clipboard text" should add at the beginning and form as a single object.

(Output should be something like below in a single object.)

My Clipboard text Already existing text in this object

My code:

Skip    fGetSelectedObjects(Module in_mod) 
{     
    Skip    skpObjects = create()  // Return KEY and DATA both 'Object'
    if (null in_mod) return(skpObjects)
    Object  oCurr = current,
                    o
    for o in entire (in_mod) do
    {  if (isSelected(o)   or
           o == oCurr)              put(skpObjects, o, o)
    }
    return(skpObjects)
}     // end fGetSelectedObjects()
Skip    skpObjects = fGetSelectedObjects(current Module)
Object  o

for o in skpObjects do
{   // deal with the selected o
string s = o."Object text"
// I don't know the way to activate the object text attribute instead  of manual click. Thus it loops through selection and pastes the clipboard contents. 

  pasteToEditbox

//For Single Indentation use 360 points, double indentation 720 points and so on...

o."Object text" = richText (applyTextFormattingToParagraph(richText s,false,360,0))      

}
delete(skpObjects)

Solution

  • Not sure why you would be using a Skip for this. I would look to do the following:

    // Create Variables
    Module mod = current
    Object obj = null
    Buffer buf = create
    string str = stringOf ( richClip )
    
    // Loop through Module
    for obj in entire ( mod ) do {
        // Grab the rich text from the clip and reset the buffer
        buf = str
        // Check if it's selected and object heading is empty
        if ( ( isSelected ( obj ) ) && ( obj."Object Heading" "" == "" ) ) {
            // If it is, add the text to the buffer
            buf += " " richText ( obj."Object Text" )
            // Set the object text with the clip stuff in front
            obj."Object Text" = richText ( buf )
        }
    }
    
    delete buf
    

    Of note, this only works on items that have been specifically selected.

    Edit- added exclusion for objects with an Object Heading. Unfortunately, DOORS does not (as far as I know) allow for non-contiguous object selection (the equivalent of ctrl-left click in Windows) which can be very frustrating.