99import java .awt .Insets ;
1010import java .awt .event .ActionEvent ;
1111import java .awt .event .ActionListener ;
12- import java .awt .event .ItemEvent ;
13- import java .awt .event .ItemListener ;
1412import java .awt .event .MouseAdapter ;
1513import java .awt .event .MouseEvent ;
1614import java .awt .event .WindowAdapter ;
1715import java .awt .event .WindowEvent ;
1816import java .util .ArrayList ;
1917import java .util .regex .Pattern ;
18+ import java .util .stream .Collectors ;
19+ import java .util .stream .Stream ;
2020
2121import javax .swing .BoxLayout ;
22+ import javax .swing .DefaultComboBoxModel ;
2223import javax .swing .JButton ;
2324import javax .swing .JCheckBox ;
2425import javax .swing .JComboBox ;
2829import javax .swing .JScrollPane ;
2930import javax .swing .JTextField ;
3031import javax .swing .WindowConstants ;
32+ import javax .swing .event .DocumentEvent ;
33+ import javax .swing .event .DocumentListener ;
3134import javax .swing .event .MouseInputAdapter ;
3235
3336import 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}
0 commit comments