#!/usr/bin/env python3 # # MiRCARTToolSelect.py -- XXX # Copyright (c) 2018 Lucio Andrés Illanes Albornoz # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # from MiRCARTTool import MiRCARTTool class MiRCARTToolSelect(MiRCARTTool): """XXX""" toolColours = toolRect = toolState = None toolLastAtPoint = None toolSelectMap = None srcRect = None TS_NONE = 0 TS_ORIGIN = 1 TS_TARGET = 2 # {{{ _drawSelectRect(self, rect, dispatchFn, eventDc): XXX def _drawSelectRect(self, rect, dispatchFn, eventDc): rectFrame = [ \ [rect[0][0]-1, rect[0][1]-1], \ [rect[1][0]+1, rect[1][1]+1]] if rectFrame[0][0] > rectFrame[1][0]: rectFrame[0][0], rectFrame[1][0] = \ rectFrame[1][0], rectFrame[0][0] if rectFrame[0][1] > rectFrame[1][1]: rectFrame[0][1], rectFrame[1][1] = \ rectFrame[1][1], rectFrame[0][1] curColours = [0, 0] for rectX in range(rectFrame[0][0], rectFrame[1][0]+1): if curColours == [0, 0]: curColours = [1, 1] else: curColours = [0, 0] dispatchFn(eventDc, True, \ [rectX, rectFrame[0][1], *curColours, 0, " "]) dispatchFn(eventDc, True, \ [rectX, rectFrame[1][1], *curColours, 0, " "]) for rectY in range(rectFrame[0][1], rectFrame[1][1]+1): if curColours == [0, 0]: curColours = [1, 1] else: curColours = [0, 0] dispatchFn(eventDc, True, \ [rectFrame[0][0], rectY, *curColours, 0, " "]) dispatchFn(eventDc, True, \ [rectFrame[1][0], rectY, *curColours, 0, " "]) # }}} # # onSelectEvent(self, event, atPoint, selectRect, brushColours, brushSize, isLeftDown, isRightDown, dispatchFn, eventDc): XXX def onSelectEvent(self, event, atPoint, selectRect, brushColours, brushSize, isLeftDown, isRightDown, dispatchFn, eventDc): pass # # onMouseEvent(self, event, atPoint, brushColours, brushSize, isDragging, isLeftDown, isRightDown, dispatchFn, eventDc): XXX def onMouseEvent(self, event, atPoint, brushColours, brushSize, isDragging, isLeftDown, isRightDown, dispatchFn, eventDc): if self.toolState == self.TS_NONE: if isLeftDown or isRightDown: self.toolColours = [0, 1] self.toolRect = [list(atPoint), []] self.toolState = self.TS_ORIGIN else: dispatchFn(eventDc, True, \ [*atPoint, *brushColours, 0, " "]) elif self.toolState == self.TS_ORIGIN: self.toolRect[1] = list(atPoint) if isLeftDown or isRightDown: if self.toolRect[0][0] > self.toolRect[1][0]: self.toolRect[0][0], self.toolRect[1][0] = \ self.toolRect[1][0], self.toolRect[0][0] if self.toolRect[0][1] > self.toolRect[1][1]: self.toolRect[0][1], self.toolRect[1][1] = \ self.toolRect[1][1], self.toolRect[0][1] self.srcRect = self.toolRect[0] self.toolLastAtPoint = list(atPoint) self.toolState = self.TS_TARGET self.toolSelectMap = [] for numRow in range((self.toolRect[1][1] - self.toolRect[0][1]) + 1): self.toolSelectMap.append([]) for numCol in range((self.toolRect[1][0] - self.toolRect[0][0]) + 1): rectY = self.toolRect[0][1] + numRow rectX = self.toolRect[0][0] + numCol self.toolSelectMap[numRow].append( \ self.parentCanvas.canvasMap[rectY][rectX]) self._drawSelectRect(self.toolRect, dispatchFn, eventDc) elif self.toolState == self.TS_TARGET: if isRightDown: self.onSelectEvent(event, atPoint, self.toolRect, \ brushColours, brushSize, isLeftDown, isRightDown, \ dispatchFn, eventDc) self.toolColours = None self.toolRect = None self.toolState = self.TS_NONE else: self.onSelectEvent(event, atPoint, self.toolRect, \ brushColours, brushSize, isLeftDown, isRightDown, \ dispatchFn, eventDc) # __init__(self, *args): initialisation method def __init__(self, *args): super().__init__(*args) self.toolColours = None self.toolRect = None self.toolState = self.TS_NONE self.toolLastAtPoint = None self.toolSelectMap = None # vim:expandtab foldmethod=marker sw=4 ts=4 tw=120