def __init__(self, parent_port_instance, parent_node_instance): super(PortInstanceLabel, self).__init__(parent_node_instance) self.parent_port_instance = parent_port_instance self.parent_node_instance = parent_node_instance self.font = QFont("Source Code Pro", 10, QFont.Bold) font_metrics = QFontMetricsF(self.font) self.width = font_metrics.width( get_longest_line(self.parent_port_instance.label_str)) self.height = font_metrics.height() * ( self.parent_port_instance.label_str.count('\n') + 1) self.port_local_pos = None
def get_title_rect(self): title_rect_offset_factor = 0.56 header_rect = self.get_header_rect() rect = QRectF() rect.setTop(header_rect.top() + (header_rect.height() / 2) * (1 - title_rect_offset_factor)) rect.setLeft(header_rect.left() + 10) rect.setHeight(header_rect.height() * title_rect_offset_factor) w = header_rect.width() * title_rect_offset_factor title_width = self.display_name_FM.width( get_longest_line(self.parent_node.title)) rect.setWidth(w if w > title_width else title_width) return rect
def __init__(self, parent_port_instance, parent_node_instance): super(PortInstanceLabel, self).__init__(parent_node_instance) self.setGraphicsItem(self) self.parent_port_instance = parent_port_instance self.parent_node_instance = parent_node_instance self.font = QFont("Source Code Pro", 10, QFont.Bold) font_metrics = QFontMetricsF( self.font) # approximately! the designs can use different fonts self.width = font_metrics.width( get_longest_line(self.parent_port_instance.label_str)) self.height = font_metrics.height() * ( self.parent_port_instance.label_str.count('\n') + 1) self.port_local_pos = None
def __init__(self, parent_port_instance, parent_node_instance): super(PortInstanceLabel, self).__init__(parent_node_instance) self.setGraphicsItem(self) self.parent_port_instance = parent_port_instance self.parent_node_instance = parent_node_instance self.font = QFont("Source Code Pro", 10, QFont.Bold) font_metrics = QFontMetricsF(self.font) self.width = font_metrics.width( get_longest_line(self.parent_port_instance.label_str)) self.height = font_metrics.height() * ( self.parent_port_instance.label_str.count('\n') + 1) # print('self.height:', self.height) # self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) self.port_local_pos = None
def __init__(self, parent_node_instance): super(TitleLabel, self).__init__(parent_node_instance) self.setGraphicsItem(self) self.parent_node_instance: NodeInstance = parent_node_instance self.title_str = self.parent_node_instance.parent_node.title self.font = QFont('Poppins', 15) if self.parent_node_instance.parent_node.design_style == 'extended' else \ QFont('K2D', 20, QFont.Bold, True) self.fm = QFontMetricsF(self.font) self.width = self.fm.width(get_longest_line(self.title_str)) self.height = self.fm.height() * 0.7 * (self.title_str.count('\n') + 1) self.color = QColor(30, 43, 48) self.pen_width = 1.5 self.hovering = False # whether the mouse is hovering over the parent NI (!)
def __init__(self, parent_node_instance): super(TitleLabel, self).__init__(parent_node_instance) self.setGraphicsItem(self) self.parent_node_instance = parent_node_instance self.title_str = self.parent_node_instance.parent_node.title font = QFont('Poppins', 15) if self.parent_node_instance.parent_node.design_style == 'extended' else \ QFont('K2D', 20, QFont.Bold, True) # should be quite similar to every specific font chosen by the painter fm = QFontMetricsF(font) # approximately! self.width = fm.width(get_longest_line(self.title_str) + '___') self.height = fm.height() * 0.7 * (self.title_str.count('\n') + 1) self.color = QColor(30, 43, 48) self.pen_width = 1.5 self.hovering = False # whether the mouse is hovering over the parent NI (!) # Design.flow_theme_changed.connect(self.theme_changed) self.update_design()
def compute_content_positions(self): """BAD - This might become unnecessary once I implemented use of QGraphicsLayout""" for i in self.inputs: i.compute_size_and_positions() for o in self.outputs: o.compute_size_and_positions() display_name_height = self.display_name_FM.height() * ( self.parent_node.title.count('\n') + 1) display_name_width = self.display_name_FM.width( get_longest_line(self.parent_node.title)) display_name_width_extended = self.display_name_FM.width( '__' + get_longest_line(self.parent_node.title) + '__') # label_FM = QFontMetricsF(self.port_label_font) # all sizes and buffers space_between_io = 10 # the following function creates additional space at the top and the bottom of the NI - the more ports, the more space left_largest_width = 0 right_largest_width = 0 height_buffer_between_ports = 0 #10 # adds vertical buffer between single ports horizontal_buffer_to_border = 10 # adds a little bit of space between port and border of the NI left_ports_edge_height = -height_buffer_between_ports right_ports_edge_height = -height_buffer_between_ports for i in self.inputs: if i.width > left_largest_width: left_largest_width = i.width left_ports_edge_height += i.height + height_buffer_between_ports for o in self.outputs: if o.width > right_largest_width: right_largest_width = o.width right_ports_edge_height += o.height + height_buffer_between_ports ports_edge_height = left_ports_edge_height if left_ports_edge_height > right_ports_edge_height else right_ports_edge_height ports_edge_width = left_largest_width + space_between_io + right_largest_width + 2 * horizontal_buffer_to_border body_height = 0 body_width = 0 body_top = 0 body_left = 0 body_right = 0 if self.parent_node.design_style == 'minimalistic': height_buffer = 10 body_height = ports_edge_height if ports_edge_height > display_name_height else display_name_height self.height = body_height + height_buffer self.width = display_name_width_extended if display_name_width_extended > ports_edge_width else ports_edge_width if self.main_widget: if self.parent_node.main_widget_pos == 'under ports': self.width = self.width if self.width > self.main_widget.width( ) + 2 * horizontal_buffer_to_border else self.main_widget.width( ) + 2 * horizontal_buffer_to_border self.height += self.main_widget.height( ) + height_buffer_between_ports elif self.parent_node.main_widget_pos == 'between ports': #self.width += self.main_widget.width() self.width = display_name_width_extended if \ display_name_width_extended > ports_edge_width+self.main_widget.width() else \ ports_edge_width+self.main_widget.width() self.height = self.height if self.height > self.main_widget.height( ) + height_buffer else self.main_widget.height( ) + height_buffer body_top = -self.height / 2 + height_buffer / 2 body_left = -self.width / 2 + horizontal_buffer_to_border body_right = self.width / 2 - horizontal_buffer_to_border elif self.parent_node.design_style == 'extended': header_height = self.get_header_rect().height( ) #50 * (self.parent_node.title.count('\n')+1) vertical_body_buffer = 16 # half above, half below body_height = ports_edge_height self.height = header_height + body_height + vertical_body_buffer self.width = display_name_width_extended if display_name_width_extended > ports_edge_width else ports_edge_width if self.main_widget: if self.parent_node.main_widget_pos == 'under ports': self.width = self.width if self.width > self.main_widget.width( ) + 2 * horizontal_buffer_to_border else self.main_widget.width( ) + 2 * horizontal_buffer_to_border self.height += self.main_widget.height( ) + height_buffer_between_ports elif self.parent_node.main_widget_pos == 'between ports': self.width = display_name_width_extended if \ display_name_width_extended > ports_edge_width+self.main_widget.width() else \ ports_edge_width+self.main_widget.width() self.height = self.height if self.height > self.main_widget.height() + header_height + vertical_body_buffer else \ self.main_widget.height() + header_height + vertical_body_buffer body_top = -self.height / 2 + header_height + vertical_body_buffer / 2 body_left = -self.width / 2 + horizontal_buffer_to_border body_right = self.width / 2 - horizontal_buffer_to_border # here, the width and height are final self.set_content_positions( body_height=body_height, body_top=body_top, body_left=body_left, body_right=body_right, left_ports_edge_height=left_ports_edge_height, right_ports_edge_height=right_ports_edge_height, height_buffer_between_ports=height_buffer_between_ports, left_largest_width=left_largest_width, right_largest_width=right_largest_width, space_between_io=space_between_io)