package Common.Visual;
import Common.Utils.Utils_;

import javax.swing.*;
import java.awt.*;
//класс, представляющий собой прокручиваемую панель, на которой лежит нечто.
public class ControlForm<C extends Component> {
    protected C control = null;
    JPanel mountPanel = null;  //панель на которую монтируется UI.помимо контрола может содержать меню сверху.
    JPanel scrollPanel = null;   //панель на которой лежит скролл.
    JScrollPane scroll = null;  //панель прокрутки в которую встроен контрол
    Class<C> control_class = null;
    public ControlForm(Class<C> class_in, JPanel mountPanel_in) {
        control_class = class_in;
        mountPanel = mountPanel_in;
        mountPanel.add((scrollPanel = new JPanel(new BorderLayout())), BorderLayout.CENTER);
    }
    public C getControl() {
        return control;
    }
    public JPanel getMountPanel() {
        return mountPanel;
    } //todo осталось только в projectForm, вывести
    //новое отображение предполагает полную перерисовку контрола.(?)
    public void Show() {
        Clear();
        createControl();
        //--
        scroll = new JScrollPane(control);
        scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
        scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        //--
        scrollPanel.add(scroll);
        scrollPanel.updateUI();
    }
    protected void createControl() {
        try {
            control = control_class.newInstance();
        } catch (Exception e) {
            Utils_.MainLog.PrintException(e);
        }
    }
    public boolean isShown() {
        return control != null;
    }
    public void Clear() {
        UI.Clear(scrollPanel);
        control = null; //очищено.
    }
    public void RedrawControl() {
        if (control != null)
            redrawControl();
    }
    //-
    protected void redrawControl() {
    } //перерисовать контрол.
}
