Skip to content

Commit 5266c8d

Browse files
committed
Improvements to the CellEditDialog
1 parent 41b740b commit 5266c8d

File tree

3 files changed

+110
-75
lines changed

3 files changed

+110
-75
lines changed

src/edit/CellEditDialog.java

Lines changed: 100 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,17 @@
99
import java.awt.Insets;
1010
import java.awt.event.ActionEvent;
1111
import java.awt.event.ActionListener;
12-
import java.awt.event.ItemEvent;
13-
import java.awt.event.ItemListener;
1412
import java.awt.event.MouseAdapter;
1513
import java.awt.event.MouseEvent;
1614
import java.awt.event.WindowAdapter;
1715
import java.awt.event.WindowEvent;
1816
import java.util.ArrayList;
1917
import java.util.regex.Pattern;
18+
import java.util.stream.Collectors;
19+
import java.util.stream.Stream;
2020

2121
import javax.swing.BoxLayout;
22+
import javax.swing.DefaultComboBoxModel;
2223
import javax.swing.JButton;
2324
import javax.swing.JCheckBox;
2425
import javax.swing.JComboBox;
@@ -28,6 +29,8 @@
2829
import javax.swing.JScrollPane;
2930
import javax.swing.JTextField;
3031
import javax.swing.WindowConstants;
32+
import javax.swing.event.DocumentEvent;
33+
import javax.swing.event.DocumentListener;
3134
import javax.swing.event.MouseInputAdapter;
3235

3336
import gui.Abbreviations;
@@ -65,7 +68,8 @@ public class CellEditDialog
6568
private static String[] possibleActionsArray = new String[] {"", "text_to_clipboard", "file_to_clipboard"};
6669

6770
public static boolean iconEditEditorOpen = false;
68-
private static boolean selectedByUser = true;
71+
72+
private static String[] abbreviationsAndFileNamesList;
6973

7074
public static void initializeCellEditDialog()
7175
{
@@ -442,6 +446,8 @@ private static ActionListener getIconEditListener()
442446
JLabel main_image_label;
443447
JLabel layered_image_label;
444448

449+
Dimension combobox_main_dim, combobox_layered_dim;
450+
445451
private void closeDialog(JDialog dialog)
446452
{
447453
iconEditEditorOpen = false;
@@ -451,6 +457,8 @@ private void closeDialog(JDialog dialog)
451457
@Override
452458
public void actionPerformed(ActionEvent ae)
453459
{
460+
updateAbbreviationsAndFileNamesList();
461+
454462
iconEditEditorOpen = true;
455463

456464
main_image_abbr = ( (EditIconLabel) selectedCellPanel).getMainImageAbbr();
@@ -498,52 +506,42 @@ public void actionPerformed(ActionEvent ae)
498506
gbc_main.fill = GridBagConstraints.HORIZONTAL;
499507
gbc_main.gridx = gbc_main.gridy = 0;
500508

501-
main_image_edit_panel.add(GuiHelper.getAlignedNonOpaqueJLabelWithCurrentColors("Abbreviations:", GuiHelper.LEFT), gbc_main);
509+
main_image_edit_panel.add(GuiHelper.getAlignedNonOpaqueJLabelWithCurrentColors("List:", GuiHelper.LEFT), gbc_main);
502510

503511
gbc_main.gridx ++;
504-
JComboBox<String> abbr_list_main = new JComboBox<String>(Abbreviations.getArrayOfAbbreviations() );
505-
abbr_list_main.setSelectedItem(main_image_abbr);
506-
main_image_edit_panel.add(abbr_list_main, gbc_main);
512+
JComboBox<String> combobox_main = new JComboBox<String>(abbreviationsAndFileNamesList);
513+
combobox_main.setSelectedItem(getLowercaseStringWithFirstCharCapitablized(main_image_abbr) );
514+
main_image_edit_panel.add(combobox_main, gbc_main);
507515

508516
gbc_main.gridy ++;
509517
gbc_main.gridx = 0;
510-
main_image_edit_panel.add(GuiHelper.getAlignedNonOpaqueJLabelWithCurrentColors("Images:", GuiHelper.LEFT), gbc_main);
518+
main_image_edit_panel.add(GuiHelper.getAlignedNonOpaqueJLabelWithCurrentColors("Filter:", GuiHelper.LEFT), gbc_main);
511519

512520
gbc_main.gridx ++;
513-
JComboBox<String> images_list_main = new JComboBox<String>(FileOperations.getNamesOfImagesInImagesDirectory() );
514-
images_list_main.setSelectedItem(main_image_abbr);
515-
main_image_edit_panel.add(images_list_main, gbc_main);
521+
JTextField filter_textFiled_main = new JTextField();
522+
main_image_edit_panel.add(filter_textFiled_main, gbc_main);
516523

517-
abbr_list_main.addItemListener(new ItemListener() {
524+
combobox_main.addActionListener(new ActionListener() {
518525
@Override
519-
public void itemStateChanged(ItemEvent e) {
520-
if(selectedByUser && e.getStateChange() == ItemEvent.SELECTED)
521-
{
522-
selectedByUser = false;
523-
images_list_main.setSelectedIndex(0);
524-
selectedByUser = true;
525-
main_image_abbr = (String) abbr_list_main.getSelectedItem();
526-
main_image_label.setIcon(GuiHelper.getScaledImageIconFromAbbreviation(main_image_abbr) );
527-
icon_dialog.pack();
528-
}
526+
public void actionPerformed(ActionEvent e)
527+
{
528+
main_image_abbr = (String) combobox_main.getSelectedItem();
529+
main_image_label.setIcon(GuiHelper.getScaledImageIconFromAbbreviation(main_image_abbr) );
530+
icon_dialog.pack();
529531
}
530532
});
531-
images_list_main.addItemListener(new ItemListener() {
532-
@Override
533-
public void itemStateChanged(ItemEvent e) {
534-
if(selectedByUser && e.getStateChange() == ItemEvent.SELECTED)
535-
{
536-
selectedByUser = false;
537-
abbr_list_main.setSelectedIndex(0);
538-
selectedByUser = true;
539-
main_image_abbr = (String) images_list_main.getSelectedItem();
540-
main_image_label.setIcon(GuiHelper.getScaledImageIconFromAbbreviation(main_image_abbr) );
541-
icon_dialog.pack();
542-
}
543-
}
533+
filter_textFiled_main.getDocument().addDocumentListener(new DocumentListener() {
534+
@Override public void removeUpdate(DocumentEvent e) { update(); }
535+
@Override public void insertUpdate(DocumentEvent e) { update(); }
536+
@Override public void changedUpdate(DocumentEvent e) { update(); }
537+
538+
private void update()
539+
{
540+
combobox_main.setModel(new DefaultComboBoxModel<>(getFilteredAbbreviationsAndFileNamesList(filter_textFiled_main.getText() ) ) );
541+
combobox_main.setPreferredSize(combobox_main_dim);
542+
}
544543
});
545544

546-
547545
content_panel.add(main_image_edit_panel, gbc);
548546

549547
// layered?
@@ -583,52 +581,46 @@ public void itemStateChanged(ItemEvent e) {
583581
gbc_layered.fill = GridBagConstraints.HORIZONTAL;
584582
gbc_layered.gridx = gbc_layered.gridy = 0;
585583

586-
layered_image_edit_panel.add(GuiHelper.getAlignedNonOpaqueJLabelWithCurrentColors("Abbreviations:", GuiHelper.LEFT), gbc_layered);
584+
layered_image_edit_panel.add(GuiHelper.getAlignedNonOpaqueJLabelWithCurrentColors("List:", GuiHelper.LEFT), gbc_layered);
587585

588586
gbc_layered.gridx ++;
589-
JComboBox<String> abbr_list_layered = new JComboBox<String>(Abbreviations.getArrayOfAbbreviations() );
590-
abbr_list_layered.setSelectedItem(layered_image_abbr);
591-
layered_image_edit_panel.add(abbr_list_layered, gbc_layered);
587+
JComboBox<String> combobox_layered = new JComboBox<String>(abbreviationsAndFileNamesList);
588+
combobox_layered.setSelectedItem(getLowercaseStringWithFirstCharCapitablized(layered_image_abbr) );
589+
layered_image_edit_panel.add(combobox_layered, gbc_layered);
592590

593591
gbc_layered.gridx = 0;
594592
gbc_layered.gridy ++;
595-
layered_image_edit_panel.add(GuiHelper.getAlignedNonOpaqueJLabelWithCurrentColors("Images:", GuiHelper.LEFT), gbc_layered);
593+
layered_image_edit_panel.add(GuiHelper.getAlignedNonOpaqueJLabelWithCurrentColors("Filter:", GuiHelper.LEFT), gbc_layered);
596594

597595
gbc_layered.gridx ++;
598-
JComboBox<String> images_list_layered = new JComboBox<String>(FileOperations.getNamesOfImagesInImagesDirectory() );
599-
images_list_layered.setSelectedItem(layered_image_abbr);
600-
layered_image_edit_panel.add(images_list_layered, gbc_layered);
596+
JTextField filter_textFiled_layered = new JTextField();
597+
layered_image_edit_panel.add(filter_textFiled_layered, gbc_layered);
601598

602599
content_panel.add(layered_image_edit_panel, gbc);
603600

604-
605-
abbr_list_layered.addItemListener(new ItemListener() {
601+
combobox_layered.addActionListener(new ActionListener() {
606602
@Override
607-
public void itemStateChanged(ItemEvent e) {
608-
if(selectedByUser && e.getStateChange() == ItemEvent.SELECTED)
609-
{
610-
selectedByUser = false;
611-
images_list_layered.setSelectedIndex(0);
612-
selectedByUser = true;
613-
layered_image_abbr = (String) abbr_list_layered.getSelectedItem();
614-
layered_image_label.setIcon(GuiHelper.getScaledImageIconFromAbbreviation(layered_image_abbr) );
615-
icon_dialog.pack();
616-
}
617-
}
603+
public void actionPerformed(ActionEvent e)
604+
{
605+
layered_image_abbr = (String) combobox_layered.getSelectedItem();
606+
content_panel.remove(layered_image_label);
607+
layered_image_label = new JLabel(GuiHelper.getScaledImageIconFromAbbreviation(layered_image_abbr) );
608+
gbc.gridx = 1;
609+
gbc.gridy = 2;
610+
content_panel.add(layered_image_label, gbc);
611+
icon_dialog.pack();
612+
}
618613
});
619-
images_list_layered.addItemListener(new ItemListener() {
620-
@Override
621-
public void itemStateChanged(ItemEvent e) {
622-
if(selectedByUser && e.getStateChange() == ItemEvent.SELECTED)
623-
{
624-
selectedByUser = false;
625-
abbr_list_layered.setSelectedIndex(0);
626-
selectedByUser = true;
627-
layered_image_abbr = (String) images_list_layered.getSelectedItem();
628-
layered_image_label.setIcon(GuiHelper.getScaledImageIconFromAbbreviation(layered_image_abbr) );
629-
icon_dialog.pack();
630-
}
631-
}
614+
filter_textFiled_layered.getDocument().addDocumentListener(new DocumentListener() {
615+
@Override public void removeUpdate(DocumentEvent e) { update(); }
616+
@Override public void insertUpdate(DocumentEvent e) { update(); }
617+
@Override public void changedUpdate(DocumentEvent e) { update(); }
618+
619+
private void update()
620+
{
621+
combobox_layered.setModel(new DefaultComboBoxModel<>(getFilteredAbbreviationsAndFileNamesList(filter_textFiled_layered.getText() ) ) );
622+
combobox_layered.setPreferredSize(combobox_layered_dim);
623+
}
632624
});
633625

634626
// horizontal alignment
@@ -677,6 +669,9 @@ public void itemStateChanged(ItemEvent e) {
677669

678670
icon_dialog.pack();
679671
icon_dialog.setVisible(true);
672+
673+
combobox_main_dim = combobox_main.getSize();
674+
combobox_layered_dim = combobox_layered.getSize();
680675
}
681676
};
682677
}
@@ -764,4 +759,39 @@ public void actionPerformed(ActionEvent e)
764759
}
765760
};
766761
}
762+
763+
public static String getLowercaseStringWithFirstCharCapitablized(String str)
764+
{
765+
return str.length() == 0 ? str : str.length() == 1 ? str.toUpperCase() : Character.toUpperCase(str.charAt(0) ) + str.substring(1).toLowerCase();
766+
}
767+
768+
private static void updateAbbreviationsAndFileNamesList()
769+
{
770+
ArrayList<String> completeNames = Abbreviations.getStreamOfCompleteNames().collect(Collectors.toCollection(ArrayList::new) );
771+
abbreviationsAndFileNamesList = Stream.concat(
772+
Stream.concat(Stream.of(""), Abbreviations.getStreamOfAbbreviations() ),
773+
FileOperations.getStreamOfNamesOfImagesInImagesDirectory()
774+
.filter(e -> ! completeNames.contains(e) )
775+
.map(e -> getLowercaseStringWithFirstCharCapitablized(e) )
776+
)
777+
.map(e -> getLowercaseStringWithFirstCharCapitablized(e) )
778+
.sorted( (e,f) -> e.compareTo(f) )
779+
.toArray(String[]::new);
780+
}
781+
782+
private static String[] getFilteredAbbreviationsAndFileNamesList(String filter)
783+
{
784+
return Stream.of(abbreviationsAndFileNamesList)
785+
.map(e -> e.toLowerCase() )
786+
.filter(e -> e.contains(filter.toLowerCase() ) ).
787+
sorted( (String e, String f) -> {
788+
boolean eStartsWith = e.startsWith(filter);
789+
boolean fStartsWith = f.startsWith(filter);
790+
if (eStartsWith && !fStartsWith) return -1;
791+
else if ( !eStartsWith && fStartsWith) return 1;
792+
else return e.compareTo(f);
793+
} )
794+
.map(e -> getLowercaseStringWithFirstCharCapitablized(e) )
795+
.toArray(String[]::new);
796+
}
767797
}

src/gui/Abbreviations.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,9 +262,14 @@ public static ArrayList<String[]> getAbbreviationsListFromTextfiles(ArrayList<JT
262262
return textfields.stream().map(row -> new String[] {row[0].getText(), row[1].getText() } ).collect(Collectors.toCollection(ArrayList::new) );
263263
}
264264

265-
public static String[] getArrayOfAbbreviations()
265+
public static Stream<String> getStreamOfAbbreviations()
266266
{
267-
return Stream.concat(Stream.of(""), abbreviationsList.stream().map(e -> e[0] ) ).toArray(String[]::new);
267+
return abbreviationsList.stream().map(e -> e[0] );
268+
}
269+
270+
public static Stream<String> getStreamOfCompleteNames()
271+
{
272+
return abbreviationsList.stream().map(e -> e[1] );
268273
}
269274

270275
public static String getNameFromAbbreviation(String str)

src/logic/FileOperations.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,15 @@ public static void selectNotesFile()
5050
MainGui.window.setTitle(new_title);
5151
}
5252

53-
public static String[] getNamesOfImagesInImagesDirectory()
53+
public static Stream<String> getStreamOfNamesOfImagesInImagesDirectory()
5454
{
55-
return Stream.concat(Stream.of(""), Stream.of(new File(imagesDirectory).list(new FilenameFilter() {
55+
return Stream.of(new File(imagesDirectory).list(new FilenameFilter() {
5656
@Override
5757
public boolean accept(File dir, String name)
5858
{
5959
return name.toLowerCase().endsWith(".png");
6060
}
61-
}) ).sorted( (e,f) -> e.compareTo(f) ).map(e -> e.substring(0, e.length() - 4) ) ).toArray(String[]::new);
61+
}) ).map(e -> e.substring(0, e.length() - 4) );
6262
}
6363

6464
private static void setDefaulSettings()

0 commit comments

Comments
 (0)