33import net .minecraft .client .gui .GuiButton ;
44import pw .ipex .plex .Plex ;
55import pw .ipex .plex .core .PlexCore ;
6+ import pw .ipex .plex .core .PlexCoreUtils ;
67import pw .ipex .plex .ui .PlexUIBase ;
78import pw .ipex .plex .ui .PlexUIModMenuScreen ;
89import pw .ipex .plex .ui .widget .PlexUISlider ;
910import pw .ipex .plex .ui .widget .PlexUITextField ;
11+ import pw .ipex .plex .ui .widget .autocomplete .PlexUIAutoCompleteItem ;
1012import pw .ipex .plex .ui .widget .itemlist .PlexUIScrolledItemList ;
1113
14+ import java .util .List ;
15+
1216public class PlexAutoGGUI extends PlexUIBase {
1317 public PlexUIScrolledItemList ggMessagesList ;
1418 public PlexUITextField ggMessageEdit ;
@@ -44,10 +48,13 @@ public void uiAddButtons(PlexUIModMenuScreen ui) {
4448
4549 this .ggMessageEdit = new PlexUITextField (9 , Plex .minecraft .fontRendererObj , pane1Pos + 5 , top + 154 , paneSize * 2 - 5 - 3 - 20 - 3 - 20 - 5 , 20 );
4650 this .ggMessageEdit .text .setMaxStringLength (100 );
51+ this .ggMessageEdit .text .setCanLoseFocus (false );
52+ this .ggMessageEdit .text .setFocused (true );
4753
4854 ui .addElement (this .newGGButton = new GuiButton (10 , pane2Pos + paneSize - 20 - 20 - 3 - 5 , top + 154 , 20 , 20 , "+" ));
4955 ui .addElement (this .removeGGButton = new GuiButton (11 , pane2Pos + paneSize - 20 - 5 , top + 154 , 20 , 20 , "-" ));
5056
57+ this .deselectAll ();
5158 this .updateSelectedItem ();
5259 }
5360
@@ -69,7 +76,6 @@ public void updateSelectedItem() {
6976 PlexAutoGGMessage selectedMessage = this .getSelectedItem ();
7077 if (selectedMessage == null ) {
7178 this .ggMessageEdit .text .setText ("" );
72- this .ggMessageEdit .text .setEnabled (false );
7379 this .removeGGButton .enabled = false ;
7480 this .oldSelectedMessage = null ;
7581 return ;
@@ -88,6 +94,78 @@ public void deselectAll() {
8894 message .selected = false ;
8995 }
9096 }
97+
98+ public void newItem () {
99+ PlexAutoGGMod modInstance = PlexCore .modInstance (PlexAutoGGMod .class );
100+ PlexAutoGGMessage newMessage = new PlexAutoGGMessage (this .ggMessageEdit .text .getText ());
101+ this .deselectAll ();
102+ newMessage .selected = true ;
103+ modInstance .ggMessages .add (newMessage );
104+ this .ggMessagesList .scrollToItemIfNotCompletelyInView (newMessage );
105+ }
106+
107+ public void deleteItem (PlexAutoGGMessage message ) {
108+ PlexAutoGGMod modInstance = PlexCore .modInstance (PlexAutoGGMod .class );
109+ if (message == null ) {
110+ return ;
111+ }
112+ PlexAutoGGMessage messageBefore = null ;
113+ PlexAutoGGMessage messageAfter = null ;
114+ boolean messageFound = false ;
115+ for (PlexAutoGGMessage ggMessage : modInstance .ggMessages ) {
116+ if (ggMessage == message ) {
117+ messageFound = true ;
118+ continue ;
119+ }
120+ if (!messageFound ) {
121+ messageBefore = ggMessage ;
122+ }
123+ else {
124+ messageAfter = ggMessage ;
125+ }
126+ if (messageFound && messageAfter != null ) {
127+ break ;
128+ }
129+ }
130+ modInstance .ggMessages .remove (message );
131+ deselectAll ();
132+ PlexAutoGGMessage newSelectedMessage = null ;
133+ if (messageAfter != null ) {
134+ newSelectedMessage = messageAfter ;
135+ }
136+ else if (messageBefore != null ) {
137+ newSelectedMessage = messageBefore ;
138+ }
139+
140+ if (newSelectedMessage != null ) {
141+ newSelectedMessage .selected = true ;
142+ this .ggMessagesList .scrollToItemIfNotCompletelyInView (newSelectedMessage );
143+ }
144+ }
145+
146+ public void moveSelection (int indexes ) {
147+ PlexAutoGGMod modInstance = PlexCore .modInstance (PlexAutoGGMod .class );
148+ List <PlexAutoGGMessage > messages = modInstance .ggMessages ;
149+ if (messages .size () == 0 ) {
150+ return ;
151+ }
152+
153+ PlexAutoGGMessage selectedItem = this .getSelectedItem ();
154+ if (selectedItem == null ) {
155+ selectedItem = messages .get (0 );
156+ }
157+ selectedItem .selected = false ;
158+
159+ int selectedIndex = -1 ;
160+ for (int itemIndex = 0 ; itemIndex < messages .size (); itemIndex ++) {
161+ if (messages .get (itemIndex ) == selectedItem ) {
162+ selectedIndex = itemIndex ;
163+ }
164+ }
165+ selectedIndex = PlexCoreUtils .clamp (selectedIndex + indexes , 0 , messages .size () - 1 );
166+ messages .get (selectedIndex ).selected = true ;
167+ this .ggMessagesList .scrollToItemIfNotCompletelyInView (messages .get (selectedIndex ));
168+ }
91169
92170 @ Override
93171 public void mouseClicked (int par1 , int par2 , int btn ) {
@@ -119,7 +197,19 @@ public void updateScreen() {
119197
120198 @ Override
121199 public void keyTyped (char par1 , int par2 ) {
122- this .ggMessageEdit .keyTyped (par1 , par2 );
200+ if (par2 == 200 ) {
201+ this .moveSelection (-1 );
202+ }
203+ else if (par2 == 208 ) {
204+ this .moveSelection (1 );
205+ }
206+ else if (par2 == 28 ) {
207+ this .newItem ();
208+ }
209+ else {
210+ this .ggMessageEdit .keyTyped (par1 , par2 );
211+ }
212+ this .updateSelectedItem ();
123213 PlexAutoGGMessage selectedMessage = this .getSelectedItem ();
124214 if (selectedMessage != null ) {
125215 selectedMessage .message = this .ggMessageEdit .text .getText ();
@@ -186,18 +276,10 @@ public void uiButtonClicked(GuiButton button) {
186276 button .displayString = this .ggModeDisplayString ();
187277 }
188278 if (button .id == 10 ) {
189- this .deselectAll ();
190- PlexAutoGGMessage newMessage = new PlexAutoGGMessage ("gg" );
191- newMessage .selected = true ;
192- modInstance .ggMessages .add (newMessage );
279+ this .newItem ();
193280 }
194281 if (button .id == 11 ) {
195- PlexAutoGGMessage selectedMessage = this .getSelectedItem ();
196- if (selectedMessage == null ) {
197- return ;
198- }
199- selectedMessage .selected = false ;
200- modInstance .ggMessages .remove (selectedMessage );
282+ this .deleteItem (this .getSelectedItem ());
201283 }
202284 this .updateSelectedItem ();
203285 }
0 commit comments