basicDynamicScroll.py (24485B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\control\basicDynamicScroll.py 2 from contextlib import contextmanager 3 import telemetry 4 import uthread 5 import _weakref 6 import log 7 import carbonui.const as uiconst 8 from carbon.common.script.util.timerstuff import AutoTimer 9 from carbonui.primitives.container import Container 10 from carbonui.uicore import uicore 11 from eve.client.script.ui.control.eveScroll import Scroll 12 13 class BasicDynamicScroll(Scroll): 14 isTabStop = 1 15 scrollEnabled = True 16 default_name = 'scroll' 17 default_multiSelect = 1 18 default_stickToBottom = 0 19 default_state = uiconst.UI_NORMAL 20 default_autoPurgeHiddenEntries = True 21 default_entry_spacing = 0 22 23 def ApplyAttributes(self, attributes): 24 self.blockCreationOfNewUpdateThread = False 25 self.entry_spacing = attributes.get('entry_spacing', None) 26 if self.entry_spacing is None: 27 self.entry_spacing = self.default_entry_spacing 28 self._pushContent = attributes.get('pushContent', self.default_pushContent) 29 self._innerPadding = self._sanitize_inner_padding_value(attributes.get('innerPadding', self.default_innerPadding)) 30 Container.ApplyAttributes(self, attributes) 31 self.sr.maincontainer = Container(parent=self, name='maincontainer', clipChildren=True) 32 self.sr.clipper = Container(name='__clipper', align=uiconst.TOALL, parent=self.sr.maincontainer, padding=self._get_clipper_padding(), clipChildren=True) 33 self.sr.clipper._OnSizeChange_NoBlock = self.OnClipperResize 34 self.sr.content = Container(name='__content', align=uiconst.RELATIVE, parent=self.sr.clipper, state=uiconst.UI_NORMAL) 35 self.loadingWheel = None 36 self.Release() 37 self.multiSelect = attributes.get('multiSelect', self.default_multiSelect) 38 self.stickToBottom = attributes.get('stickToBottom', self.default_stickToBottom) 39 self.autoPurgeHiddenEntries = attributes.get('autoPurgeHiddenEntries', self.default_autoPurgeHiddenEntries) 40 self.sr.selfProxy = _weakref.proxy(self) 41 self.Prepare_() 42 self._mouseHoverCookie = uicore.uilib.RegisterForTriuiEvents(uiconst.UI_MOUSEHOVER, self.OnGlobalMouseHover) 43 44 def Close(self, *args, **kwds): 45 self.cleanupTimer = None 46 return Scroll.Close(self, *args, **kwds) 47 48 def Release(self): 49 self._loading = 0 50 self._position = 0 51 self._totalHeight = 0 52 self.scrollingRange = 0 53 self.sr.nodes = [] 54 self.visibleNodes = [] 55 self.sr.hint = None 56 self.updatePositionThread = None 57 self.debug = 0 58 self.scrolling = 0 59 self.scalingcol = 0 60 self.lastSelected = None 61 self.lastCharReceivedAt = 0 62 self.currChars = '' 63 self.hideBackground = False 64 self.destroyInvisibleEntries = False 65 self.lazyLoadNodes = False 66 67 @telemetry.ZONE_METHOD 68 def ShowNodeIdx(self, idx, *args, **kwds): 69 if self.scrollingRange: 70 node = self.GetNode(idx) 71 if not node: 72 return 73 fromTop = node.positionFromTop 74 if fromTop is None: 75 self.UpdateNodesWidthAndPosition() 76 fromTop = node.positionFromTop 77 if self._position > fromTop: 78 portion = fromTop / float(self.scrollingRange) 79 self.ScrollToProportion(portion) 80 else: 81 clipperWidth, clipperHeight = self.sr.clipper.GetAbsoluteSize() 82 if fromTop + node.height > self._position + clipperHeight: 83 portion = (fromTop - clipperHeight + node.height) / float(self.scrollingRange) 84 self.ScrollToProportion(portion) 85 86 @telemetry.ZONE_METHOD 87 def ChangeNodeIndex(self, newIndex, node): 88 oldIndex = None 89 if node in self.sr.nodes: 90 oldIndex = self.sr.nodes.index(node) 91 self.sr.nodes.remove(node) 92 if newIndex == -1: 93 newIndex = len(self.sr.nodes) 94 self.sr.nodes.insert(newIndex, node) 95 clipperWidth, clipperHeight = self.sr.clipper.GetAbsoluteSize() 96 self.UpdateNodesWidthAndPosition(clipperWidth) 97 self.UpdatePosition() 98 99 @telemetry.ZONE_METHOD 100 def UpdateNodesWidthAndPosition(self, clipperWidth = None, forceUpdate = False): 101 if self.destroyed: 102 return 103 _, inner_pad_top, _, inner_pad_bottom = self._innerPadding 104 updateWidth = clipperWidth is not None 105 fromTopPosition = inner_pad_top 106 for nodeIndex, node in enumerate(self.sr.nodes): 107 if nodeIndex > 0: 108 fromTopPosition += self.entry_spacing 109 if updateWidth and not node.fixedHeight and node._lastClipperWidth != clipperWidth: 110 node.height = node.dynamicHeightFunction(node, clipperWidth) 111 node._lastClipperWidth = clipperWidth 112 elif forceUpdate and not node.fixedHeight: 113 node.height = node.dynamicHeightFunction(node, node._lastClipperWidth) 114 if node.panel and node.panel.state != uiconst.UI_HIDDEN: 115 node.panel.top = fromTopPosition 116 if updateWidth: 117 node.panel.width = clipperWidth 118 node.panel.height = node.height 119 node.positionFromTop = fromTopPosition 120 node.idx = nodeIndex 121 fromTopPosition += node.height 122 123 fromTopPosition += inner_pad_bottom 124 if updateWidth: 125 self.sr.content.width = clipperWidth 126 self.SetTotalHeight(fromTopPosition) 127 128 def SetOrderedNodes(self, nodes, loadNodes = True): 129 self.sr.nodes = nodes 130 self.UpdateNodesWidthAndPosition() 131 return self.UpdatePosition(loadNodes=loadNodes) 132 133 def SetFilteredNodes(self, nodes, loadNodes = True): 134 for visNode in self.visibleNodes: 135 if visNode in nodes: 136 continue 137 displayScrollEntry = visNode.panel 138 if displayScrollEntry and not displayScrollEntry.destroyed: 139 displayScrollEntry.Close() 140 visNode.panel = None 141 142 self.sr.nodes = nodes 143 self.UpdateNodesWidthAndPosition() 144 return self.UpdatePosition(loadNodes=loadNodes) 145 146 def ReloadNodes(self, nodes, updateHeight = False): 147 if updateHeight: 148 for node in nodes: 149 node._lastClipperWidth = None 150 151 clipperWidth, clipperHeight = self.sr.clipper.GetAbsoluteSize() 152 self.UpdateNodesWidthAndPosition(clipperWidth) 153 for node in nodes: 154 if node.panel: 155 node.panel.Load(node) 156 157 self.UpdatePosition(fromWhere='ReloadNodes') 158 159 @telemetry.ZONE_METHOD 160 def AddNodes(self, fromIdx, nodesData, updateScroll = True, *args, **kwds): 161 if fromIdx == -1: 162 fromIdx = len(self.sr.nodes) 163 clipperWidth = None 164 idx = fromIdx 165 for node in nodesData: 166 if node in self.sr.nodes: 167 continue 168 node.panel = None 169 node.scroll = self.sr.selfProxy 170 node.selected = node.get('isSelected', 0) 171 fixedHeight = getattr(node.decoClass, 'ENTRYHEIGHT', None) 172 if fixedHeight: 173 node.fixedHeight = fixedHeight 174 node.height = fixedHeight 175 else: 176 dynamicHeightFunction = getattr(node.decoClass, 'GetDynamicHeight', None) 177 if dynamicHeightFunction: 178 if clipperWidth is None: 179 clipperWidth, clipperHeight = self.sr.clipper.GetAbsoluteSize() 180 node.dynamicHeightFunction = dynamicHeightFunction 181 node.height = dynamicHeightFunction(node, clipperWidth) 182 node._lastClipperWidth = clipperWidth 183 else: 184 raise RuntimeError('Fatal error in baseScroll, nodeclass has to have either ENTRYHEIGHT or GetDynamicHeight function') 185 preLoadFunction = getattr(node.decoClass, 'PreLoad', None) 186 if preLoadFunction: 187 preLoadFunction(node) 188 if self.destroyed: 189 return 190 self.sr.nodes.insert(idx, node) 191 idx += 1 192 193 if updateScroll: 194 if clipperWidth is None: 195 clipperWidth, clipperHeight = self.sr.clipper.GetAbsoluteSize() 196 self.UpdateNodesWidthAndPosition(clipperWidth) 197 self.UpdatePosition(fromWhere='AddNodes') 198 199 @telemetry.ZONE_METHOD 200 def RemoveNodes(self, nodes, updateScroll = True): 201 for node in nodes: 202 if node.panel: 203 node.panel.Close() 204 if node in self.sr.nodes: 205 self.sr.nodes.remove(node) 206 207 if updateScroll: 208 clipperWidth, clipperHeight = self.sr.clipper.GetAbsoluteSize() 209 self.UpdateNodesWidthAndPosition(clipperWidth) 210 self.UpdatePosition(fromWhere='RemoveNodes') 211 212 @telemetry.ZONE_METHOD 213 def Clear(self): 214 self.sr.nodes = [] 215 self.visibleNodes = [] 216 self.sr.content.Flush() 217 self.SetTotalHeight(0) 218 self.UpdatePosition(fromWhere='RemoveNodes') 219 220 @telemetry.ZONE_METHOD 221 def PurgeInvisibleEntries(self, *args): 222 self.cleanupTimer = None 223 purgeCount = 0 224 if self.sr.nodes: 225 for node in self.sr.nodes: 226 if not node.panel: 227 continue 228 if node.panel.state != uiconst.UI_HIDDEN: 229 continue 230 panel = node.panel 231 node.panel = None 232 panel.Close() 233 purgeCount += 1 234 235 @telemetry.ZONE_METHOD 236 def SetTotalHeight(self, newTotalHeight): 237 self._totalHeight = max(0, newTotalHeight) 238 atBottom = self._position and self._position == self.scrollingRange 239 clipperWidth, clipperHeight = self.sr.clipper.GetCurrentAbsoluteSize() 240 if not clipperWidth or not clipperHeight: 241 clipperWidth, clipperHeight = self.sr.clipper.GetAbsoluteSize() 242 self.scrollingRange = max(0, self._totalHeight - clipperHeight) 243 if self.scrollingRange and self.scrollEnabled: 244 self._scrollbar_vertical.display = True 245 else: 246 self._scrollbar_vertical.display = False 247 if not self.scrollingRange or atBottom or self.stickToBottom: 248 self._position = self.scrollingRange 249 self._position = min(self._position, self.scrollingRange) 250 self.sr.content.height = max(clipperHeight, self._totalHeight) 251 self.sr.content.width = clipperWidth 252 253 @telemetry.ZONE_METHOD 254 def UpdatePositionThreaded(self, *args, **kwds): 255 killThread = self.updatePositionThread 256 if self.blockCreationOfNewUpdateThread: 257 self.updatePositionThread = None 258 else: 259 self.updatePositionThread = uthread.new(self.UpdatePosition) 260 if killThread: 261 killThread.kill() 262 263 @contextmanager 264 def KillUpdateThreadAndBlock(self): 265 self.blockCreationOfNewUpdateThread = True 266 try: 267 if self.updatePositionThread: 268 self.updatePositionThread.kill() 269 self.updatePositionThread = None 270 yield 271 finally: 272 self.blockCreationOfNewUpdateThread = False 273 274 @telemetry.ZONE_METHOD 275 def UpdatePosition(self, fromWhere = None, loadNodes = True): 276 if self.destroyed: 277 return 278 clipperWidth, clipperHeight = self.sr.clipper.GetAbsoluteSize() 279 self.sr.content.top = int(-self._position) 280 self.UpdateScrollHandle(clipperHeight, fromWhere='UpdatePosition') 281 scrollPosition = self._position 282 UI_HIDDEN = uiconst.UI_HIDDEN 283 while self.visibleNodes: 284 node = self.visibleNodes.pop() 285 displayScrollEntry = node.panel 286 if not displayScrollEntry: 287 continue 288 if displayScrollEntry.state != UI_HIDDEN: 289 aboveVisible = node.positionFromTop + displayScrollEntry.height < scrollPosition 290 belowVisible = scrollPosition + clipperHeight < node.positionFromTop 291 if aboveVisible or belowVisible: 292 if getattr(displayScrollEntry, '__notifyevents__', None) is not None: 293 sm.UnregisterNotify(displayScrollEntry) 294 displayScrollEntry.state = UI_HIDDEN 295 296 positionFromTop = 0 297 for node in self.sr.nodes: 298 nodeheight = node.height 299 positionFromTop = node.positionFromTop or 0 300 displayScrollEntry = node.panel 301 if scrollPosition > positionFromTop + nodeheight: 302 continue 303 belowVisible = scrollPosition + clipperHeight < positionFromTop 304 if belowVisible: 305 break 306 if not displayScrollEntry: 307 decoClass = node.decoClass 308 displayScrollEntry = decoClass(parent=self.sr.content, align=uiconst.TOPLEFT, pos=(0, 309 positionFromTop, 310 clipperWidth, 311 nodeheight), state=uiconst.UI_NORMAL, node=node) 312 displayScrollEntry.sr.node = node 313 node.panel = displayScrollEntry 314 node.scroll = self.sr.selfProxy 315 if hasattr(displayScrollEntry, 'Startup'): 316 displayScrollEntry.Startup(self.sr.selfProxy) 317 elif displayScrollEntry.display: 318 self.visibleNodes.append(node) 319 displayScrollEntry.top = positionFromTop 320 displayScrollEntry.height = nodeheight 321 continue 322 self.visibleNodes.append(node) 323 displayScrollEntry.state = uiconst.UI_NORMAL 324 displayScrollEntry.top = positionFromTop 325 displayScrollEntry.width = clipperWidth 326 displayScrollEntry.height = nodeheight 327 if loadNodes: 328 displayScrollEntry.Load(node) 329 if getattr(displayScrollEntry, '__notifyevents__', None) is not None: 330 sm.RegisterNotify(displayScrollEntry) 331 332 self.updatePositionThread = None 333 if self.autoPurgeHiddenEntries: 334 self.cleanupTimer = AutoTimer(1500, self.PurgeInvisibleEntries) 335 336 @telemetry.ZONE_METHOD 337 def GetNode(self, idx, *args, **kwds): 338 allNodes = self.sr.nodes 339 if allNodes: 340 if idx == -1: 341 return allNodes[-1] 342 if len(allNodes) > idx: 343 return allNodes[idx] 344 345 @telemetry.ZONE_METHOD 346 def OnContentResize(self, clipperWidth, clipperHeight, *args, **kw): 347 if self.sr.hint: 348 newWidth = clipperWidth - self.sr.hint.left * 2 349 if abs(newWidth - self.sr.hint.width) > 12: 350 self.sr.hint.width = newWidth 351 if self.sr.content: 352 self.UpdateNodesWidthAndPosition(clipperWidth) 353 self.UpdatePositionThreaded(fromWhere='OnContentResize') 354 if not self.destroyed: 355 self.Resizing() 356 357 def GetScrollRange(self): 358 return self.scrollingRange 359 360 def Prepare_(self, *args, **kwds): 361 return Scroll.Prepare_(self, *args, **kwds) 362 363 def Prepare_Underlay_(self, *args, **kwds): 364 return Scroll.Prepare_Underlay_(self, *args, **kwds) 365 366 def Prepare_ScrollControls_(self, *args, **kwds): 367 return Scroll.Prepare_ScrollControls_(self, *args, **kwds) 368 369 def RemoveActiveFrame(self, *args, **kwds): 370 return Scroll.RemoveActiveFrame(self, *args, **kwds) 371 372 def HideBackground(self, *args, **kwds): 373 return Scroll.HideBackground(self, *args, **kwds) 374 375 HideUnderLay = HideBackground 376 377 def SetNoBackgroundFlag(self, *args, **kwds): 378 return Scroll.SetNoBackgroundFlag(self, *args, **kwds) 379 380 def OnSetFocus(self, *args, **kwds): 381 return Scroll.OnSetFocus(self, *args, **kwds) 382 383 def OnKillFocus(self, *args, **kwds): 384 return Scroll.OnKillFocus(self, *args, **kwds) 385 386 def GetNodes(self, *args, **kwds): 387 return self.sr.nodes 388 389 def SetSelected(self, *args, **kwds): 390 return Scroll.SetSelected(self, *args, **kwds) 391 392 def ActivateIdx(self, *args, **kwds): 393 return Scroll.ActivateIdx(self, *args, **kwds) 394 395 def _SelectNode(self, *args, **kwds): 396 return Scroll._SelectNode(self, *args, **kwds) 397 398 def _DeselectNode(self, *args, **kwds): 399 return Scroll._DeselectNode(self, *args, **kwds) 400 401 def SelectNodes(self, *args, **kwds): 402 return Scroll.SelectNodes(self, *args, **kwds) 403 404 def SelectNode(self, *args, **kwds): 405 return Scroll.SelectNode(self, *args, **kwds) 406 407 def ReportSelectionChange(self, *args, **kwds): 408 return Scroll.ReportSelectionChange(self, *args, **kwds) 409 410 def DeselectAll(self, *args, **kwds): 411 return Scroll.DeselectAll(self, *args, **kwds) 412 413 def SelectAll(self, *args, **kwds): 414 return Scroll.SelectAll(self, *args, **kwds) 415 416 def ToggleSelected(self, *args, **kwds): 417 return Scroll.ToggleSelected(self, *args, **kwds) 418 419 def UpdateSelection(self, *args, **kwds): 420 return Scroll.UpdateSelection(self, *args, **kwds) 421 422 def ClearSelection(self, *args, **kwds): 423 return Scroll.ClearSelection(self, *args, **kwds) 424 425 def GetSelectedNodes(self, *args, **kwds): 426 return Scroll.GetSelectedNodes(self, *args, **kwds) 427 428 def GetSelected(self, *args, **kwds): 429 return Scroll.GetSelected(self, *args, **kwds) 430 431 def GetContentContainer(self, *args, **kwds): 432 return Scroll.GetContentContainer(self, *args, **kwds) 433 434 def OnKeyDown(self, *args, **kwds): 435 return Scroll.OnKeyDown(self, *args, **kwds) 436 437 def OnClipperResize(self, *args, **kwds): 438 return Scroll.OnClipperResize(self, *args, **kwds) 439 440 def GetContentWidth(self, *args, **kwds): 441 return Scroll.GetContentWidth(self, *args, **kwds) 442 443 def GetContentHeight(self, *args, **kwds): 444 return Scroll.GetContentHeight(self, *args, **kwds) 445 446 GetTotalHeight = GetContentHeight 447 448 def GetContentParentSize(self, *args, **kwds): 449 return Scroll.GetContentParentSize(self, *args, **kwds) 450 451 def UpdatePositionLoop(self, *args, **kwds): 452 Scroll.UpdatePositionLoop(self, *args, **kwds) 453 454 def UpdateScrollHandle(self, *args, **kwds): 455 return Scroll.UpdateScrollHandle(self, *args, **kwds) 456 457 def OnChar(self, *args, **kwds): 458 return Scroll.OnChar(self, *args, **kwds) 459 460 def _OnCharThread(self, *args, **kwds): 461 return Scroll._OnCharThread(self, *args, **kwds) 462 463 def BrowseNodes(self, *args, **kwds): 464 return Scroll.BrowseNodes(self, *args, **kwds) 465 466 BrowseEntries = BrowseNodes 467 468 def OnUp(self, *args, **kwds): 469 return Scroll.OnUp(self, *args, **kwds) 470 471 def OnDown(self, *args, **kwds): 472 return Scroll.OnDown(self, *args, **kwds) 473 474 def OnHome(self, *args, **kwds): 475 return Scroll.OnHome(self, *args, **kwds) 476 477 def OnEnd(self, *args, **kwds): 478 return Scroll.OnEnd(self, *args, **kwds) 479 480 def OnMouseWheel(self, *args, **kwds): 481 return Scroll.OnMouseWheel(self, *args, **kwds) 482 483 def Scroll(self, *args, **kwds): 484 return Scroll.Scroll(self, *args, **kwds) 485 486 def GetScrollProportion(self, *args, **kwds): 487 return Scroll.GetScrollProportion(self, *args, **kwds) 488 489 def ScrollToProportion(self, *args, **kwds): 490 return Scroll.ScrollToProportion(self, *args, **kwds) 491 492 def GetMinSize(self, *args, **kwds): 493 return Scroll.GetMinSize(self, *args, **kwds) 494 495 def GetNoItemNode(self, *args, **kwds): 496 return Scroll.GetNoItemNode(self, *args, **kwds) 497 498 def ShowHint(self, *args, **kwds): 499 return Scroll.ShowHint(self, *args, **kwds) 500 501 def GetNodeHeight(self, *args, **kwds): 502 log.LogWarn('BasicDynamicScroll GetNodeHeight NOTACTIVE') 503 504 def CheckOverlaysAndUnderlays(self, *args, **kwds): 505 log.LogWarn('BasicDynamicScroll CheckOverlaysAndUnderlays NOTACTIVE') 506 507 def RemoveEntries(self, *args, **kwds): 508 log.LogWarn('BasicDynamicScroll RemoveEntries NOTACTIVE') 509 510 def AddEntries(self, *args, **kwds): 511 log.LogWarn('BasicDynamicScroll AddEntries NOTACTIVE') 512 513 def CollectSubNodes(self, *args, **kwds): 514 log.LogWarn('BasicDynamicScroll CollectSubNodes NOTACTIVE') 515 516 def DrawHeaders(self, *args, **kwds): 517 log.LogWarn('BasicDynamicScroll DrawHeaders NOT ACTIVE') 518 519 def OnColumnChanged(self, *args, **kwds): 520 log.LogWarn('BasicDynamicScroll OnColumnChanged NOT ACTIVE') 521 522 def OnNewHeaders(self, *args, **kwds): 523 log.LogWarn('BasicDynamicScroll OnNewHeaders NOT ACTIVE') 524 525 def GetSortBy(self, *args, **kwds): 526 log.LogWarn('BasicDynamicScroll GetSortBy NOTACTIVE') 527 528 def GetSortDirection(self, *args, **kwds): 529 log.LogWarn('BasicDynamicScroll GetSortDirection NOTACTIVE') 530 531 def GetSmartSortDirection(self, *args, **kwds): 532 log.LogWarn('BasicDynamicScroll GetSmartSortDirection NOTACTIVE') 533 534 def ToggleSmartSortDirection(self, *args, **kwds): 535 log.LogWarn('BasicDynamicScroll ToggleSmartSortDirection NOTACTIVE') 536 537 def GetSortValue(self, *args, **kwds): 538 log.LogWarn('BasicDynamicScroll GetSortValue NOTACTIVE') 539 540 def _GetSortValue(self, *args, **kwds): 541 log.LogWarn('BasicDynamicScroll _GetSortValue NOTACTIVE') 542 543 def GetColumns(self, *args, **kwds): 544 log.LogWarn('BasicDynamicScroll GetColumns NOTACTIVE') 545 546 def GetHeaderMenu(self, *args, **kwds): 547 log.LogWarn('BasicDynamicScroll GetHeaderMenu NOTACTIVE') 548 549 def GetShowColumnMenu(self, *args, **kwds): 550 log.LogWarn('BasicDynamicScroll GetShowColumnMenu NOTACTIVE') 551 552 def MakePrimary(self, *args, **kwds): 553 log.LogWarn('BasicDynamicScroll MakePrimary NOTACTIVE') 554 555 def GetPrimaryColumn(self, *args, **kwds): 556 log.LogWarn('BasicDynamicScroll GetPrimaryColumn NOTACTIVE') 557 558 def SetColumnsHiddenByDefault(self, columns, *args): 559 log.LogWarn('BasicDynamicScroll SetColumnsHiddenByDefault NOTACTIVE') 560 561 def HideColumn(self, *args, **kwds): 562 log.LogWarn('BasicDynamicScroll HideColumn NOTACTIVE') 563 564 def ShowColumn(self, *args, **kwds): 565 log.LogWarn('BasicDynamicScroll ShowColumn NOTACTIVE') 566 567 def HideTriangle(self, *args, **kwds): 568 log.LogWarn('BasicDynamicScroll HideTriangle NOTACTIVE') 569 570 def Sort(self, *args, **kwds): 571 log.LogWarn('BasicDynamicScroll Sort NOTACTIVE') 572 573 def SortAsRoot(self, *args, **kwds): 574 log.LogWarn('BasicDynamicScroll SortAsRoot NOTACTIVE') 575 576 def GetStringFromNode(self, *args, **kwds): 577 log.LogWarn('BasicDynamicScroll GetStringFromNode NOTACTIVE') 578 579 def RefreshSort(self, *args, **kwds): 580 log.LogWarn('BasicDynamicScroll RefreshSort NOTACTIVE') 581 582 def ChangeSortBy(self, *args, **kwds): 583 log.LogWarn('BasicDynamicScroll ChangeSortBy NOTACTIVE') 584 585 def ChangeColumnOrder(self, *args, **kwds): 586 log.LogWarn('BasicDynamicScroll ChangeColumnOrder NOTACTIVE') 587 588 def HiliteSorted(self, *args, **kwds): 589 log.LogWarn('BasicDynamicScroll HiliteSorted NOTACTIVE') 590 591 def LoadHeaders(self, *args, **kwds): 592 log.LogWarn('BasicDynamicScroll LoadHeaders NOTACTIVE') 593 594 def __LoadHeaders(self, *args, **kwds): 595 log.LogWarn('BasicDynamicScroll __LoadHeaders NOTACTIVE') 596 597 def ResetColumnWidths(self, *args, **kwds): 598 log.LogWarn('BasicDynamicScroll ResetColumnWidths NOTACTIVE') 599 600 def ResetColumnWidth(self, *args, **kwds): 601 log.LogWarn('BasicDynamicScroll ResetColumnWidth NOTACTIVE') 602 603 def ApplyTabstopsToNode(self, *args, **kwds): 604 log.LogWarn('BasicDynamicScroll ApplyTabstopsToNode NOTACTIVE') 605 606 def UpdateTabStops(self, *args, **kwds): 607 log.LogWarn('BasicDynamicScroll UpdateTabStops NOTACTIVE') 608 609 def AddNode(self, *args, **kwds): 610 log.LogWarn('BasicDynamicScroll AddNode NOTACTIVE') 611 612 def PrepareSubContent(self, *args, **kwds): 613 log.LogWarn('BasicDynamicScroll PrepareSubContent NOTACTIVE') 614 615 def SetNodes(self, *args, **kwds): 616 log.LogWarn('BasicDynamicScroll SetNodes NOTACTIVE') 617 618 def RefreshNodes(self, *args, **kwds): 619 log.LogWarn('BasicDynamicScroll RefreshNodes NOTACTIVE') 620 621 def LoadContent(self, *args, **kwds): 622 log.LogWarn('BasicDynamicScroll LoadContent NOTACTIVE') 623 624 def Load(self, *args, **kwds): 625 log.LogWarn('BasicDynamicScroll Load NOTACTIVE')