mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-13 10:42:09 +10:00
added ability to save default model
This commit is contained in:
@@ -351,7 +351,7 @@ public class ComponentPopupMenu extends TranslatedPopupMenu implements Clipboard
|
||||
}
|
||||
|
||||
applyMenu.setEnabled(true);
|
||||
List<Component> datasheetItems = ComponentButtonFactory.createDatasheetItems(plugInPort, componentType, new ArrayList<String>(), model -> {
|
||||
List<Component> datasheetItems = ComponentButtonFactory.createDatasheetItems(plugInPort, componentType, new ArrayList<String>(), false, model -> {
|
||||
LOG.info("Applying datasheet model " + String.join(", ", model));
|
||||
plugInPort.applyModelToSelection(model);
|
||||
});
|
||||
|
||||
+67
-38
@@ -42,9 +42,9 @@ import javax.swing.JMenu;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.MenuSelectionManager;
|
||||
import javax.swing.SwingConstants;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.event.MenuEvent;
|
||||
import javax.swing.event.MenuListener;
|
||||
@@ -59,6 +59,7 @@ import org.diylc.common.IPlugInPort;
|
||||
import org.diylc.common.IBlockProcessor.InvalidBlockException;
|
||||
import org.diylc.core.IDIYComponent;
|
||||
import org.diylc.core.Template;
|
||||
import org.diylc.lang.LangUtil;
|
||||
import org.diylc.utils.IconLoader;
|
||||
|
||||
/**
|
||||
@@ -170,34 +171,14 @@ public class ComponentButtonFactory {
|
||||
}
|
||||
});
|
||||
|
||||
String defaultVariant = plugInPort.getDefaultVariant(componentType);
|
||||
|
||||
JLabel label =
|
||||
new JLabel(variant.getName().equals(defaultVariant) ? IconLoader.PinGreen.getIcon()
|
||||
: IconLoader.PinGrey.getIcon());
|
||||
label.setToolTipText(variant.getName().equals(defaultVariant) ? "Remove default variant"
|
||||
: "Set default variant");
|
||||
label.addMouseListener(new MouseAdapter() {
|
||||
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
// Hide the menu
|
||||
Container c = item.getParent();
|
||||
if (c != null && c instanceof JPopupMenu) {
|
||||
JPopupMenu m = (JPopupMenu) c;
|
||||
m.setVisible(false);
|
||||
}
|
||||
plugInPort.setDefaultVariant(componentType, variant.getName());
|
||||
e.consume();
|
||||
}
|
||||
});
|
||||
Border margin = new EmptyBorder(4, 0, 0, 0);
|
||||
label.setBorder(margin);
|
||||
boolean isDefault = variant.getName().equals(plugInPort.getDefaultVariant(componentType));
|
||||
item.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
|
||||
item.add(label);
|
||||
item.add(createDefaultPin(isDefault,
|
||||
isDefault ? "Remove default variant" : "Set default variant",
|
||||
() -> plugInPort.setDefaultVariant(componentType, variant.getName())));
|
||||
|
||||
label = new JLabel(IconLoader.Garbage.getIcon());
|
||||
label.setToolTipText("Delete variant");
|
||||
JLabel label = new JLabel(IconLoader.Garbage.getIcon());
|
||||
label.setToolTipText(LangUtil.translate("Delete variant"));
|
||||
label.addMouseListener(new MouseAdapter() {
|
||||
|
||||
@Override
|
||||
@@ -209,8 +190,10 @@ public class ComponentButtonFactory {
|
||||
m.setVisible(false);
|
||||
}
|
||||
int result = JOptionPane.showConfirmDialog(SwingUtilities.getRoot(item),
|
||||
"Are you sure you want to delete variant \"" + variant.getName() + "\"", "Delete",
|
||||
JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
|
||||
String.format(LangUtil.translate("Are you sure you want to delete variant \"%s\"?"),
|
||||
variant.getName()),
|
||||
LangUtil.translate("Delete"), JOptionPane.YES_NO_OPTION,
|
||||
JOptionPane.WARNING_MESSAGE);
|
||||
if (result != JOptionPane.YES_OPTION) {
|
||||
return;
|
||||
}
|
||||
@@ -218,15 +201,18 @@ public class ComponentButtonFactory {
|
||||
e.consume();
|
||||
}
|
||||
});
|
||||
margin = new EmptyBorder(4, 2, 0, 0);
|
||||
label.setBorder(margin);
|
||||
item.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
|
||||
label.setBorder(new EmptyBorder(4, 2, 0, 0));
|
||||
item.add(label);
|
||||
return item;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param showDefaultPin whether model items get the pin that makes a model the default of the
|
||||
* type; only meaningful where the items place a new component
|
||||
*/
|
||||
public static List<Component> createDatasheetItems(final IPlugInPort plugInPort,
|
||||
final ComponentType componentType, List<String> path, Consumer<String[]> modelConsumer) {
|
||||
final ComponentType componentType, List<String> path, boolean showDefaultPin,
|
||||
Consumer<String[]> modelConsumer) {
|
||||
int depth = path.size();
|
||||
List<String[]> datasheet = componentType.getDatasheet();
|
||||
if (datasheet == null) {
|
||||
@@ -253,7 +239,8 @@ public class ComponentButtonFactory {
|
||||
submenu.removeAll();
|
||||
List<String> newPath = new ArrayList<String>(path);
|
||||
newPath.add(value);
|
||||
List<Component> childItems = createDatasheetItems(plugInPort, componentType, newPath, modelConsumer);
|
||||
List<Component> childItems = createDatasheetItems(plugInPort, componentType, newPath,
|
||||
showDefaultPin, modelConsumer);
|
||||
if (childItems.size() > MAX_MENU_ITEMS) {
|
||||
List<List<Component>> partitions = Lists.partition(childItems, MAX_MENU_ITEMS);
|
||||
for (List<Component> partition : partitions) {
|
||||
@@ -293,15 +280,24 @@ public class ComponentButtonFactory {
|
||||
return (Component) submenu;
|
||||
}
|
||||
|
||||
JMenuItem item = new JMenuItem(value);
|
||||
Optional<String[]> findFirst =
|
||||
filteredDatasheet.stream().filter(line -> line[depth].equals(value)).findFirst();
|
||||
|
||||
final JMenuItem item = new JMenuItem(value) {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
// Customize item size to fit the pin
|
||||
public java.awt.Dimension getPreferredSize() {
|
||||
Dimension d = super.getPreferredSize();
|
||||
return new Dimension(d.width + (showDefaultPin ? 16 : 0), d.height);
|
||||
}
|
||||
};
|
||||
|
||||
item.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Optional<String[]> findFirst =
|
||||
filteredDatasheet.stream().filter(line -> line[depth].equals(value)).findFirst();
|
||||
|
||||
if (findFirst.isPresent()) {
|
||||
modelConsumer.accept(findFirst.get());
|
||||
} else {
|
||||
@@ -310,6 +306,15 @@ public class ComponentButtonFactory {
|
||||
}
|
||||
});
|
||||
|
||||
if (showDefaultPin && findFirst.isPresent()) {
|
||||
String[] model = findFirst.get();
|
||||
boolean isDefault = plugInPort.isDefaultModel(componentType, model);
|
||||
item.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
|
||||
item.add(createDefaultPin(isDefault,
|
||||
isDefault ? "Remove default model" : "Set default model",
|
||||
() -> plugInPort.setDefaultModel(componentType, model)));
|
||||
}
|
||||
|
||||
return (Component) item;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
@@ -347,4 +352,28 @@ public class ComponentButtonFactory {
|
||||
});
|
||||
return button;
|
||||
}
|
||||
|
||||
private static JLabel createDefaultPin(boolean isDefault, String tooltip,
|
||||
final Runnable toggle) {
|
||||
JLabel label = new JLabel(
|
||||
isDefault ? IconLoader.PinGreen.getIcon() : IconLoader.PinGrey.getIcon());
|
||||
label.setToolTipText(LangUtil.translate(tooltip));
|
||||
label.addMouseListener(new MouseAdapter() {
|
||||
|
||||
// a click is not reported when the pointer moves between press and release, which happens
|
||||
// easily on a 16px icon, so react to the release instead, as menu items themselves do
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
if (!label.contains(e.getPoint())) {
|
||||
return;
|
||||
}
|
||||
// closes the whole cascade, not just the submenu that holds a datasheet model
|
||||
MenuSelectionManager.defaultManager().clearSelectedPath();
|
||||
toggle.run();
|
||||
e.consume();
|
||||
}
|
||||
});
|
||||
label.setBorder(new EmptyBorder(4, 0, 0, 0));
|
||||
return label;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -508,7 +508,7 @@ class ComponentTabbedPane extends JTabbedPane {
|
||||
variantPopup.add(new JSeparator());
|
||||
|
||||
if (componentType.getDatasheet() != null && !componentType.getDatasheet().isEmpty()) {
|
||||
List<Component> items = ComponentButtonFactory.createDatasheetItems(plugInPort, componentType, new ArrayList<String>(), model -> {
|
||||
List<Component> items = ComponentButtonFactory.createDatasheetItems(plugInPort, componentType, new ArrayList<String>(), true, model -> {
|
||||
LOG.info("Creating datasheet model " + String.join(", ", model));
|
||||
plugInPort.setNewComponentTypeSlot(componentType, null, model, false);
|
||||
});
|
||||
|
||||
@@ -610,7 +610,7 @@ public class TreePanel extends JPanel {
|
||||
boolean showEmpty) {
|
||||
if (componentType.getDatasheet() != null) {
|
||||
List<Component> items = ComponentButtonFactory.createDatasheetItems(plugInPort,
|
||||
componentType, new ArrayList<String>(), model -> {
|
||||
componentType, new ArrayList<String>(), true, model -> {
|
||||
LOG.info("Creating datasheet model " + String.join(", ", model));
|
||||
plugInPort.setNewComponentTypeSlot(componentType, null, model, false);
|
||||
});
|
||||
|
||||
@@ -722,3 +722,10 @@ All|Alle
|
||||
Front and Back|Vorne und hinten
|
||||
Click to choose from %s variants|Klicken, um aus %s Varianten zu wählen
|
||||
Flange|Flansch
|
||||
Set default variant|Als Standardvariante festlegen
|
||||
Remove default variant|Standardvariante entfernen
|
||||
Delete variant|Variante löschen
|
||||
Are you sure you want to delete variant "%s"?|Möchten Sie die Variante "%s" wirklich löschen?
|
||||
Delete|Löschen
|
||||
Set default model|Als Standardmodell festlegen
|
||||
Remove default model|Standardmodell entfernen
|
||||
|
||||
@@ -715,3 +715,10 @@ All
|
||||
Front and Back
|
||||
Click to choose from %s variants
|
||||
Flange
|
||||
Set default variant
|
||||
Remove default variant
|
||||
Delete variant
|
||||
Are you sure you want to delete variant "%s"?
|
||||
Delete
|
||||
Set default model
|
||||
Remove default model
|
||||
|
||||
@@ -718,3 +718,10 @@ All|Todos
|
||||
Front and Back|Frente y parte trasera
|
||||
Click to choose from %s variants|Haga clic para elegir entre %s variantes
|
||||
Flange|Brida
|
||||
Set default variant|Establecer como variante predeterminada
|
||||
Remove default variant|Quitar variante predeterminada
|
||||
Delete variant|Eliminar variante
|
||||
Are you sure you want to delete variant "%s"?|¿Seguro que desea eliminar la variante "%s"?
|
||||
Delete|Eliminar
|
||||
Set default model|Establecer como modelo predeterminado
|
||||
Remove default model|Quitar modelo predeterminado
|
||||
|
||||
@@ -717,3 +717,10 @@ All|Tous
|
||||
Front and Back|Avant et arrière
|
||||
Click to choose from %s variants|Cliquez pour choisir parmi %s variantes
|
||||
Flange|Collerette
|
||||
Set default variant|Définir comme variante par défaut
|
||||
Remove default variant|Retirer la variante par défaut
|
||||
Delete variant|Supprimer la variante
|
||||
Are you sure you want to delete variant "%s"?|Voulez-vous vraiment supprimer la variante "%s" ?
|
||||
Delete|Supprimer
|
||||
Set default model|Définir comme modèle par défaut
|
||||
Remove default model|Retirer le modèle par défaut
|
||||
|
||||
@@ -719,3 +719,10 @@ All|Tutti
|
||||
Front and Back|Fronte e retro
|
||||
Click to choose from %s variants|Fai clic per scegliere tra %s varianti
|
||||
Flange|Flangia
|
||||
Set default variant|Imposta come variante predefinita
|
||||
Remove default variant|Rimuovi variante predefinita
|
||||
Delete variant|Elimina variante
|
||||
Are you sure you want to delete variant "%s"?|Eliminare davvero la variante "%s"?
|
||||
Delete|Elimina
|
||||
Set default model|Imposta come modello predefinito
|
||||
Remove default model|Rimuovi modello predefinito
|
||||
|
||||
@@ -723,3 +723,10 @@ All|Alle
|
||||
Front and Back|Voor- en achterkant
|
||||
Click to choose from %s variants|Klik om te kiezen uit %s varianten
|
||||
Flange|Flens
|
||||
Set default variant|Instellen als standaardvariant
|
||||
Remove default variant|Standaardvariant verwijderen
|
||||
Delete variant|Variant verwijderen
|
||||
Are you sure you want to delete variant "%s"?|Weet u zeker dat u variant "%s" wilt verwijderen?
|
||||
Delete|Verwijderen
|
||||
Set default model|Instellen als standaardmodel
|
||||
Remove default model|Standaardmodel verwijderen
|
||||
|
||||
@@ -718,3 +718,10 @@ All|Todos
|
||||
Front and Back|Frente e traseira
|
||||
Click to choose from %s variants|Clique para escolher entre %s variantes
|
||||
Flange|Flange
|
||||
Set default variant|Definir como variante padrão
|
||||
Remove default variant|Remover variante padrão
|
||||
Delete variant|Excluir variante
|
||||
Are you sure you want to delete variant "%s"?|Tem certeza de que deseja excluir a variante "%s"?
|
||||
Delete|Excluir
|
||||
Set default model|Definir como modelo padrão
|
||||
Remove default model|Remover modelo padrão
|
||||
|
||||
@@ -714,3 +714,10 @@ All|Sve
|
||||
Front and Back|Prednja i zadnja
|
||||
Click to choose from %s variants|Kliknite da izaberete jednu od %s varijanti
|
||||
Flange|Obod
|
||||
Set default variant|Postavi kao podrazumevanu varijantu
|
||||
Remove default variant|Ukloni podrazumevanu varijantu
|
||||
Delete variant|Obriši varijantu
|
||||
Are you sure you want to delete variant "%s"?|Da li ste sigurni da želite da obrišete varijantu "%s"?
|
||||
Delete|Obriši
|
||||
Set default model|Postavi kao podrazumevani model
|
||||
Remove default model|Ukloni podrazumevani model
|
||||
|
||||
@@ -716,3 +716,10 @@ All|सभी
|
||||
Front and Back|आगे और पीछे
|
||||
Click to choose from %s variants|%s वेरिएंट में से चुनने के लिए क्लिक करें
|
||||
Flange|फ़्लैंज
|
||||
Set default variant|डिफ़ॉल्ट वेरिएंट सेट करें
|
||||
Remove default variant|डिफ़ॉल्ट वेरिएंट हटाएँ
|
||||
Delete variant|वेरिएंट हटाएँ
|
||||
Are you sure you want to delete variant "%s"?|क्या आप वाकई वेरिएंट "%s" हटाना चाहते हैं?
|
||||
Delete|हटाएँ
|
||||
Set default model|डिफ़ॉल्ट मॉडल सेट करें
|
||||
Remove default model|डिफ़ॉल्ट मॉडल हटाएँ
|
||||
|
||||
@@ -716,3 +716,10 @@ All|全部
|
||||
Front and Back|前后
|
||||
Click to choose from %s variants|点击从 %s 个变体中选择
|
||||
Flange|法兰
|
||||
Set default variant|设为默认变体
|
||||
Remove default variant|取消默认变体
|
||||
Delete variant|删除变体
|
||||
Are you sure you want to delete variant "%s"?|确定要删除变体“%s”吗?
|
||||
Delete|删除
|
||||
Set default model|设为默认型号
|
||||
Remove default model|取消默认型号
|
||||
|
||||
Reference in New Issue
Block a user