Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.outliner.openBuddies
on openBuddies (flopenwindow = true, flbringtofront = false) { <<Changes <<3/13/02; 8:35:01 AM by DW <<Created. local (adrdata = radio.outliner.init ()); //set up user.radio.outliner local (flnewoutline = adrdata^.stats.flNewBuddyOutline); local (adroutline = @adrdata^.buddies); local (existingBuddies = {}); bundle { //fill existingBuddies local (outlinecopy = adroutline^, oldtarget = target.set (@outlinecopy), atts); op.firstsummit (); loop { op.attributes.getAll (@atts); if defined (atts.type) { if atts.type == radio.outliner.data.myNodeTypeName { existingBuddies = existingBuddies + {atts.url}}}; if not op.go (down, 1) { break}}; target.set (oldtarget)}; local (newBuddies = {}); bundle { //fill newBuddies local (adrsub); for adrsub in @adrdata^.subscriptions { if not (existingBuddies contains nameof (adrsub^)) { newBuddies = newBuddies + {nameof (adrsub^)}}}}; bundle { //add new buddies to the outline local (oldtarget = target.set (adroutline)); local (oldcursor = op.getCursor ()); local (olddisplay = op.getDisplay ()); op.setDisplay (false); op.go (left, infinity); op.go (down, infinity); local (flsetlinetext); bundle { //set flsetlinetext local (atts); new (tabletype, @atts); op.attributes.getAll (@atts); flsetlinetext = sizeof (atts) == 0}; local (adrsub, url, atts); new (tabletype, @atts); for url in newBuddies { adrsub = @adrdata^.subscriptions.[url]; if flsetlinetext { op.setlinetext (adrsub^.author); flsetlinetext = false} else { op.insert (adrsub^.author, down)}; atts.type = radio.outliner.data.myNodeTypeName; atts.url = url; atts.bold = false; op.attributes.addgroup (@atts)}; op.setCursor (oldcursor); op.setDisplay (olddisplay); target.set (oldtarget)}; if flopenwindow { if (not window.isopen (adroutline)) or flbringtofront { edit (adroutline, windowTitle:"Buddies", flReadOnly:true, adrButtonTable:@radio.outliner.buttons.buddyWindow)}}; }; <<bundle //orig code <<local (adroutline = @adrworkgroup^.outline, flnewoutline = false) <<if not defined (adroutline^) <<new (outlinetype, adroutline) <<flnewoutline = true <<local (existingBuddies = {}) <<bundle //fill existingBuddies <<local (outlinecopy = adroutline^, oldtarget = target.set (@outlinecopy), atts) <<op.firstsummit () <<loop <<op.attributes.getAll (@atts) <<if defined (atts.type) <<if atts.type == "instantOutlinerMember" <<existingBuddies = existingBuddies + {atts.usernum} <<if not op.go (down, 1) <<break <<target.set (oldtarget) << <<local (newUsers = {}) <<bundle //fill newUsers <<for adruser in @adrworkgroup^.users <<if not (existingBuddies contains nameof (adruser^)) <<newUsers = newUsers + {nameof (adruser^)} << <<bundle //add new users to the outline <<local (oldtarget = target.set (adroutline)) <<local (oldcursor = op.getCursor ()) <<local (olddisplay = op.getDisplay ()) <<op.setDisplay (false) <<op.go (left, infinity); op.go (down, infinity) << <<local (flsetlinetext) <<bundle //set flsetlinetext <<local (atts) <<new (tabletype, @atts) <<op.attributes.getAll (@atts) <<flsetlinetext = sizeof (atts) == 0 << <<local (adruser, atts) <<new (tabletype, @atts) <<for usernum in newUsers <<adruser = @adrworkgroup^.users.[usernum] <<if flsetlinetext <<op.setlinetext (adruser^.name) <<flsetlinetext = false <<else <<op.insert (adruser^.name, down) <<atts.type = "instantOutlinerMember" <<atts.usernum = number (nameof (adruser^)) <<atts.workgroupname = nameof (adrworkgroup^) <<atts.bold = false <<op.attributes.addgroup (@atts) <<if flnewoutline <<op.firstsummit (); op.deleteline () <<else <<op.setCursor (oldcursor) <<op.setDisplay (olddisplay) <<target.set (oldtarget) <<if flopenwindow <<edit (adroutline, windowTitle:nameof (adrworkgroup^), flReadOnly:true, adrButtonTable:@instantOutlinerSuite.buttons.workgroupWindow) <<return (adroutline) bundle { //test code openBuddies ()}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.