@@ -39,11 +39,14 @@ struct ChatMessage {
39
39
content : String ,
40
40
}
41
41
42
- struct WheelWindow ( Vec < ChatMessage > ) ;
42
+ struct WheelWindow {
43
+ open : bool ,
44
+ messages : Vec < ChatMessage > ,
45
+ }
43
46
44
47
impl Default for WheelWindow {
45
48
fn default ( ) -> Self {
46
- Self ( vec ! [ ChatMessage { role: User , content: String :: new( ) } ] )
49
+ Self { open : true , messages : vec ! [ ChatMessage { role: User , content: String :: new( ) } ] }
47
50
}
48
51
}
49
52
@@ -350,25 +353,23 @@ impl eframe::App for App {
350
353
}
351
354
} ) ;
352
355
353
- let len = WHEEL_WINDOWS . lock ( ) . unwrap ( ) . len ( ) ;
354
- for i in 0 ..len {
355
- egui:: Window :: new ( format ! ( "wheel {}" , i) ) . show ( ctx, |ui| {
356
+ for ( window_num, window) in WHEEL_WINDOWS . lock ( ) . unwrap ( ) . iter_mut ( ) . enumerate ( ) {
357
+ egui:: Window :: new ( format ! ( "wheel {}" , window_num) ) . open ( & mut window. open ) . show ( ctx, |ui| {
356
358
ScrollArea :: vertical ( ) . stick_to_bottom ( true ) . auto_shrink ( [ false , false ] ) . show ( ui, |ui| {
357
359
if ui. button ( "copy all to clipboard" ) . clicked ( ) {
358
360
let mut text = "\n " . to_string ( ) ;
359
361
360
- for entry in WHEEL_WINDOWS . lock ( ) . unwrap ( ) . get ( i ) . unwrap ( ) . 0 . iter ( ) {
362
+ for entry in window . messages . iter ( ) {
361
363
text. push_str ( & format ! ( "[{}]: {}\n " , entry. role, entry. content) ) ;
362
364
}
363
365
364
366
ui. output_mut ( |o| o. copied_text = text) ;
365
367
}
366
368
ui. label ( "[transcript goes here]" ) ;
367
- let mut wheel_windows = WHEEL_WINDOWS . lock ( ) . unwrap ( ) ;
368
369
let mut do_it = false ;
369
370
let mut do_it_j = 9999 ;
370
- for ( j, entry) in wheel_windows . get_mut ( i ) . unwrap ( ) . 0 . iter_mut ( ) . enumerate ( ) {
371
- let id = Id :: new ( i * 1000 + j) ;
371
+ for ( j, entry) in window . messages . iter_mut ( ) . enumerate ( ) {
372
+ let id = Id :: new ( window_num * 1000 + j) ;
372
373
let editor_has_focus = ui. ctx ( ) . memory ( |m| m. has_focus ( id) ) ;
373
374
374
375
if editor_has_focus && ui. input_mut ( |i| i. consume_key ( Modifiers :: default ( ) , Key :: Tab ) ) {
@@ -451,15 +452,15 @@ impl eframe::App for App {
451
452
ui. label ( "[command-enter to send]" ) ;
452
453
453
454
if do_it {
454
- let ref mut messages = wheel_windows . get_mut ( i ) . unwrap ( ) . 0 ;
455
+ let ref mut messages = window . messages ;
455
456
messages. truncate ( do_it_j + 1 ) ;
456
457
Prompt { rowid : None , time_ms : now_ms ( ) , prompt : messages. last ( ) . unwrap ( ) . content . clone ( ) }
457
458
. insert ( )
458
459
. unwrap ( ) ;
459
460
let orig_messages = messages. clone ( ) ;
460
461
messages. push ( ChatMessage { role : Assistant , content : String :: new ( ) } ) ;
461
462
messages. push ( ChatMessage { role : User , content : String :: new ( ) } ) ;
462
- ui. ctx ( ) . memory_mut ( |m| m. request_focus ( Id :: new ( ( i * 1000 ) + messages. len ( ) - 1 ) ) ) ;
463
+ ui. ctx ( ) . memory_mut ( |m| m. request_focus ( Id :: new ( ( window_num * 1000 ) + messages. len ( ) - 1 ) ) ) ;
463
464
let id = messages. len ( ) - 2 ;
464
465
let ctx_cloned = ctx. clone ( ) ;
465
466
let ( trigger, tripwire) = Tripwire :: new ( ) ;
@@ -469,9 +470,9 @@ impl eframe::App for App {
469
470
WHEEL_WINDOWS
470
471
. lock ( )
471
472
. unwrap ( )
472
- . get_mut ( i )
473
+ . get_mut ( window_num )
473
474
. unwrap ( )
474
- . 0
475
+ . messages
475
476
. get_mut ( id)
476
477
. unwrap ( )
477
478
. content
0 commit comments