@ -13,7 +13,7 @@ from PyQt5.QtWidgets import (
)
from tools import (
create_region_string_from_grid_index , toggle_open_in_context_menu
create_region_string_from_grid_index , toggle_open_in_context_menu , get_color_by_coordinates
)
@ -31,11 +31,13 @@ class RegionLabel(QLabel):
adjacent_marked_region_labels = dict
action_save_region = QAction
action_replace_region = QAction
def __init__ (
self ,
x = None , y = None , dimensions = QSize ( 512 , 512 ) ,
mouse_cursor_helper = None ,
region_label_helper = None
self ,
x = None , y = None , dimensions = QSize ( 512 , 512 ) ,
mouse_cursor_helper = None , region_label_helper = None
) :
super ( RegionLabel , self ) . __init__ ( )
self . x , self . y = x , y
@ -43,8 +45,6 @@ class RegionLabel(QLabel):
self . mouse_cursor_helper = mouse_cursor_helper
self . region_label_helper = region_label_helper
pixmap = QPixmap ( dimensions )
self . is_marked = False
self . is_region = False
self . context_menu_is_shown = False
@ -52,42 +52,37 @@ class RegionLabel(QLabel):
self . region_string = create_region_string_from_grid_index ( x = x , y = y )
self . setStatusTip ( self . region_string )
pixmap . fill ( self . get_color_by_coordinates ( x , y ) )
self . setScaledContents ( True )
self . setPixmap ( pixmap )
self . init_actions ( )
self . init_signals ( )
self . init_ui ( )
self . init_context_menu ( )
def init_signals ( self ) :
self . action_save_region . triggered . connect ( self . save_region_as )
self . action_replace_region . triggered . connect ( self . load_region_from_file )
self . customContextMenuRequested . connect ( self . on_context_menu )
def remove_label_pixmap ( self ) :
pixmap = QPixmap ( self . dimensions )
pixmap . fill ( self . get_color_by_coordinates ( self . x , self . y ) )
self . setPixmap ( pixmap )
def init_ui ( self ) :
self . setStatusTip ( self . region_string )
def set_label_pixmap ( self , chunk ) :
pixmap = QPixmap ( self . dimensions )
pixmap . fill ( QColor ( " transparent " ) )
painter = QPainter ( pixmap )
painter . drawPixmap ( 0 , 0 , self . dimensions . width ( ) , self . dimensions . height ( ) , QPixmap . fromImage ( chunk ) )
painter . end ( )
pixmap . fill (
get_color_by_coordinates ( self . x , self . y )
)
self . setScaledContents ( True )
self . setPixmap ( pixmap )
""" getter + setter """
def set_raw_data_array ( self , raw_data_array : np . array = None ) - > None :
self . raw_data_array = raw_data_array
self . init_context_menu ( )
def mark_as_region ( self ) - > None :
self . is_region = True
def init_actions ( self ) :
action_save_region = QAction ( " save region as... " , self )
self . action_save_region = action_save_region
def set_adjacent_marked_region_labels ( self , adjacent_marked_region_labels ) - > None :
self . adjacent_marked_region_labels = adjacent_marked_region_labels
action_replace_region = QAction ( " replace region with file... " , self )
self . action_replace_region = action_replace_region
""" context menu """
def init_context_menu ( self ) :
self . setContextMenuPolicy ( Qt . CustomContextMenu )
self . customContextMenuRequested . connect ( self . on_context_menu )
menu = QMenu ( self )
label = QLabel ( self . region_string )
@ -97,15 +92,9 @@ class RegionLabel(QLabel):
menu . addAction ( widget_action )
menu . addSeparator ( )
action_save_region = QAction ( " save region as... " , self )
action_save_region . triggered . connect ( self . save_region_as )
menu . addAction ( action_save_region )
action_replace_region = QAction ( " replace region with file... " , self )
action_replace_region . triggered . connect ( self . load_region_from_file )
menu . addAction ( action_replace_region )
menu . addAction ( self . action_save_region )
menu . addAction ( self . action_replace_region )
menu . closeEvent = self . on_context_menu_close
self . context_menu = menu
def on_context_menu ( self , point ) :
@ -114,21 +103,36 @@ class RegionLabel(QLabel):
toggle_open_in_context_menu ( self )
self . context_menu . exec_ ( self . mapToGlobal ( point ) )
def on_context_menu_close ( self , point ) :
toggle_open_in_context_menu ( self )
def remove_label_pixmap ( self ) :
pixmap = QPixmap ( self . dimensions )
pixmap . fill ( get_color_by_coordinates ( self . x , self . y ) )
self . setPixmap ( pixmap )
""" visual stuff """
@staticmethod
def get_color_by_coordinates ( x = 0 , y = 0 ) - > QColor :
# if used in a grid, this is basically creating a gradient
return QColor (
int ( ( ( ( x + 1 ) * 4 ) + ( ( y + 1 ) * 4 ) ) / 2 - 1 ) ,
int ( ( ( ( x + 1 ) * 4 ) + ( ( y + 1 ) * 4 ) ) / 2 - 1 ) ,
int ( ( ( ( x + 1 ) * 4 ) + ( ( y + 1 ) * 4 ) ) / 2 - 1 )
)
def set_label_pixmap ( self , chunk ) :
pixmap = QPixmap ( self . dimensions )
pixmap . fill ( QColor ( " transparent " ) )
painter = QPainter ( pixmap )
painter . drawPixmap ( 0 , 0 , self . dimensions . width ( ) , self . dimensions . height ( ) , QPixmap . fromImage ( chunk ) )
painter . end ( )
self . setPixmap ( pixmap )
""" getter + setter """
def set_raw_data_array ( self , raw_data_array : np . array = None ) - > None :
self . raw_data_array = raw_data_array
chunk = QImage ( self . raw_data_array . copy ( ) , 512 , 512 , QImage . Format_Grayscale16 )
self . set_label_pixmap ( chunk )
def mark_as_region ( self ) - > None :
self . is_region = True
def set_adjacent_marked_region_labels ( self , adjacent_marked_region_labels ) - > None :
self . adjacent_marked_region_labels = adjacent_marked_region_labels
""" visual stuff """
def update_style_effects ( self ) :
style = None
style = " "
if self . is_marked :
style = " color: #ffffff; "
for direction in [ " top " , " right " , " bottom " , " left " ] :
@ -192,37 +196,37 @@ class RegionLabel(QLabel):
chunk = QImage ( self . raw_data_array . copy ( ) , 512 , 512 , QImage . Format_Grayscale16 )
self . set_label_pixmap ( chunk )
self . region_label_helper . change_region_label _region_raw_data_signal. emit ( self . raw_data_array )
self . region_label_helper . update _region_raw_data_signal. emit ( self . raw_data_array )
""" altering class functions """
def mouse_any_click_event ( self , event ) :
modifiers = QApplication . keyboardModifiers ( )
if modifiers == Qt . ControlModifier and self . is_region :
if event . buttons ( ) == Qt . LeftButton :
self . region_label_helper . change_region_label_ toggle_marked_signal. emit ( self )
self . region_label_helper . toggle_is _marked_signal . emit ( self )
elif self . is_region :
if event . buttons ( ) == Qt . LeftButton :
self . region_label_helper . change_region_label_ toggle_selected_signal. emit ( self )
self . region_label_helper . toggle_is _selected_signal . emit ( self )
def mousePressEvent ( self , event ) :
self . mouse_any_click_event ( event )
super ( ) . mousePressEvent ( event )
super ( RegionLabel , self ) . mousePressEvent ( event )
def mouseDoubleClickEvent ( self , event ) :
if self . is_region :
self . region_label_helper . change_region_label_ toggle_marked_signal. emit ( self )
super ( ) . mouseDoubleClickEvent ( event )
self . region_label_helper . toggle_is _marked_signal . emit ( self )
super ( RegionLabel , self ) . mouseDoubleClickEvent ( event )
def enterEvent ( self , event ) - > None :
self . mouse_cursor_helper . hovered_label_signal . emit ( self )
self . mouse_cursor_helper . mouse_cursor_change_signal . emit ( None )
super ( ) . enterEvent ( event )
super ( RegionLabel , self ) . enterEvent ( event )
def leaveEvent ( self , event ) - > None :
self . mouse_cursor_helper . mouse_cursor_change_signal . emit ( None )
super ( ) . leaveEvent ( event )
super ( RegionLabel , self ) . leaveEvent ( event )
def wheelEvent ( self , event ) :
self . mouse_cursor_helper . hovered_label_signal . emit ( self )