private void drawSignals(Graphics2D g2d) {

		// paint inputs
		int y = HEADER_GAP;
		String[] inputList = getModel().inputList();
		for (String input : inputList) {

			if (!(getModel() instanceof BaseBlock)) {
				g2d.drawString(input, blockBounds.x + PADDING
						+ INTERNAL_PADDING, blockBounds.y + y);
			}
			g2d.drawLine(blockBounds.x, blockBounds.y + y, blockBounds.x
					+ PADDING, blockBounds.y + y);
			y += SIGNAL_GAP;
		}

		// paint outputs
		y = HEADER_GAP;
		for (String output : getModel().outputList()) {

			if (!(getModel() instanceof BaseBlock)) {
				g2d.drawString(
						output,
						blockBounds.x + blockViewSize.width - PADDING
								- INTERNAL_PADDING
								- calculateFontSize(g2d, output).width,
						blockBounds.y + y);
			}
			g2d.drawLine(blockBounds.x + blockViewSize.width,
					blockBounds.y + y, blockBounds.x + blockViewSize.width
							- PADDING, blockBounds.y + y);

			// paint inverter circle for outputs starting with tilde
			if (output.startsWith("~") || (getModel() instanceof NOR)
					|| (getModel() instanceof NAND)
					|| (getModel() instanceof NOT)) {

				g2d.setColor(ColorFactory.getInstance().getBackgroundColor());
				g2d.fillOval(blockBounds.x + blockViewSize.width - PADDING,
						blockBounds.y + y - RADIUS_INVERTED / 2,
						RADIUS_INVERTED, RADIUS_INVERTED);
				g2d.setColor(ColorFactory.getInstance().getForegroundColor());
				g2d.drawOval(blockBounds.x + blockViewSize.width - PADDING,
						blockBounds.y + y - RADIUS_INVERTED / 2,
						RADIUS_INVERTED, RADIUS_INVERTED);
			}

			y += SIGNAL_GAP;
		}
	}