|
69 | 69 | BOX_TITLE = f'{APP_NAME} {APP_VERSION}' |
70 | 70 | REVIEW_MAX_DISPLAY_GAMES = 10000 |
71 | 71 | REVIEW_ANALYSIS_MULTIPV_LINES = 3 |
72 | | -REVIEW_ANALYSIS_PV_MOVES = 7 |
| 72 | +REVIEW_ANALYSIS_PV_MOVES = 7 |
| 73 | +REVIEW_NAV_DEBOUNCE_SEC = 0.3 |
73 | 74 | REVIEW_MOVE_LIST_HEIGHT = 11 |
74 | 75 | REVIEW_ANALYSIS_BOX_HEIGHT = 4 |
75 | 76 |
|
@@ -829,8 +830,9 @@ def reset_review_state(self): |
829 | 830 | self.review_analysis_lines = [''] * REVIEW_ANALYSIS_MULTIPV_LINES |
830 | 831 | self.review_analysis_enabled = False |
831 | 832 | self.review_analysis_status = 'Analysis stopped' |
832 | | - self.review_analysis_search = None |
833 | | - self.review_analysis_engine = None |
| 833 | + self.review_analysis_search = None |
| 834 | + self.review_analysis_engine = None |
| 835 | + self.review_nav_last_time = 0 |
834 | 836 |
|
835 | 837 | def update_game(self, mc: int, user_move: str, time_left: int, user_comment: str): |
836 | 838 | """Saves moves in the game. |
@@ -3107,9 +3109,17 @@ def start_review_mode(self, window): |
3107 | 3109 | button, value = review_window.Read(timeout=50) |
3108 | 3110 | self.poll_review_analysis(review_window) |
3109 | 3111 |
|
3110 | | - # Skip timeout events as analysis updates are processed by |
3111 | | - # poll_review_analysis() called earlier in the loop. |
3112 | | - if button == sg.TIMEOUT_KEY: |
| 3112 | + # Skip timeout events as analysis updates are processed by |
| 3113 | + # poll_review_analysis() called earlier in the loop. |
| 3114 | + if button == sg.TIMEOUT_KEY: |
| 3115 | + # Restart analysis after debounce delay following navigation. |
| 3116 | + if (self.review_nav_last_time |
| 3117 | + and self.review_analysis_enabled |
| 3118 | + and self.review_analysis_search is None |
| 3119 | + and time.time() - self.review_nav_last_time |
| 3120 | + >= REVIEW_NAV_DEBOUNCE_SEC): |
| 3121 | + self.review_nav_last_time = 0 |
| 3122 | + self.start_review_analysis(review_window) |
3113 | 3123 | continue |
3114 | 3124 |
|
3115 | 3125 | if button is None: |
@@ -3200,9 +3210,16 @@ def start_review_mode(self, window): |
3200 | 3210 | self.update_review_window(review_window) |
3201 | 3211 | continue |
3202 | 3212 |
|
3203 | | - if position_changed: |
3204 | | - self.update_review_window(review_window) |
3205 | | - self.refresh_review_analysis(review_window) |
| 3213 | + if position_changed: |
| 3214 | + self.update_review_window(review_window) |
| 3215 | + if self.review_analysis_enabled: |
| 3216 | + self.stop_review_analysis() |
| 3217 | + self.review_nav_last_time = time.time() |
| 3218 | + self.review_analysis_lines = [''] * REVIEW_ANALYSIS_MULTIPV_LINES |
| 3219 | + self.review_analysis_status = 'Waiting...' |
| 3220 | + self.update_review_analysis_panel(review_window) |
| 3221 | + else: |
| 3222 | + self.refresh_review_analysis(review_window) |
3206 | 3223 |
|
3207 | 3224 | self.close_review_analysis() |
3208 | 3225 | review_window.Close() |
|
0 commit comments