промежуточный. частичный рефакторинг с прицелом на библиотечную часть

This commit is contained in:
2024-10-07 00:58:29 +03:00
parent c211ffb82b
commit 6b1576461d
798 changed files with 3007 additions and 2344 deletions

View File

@@ -0,0 +1,24 @@
package Common_old.UI.Windows.Dialog;
import Common.Database.Objects.DBObject;
public abstract class DBObjectDialog<T extends DBObject, F extends DialogFields> extends Dialog<T, F> {
public boolean edit = false;
public DBObjectDialog(Class<F> f) {
super(f);
}
@Override
public void Init(Object... params) {
//тут входной параметр всегда объект. он же и есть Result
//считаем что он всегда создан.
Result = (T) params[0];
fillFields();
}
public void SetEditLimits() {
//установить ограничения если объект в режиме редактирования( например нельзя менять тип машины, или почту адресата)
}
public void fillFields() {
//отобразить объект
}
public void SetReadonly(){
//заблокировать окно для редактирования
}
}

View File

@@ -0,0 +1,158 @@
package Common_old.UI.Windows.Dialog;
import Common_old.Current;
import _VisualDVM.Global;
import Common_old.UI.Themes.ThemeElement;
import Common_old.UI.Themes.VisualiserFonts;
import Common_old.UI.UI;
import Common.Utils.TextLog;
import Common_old.Utils.Utils;
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;
public String getIconPath() {
return "";
}
protected Component content;
//--------------------------------------
public Dialog(Class<F> f_in) {
f = f_in;
setModal(true);
toFront();
getContentPane().setLayout(new BorderLayout());
lTitle.setFont(Current.getTheme().Fonts.get(VisualiserFonts.Menu));
if (!getIconPath().isEmpty()) {
setIconImage(Utils.getIcon(getIconPath()).getImage());
}
//делаем титульную надпись в самом окне чтобы не зависеть от языковой политики ОС
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) {
UI.windowsStack.pop();
onCancel();
onClose();
}
});
// pack(); //авторазмер окна.
setLocationRelativeTo(null);
LoadSize();
}
public void CreateContent() {
try {
content = (fields = f.newInstance()).getContent();
//--?
} catch (Exception e) {
Global.Log.PrintException(e);
}
}
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 boolean isOnTop() {
return true;
}
public boolean ShowDialog(String title, Object... params) {
OK = false;
title_text = title;
Init(params);
ShowTitle();
setAlwaysOnTop(isOnTop());
UI.windowsStack.push(this);
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());
}
protected void onCancel() {
CloseAction();
}
public void CloseAction() {
dispose();
}
public void validateFields() {
}
public void ProcessResult() {
}
@Override
public void applyTheme() {
//todo -> Применение темы
}
}

View File

@@ -0,0 +1,5 @@
package Common_old.UI.Windows.Dialog;
import java.awt.*;
public interface DialogFields {
Component getContent();
}

View File

@@ -0,0 +1,9 @@
package Common_old.UI.Windows.Dialog;
import javax.swing.*;
import java.awt.*;
public class DialogSlider extends JSlider implements DialogFields {
@Override
public Component getContent() {
return this;
}
}

View File

@@ -0,0 +1,9 @@
package Common_old.UI.Windows.Dialog;
import javax.swing.*;
import java.awt.*;
public class DialogSpinner extends JSpinner implements DialogFields {
@Override
public Component getContent() {
return this;
}
}

View File

@@ -0,0 +1,16 @@
package Common_old.UI.Windows.Dialog;
import Common_old.Current;
import Common_old.UI.Themes.VisualiserFonts;
import javax.swing.*;
import java.awt.*;
public class DialogTextComboBox extends JComboBox<String> implements DialogFields {
public DialogTextComboBox() {
setFont(Current.getTheme().Fonts.get(VisualiserFonts.Menu));
setEditable(false);
}
@Override
public Component getContent() {
return this;
}
}

View File

@@ -0,0 +1,10 @@
package Common_old.UI.Windows.Dialog;
import Common_old.UI.TextField.StyledTextField;
import java.awt.*;
public class DialogTextField extends StyledTextField implements DialogFields {
@Override
public Component getContent() {
return this;
}
}

View File

@@ -0,0 +1,42 @@
package Common_old.UI.Windows.Dialog;
import Common_old.Current;
import Common_old.UI.Themes.VisualiserFonts;
import javax.swing.*;
import java.awt.*;
public class DialogWrapText extends JTextPane implements DialogFields {
public DialogWrapText(){
setOpaque(true);
setBackground(Color.WHITE);
setFont(Current.getTheme().Fonts.get(VisualiserFonts.TreeBold));
setEditable(false);
}
@Override
public Component getContent() {
return this;
}
/*
public void setTextW(String text_in){
String[] lines = text_in.split("\n");
String labelText = "";
if (lines.length == 1) {
labelText = text_in;
} else {
int i = 0;
for (String line : lines) {
String fline = "";
if (i == 0) {
fline = "<html><body>" + line + "<br>";
} else if (i == lines.length - 1) {
fline = line + "</body></html>";
} else {
fline = line + "<br>";
}
++i;
labelText += fline;
}
}
setText(labelText);
}
*/
}

View File

@@ -0,0 +1,11 @@
package Common_old.UI.Windows.Dialog;
public abstract class NumberDialog<F extends DialogFields> extends Dialog<Integer, F> {
public NumberDialog(Class<F> f) {
super(f);
}
@Override
public void Init(Object... params) {
if (params.length > 0) setNumber((int) params[0]);
}
public abstract void setNumber(int num_in);
}

View File

@@ -0,0 +1,22 @@
package Common_old.UI.Windows.Dialog;
public class PercentsForm extends SliderNumberForm {
public PercentsForm() {
}
@Override
public String getTitleText() {
return super.getTitleText() + "%";
}
@Override
public void InitFields() {
fields.setPaintLabels(true);
fields.setPaintTicks(true);
fields.setPaintTrack(true);
fields.setSnapToTicks(true);
fields.setMinorTickSpacing(1);
fields.setMajorTickSpacing(25);
}
@Override
public void Init(Object... params) {
super.Init(params[0], 0, 100);
}
}

View File

@@ -0,0 +1,10 @@
package Common_old.UI.Windows.Dialog;
import javax.swing.*;
public class SessionMaxtimeDialog extends SpinnerNumberForm {
public SessionMaxtimeDialog() {
}
@Override
public void InitFields() {
fields.setModel(new SpinnerNumberModel(10, 5, 65535, 1));
}
}

View File

@@ -0,0 +1,53 @@
package Common_old.UI.Windows.Dialog;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class SliderNumberForm extends NumberDialog<DialogSlider> {
public SliderNumberForm() {
super(DialogSlider.class);
setResizable(false);
}
@Override
public void setNumber(int num_in) {
fields.setValue(num_in);
}
//тут всегда должно быть три параметра
//минимум нет смысла задавать меньше 1
@Override
public void Init(Object... params) {
if (params.length == 3) {
setNumber((Integer) params[0]);
fields.setMinimum((Integer) params[1]);
fields.setMaximum((Integer) params[2]);
}
fields.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
ShowTitle();
}
});
}
@Override
public void InitFields() {
fields.setPaintLabels(true);
fields.setPaintTicks(true);
fields.setPaintTrack(true);
fields.setSnapToTicks(false);
fields.setMinorTickSpacing(1);
fields.setMajorTickSpacing(1);
}
@Override
public int getDefaultWidth() {
return 600;
}
@Override
public int getDefaultHeight() {
return 200;
}
@Override
public String getTitleText() {
return title_text + " : " + fields.getValue();
}
@Override
public void ProcessResult() {
Result = fields.getValue();
}
}

View File

@@ -0,0 +1,22 @@
package Common_old.UI.Windows.Dialog;
public abstract class SpinnerNumberForm extends NumberDialog<DialogSpinner> {
public SpinnerNumberForm() {
super(DialogSpinner.class);
}
@Override
public void setNumber(int num_in) {
fields.setValue(num_in);
}
@Override
public int getDefaultWidth() {
return 400;
}
@Override
public int getDefaultHeight() {
return 130;
}
@Override
public void ProcessResult() {
Result = (Integer) fields.getValue();
}
}

View File

@@ -0,0 +1,35 @@
package Common_old.UI.Windows.Dialog.Text;
import Common_old.UI.Windows.Dialog.Dialog;
import Common_old.UI.Windows.Dialog.DialogTextComboBox;
import java.util.Vector;
public class ComboTextDialog extends Dialog<String, DialogTextComboBox> {
public ComboTextDialog() {
super(DialogTextComboBox.class);
}
@Override
public void ProcessResult() {
Result = (String) fields.getSelectedItem();
}
@Override
public void validateFields() {
if (fields.getSelectedItem() == null)
Log.Writeln("Элемент не выбран");
}
@Override
public void Init(Object... params) {
Vector<String> sp = (Vector<String>) params[0];
if (!sp.isEmpty()) {
for (Object p : sp)
fields.addItem(p.toString());
}
}
@Override
public int getDefaultWidth() {
return 450;
}
@Override
public int getDefaultHeight() {
return 135;
}
}

View File

@@ -0,0 +1,10 @@
package Common_old.UI.Windows.Dialog.Text;
import Common_old.Utils.Utils;
public class FileNameForm extends TextFieldDialog {
public FileNameForm() {
}
@Override
public void validateFields() {
Utils.validateFileShortNewName(fields.getText(), Log);
}
}

View File

@@ -0,0 +1,25 @@
package Common_old.UI.Windows.Dialog.Text;
import Common_old.UI.Editor.BaseEditor;
public class MultilineTextForm extends TextDialog<BaseEditor> {
public MultilineTextForm() {
super(BaseEditor.class);
}
//при наследовании по умолчанию поля не присваивать!
//инициализация полей работает после конструктора предка!!
@Override
public void ProcessResult() {
Result = fields.getText();
}
@Override
public void InitFields() {
fields.setSearchEnabled(false);
fields.setLineWrap(true);
fields.setWrapStyleWord(true);
fields.setHighlightCurrentLine(false);
}
@Override
public void setText(String text_in) {
fields.setText(text_in);
fields.setCaretPosition(0);
}
}

View File

@@ -0,0 +1,12 @@
package Common_old.UI.Windows.Dialog.Text;
public class ReadOnlyMultilineTextForm extends MultilineTextForm {
public ReadOnlyMultilineTextForm() {
}
@Override
public void InitFields() {
fields.setEditable(false);
}
@Override
public void CreateButtons() {
}
}

View File

@@ -0,0 +1,15 @@
package Common_old.UI.Windows.Dialog.Text;
import Common_old.UI.Windows.Dialog.Dialog;
import Common_old.UI.Windows.Dialog.DialogFields;
//текстовый диалог. возвращает текст. может иметь параметром исходный текст.
public abstract class TextDialog<F extends DialogFields> extends Dialog<String, F> {
public TextDialog(Class<F> f) {
super(f);
}
@Override
public void Init(Object... params) {
if (params.length > 0) setText((String) params[0]);
}
public abstract void setText(String text_in);
}

View File

@@ -0,0 +1,35 @@
package Common_old.UI.Windows.Dialog.Text;
import Common_old.UI.Windows.Dialog.DialogTextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class TextFieldDialog extends TextDialog<DialogTextField> {
public TextFieldDialog() {
super(DialogTextField.class);
setResizable(false);
fields.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
onOK();
}
}
});
}
@Override
public int getDefaultWidth() {
return 450;
}
@Override
public int getDefaultHeight() {
return 135;
}
@Override
public void ProcessResult() {
Result = fields.getText();
}
@Override
public void setText(String text_in) {
fields.setText(text_in);
}
}