Files
VisualSapfor/src/Common/Visual/Windows/Dialog/Dialog.java

161 lines
5.3 KiB
Java
Raw Normal View History

2024-10-08 22:33:49 +03:00
package Common.Visual.Windows.Dialog;
2024-10-14 18:41:02 +03:00
import Common.MainModule_;
2024-10-14 15:19:13 +03:00
import Common.Utils.TextLog;
2024-10-11 00:00:30 +03:00
import Common.Utils.Utils_;
2024-10-08 22:33:49 +03:00
import Common.Visual.Fonts.VisualiserFonts;
2024-10-14 15:19:13 +03:00
import Common.Visual.Themes.ThemeElement;
import Common.Visual.UI;
2023-09-17 22:13:42 +03:00
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//T Тип объекта
//F Тип полей.
public class Dialog<T, F extends DialogFields> extends JDialog implements ThemeElement {
public F fields; //рабочая область диалога.
public String title_text;
public JLabel lTitle = new JLabel();
public boolean OK = false;
//--------------------------------------
public T Result = null;
public Class<F> f = null;
public TextLog Log = new TextLog(); //журнал валидации.
protected JScrollPane scroll = null;
protected JPanel buttonsPane = null;
protected JButton btnOK = null;
protected JButton btnCancel = null;
protected JCheckBox showNoMore = null;
protected Component content;
//--------------------------------------
public Dialog(Class<F> f_in) {
f = f_in;
setModal(true);
toFront();
getContentPane().setLayout(new BorderLayout());
2024-10-14 18:41:02 +03:00
lTitle.setFont(MainModule_.instance.getUI().getTheme().Fonts.get(VisualiserFonts.Menu));
2023-09-17 22:13:42 +03:00
if (!getIconPath().isEmpty()) {
2024-10-11 00:00:30 +03:00
setIconImage(Utils_.getIcon(getIconPath()).getImage());
2023-09-17 22:13:42 +03:00
}
//делаем титульную надпись в самом окне чтобы не зависеть от языковой политики ОС
getContentPane().add(lTitle, BorderLayout.NORTH);
//сюда добавляется содержимое.
content = null;
CreateContent();
InitFields(); //дополнительная инициализация полей..
getContentPane().add(NeedsScroll() ? (scroll = new JScrollPane(content)) : content, BorderLayout.CENTER);
CreateButtons();
// call onCancel() when cross is clicked
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
2024-10-14 21:55:58 +03:00
MainModule_.instance.getUI().windowsStack.pop();
2023-09-17 22:13:42 +03:00
onCancel();
onClose();
}
});
// pack(); //авторазмер окна.
setLocationRelativeTo(null);
LoadSize();
}
2024-10-14 15:19:13 +03:00
public String getIconPath() {
return "";
}
2023-09-17 22:13:42 +03:00
public void CreateContent() {
try {
content = (fields = f.newInstance()).getContent();
//--?
} catch (Exception e) {
2024-10-11 00:00:30 +03:00
Utils_.MainLog.PrintException(e);
2023-09-17 22:13:42 +03:00
}
}
public void onClose() {
}
public void LoadSize() {
setMinimumSize(new Dimension(getDefaultWidth(), getDefaultHeight()));
setPreferredSize(new Dimension(getDefaultWidth(), getDefaultHeight()));
}
//бывает что у полей собственные скроллы
public boolean NeedsScroll() {
return true;
}
public boolean NeedsShowNoMore() {
return false;
}
public int getDefaultWidth() {
return 800;
}
public int getDefaultHeight() {
return 450;
}
//создание полей формы( без заполнения)
public void InitFields() {
}
public void CreateButtons() {
btnOK = new JButton(" OK ");
btnCancel = new JButton("Отмена");
buttonsPane = new JPanel();
buttonsPane.setOpaque(true);
buttonsPane.setBackground(Color.WHITE);
btnOK.addActionListener(e -> onOK());
btnCancel.addActionListener(e -> onCancel());
buttonsPane.add(btnOK);
buttonsPane.add(btnCancel);
if (NeedsShowNoMore()) {
buttonsPane.add(showNoMore = new JCheckBox("больше не показывать"));
showNoMore.setOpaque(true);
showNoMore.setBackground(Color.WHITE);
}
getContentPane().add(buttonsPane, BorderLayout.SOUTH);
}
public void BlockButtons(){
btnOK.setVisible(false);
btnCancel.setVisible(false);
}
2023-09-17 22:13:42 +03:00
public boolean isOnTop() {
return true;
}
public boolean ShowDialog(String title, Object... params) {
OK = false;
title_text = title;
Init(params);
ShowTitle();
setAlwaysOnTop(isOnTop());
2024-10-14 21:55:58 +03:00
MainModule_.instance.getUI().windowsStack.push(this);
2023-09-17 22:13:42 +03:00
setVisible(true);
return OK;
}
public void ShowTitle() {
lTitle.setText(getTitleText());
}
public String getTitleText() {
return title_text;
}
public void Init(Object... params) {
}
public void onOK() {
Log.Clear();
validateFields();
if (Log.isEmpty()) {
ProcessResult();
OK = true;
CloseAction();
} else
UI.Error("Валидация не пройдена:\n" + Log.toString());
2023-09-17 22:13:42 +03:00
}
protected void onCancel() {
CloseAction();
}
public void CloseAction() {
dispose();
}
public void validateFields() {
}
public void ProcessResult() {
}
@Override
public void applyTheme() {
//todo -> Применение темы
}
}