make attributeManager use
This commit is contained in:
parent
02624a692a
commit
366328dad7
@ -19,7 +19,8 @@ class command():
|
||||
def run(self):
|
||||
cursorPos = self.env['runtime']['cursorManager'].getReviewOrTextCursor()
|
||||
|
||||
attributes = self.env['screen']['newContentAttrib'][cursorPos['y']][cursorPos['x']]
|
||||
attributes = self.env['runtime']['attributeManager'].getAttributeByXY( cursorPos['x'], cursorPos['y'])
|
||||
|
||||
attributeFormatString = self.env['runtime']['settingsManager'].getSetting('general', 'attributeFormatString')
|
||||
attributeFormatString = self.env['runtime']['attributeManager'].formatAttributes(attributes, attributeFormatString)
|
||||
|
||||
|
@ -18,7 +18,8 @@ class command():
|
||||
def run(self):
|
||||
if not self.env['runtime']['settingsManager'].getSettingAsBool('focus', 'highlight'):
|
||||
return
|
||||
self.env['runtime']['outputManager'].presentText(self.env['screen']['newAttribDelta'], soundIcon='', interrupt=True, flush=False)
|
||||
attributeDelta = self.env['runtime']['attributeManager'].getAttributeDelta()
|
||||
self.env['runtime']['outputManager'].presentText(attributeDelta, soundIcon='', interrupt=True, flush=False)
|
||||
|
||||
def setCallback(self, callback):
|
||||
pass
|
||||
|
@ -12,7 +12,6 @@ class attributeManager():
|
||||
self.currAttributes = None
|
||||
self.prevAttributes = None
|
||||
self.currAttributeDelta = ''
|
||||
self.prevAttributeDelta = ''
|
||||
self.currAttributeCursor = None
|
||||
self.prefAttributeCursor = None
|
||||
self.setDefaultAttributes()
|
||||
@ -20,25 +19,29 @@ class attributeManager():
|
||||
self.env = environment
|
||||
def shutdown(self):
|
||||
pass
|
||||
def isAttributeChange(self):
|
||||
if not self.prevAttributes:
|
||||
return False
|
||||
return self.currAttributes != self.prevAttributes
|
||||
def resetAttributeAll(self):
|
||||
self.resetAttributeDelta()
|
||||
self.resetAttributeCursor()
|
||||
def getAttributeDelta(self):
|
||||
return self.currAttributeDelta
|
||||
def resetAttributeDelta(self):
|
||||
self.currAttributeDelta = ''
|
||||
self.prevAttributeDelta = ''
|
||||
def updateAttributeDelta(self, currAttributeDelta):
|
||||
self.prevAttributeDelta = self.currAttributeDelta
|
||||
self.currAttributeDelta = ''
|
||||
def setAttributeDelta(self, currAttributeDelta):
|
||||
self.currAttributeDelta = currAttributeDelta
|
||||
def resetAttributeCursor(self):
|
||||
self.currAttributeCursor = None
|
||||
self.prefAttributeCursor = None
|
||||
def updateAttributeCursor(self, currAttributeCursor):
|
||||
def setAttributeCursor(self, currAttributeCursor):
|
||||
self.prefAttributeCursor = self.currAttributeCursor
|
||||
self.currAttributeCursor = currAttributeCursor
|
||||
def resetAttributeData(self, currAttributes):
|
||||
self.currAttributeCursor = currAttributeCursor.copy()
|
||||
def resetAttributes(self, currAttributes):
|
||||
self.prevAttributes = None
|
||||
self.currAttributes = currAttributes
|
||||
def updateAttributeData(self, currAttributes):
|
||||
def setAttributes(self, currAttributes):
|
||||
self.prevAttributes = self.currAttributes
|
||||
self.currAttributes = currAttributes.copy()
|
||||
def getAttributeByXY(self, x, y):
|
||||
@ -46,23 +49,18 @@ class attributeManager():
|
||||
return None
|
||||
if len(self.currAttributes) < y:
|
||||
return None
|
||||
if len(self.currAttributes[y]) < x:
|
||||
return None
|
||||
return self.currAttributes[y][x]
|
||||
if len(self.currAttributes[y]) < x - 1:
|
||||
return None
|
||||
try:
|
||||
return self.currAttributes[y][x].copy()
|
||||
except KeyError:
|
||||
try:
|
||||
return self.defaultAttributes[0]
|
||||
except:
|
||||
pass
|
||||
return None
|
||||
def setDefaultAttributes(self):
|
||||
self.defaultAttributes = []
|
||||
self.defaultAttributes.append((
|
||||
'white', # fg
|
||||
'black', # bg
|
||||
False, # bold
|
||||
False, # italics
|
||||
False, # underscore
|
||||
False, # strikethrough
|
||||
False, # reverse
|
||||
False, # blink
|
||||
'default', # fontsize
|
||||
'default' # fontfamily
|
||||
)) #end attribute
|
||||
self.defaultAttributes.append((
|
||||
'default', # fg
|
||||
'default', # bg
|
||||
@ -74,7 +72,19 @@ class attributeManager():
|
||||
False, # blink
|
||||
'default', # fontsize
|
||||
'default' # fontfamily
|
||||
)) #end attribute
|
||||
)) #end attribute
|
||||
self.defaultAttributes.append((
|
||||
'white', # fg
|
||||
'black', # bg
|
||||
False, # bold
|
||||
False, # italics
|
||||
False, # underscore
|
||||
False, # strikethrough
|
||||
False, # reverse
|
||||
False, # blink
|
||||
'default', # fontsize
|
||||
'default' # fontfamily
|
||||
)) #end attribute
|
||||
def isDefaultAttribute(self,attribute):
|
||||
return attribute in self.defaultAttributes
|
||||
def formatAttributes(self, attribute, attributeFormatString = None):
|
||||
@ -191,25 +201,26 @@ class attributeManager():
|
||||
attributeFormatString = attributeFormatString.replace('fenrirFont', _('default'))
|
||||
|
||||
return attributeFormatString
|
||||
def trackHighlights(self, oldAttr, newAttr, text):
|
||||
def trackHighlights(self):
|
||||
|
||||
result = ''
|
||||
currCursor = None
|
||||
# screen change
|
||||
if oldAttr == None:
|
||||
if self.prevAttributes == None:
|
||||
return result, currCursor
|
||||
# no change
|
||||
if oldAttr == newAttr:
|
||||
if self.prevAttributes == self.currAttributes:
|
||||
return result, currCursor
|
||||
# error case
|
||||
if newAttr == None:
|
||||
if self.currAttributes == None:
|
||||
return result, currCursor
|
||||
# special case for pty if not text exists.
|
||||
if len(newAttr) == 0:
|
||||
if len(self.currAttributes) == 0:
|
||||
return result, currCursor
|
||||
|
||||
text = self.env['runtime']['screenManager'].getScreenText()
|
||||
textLines = text.split('\n')
|
||||
|
||||
if len(textLines) != len(newAttr):
|
||||
if len(textLines) != len(self.currAttributes):
|
||||
return result, currCursor
|
||||
#print(len(textLines), len(newAttr))
|
||||
#background = []
|
||||
@ -240,11 +251,11 @@ class attributeManager():
|
||||
except Exception as e:
|
||||
print(e)
|
||||
#background.append((7,7,0,0,0,0))
|
||||
for line in range(len(oldAttr)):
|
||||
if oldAttr[line] != newAttr[line]:
|
||||
for column in range(len(oldAttr[line])):
|
||||
if oldAttr[line][column] != newAttr[line][column]:
|
||||
if not self.isDefaultAttribute(newAttr[line][column]):
|
||||
for line in range(len(self.prevAttributes)):
|
||||
if self.prevAttributes[line] != self.currAttributes[line]:
|
||||
for column in range(len(self.prevAttributes[line])):
|
||||
if self.prevAttributes[line][column] != self.currAttributes[line][column]:
|
||||
if not self.isDefaultAttribute(self.currAttributes[line][column]):
|
||||
if not currCursor:
|
||||
currCursor = {'x': column, 'y': line}
|
||||
result += textLines[line][column]
|
||||
|
@ -12,6 +12,8 @@ class screenManager():
|
||||
def __init__(self):
|
||||
self.currScreenIgnored = False
|
||||
self.prevScreenIgnored = False
|
||||
self.prevScreenText = ''
|
||||
self.currScreenText = ''
|
||||
def initialize(self, environment):
|
||||
self.env = environment
|
||||
self.env['runtime']['settingsManager'].loadDriver(\
|
||||
@ -20,8 +22,15 @@ class screenManager():
|
||||
self.getCurrScreen()
|
||||
self.getSessionInformation()
|
||||
self.updateScreenIgnored()
|
||||
self.updateScreenIgnored()
|
||||
|
||||
self.updateScreenIgnored()
|
||||
def resetScreenText(self, screenText):
|
||||
self.prevScreenText = ''
|
||||
self.currScreenText = screenText
|
||||
def setScreenText(self, screenText):
|
||||
self.prevScreenText = self.currScreenText
|
||||
self.currScreenText = screenText
|
||||
def getScreenText(self):
|
||||
return self.currScreenText
|
||||
def getCurrScreen(self):
|
||||
try:
|
||||
self.env['runtime']['screenDriver'].getCurrScreen()
|
||||
@ -75,12 +84,8 @@ class screenManager():
|
||||
# set new "old" values
|
||||
self.env['screen']['oldContentBytes'] = self.env['screen']['newContentBytes']
|
||||
self.env['screen']['oldContentText'] = self.env['screen']['newContentText']
|
||||
self.env['screen']['oldContentAttrib'] = self.env['screen']['newContentAttrib']
|
||||
self.env['screen']['oldCursor'] = self.env['screen']['newCursor'].copy()
|
||||
if self.env['screen']['newCursorAttrib']:
|
||||
self.env['screen']['oldCursorAttrib'] = self.env['screen']['newCursorAttrib'].copy()
|
||||
self.env['screen']['oldCursor'] = self.env['screen']['newCursor'].copy()
|
||||
self.env['screen']['oldDelta'] = self.env['screen']['newDelta']
|
||||
self.env['screen']['oldAttribDelta'] = self.env['screen']['newAttribDelta']
|
||||
self.env['screen']['oldNegativeDelta'] = self.env['screen']['newNegativeDelta']
|
||||
self.env['screen']['newContentBytes'] = eventData['bytes']
|
||||
|
||||
@ -91,23 +96,25 @@ class screenManager():
|
||||
self.env['screen']['newCursor']['y'] = int( eventData['textCursor']['y'])
|
||||
self.env['screen']['newTTY'] = eventData['screen']
|
||||
self.env['screen']['newContentText'] = eventData['text']
|
||||
self.env['screen']['newContentAttrib'] = eventData['attributes']
|
||||
|
||||
# screen change
|
||||
if self.env['screen']['newTTY'] != self.env['screen']['oldTTY']:
|
||||
if self.isScreenChange():
|
||||
self.env['screen']['oldContentBytes'] = b''
|
||||
self.env['screen']['oldContentAttrib'] = None
|
||||
self.resetScreenText(eventData['text'])
|
||||
self.env['runtime']['attributeManager'].resetAttributes(eventData['attributes'])
|
||||
self.env['runtime']['attributeManager'].resetAttributeCursor()
|
||||
self.env['screen']['oldContentText'] = ''
|
||||
self.env['screen']['oldCursor']['x'] = 0
|
||||
self.env['screen']['oldCursor']['y'] = 0
|
||||
self.env['screen']['oldDelta'] = ''
|
||||
self.env['screen']['oldAttribDelta'] = ''
|
||||
self.env['screen']['oldCursorAttrib'] = None
|
||||
self.env['screen']['newCursorAttrib'] = None
|
||||
self.env['screen']['oldNegativeDelta'] = ''
|
||||
self.env['screen']['oldDelta'] = ''
|
||||
self.env['screen']['oldNegativeDelta'] = ''
|
||||
else:
|
||||
self.setScreenText(eventData['text'])
|
||||
self.env['runtime']['attributeManager'].setAttributes(eventData['attributes'])
|
||||
# initialize current deltas
|
||||
self.env['screen']['newNegativeDelta'] = ''
|
||||
self.env['screen']['newDelta'] = ''
|
||||
self.env['screen']['newAttribDelta'] = ''
|
||||
self.env['runtime']['attributeManager'].resetAttributeDelta()
|
||||
|
||||
# changes on the screen
|
||||
oldScreenText = re.sub(' +',' ',self.env['runtime']['screenManager'].getWindowAreaInText(self.env['screen']['oldContentText']))
|
||||
@ -157,9 +164,12 @@ class screenManager():
|
||||
|
||||
# track highlighted
|
||||
try:
|
||||
if self.env['screen']['oldContentAttrib'] != self.env['screen']['newContentAttrib']:
|
||||
if self.env['runtime']['attributeManager'].isAttributeChange():
|
||||
if self.env['runtime']['settingsManager'].getSettingAsBool('focus', 'highlight'):
|
||||
self.env['screen']['newAttribDelta'], self.env['screen']['newCursorAttrib'] = self.env['runtime']['attributeManager'].trackHighlights(self.env['screen']['oldContentAttrib'], self.env['screen']['newContentAttrib'], self.env['screen']['newContentText'])
|
||||
attributeDelta, attributeCursor = self.env['runtime']['attributeManager'].trackHighlights()
|
||||
if attributeCursor:
|
||||
self.env['runtime']['attributeManager'].setAttributeCursor(attributeCursor)
|
||||
self.env['runtime']['attributeManager'].setAttributeDelta(attributeDelta)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
self.env['runtime']['debug'].writeDebugOut('screenManager:update:highlight: ' + str(e),debug.debugLevel.ERROR)
|
||||
|
Loading…
Reference in New Issue
Block a user