@@ -133,10 +133,6 @@ protected void initalizeUi() {
133
133
setVisible (true );
134
134
table .requestFocus ();
135
135
autoScrollCheckBox .setSelected (true );
136
-
137
- // restore previous filter
138
- String recentFilterText = PreferenceUtils .getPreference (PreferenceUtils .Pref .PREF_RECENT_MESSAGE_FILTER );
139
- filterField .setText (recentFilterText );
140
136
}
141
137
142
138
@ Override
@@ -189,6 +185,29 @@ private void setupMenuBar() {
189
185
// [CMD + T] = hide toolbar
190
186
createCmdMenuItem (windowMenu , "Hide Toolbar" , KeyEvent .VK_T , e -> hideToolbar ());
191
187
188
+ // -----------------------------------------------------------
189
+ // -----------------------------------------------------------
190
+
191
+ JMenu editMenu = new JMenu ("Edit" );
192
+
193
+ // [CMD + +] = increase font size
194
+ createCmdMenuItem (editMenu , "Increase Font Size" , KeyEvent .VK_EQUALS , e -> increaseFontSize ());
195
+
196
+ // [CMD + -] = increase font size
197
+ createCmdMenuItem (editMenu , "Decrease Font Size" , KeyEvent .VK_MINUS , e -> decreaseFontSize ());
198
+
199
+ // [CMD + F] = focus search field
200
+ createCmdMenuItem (editMenu , "Search for..." , KeyEvent .VK_F , e -> searchField .requestFocus ());
201
+
202
+ // [CMD + G] = find next
203
+ createCmdMenuItem (editMenu , "Find Next" , KeyEvent .VK_G , e -> findNext (true ));
204
+
205
+ // [SHIFT + CMD + G] = find previous
206
+ KeyStroke findPrevKey = KeyStroke .getKeyStroke ("shift meta G" );
207
+ createMenuItem (editMenu , "Find Previous" , findPrevKey , e -> findNext (false ));
208
+
209
+ // -----------------------------------------------------------
210
+ // -----------------------------------------------------------
192
211
JMenu logsMenu = new JMenu ("Logs" );
193
212
194
213
// [CMD + ENTER] = toggle auto scroll
@@ -200,40 +219,28 @@ private void setupMenuBar() {
200
219
// [CMD + K] = clear logs
201
220
createCmdMenuItem (logsMenu , "Clear logs" , KeyEvent .VK_K , e -> model .clearLogs ());
202
221
222
+ // [CMD + V] = view logs
223
+ createCmdMenuItem (logsMenu , "View selected" , KeyEvent .VK_V , e -> handleViewLogsClicked ());
224
+
225
+ // [CMD + E] = edit logs
226
+ createCmdMenuItem (logsMenu , "Edit selected" , KeyEvent .VK_E , e -> handleEditLogsClicked ());
227
+
203
228
// [CMD + KEY_UP] = scroll to top
204
229
createCmdMenuItem (logsMenu , "Scoll to top" , KeyEvent .VK_UP , e -> {
205
230
autoScrollCheckBox .setSelected (false );
206
231
table .scrollToTop ();
207
232
});
208
233
209
- JMenu editMenu = new JMenu ("Edit" );
210
-
211
234
// [CMD + KEY_DOWN] = scroll to bottom
212
- createCmdMenuItem (editMenu , "Scoll to bottom" , KeyEvent .VK_DOWN , e -> table .scrollToBottom ());
235
+ createCmdMenuItem (logsMenu , "Scoll to bottom" , KeyEvent .VK_DOWN , e -> table .scrollToBottom ());
213
236
214
237
// [OPTION + KEY_UP] = page up
215
238
KeyStroke optionUpKey = KeyStroke .getKeyStroke (KeyEvent .VK_UP , InputEvent .ALT_DOWN_MASK );
216
- createMenuItem (editMenu , "Page Up" , optionUpKey , e -> table .pageUp ());
239
+ createMenuItem (logsMenu , "Page Up" , optionUpKey , e -> table .pageUp ());
217
240
218
241
// [OPTION + KE_DOWN] = page down
219
242
KeyStroke optionDownKey = KeyStroke .getKeyStroke (KeyEvent .VK_DOWN , InputEvent .ALT_DOWN_MASK );
220
- createMenuItem (editMenu , "Page Down" , optionDownKey , e -> table .pageDown ());
221
-
222
- // [CMD + +] = increase font size
223
- createCmdMenuItem (editMenu , "Increase Font Size" , KeyEvent .VK_EQUALS , e -> increaseFontSize ());
224
-
225
- // [CMD + -] = increase font size
226
- createCmdMenuItem (editMenu , "Decrease Font Size" , KeyEvent .VK_MINUS , e -> decreaseFontSize ());
227
-
228
- // [CMD + F] = focus search field
229
- createCmdMenuItem (editMenu , "Search for..." , KeyEvent .VK_F , e -> searchField .requestFocus ());
230
-
231
- // [CMD + G] = find next
232
- createCmdMenuItem (editMenu , "Find Next" , KeyEvent .VK_G , e -> findNext (true ));
233
-
234
- // [SHIFT + CMD + G] = find previous
235
- KeyStroke findPrevKey = KeyStroke .getKeyStroke ("shift meta G" );
236
- createMenuItem (editMenu , "Find Previous" , findPrevKey , e -> findNext (false ));
243
+ createMenuItem (logsMenu , "Page Down" , optionDownKey , e -> table .pageDown ());
237
244
238
245
JMenuBar menubar = new JMenuBar ();
239
246
menubar .add (windowMenu );
@@ -305,8 +312,15 @@ private void closeWindow() {
305
312
log .trace ("closeWindow: {}" , device .getDisplayName ());
306
313
// save last filter
307
314
String filterText = filterField .getCleanText ();
308
- PreferenceUtils .setPreference (PreferenceUtils .Pref .PREF_RECENT_MESSAGE_FILTER , filterText );
309
- //stopLogging();
315
+ PreferenceUtils .setPreference (PreferenceUtils .Pref .PREF_LOGS_CUSTOM_FILTER , filterText .trim ());
316
+
317
+ // save last selected filters
318
+ List <LogFilter > selectedList = filterList .getSelectedValuesList ();
319
+ List <String > selectedFilterList = new ArrayList <>();
320
+ for (LogFilter filter : selectedList ) selectedFilterList .add (filter .name );
321
+ PreferenceUtils .setPreference (PreferenceUtils .Pref .PREF_LOGS_SELECTED_FILTERS , GsonHelper .toJson (selectedFilterList ));
322
+
323
+ stopLogging ();
310
324
deviceScreen .handleLogsClosed (device .serial );
311
325
dispose ();
312
326
}
@@ -343,7 +357,7 @@ private void setupTable() {
343
357
table .getActionMap ().put ("Enter" , new AbstractAction () {
344
358
@ Override
345
359
public void actionPerformed (ActionEvent e ) {
346
- handleLogClicked ();
360
+ handleViewLogsClicked ();
347
361
}
348
362
});
349
363
@@ -353,7 +367,7 @@ public void actionPerformed(ActionEvent e) {
353
367
table .getActionMap ().put ("View" , new AbstractAction () {
354
368
@ Override
355
369
public void actionPerformed (ActionEvent e ) {
356
- handleLogClicked ();
370
+ handleViewLogsClicked ();
357
371
}
358
372
});
359
373
@@ -396,7 +410,7 @@ public void actionPerformed(ActionEvent e) {
396
410
397
411
UiUtils .addPopupMenuItem (popupMenu , "Copy Line" , actionEvent -> handleCopyClicked ());
398
412
UiUtils .addPopupMenuItem (popupMenu , "Copy Message" , actionEvent -> handleCopyMessageClicked ());
399
- UiUtils .addPopupMenuItem (popupMenu , "View Message" , actionEvent -> handleLogClicked ());
413
+ UiUtils .addPopupMenuItem (popupMenu , "View Message" , actionEvent -> handleViewLogsClicked ());
400
414
401
415
return popupMenu ;
402
416
});
@@ -465,7 +479,7 @@ private void handleCopyClicked() {
465
479
clipboard .setContents (stringSelection , null );
466
480
}
467
481
468
- private void handleLogClicked () {
482
+ private void handleViewLogsClicked () {
469
483
List <LogEntry > logEntryList = getSelectedLogEntries ();
470
484
if (!logEntryList .isEmpty ()) {
471
485
viewMessage (logEntryList .toArray (new LogEntry [0 ]));
@@ -489,6 +503,17 @@ private void viewMessage(LogEntry... logEntry) {
489
503
viewScreen .setVisible (true );
490
504
}
491
505
506
+ private void handleEditLogsClicked () {
507
+ List <LogEntry > logEntryList = getSelectedLogEntries ();
508
+ if (logEntryList .isEmpty ()) return ;
509
+
510
+ if (viewScreen == null ) viewScreen = new MessageViewScreen (deviceScreen );
511
+ viewScreen .setLogEntry (logEntryList .toArray (new LogEntry [0 ]));
512
+
513
+ viewScreen .editMessage ();
514
+ viewScreen .setVisible (false );
515
+ }
516
+
492
517
private void handleQuickAddFilter (LogsTableModel .Columns columnType , String text ) {
493
518
LogFilter filter = LogFilter .parse (columnType .name ().toLowerCase () + ":" + text );
494
519
filterField .setText (filter .toString ());
@@ -629,6 +654,7 @@ private void doSearch(String text) {
629
654
630
655
private void setupFilterList () {
631
656
populateFilters ();
657
+ restoreSelectedFilters ();
632
658
filterList .setSelectionMode (ListSelectionModel .MULTIPLE_INTERVAL_SELECTION );
633
659
filterList .setCellRenderer (new LogFilterRenderer ());
634
660
filterList .addListSelectionListener (e -> handleFilterSelected ());
@@ -660,9 +686,36 @@ public void mouseClicked(MouseEvent e) {
660
686
});
661
687
}
662
688
663
- private void populateFilters () {
664
- List <LogFilter > selectedList = filterList .getSelectedValuesList ();
689
+ private void restoreSelectedFilters () {
690
+ // select last used filter(s)
691
+ String recentFilterStr = PreferenceUtils .getPreference (PreferenceUtils .Pref .PREF_LOGS_SELECTED_FILTERS );
692
+ List <String > recentFilterList = GsonHelper .stringToList (recentFilterStr , String .class );
693
+ ListModel <LogFilter > filterListModel = filterList .getModel ();
694
+ List <Integer > selectedIndexList = new ArrayList <>();
695
+ for (int i = 0 ; i < filterListModel .getSize (); i ++) {
696
+ LogFilter filter = filterListModel .getElementAt (i );
697
+ if (recentFilterList .contains (filter .name )) {
698
+ selectedIndexList .add (i );
699
+ }
700
+ }
701
+ if (!selectedIndexList .isEmpty ()) {
702
+ int [] indexArr = selectedIndexList .stream ()
703
+ .filter (Objects ::nonNull )
704
+ .mapToInt (Integer ::intValue )
705
+ .toArray ();
706
+ log .trace ("setupFilterList: re-select:{}" , GsonHelper .toJson (indexArr ));
707
+ filterList .setSelectedIndices (indexArr );
708
+ }
709
+
710
+ // restore previous custom filter
711
+ String recentFilterText = PreferenceUtils .getPreference (PreferenceUtils .Pref .PREF_LOGS_CUSTOM_FILTER );
712
+ if (TextUtils .notEmpty (recentFilterText )) {
713
+ filterField .setText (recentFilterText );
714
+ }
715
+
716
+ }
665
717
718
+ private void populateFilters () {
666
719
// -- system filters --
667
720
List <LogFilter > systemFilterList = getSystemFilters ();
668
721
List <LogFilter > logFilterList = new ArrayList <>(systemFilterList );
@@ -674,28 +727,6 @@ private void populateFilters() {
674
727
logFilterList .addAll (userFilterList );
675
728
// replace all filters
676
729
filterList .setListData (logFilterList .toArray (new LogFilter [0 ]));
677
-
678
- // re-select previously selected filters
679
- if (!selectedList .isEmpty () && !logFilterList .isEmpty ()) {
680
- List <Integer > selectedIndexList = new ArrayList <>();
681
- for (int i = 0 ; i < logFilterList .size (); i ++) {
682
- LogFilter filter = logFilterList .get (i );
683
- for (LogFilter prevSelectedFilter : selectedList ) {
684
- if (TextUtils .equals (prevSelectedFilter .name , filter .name )) {
685
- selectedIndexList .add (i );
686
- break ;
687
- }
688
- }
689
- }
690
- if (!selectedIndexList .isEmpty ()) {
691
- int [] indexArr = selectedIndexList .stream ()
692
- .filter (Objects ::nonNull )
693
- .mapToInt (Integer ::intValue )
694
- .toArray ();
695
- log .trace ("populateFilters: re-select:{}" , GsonHelper .toJson (indexArr ));
696
- filterList .setSelectedIndices (indexArr );
697
- }
698
- }
699
730
}
700
731
701
732
public static List <LogFilter > getSystemFilters () {
0 commit comments