All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.cayenne.modeler.dialog.FindDialogView Maven / Gradle / Ivy

There is a newer version: 5.0-M1
Show newest version
/*****************************************************************
 *   Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *    https://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing,
 *  software distributed under the License is distributed on an
 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations
 *  under the License.
 ****************************************************************/
package org.apache.cayenne.modeler.dialog;

import org.apache.cayenne.modeler.action.FindAction;
import org.apache.cayenne.modeler.util.CellRenderers;
import org.apache.cayenne.swing.ImageRendererColumn;
import org.apache.cayenne.swing.components.TopBorder;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.KeyEvent;
import java.util.List;


/**
 * Swing component displaying results produced by search feature.
 */
public class FindDialogView extends JDialog {

    private JButton okButton;
    private JTable table;
    private int index;

    public JTable getTable() {
        return table;
    }

    public FindDialogView(List searchResults) {
        super((Frame) null, "Search results", true);

        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createEmptyBorder());
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        DefaultTableModel tableModel = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };
        tableModel.setDataVector(convertToDataVector(searchResults), new Object[] {""});

        table = new JTable(tableModel);
        table.getColumnModel().getColumn(0).setCellRenderer(new ImageRendererColumn());
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        InputMap im = table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
        InputMap imParent = im.getParent();
        imParent.remove(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
        im.setParent(imParent);
        im.remove(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
        table.setInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, im);

        JPanel okPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        okButton = new JButton("OK");
        getRootPane().setDefaultButton(okButton);
        okPanel.setBorder(TopBorder.create());
        okPanel.add(okButton);

        JComponent contentPane = (JComponent) getContentPane();
        contentPane.setLayout(new BorderLayout());

        JScrollPane scrollPane = new JScrollPane(table,
                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setBorder(BorderFactory.createEmptyBorder());
        contentPane.add(scrollPane);
        contentPane.add(okPanel, BorderLayout.SOUTH);
        contentPane.setPreferredSize(new Dimension(400, 325));
    }

    private JLabel[][] convertToDataVector(List resultEntries) {
        JLabel[][] dataVector = new JLabel[resultEntries.size()][1];
        for (FindAction.SearchResultEntry entry : resultEntries) {
            JLabel labelIcon = new JLabel();
            labelIcon.setIcon(CellRenderers.iconForObject(entry.getObject()));
            labelIcon.setText(entry.getName());
            dataVector[index++] = new JLabel[]{labelIcon};
        }

        return dataVector;
    }

    public JButton getOkButton() {
        return okButton;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy