-
- initFiltersTab();
- }
-
- /**
- * Populates initial layout of the feature attribute filters panel
- */
- protected void initFiltersTab()
- {
- filters = new ArrayList<>();
-
- /*
- * choose feature type
- */
- JPanel chooseTypePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
- chooseTypePanel.setBackground(Color.white);
- JvSwingUtils.createItalicTitledBorder(chooseTypePanel,
- MessageManager.getString("label.feature_type"), true);
- filteredFeatureChoice = new JComboBox<>();
- filteredFeatureChoice.addItemListener(new ItemListener()
- {
- @Override
- public void itemStateChanged(ItemEvent e)
- {
- refreshFiltersDisplay();
- }
- });
- chooseTypePanel.add(new JLabel(MessageManager
- .getString("label.feature_to_filter")));
- chooseTypePanel.add(filteredFeatureChoice);
- populateFilterableFeatures();
-
- /*
- * the panel with the filters for the selected feature type
- */
- JPanel filtersPanel = new JPanel();
- filtersPanel.setLayout(new BoxLayout(filtersPanel, BoxLayout.Y_AXIS));
- filtersPanel.setBackground(Color.white);
- JvSwingUtils.createItalicTitledBorder(filtersPanel,
- MessageManager.getString("label.filters"), true);
-
- /*
- * add AND or OR radio buttons
- */
- JPanel andOrPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
- andOrPanel.setBackground(Color.white);
- andFilters = new JRadioButton("And");
- orFilters = new JRadioButton("Or");
- ActionListener actionListener = new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- filtersChanged();
- }
- };
- andFilters.addActionListener(actionListener);
- orFilters.addActionListener(actionListener);
- ButtonGroup andOr = new ButtonGroup();
- andOr.add(andFilters);
- andOr.add(orFilters);
- andFilters.setSelected(true);
- andOrPanel.add(new JLabel(MessageManager
- .getString("label.join_conditions")));
- andOrPanel.add(andFilters);
- andOrPanel.add(orFilters);
- filtersPanel.add(andOrPanel);
-
- /*
- * panel with filters - populated by refreshFiltersDisplay
- */
- chooseFiltersPanel = new JPanel();
- chooseFiltersPanel.setLayout(new BoxLayout(chooseFiltersPanel,
- BoxLayout.Y_AXIS));
- filtersPanel.add(chooseFiltersPanel);
-
- /*
- * a read-only text view of the current filters
- */
- JPanel showFiltersPanel = new JPanel(new BorderLayout(5, 5));
- showFiltersPanel.setBackground(Color.white);
- JvSwingUtils.createItalicTitledBorder(showFiltersPanel,
- MessageManager.getString("label.match_condition"), true);
- filtersAsText = new JTextArea();
- filtersAsText.setLineWrap(true);
- filtersAsText.setWrapStyleWord(true);
- showFiltersPanel.add(filtersAsText);
-
- filtersPane.setLayout(new BorderLayout());
- filtersPane.add(chooseTypePanel, BorderLayout.NORTH);
- filtersPane.add(filtersPanel, BorderLayout.CENTER);
- filtersPane.add(showFiltersPanel, BorderLayout.SOUTH);
-
- /*
- * update display for initial feature type selection
- */
- refreshFiltersDisplay();
- }
-
- /**
- * Adds entries to the 'choose feature to filter' drop-down choice. Only
- * feature types which have known attributes (so can be filtered) are
- * included, so recall this method to update the list (check for newly added
- * attributes).
- */
- protected void populateFilterableFeatures()
- {
- /*
- * suppress action handler while updating the list
- */
- ItemListener listener = filteredFeatureChoice.getItemListeners()[0];
- filteredFeatureChoice.removeItemListener(listener);
-
- filteredFeatureChoice.removeAllItems();
- ReverseListIterator<String> types = new ReverseListIterator<>(
- fr.getRenderOrder());
-
- boolean found = false;
- while (types.hasNext())
- {
- String type = types.next();
- if (FeatureAttributes.getInstance().hasAttributes(type))
- {
- filteredFeatureChoice.addItem(type);
- found = true;
- }
- }
- if (!found)
- {
- filteredFeatureChoice // todo i18n
- .addItem("No filterable feature attributes known");
- }
-
- filteredFeatureChoice.addItemListener(listener);
-