private JPanel createProcessorSettingsPanel()
   {
      final JPanel jp = new JPanel();
      jp.setBorder(default_border);
      BoxLayout bl = new BoxLayout(jp, BoxLayout.PAGE_AXIS);
      jp.setLayout(bl);

      JComponent cp = new JLabel(UIStrings.UI_PROC_NAME_LABEL);
      setItemAlignment(cp);
      jp.add(cp);

      JPanel ip = new JPanel();
      bl = new BoxLayout(ip, BoxLayout.LINE_AXIS);
      processor_name_selector = new JComboBox();
      processor_name_selector.setModel(new DefaultComboBoxModel());
      processor_name_selector.setEditable(true);
      Dimension d = processor_name_selector.getPreferredSize();
      d.width = 160;
      processor_name_selector.setPreferredSize(d);
      processor_name_selector.addItemListener(new ItemListener() {
         @Override
         public void itemStateChanged(ItemEvent ie)
         {
            int type = ie.getStateChange();
            switch(type)
            {
               case ItemEvent.ITEM_STATE_CHANGED:
               {
                  ExternalProcessor ep = (ExternalProcessor)processor_name_selector.getSelectedItem();
                  processor_path_field.setText(ep.path);
                  processor_options_field.setText(ep.options);
                  break;
               }
               case ItemEvent.DESELECTED:
               {
                  ExternalProcessor ep2 = (ExternalProcessor)processor_name_selector.getSelectedItem();
                  ExternalProcessor ep = (ExternalProcessor)ie.getItem();
               }
            }
         }
      });
      processor_name_selector.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent ae)
         {
            String cmd = ae.getActionCommand();
            if(cmd.equals("comboBoxChanged"))
            {
               ExternalProcessor ep = (ExternalProcessor)processor_name_selector.getSelectedItem();
               processor_path_field.setText(ep.path);
               processor_options_field.setText(ep.options);
            }
         }
      });
      ip.add(processor_name_selector);

      JButton b = new JButton("+");
      b.setToolTipText(UIStrings.SETTINGS_DIALOG_MARKDOWN_PROCESSOR_ADD);
      b.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent ae)
         {
            ExternalProcessor new_ep = dialog_settings.newProcessor(UIStrings.SETTINGS_DIALOG_DEFAULT_NEW_PROC_VALUES[0]);
            new_ep.path = UIStrings.SETTINGS_DIALOG_DEFAULT_NEW_PROC_VALUES[1];
            new_ep.options = UIStrings.SETTINGS_DIALOG_DEFAULT_NEW_PROC_VALUES[2];
            processor_name_selector.addItem(new_ep);
            processor_name_selector.setSelectedItem(new_ep);
            processor_name_selector.setEnabled(true);
         }
      });
//      d = b.getPreferredSize();
//      d.width = 20;
//      b.setPreferredSize(d);
      ip.add(b);

      b = new JButton("-");
      b.setToolTipText(UIStrings.SETTINGS_DIALOG_MARKDOWN_PROCESSOR_REMOVE);
      b.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent ae)
         {
            ExternalProcessor ep = (ExternalProcessor)processor_name_selector.getSelectedItem();
            int result = JOptionPane.showConfirmDialog(jp, "Remove Processor: " + ep.name + "?", UIStrings.APPNAME, JOptionPane.YES_NO_OPTION);
            if(result == JOptionPane.NO_OPTION)
            {
               return;
            }
            processor_name_selector.removeItem(ep);
            processor_name_selector.setSelectedIndex(0);
            if(processor_name_selector.getItemCount() == 0)
            {
               processor_name_selector.setEnabled(false);
            }
         }
      });
      ip.add(b);
      ip.add(Box.createHorizontalGlue());
      setItemAlignment(ip);
      jp.add(ip);

      jp.add(Box.createVerticalStrut(10));

      cp = new JLabel(UIStrings.UI_PROC_PATH_LABEL);
      setItemAlignment(cp);
      jp.add(cp);

      ip = new JPanel(new FlowLayout(FlowLayout.LEFT));
      processor_path_field = new JTextField(40);
      processor_path_field.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent ae)
         {
            ExternalProcessor ep = (ExternalProcessor)processor_name_selector.getSelectedItem();
            ep.path = processor_path_field.getText();
         }
      });
      ip.add(processor_path_field);
      b = new JButton(folder_icon);
      b.setToolTipText(UIStrings.SETTINGS_DIALOG_MARKDOWN_PROCESSOR_BROWSE_TOOLTIP);
      b.addActionListener(new ActionListener()
      {
         @Override
         public void actionPerformed(ActionEvent ae)
         {
            JFileChooser fc = new JFileChooser();
            int returnVal = fc.showDialog(null, "Select");

            if (returnVal == JFileChooser.APPROVE_OPTION)
            {
               File file = fc.getSelectedFile();
               if(file.exists() && file.isFile())
               {
                  processor_path_field.setForeground(Color.BLACK);
               }
               else
               {
                  processor_path_field.setForeground(Color.RED);
                  processor_path_field.setText(file.getAbsolutePath() + " [" + UIStrings.ERROR_INVALID_PATH + "]");
               }
               processor_path_field.setText(file.getAbsolutePath());
            }
            else
            {
            }
         }
      });
      ip.add(b);
      setItemAlignment(ip);
      jp.add(ip);

      jp.add(Box.createVerticalStrut(10));

      cp = new JLabel(UIStrings.UI_PROC_OPTIONS_LABEL);
      setItemAlignment(cp);
      jp.add(cp);

      ip = new JPanel(new FlowLayout(FlowLayout.LEFT));
      processor_options_field = new JTextField(40);
      processor_options_field.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent ae)
         {
            ExternalProcessor ep = (ExternalProcessor)processor_name_selector.getSelectedItem();
            ep.options = processor_options_field.getText();
         }
      });
      ip.add(processor_options_field);
      setItemAlignment(ip);
      jp.add(ip);

      return jp;
   }