@Override
  public void actionPerformed(@NotNull AnActionEvent e) {
    Window activeFrame = IdeFrameImpl.getActiveFrame();
    if (activeFrame == null) {
      return;
    }

    setData();
    if (!lafListenerAdded) {
      lafListenerAdded = true;
      ApplicationManager.getApplication().getMessageBus().connect().subscribe(LafManagerListener.TOPIC, source -> setData());
    }

    JTable table = new JTable(data, new String[] {"Property", "Value"}) {
      @Override
      public TableCellRenderer getCellRenderer(int row, int column) {
        return (table1, value, isSelected, hasFocus, row1, column1) -> {
          JLabel label = new JLabel((String)data[row][column]);
          label.setOpaque(true);
          label.setBackground(JBColor.border());
          label.setBorder(JBUI.Borders.emptyLeft((int) Math.ceil(UISettings.getDefFontSize())));
          return label;
        };
      }
      @Override
      public boolean isCellEditable(int row, int column) {
        return column == 1;
      }
    };

    table.getColumnModel().getColumn(1).setCellEditor(new AbstractTableCellEditor() {
      final JTextField component = new JTextField();

      @Override
      public Object getCellEditorValue() {
        return component.getText();
      }

      @Override
      public Component getTableCellEditorComponent(JTable table1, Object value, boolean isSelected, int row, int column) {
        component.setText((String)data[row][column]);
        return component;
      }
    });
    table.getColumnModel().getColumn(1).getCellEditor().addCellEditorListener(new CellEditorListener() {
      @Override
      public void editingStopped(ChangeEvent e) {
        String prop = (String)data[table.getSelectedRow()][0];
        try {
          int value = Integer.parseInt((String)((TableCellEditor)e.getSource()).getCellEditorValue());

          setGrayFilterProperty(prop, value);
          data[table.getSelectedRow()][1] = String.valueOf(getGrayFilterProperty(prop));

          IconLoader.clearCache();
          updateUI(SwingUtilities.getWindowAncestor(table));
        } catch (Throwable ignored) {
        }
      }

      @Override
      public void editingCanceled(ChangeEvent e) {
      }
    });

    table.setColumnSelectionAllowed(true);
    table.setTableHeader(null);

    for (int c=0; c<table.getColumnCount(); c++)
      table.getColumnModel().getColumn(c).setPreferredWidth(JBUIScale.scale(100));
    for (int r=0; r<table.getRowCount(); r++)
      table.setRowHeight(r, (int)Math.ceil(UISettings.getDefFontSize() * 2));

    JPanel tablePanel = new JPanel(new BorderLayout());
    tablePanel.add(table, BorderLayout.CENTER);

    DialogWrapper dlg = new DialogWrapper(false) {
      {
        init();
      }
      @Override
      protected JComponent createCenterPanel() {
        return tablePanel;
      }
    };
    dlg.setModal(false);
    dlg.setTitle("GrayFilter");
    dlg.setResizable(false);
    dlg.show();
  }
@Override
  public void actionPerformed(@NotNull AnActionEvent e)