not1mm 24.11.24__py3-none-any.whl → 24.12.3.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
not1mm/__main__.py CHANGED
@@ -1731,7 +1731,6 @@ class MainWindow(QtWidgets.QMainWindow):
1731
1731
  """
1732
1732
 
1733
1733
  self.show_message_box(
1734
- "[Esc]\tClears the input fields of any text.\n"
1735
1734
  "[CTRL-Esc]\tStops cwdaemon from sending Morse.\n"
1736
1735
  "[PgUp]\tIncreases the cw sending speed.\n"
1737
1736
  "[PgDown]\tDecreases the cw sending speed.\n"
@@ -1751,6 +1750,7 @@ class MainWindow(QtWidgets.QMainWindow):
1751
1750
  "[CTRL-S]\tSpot Callsign to the cluster.\n"
1752
1751
  "[CTRL-SHIFT-K] Open CW text input field.\n"
1753
1752
  "[CTRL-=]\tLog the contact without sending the ESM macros.\n"
1753
+ "[CTRL-W]\tClears the input fields of any text.\n"
1754
1754
  )
1755
1755
 
1756
1756
  def filepicker(self, action: str) -> str:
@@ -2087,14 +2087,14 @@ class MainWindow(QtWidgets.QMainWindow):
2087
2087
  self.bandmap_window.msg_from_main(cmd)
2088
2088
  return
2089
2089
  if (
2090
- event.key() == Qt.Key.Key_Escape
2091
- and modifier != Qt.KeyboardModifier.ControlModifier
2090
+ event.key() == Qt.Key.Key_W
2091
+ and modifier == Qt.KeyboardModifier.ControlModifier
2092
2092
  ): # pylint: disable=no-member
2093
2093
  self.clearinputs()
2094
2094
  return
2095
2095
  if (
2096
2096
  event.key() == Qt.Key.Key_Escape
2097
- and modifier == Qt.KeyboardModifier.ControlModifier
2097
+ and modifier != Qt.KeyboardModifier.ControlModifier
2098
2098
  ):
2099
2099
  if self.cw is not None:
2100
2100
  if self.cw.servertype == 1:
@@ -2920,6 +2920,7 @@ class MainWindow(QtWidgets.QMainWindow):
2920
2920
  self.pref.get("CAT_ip", "127.0.0.1"),
2921
2921
  int(self.pref.get("CAT_port", 12345)),
2922
2922
  )
2923
+ self.rig_control.delta = int(self.pref.get("CAT_polldelta", 555))
2923
2924
  self.rig_control.moveToThread(self.radio_thread)
2924
2925
  self.radio_thread.started.connect(self.rig_control.run)
2925
2926
  self.radio_thread.finished.connect(self.rig_control.deleteLater)
@@ -2936,6 +2937,7 @@ class MainWindow(QtWidgets.QMainWindow):
2936
2937
  self.pref.get("CAT_ip", "127.0.0.1"),
2937
2938
  int(self.pref.get("CAT_port", 4532)),
2938
2939
  )
2940
+ self.rig_control.delta = int(self.pref.get("CAT_polldelta", 555))
2939
2941
  self.rig_control.moveToThread(self.radio_thread)
2940
2942
  self.radio_thread.started.connect(self.rig_control.run)
2941
2943
  self.radio_thread.finished.connect(self.rig_control.deleteLater)
@@ -2947,6 +2949,7 @@ class MainWindow(QtWidgets.QMainWindow):
2947
2949
  self.pref.get("CAT_ip", "127.0.0.1"),
2948
2950
  int(self.pref.get("CAT_port", 0000)),
2949
2951
  )
2952
+ self.rig_control.delta = int(self.pref.get("CAT_polldelta", 555))
2950
2953
  self.rig_control.moveToThread(self.radio_thread)
2951
2954
  self.radio_thread.started.connect(self.rig_control.run)
2952
2955
  self.radio_thread.finished.connect(self.rig_control.deleteLater)
@@ -3543,6 +3546,7 @@ class MainWindow(QtWidgets.QMainWindow):
3543
3546
  self.opon_dialog.close()
3544
3547
  logger.debug("New Op: %s", self.current_op)
3545
3548
  self.make_op_dir()
3549
+ self.set_window_title()
3546
3550
 
3547
3551
  def make_op_dir(self) -> None:
3548
3552
  """
not1mm/bandmap.py CHANGED
@@ -311,6 +311,10 @@ class Database:
311
311
  (f"-{minutes} minutes",),
312
312
  )
313
313
 
314
+ def delete_marks(self) -> None:
315
+ """Delete marked spots."""
316
+ self.cursor.execute("delete from spots where ts > datetime('now');")
317
+
314
318
 
315
319
  class BandMapWindow(QDockWidget):
316
320
  """The BandMapWindow class."""
@@ -345,6 +349,7 @@ class BandMapWindow(QDockWidget):
345
349
  self.agetime = self.clear_spot_olderSpinBox.value()
346
350
  self.clear_spot_olderSpinBox.valueChanged.connect(self.spot_aging_changed)
347
351
  self.clearButton.clicked.connect(self.clear_spots)
352
+ self.clearmarkedButton.clicked.connect(self.clear_marked)
348
353
  self.zoominButton.clicked.connect(self.dec_zoom)
349
354
  self.zoomoutButton.clicked.connect(self.inc_zoom)
350
355
  self.connectButton.clicked.connect(self.connect)
@@ -873,6 +878,10 @@ class BandMapWindow(QDockWidget):
873
878
  """Delete all spots from the database."""
874
879
  self.spots.delete_spots(0)
875
880
 
881
+ def clear_marked(self) -> None:
882
+ """Delete all marked spots."""
883
+ self.spots.delete_marks()
884
+
876
885
  def spot_aging_changed(self) -> None:
877
886
  """Called when spot aging spinbox is changed."""
878
887
  self.agetime = self.clear_spot_olderSpinBox.value()
not1mm/data/bandmap.ui CHANGED
@@ -6,7 +6,7 @@
6
6
  <rect>
7
7
  <x>0</x>
8
8
  <y>0</y>
9
- <width>383</width>
9
+ <width>342</width>
10
10
  <height>700</height>
11
11
  </rect>
12
12
  </property>
@@ -97,7 +97,7 @@
97
97
  <rect>
98
98
  <x>0</x>
99
99
  <y>0</y>
100
- <width>359</width>
100
+ <width>326</width>
101
101
  <height>512</height>
102
102
  </rect>
103
103
  </property>
@@ -148,18 +148,49 @@
148
148
  <enum>Qt::NoFocus</enum>
149
149
  </property>
150
150
  <property name="accessibleName">
151
- <string>clear all</string>
151
+ <string>clear spots</string>
152
152
  </property>
153
153
  <property name="accessibleDescription">
154
154
  <string>clear spots</string>
155
155
  </property>
156
+ <property name="maximumSize">
157
+ <size>
158
+ <width>1110</width>
159
+ <height>27</height>
160
+ </size>
161
+ </property>
162
+ <property name="text">
163
+ <string>🗑 Spots</string>
164
+ </property>
165
+ </widget>
166
+ </item>
167
+ <item>
168
+ <widget class="QPushButton" name="clearmarkedButton">
169
+ <property name="minimumSize">
170
+ <size>
171
+ <width>110</width>
172
+ <height>0</height>
173
+ </size>
174
+ </property>
175
+ <property name="maximumSize">
176
+ <size>
177
+ <width>1110</width>
178
+ <height>27</height>
179
+ </size>
180
+ </property>
156
181
  <property name="text">
157
- <string>Clear All</string>
182
+ <string>🗑 Marked</string>
158
183
  </property>
159
184
  </widget>
160
185
  </item>
161
186
  <item>
162
187
  <widget class="QPushButton" name="zoominButton">
188
+ <property name="maximumSize">
189
+ <size>
190
+ <width>27</width>
191
+ <height>27</height>
192
+ </size>
193
+ </property>
163
194
  <property name="focusPolicy">
164
195
  <enum>Qt::NoFocus</enum>
165
196
  </property>
@@ -170,12 +201,18 @@
170
201
  <string>zoom in</string>
171
202
  </property>
172
203
  <property name="text">
173
- <string>Zoom In</string>
204
+ <string>➕</string>
174
205
  </property>
175
206
  </widget>
176
207
  </item>
177
208
  <item>
178
209
  <widget class="QPushButton" name="zoomoutButton">
210
+ <property name="maximumSize">
211
+ <size>
212
+ <width>27</width>
213
+ <height>27</height>
214
+ </size>
215
+ </property>
179
216
  <property name="focusPolicy">
180
217
  <enum>Qt::NoFocus</enum>
181
218
  </property>
@@ -186,7 +223,7 @@
186
223
  <string>zoom out</string>
187
224
  </property>
188
225
  <property name="text">
189
- <string>Zoom Out</string>
226
+ <string>➖</string>
190
227
  </property>
191
228
  </widget>
192
229
  </item>
@@ -205,12 +242,6 @@
205
242
  </property>
206
243
  <item>
207
244
  <widget class="QLabel" name="clear_spot_olderLabel">
208
- <property name="font">
209
- <font>
210
- <family>JetBrains Mono ExtraLight</family>
211
- <pointsize>11</pointsize>
212
- </font>
213
- </property>
214
245
  <property name="text">
215
246
  <string>Clear older than </string>
216
247
  </property>
@@ -377,6 +377,43 @@
377
377
  <string>CAT</string>
378
378
  </attribute>
379
379
  <layout class="QGridLayout" name="gridLayout_4">
380
+ <item row="1" column="3">
381
+ <widget class="QLineEdit" name="rigcontrolport_field">
382
+ <property name="font">
383
+ <font>
384
+ <family>JetBrains Mono ExtraLight</family>
385
+ <pointsize>12</pointsize>
386
+ <bold>false</bold>
387
+ <strikeout>false</strikeout>
388
+ </font>
389
+ </property>
390
+ <property name="accessibleName">
391
+ <string>port number</string>
392
+ </property>
393
+ <property name="accessibleDescription">
394
+ <string>port number of rig control d or f l rig.</string>
395
+ </property>
396
+ <property name="inputMethodHints">
397
+ <set>Qt::InputMethodHint::ImhDigitsOnly</set>
398
+ </property>
399
+ <property name="text">
400
+ <string>4532</string>
401
+ </property>
402
+ </widget>
403
+ </item>
404
+ <item row="5" column="0" colspan="4">
405
+ <spacer name="verticalSpacer_3">
406
+ <property name="orientation">
407
+ <enum>Qt::Vertical</enum>
408
+ </property>
409
+ <property name="sizeHint" stdset="0">
410
+ <size>
411
+ <width>20</width>
412
+ <height>40</height>
413
+ </size>
414
+ </property>
415
+ </spacer>
416
+ </item>
380
417
  <item row="1" column="1">
381
418
  <widget class="QLineEdit" name="rigcontrolip_field">
382
419
  <property name="font">
@@ -398,7 +435,38 @@
398
435
  </property>
399
436
  </widget>
400
437
  </item>
401
- <item row="3" column="0" colspan="4">
438
+ <item row="3" column="1" colspan="3">
439
+ <spacer name="verticalSpacer_2">
440
+ <property name="orientation">
441
+ <enum>Qt::Vertical</enum>
442
+ </property>
443
+ <property name="sizeHint" stdset="0">
444
+ <size>
445
+ <width>20</width>
446
+ <height>40</height>
447
+ </size>
448
+ </property>
449
+ </spacer>
450
+ </item>
451
+ <item row="1" column="0">
452
+ <widget class="QLabel" name="label_6">
453
+ <property name="font">
454
+ <font>
455
+ <family>JetBrains Mono ExtraLight</family>
456
+ <pointsize>12</pointsize>
457
+ <bold>false</bold>
458
+ <strikeout>false</strikeout>
459
+ </font>
460
+ </property>
461
+ <property name="text">
462
+ <string>Rig Control IP:</string>
463
+ </property>
464
+ <property name="alignment">
465
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
466
+ </property>
467
+ </widget>
468
+ </item>
469
+ <item row="4" column="0" colspan="4">
402
470
  <layout class="QHBoxLayout" name="horizontalLayout">
403
471
  <property name="sizeConstraint">
404
472
  <enum>QLayout::SizeConstraint::SetDefaultConstraint</enum>
@@ -513,50 +581,6 @@
513
581
  </item>
514
582
  </layout>
515
583
  </item>
516
- <item row="2" column="1" colspan="3">
517
- <spacer name="verticalSpacer_2">
518
- <property name="orientation">
519
- <enum>Qt::Vertical</enum>
520
- </property>
521
- <property name="sizeHint" stdset="0">
522
- <size>
523
- <width>20</width>
524
- <height>40</height>
525
- </size>
526
- </property>
527
- </spacer>
528
- </item>
529
- <item row="1" column="0">
530
- <widget class="QLabel" name="label_6">
531
- <property name="font">
532
- <font>
533
- <family>JetBrains Mono ExtraLight</family>
534
- <pointsize>12</pointsize>
535
- <bold>false</bold>
536
- <strikeout>false</strikeout>
537
- </font>
538
- </property>
539
- <property name="text">
540
- <string>Rig Control IP:</string>
541
- </property>
542
- <property name="alignment">
543
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
544
- </property>
545
- </widget>
546
- </item>
547
- <item row="0" column="2">
548
- <spacer name="verticalSpacer">
549
- <property name="orientation">
550
- <enum>Qt::Vertical</enum>
551
- </property>
552
- <property name="sizeHint" stdset="0">
553
- <size>
554
- <width>20</width>
555
- <height>40</height>
556
- </size>
557
- </property>
558
- </spacer>
559
- </item>
560
584
  <item row="1" column="2">
561
585
  <widget class="QLabel" name="label_7">
562
586
  <property name="font">
@@ -575,8 +599,8 @@
575
599
  </property>
576
600
  </widget>
577
601
  </item>
578
- <item row="4" column="0" colspan="4">
579
- <spacer name="verticalSpacer_3">
602
+ <item row="0" column="2">
603
+ <spacer name="verticalSpacer">
580
604
  <property name="orientation">
581
605
  <enum>Qt::Vertical</enum>
582
606
  </property>
@@ -588,30 +612,16 @@
588
612
  </property>
589
613
  </spacer>
590
614
  </item>
591
- <item row="1" column="3">
592
- <widget class="QLineEdit" name="rigcontrolport_field">
593
- <property name="font">
594
- <font>
595
- <family>JetBrains Mono ExtraLight</family>
596
- <pointsize>12</pointsize>
597
- <bold>false</bold>
598
- <strikeout>false</strikeout>
599
- </font>
600
- </property>
601
- <property name="accessibleName">
602
- <string>port number</string>
603
- </property>
604
- <property name="accessibleDescription">
605
- <string>port number of rig control d or f l rig.</string>
606
- </property>
607
- <property name="inputMethodHints">
608
- <set>Qt::InputMethodHint::ImhDigitsOnly</set>
609
- </property>
615
+ <item row="2" column="0">
616
+ <widget class="QLabel" name="label_27">
610
617
  <property name="text">
611
- <string>4532</string>
618
+ <string>CAT Poll Interval (ms):</string>
612
619
  </property>
613
620
  </widget>
614
621
  </item>
622
+ <item row="2" column="1">
623
+ <widget class="QLineEdit" name="catpoll_field"/>
624
+ </item>
615
625
  </layout>
616
626
  </widget>
617
627
  <widget class="QWidget" name="cw_tab">
@@ -217,6 +217,11 @@
217
217
  <string>ARRL 10M</string>
218
218
  </property>
219
219
  </item>
220
+ <item>
221
+ <property name="text">
222
+ <string>ARRL 160M</string>
223
+ </property>
224
+ </item>
220
225
  <item>
221
226
  <property name="text">
222
227
  <string>ARRL DX CW</string>
@@ -284,8 +284,11 @@ class CAT:
284
284
  if self.rigctrlsocket:
285
285
  try:
286
286
  self.online = True
287
- self.rigctrlsocket.send(b"f\n")
288
- return self.__get_serial_string().strip()
287
+ self.rigctrlsocket.send(b"|f\n")
288
+ report = self.__get_serial_string().strip()
289
+ if "get_freq:|" in report and "RPRT 0" in report:
290
+ seg_rpt = report.split("|")
291
+ return seg_rpt[1].split(" ")[1]
289
292
  except socket.error as exception:
290
293
  self.online = False
291
294
  logger.debug(f"{exception=}")
@@ -334,11 +337,12 @@ class CAT:
334
337
  if self.rigctrlsocket:
335
338
  try:
336
339
  self.online = True
337
- self.rigctrlsocket.send(b"m\n")
338
- mode = self.__get_serial_string()
339
- mode = mode.strip().split()[0]
340
- # logger.debug("%s", mode)
341
- return mode
340
+ self.rigctrlsocket.send(b"|m\n")
341
+ # get_mode:|Mode: CW|Passband: 500|RPRT 0
342
+ report = self.__get_serial_string().strip()
343
+ if "getmode:|" in report and "RPRT 0" in report:
344
+ seg_rpt = report.split("|")
345
+ return seg_rpt[1].split(" ")[1]
342
346
  except IndexError as exception:
343
347
  logger.debug("%s", f"{exception}")
344
348
  except socket.error as exception:
@@ -382,11 +386,13 @@ class CAT:
382
386
  if self.rigctrlsocket:
383
387
  try:
384
388
  self.online = True
385
- self.rigctrlsocket.send(b"m\n")
386
- mode = self.__get_serial_string()
387
- mode = mode.strip().split()[1]
388
- # logger.debug("%s", mode)
389
- return mode
389
+ self.rigctrlsocket.send(b"|m\n")
390
+ # get_mode:|Mode: CW|Passband: 500|RPRT 0
391
+ report = self.__get_serial_string().strip()
392
+ if "getmode:|" in report and "RPRT 0" in report:
393
+ seg_rpt = report.split("|")
394
+ return seg_rpt[2].split(" ")[1]
395
+
390
396
  except IndexError as exception:
391
397
  logger.debug("%s", f"{exception}")
392
398
  except socket.error as exception:
@@ -425,8 +431,12 @@ class CAT:
425
431
  if self.rigctrlsocket:
426
432
  try:
427
433
  self.online = True
428
- self.rigctrlsocket.send(b"l RFPOWER\n")
429
- return int(float(self.__get_serial_string().strip()) * 100)
434
+ self.rigctrlsocket.send(b"|l RFPOWER\n")
435
+ # get_level: RFPOWER|0.000000|RPRT 0
436
+ report = self.__get_serial_string().strip()
437
+ if "get_level: RFPOWER|" in report and "RPRT 0" in report:
438
+ seg_rpt = report.split("|")
439
+ return int(float(seg_rpt[1]) * 100)
430
440
  except socket.error as exception:
431
441
  self.online = False
432
442
  logger.debug("getpower_rigctld: %s", f"{exception}")
not1mm/lib/database.py CHANGED
@@ -695,6 +695,23 @@ class DataBase:
695
695
  logger.debug("%s", exception)
696
696
  return {}
697
697
 
698
+ def fetch_exchange1_unique_count(self) -> dict:
699
+ """
700
+ Fetch count of unique countries
701
+ {exch1_count: count}
702
+ """
703
+ try:
704
+ with sqlite3.connect(self.database) as conn:
705
+ conn.row_factory = self.row_factory
706
+ cursor = conn.cursor()
707
+ cursor.execute(
708
+ f"select count(DISTINCT(Exchange1)) as exch1_count from dxlog where Exchange1 != '' and ContestNR = {self.current_contest};"
709
+ )
710
+ return cursor.fetchone()
711
+ except sqlite3.OperationalError as exception:
712
+ logger.debug("%s", exception)
713
+ return {}
714
+
698
715
  def fetch_arrldx_country_band_count(self) -> dict:
699
716
  """
700
717
  returns dict with count of unique NR.
not1mm/lib/settings.py CHANGED
@@ -99,6 +99,7 @@ class Settings(QtWidgets.QDialog):
99
99
  )
100
100
  self.rigcontrolip_field.setText(str(self.preference.get("CAT_ip", "")))
101
101
  self.rigcontrolport_field.setText(str(self.preference.get("CAT_port", "")))
102
+ self.catpoll_field.setText(str(self.preference.get("CAT_polldelta", 500)))
102
103
  self.userigctld_radioButton.setChecked(bool(self.preference.get("userigctld")))
103
104
  self.useflrig_radioButton.setChecked(bool(self.preference.get("useflrig")))
104
105
 
@@ -215,6 +216,10 @@ class Settings(QtWidgets.QDialog):
215
216
  self.preference["CAT_port"] = int(self.rigcontrolport_field.text())
216
217
  except ValueError:
217
218
  ...
219
+ try:
220
+ self.preference["CAT_polldelta"] = int(self.catpoll_field.text())
221
+ except ValueError:
222
+ ...
218
223
  self.preference["userigctld"] = self.userigctld_radioButton.isChecked()
219
224
  self.preference["useflrig"] = self.useflrig_radioButton.isChecked()
220
225
  self.preference["cwip"] = self.cwip_field.text()
not1mm/lib/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.11.24"
3
+ __version__ = "24.12.3.1"
@@ -359,3 +359,94 @@ def cabrillo(self, file_encoding):
359
359
 
360
360
  def recalculate_mults(self):
361
361
  """Recalculates multipliers after change in logged qso."""
362
+
363
+
364
+ def process_esm(self, new_focused_widget=None, with_enter=False):
365
+ """ESM State Machine"""
366
+
367
+ # self.pref["run_state"]
368
+
369
+ # -----===== Assigned F-Keys =====-----
370
+ # self.esm_dict["CQ"]
371
+ # self.esm_dict["EXCH"]
372
+ # self.esm_dict["QRZ"]
373
+ # self.esm_dict["AGN"]
374
+ # self.esm_dict["HISCALL"]
375
+ # self.esm_dict["MYCALL"]
376
+ # self.esm_dict["QSOB4"]
377
+
378
+ # ----==== text fields ====----
379
+ # self.callsign
380
+ # self.sent
381
+ # self.receive
382
+ # self.other_1
383
+ # self.other_2
384
+
385
+ if new_focused_widget is not None:
386
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
387
+
388
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
389
+
390
+ for a_button in [
391
+ self.esm_dict["CQ"],
392
+ self.esm_dict["EXCH"],
393
+ self.esm_dict["QRZ"],
394
+ self.esm_dict["AGN"],
395
+ self.esm_dict["HISCALL"],
396
+ self.esm_dict["MYCALL"],
397
+ self.esm_dict["QSOB4"],
398
+ ]:
399
+ if a_button is not None:
400
+ self.restore_button_color(a_button)
401
+
402
+ buttons_to_send = []
403
+
404
+ if self.pref.get("run_state"):
405
+ if self.current_widget == "callsign":
406
+ if len(self.callsign.text()) < 3:
407
+ self.make_button_green(self.esm_dict["CQ"])
408
+ buttons_to_send.append(self.esm_dict["CQ"])
409
+ elif len(self.callsign.text()) > 2:
410
+ self.make_button_green(self.esm_dict["HISCALL"])
411
+ self.make_button_green(self.esm_dict["EXCH"])
412
+ buttons_to_send.append(self.esm_dict["HISCALL"])
413
+ buttons_to_send.append(self.esm_dict["EXCH"])
414
+
415
+ elif self.current_widget in ["other_2"]:
416
+ if self.other_2.text() == "":
417
+ self.make_button_green(self.esm_dict["AGN"])
418
+ buttons_to_send.append(self.esm_dict["AGN"])
419
+ else:
420
+ self.make_button_green(self.esm_dict["QRZ"])
421
+ buttons_to_send.append(self.esm_dict["QRZ"])
422
+ buttons_to_send.append("LOGIT")
423
+
424
+ if with_enter is True and bool(len(buttons_to_send)):
425
+ for button in buttons_to_send:
426
+ if button:
427
+ if button == "LOGIT":
428
+ self.save_contact()
429
+ continue
430
+ self.process_function_key(button)
431
+ else:
432
+ if self.current_widget == "callsign":
433
+ if len(self.callsign.text()) > 2:
434
+ self.make_button_green(self.esm_dict["MYCALL"])
435
+ buttons_to_send.append(self.esm_dict["MYCALL"])
436
+
437
+ elif self.current_widget in ["other_2"]:
438
+ if self.other_2.text() == "":
439
+ self.make_button_green(self.esm_dict["AGN"])
440
+ buttons_to_send.append(self.esm_dict["AGN"])
441
+ else:
442
+ self.make_button_green(self.esm_dict["EXCH"])
443
+ buttons_to_send.append(self.esm_dict["EXCH"])
444
+ buttons_to_send.append("LOGIT")
445
+
446
+ if with_enter is True and bool(len(buttons_to_send)):
447
+ for button in buttons_to_send:
448
+ if button:
449
+ if button == "LOGIT":
450
+ self.save_contact()
451
+ continue
452
+ self.process_function_key(button)