1
1
use ratatui:: layout:: Constraint :: Length ;
2
2
use ratatui:: layout:: { Alignment , Layout } ;
3
3
use ratatui:: prelude:: Stylize ;
4
- use ratatui:: style:: { Color , Modifier } ;
5
- use ratatui:: text:: { Line , Span , Text } ;
6
- use ratatui:: widgets:: { Block , Borders , Paragraph } ;
4
+ use ratatui:: style:: Modifier ;
5
+ use ratatui:: text:: Span ;
6
+ use ratatui:: widgets:: block:: Title ;
7
+ use ratatui:: widgets:: { Block , Borders , Tabs } ;
7
8
use ratatui:: { layout:: Rect , style:: Style , Frame } ;
8
9
9
- use super :: { GRAY_FG , HEAP_COLOR , STACK_COLOR , TEXT_COLOR } ;
10
+ use super :: {
11
+ ASM_COLOR , DARK_GRAY , GRAY , GRAY_FG , GREEN , HEAP_COLOR , RED , STACK_COLOR , STRING_COLOR ,
12
+ TEXT_COLOR ,
13
+ } ;
10
14
11
15
use crate :: { App , InputMode } ;
12
16
@@ -16,15 +20,48 @@ pub fn draw_title_area(app: &App, f: &mut Frame, title_area: Rect) {
16
20
f. render_widget (
17
21
Block :: new ( )
18
22
. borders ( Borders :: TOP )
19
- . title ( vec ! [
20
- "|" . fg( GRAY_FG ) ,
21
- env!( "CARGO_PKG_NAME" ) . bold( ) ,
22
- "-" . fg( GRAY_FG ) ,
23
- "v" . into( ) ,
24
- env!( "CARGO_PKG_VERSION" ) . into( ) ,
25
- "|" . fg( GRAY_FG ) ,
26
- ] )
27
- . title_alignment ( Alignment :: Center ) ,
23
+ . title (
24
+ Title :: from ( vec ! [
25
+ "|" . fg( GRAY_FG ) ,
26
+ env!( "CARGO_PKG_NAME" ) . bold( ) ,
27
+ "-" . fg( GRAY_FG ) ,
28
+ "v" . into( ) ,
29
+ env!( "CARGO_PKG_VERSION" ) . into( ) ,
30
+ "|" . fg( GRAY_FG ) ,
31
+ ] )
32
+ . alignment ( Alignment :: Center ) ,
33
+ )
34
+ . title (
35
+ Title :: from ( vec ! [
36
+ Span :: raw( " | " ) ,
37
+ Span :: styled(
38
+ "Heap" ,
39
+ Style :: default ( ) . fg( HEAP_COLOR ) . add_modifier( Modifier :: BOLD ) ,
40
+ ) ,
41
+ Span :: raw( " | " ) ,
42
+ Span :: styled(
43
+ "Stack" ,
44
+ Style :: default ( ) . fg( STACK_COLOR ) . add_modifier( Modifier :: BOLD ) ,
45
+ ) ,
46
+ Span :: raw( " | " ) ,
47
+ Span :: styled(
48
+ "Code" ,
49
+ Style :: default ( ) . fg( TEXT_COLOR ) . add_modifier( Modifier :: BOLD ) ,
50
+ ) ,
51
+ Span :: raw( " | " ) ,
52
+ Span :: styled(
53
+ "String" ,
54
+ Style :: default ( ) . fg( STRING_COLOR ) . add_modifier( Modifier :: BOLD ) ,
55
+ ) ,
56
+ Span :: raw( " | " ) ,
57
+ Span :: styled(
58
+ "Asm" ,
59
+ Style :: default ( ) . fg( ASM_COLOR ) . add_modifier( Modifier :: BOLD ) ,
60
+ ) ,
61
+ Span :: raw( " | " ) ,
62
+ ] )
63
+ . alignment ( Alignment :: Right ) ,
64
+ ) ,
28
65
first,
29
66
) ;
30
67
// Title Area
@@ -39,28 +76,21 @@ pub fn draw_title_area(app: &App, f: &mut Frame, title_area: Rect) {
39
76
}
40
77
} ;
41
78
42
- let msg = vec ! [
43
- Span :: styled( "F1" , Style :: default ( ) . add_modifier( Modifier :: BOLD ) ) ,
44
- Span :: raw( " main | " ) ,
45
- Span :: styled( "F2" , Style :: default ( ) . add_modifier( Modifier :: BOLD ) ) ,
46
- Span :: raw( " registers | " ) ,
47
- Span :: styled( "F3" , Style :: default ( ) . add_modifier( Modifier :: BOLD ) ) ,
48
- Span :: raw( " stack | " ) ,
49
- Span :: styled( "F4" , Style :: default ( ) . add_modifier( Modifier :: BOLD ) ) ,
50
- Span :: raw( " instructions | " ) ,
51
- Span :: styled( "F5" , Style :: default ( ) . add_modifier( Modifier :: BOLD ) ) ,
52
- Span :: raw( " output | " ) ,
53
- Span :: styled( "F6" , Style :: default ( ) . add_modifier( Modifier :: BOLD ) ) ,
54
- Span :: raw( " mapping | " ) ,
55
- Span :: styled( "F7" , Style :: default ( ) . add_modifier( Modifier :: BOLD ) ) ,
56
- Span :: raw( " hexdump | " ) ,
57
- Span :: styled( "Heap" , Style :: default ( ) . fg( HEAP_COLOR ) . add_modifier( Modifier :: BOLD ) ) ,
58
- Span :: raw( " | " ) ,
59
- Span :: styled( "Stack" , Style :: default ( ) . fg( STACK_COLOR ) . add_modifier( Modifier :: BOLD ) ) ,
60
- Span :: raw( " | " ) ,
61
- Span :: styled( "Code" , Style :: default ( ) . fg( TEXT_COLOR ) . add_modifier( Modifier :: BOLD ) ) ,
62
- ] ;
63
- let text = Text :: from ( Line :: from ( msg) ) ;
64
- let help_message = Paragraph :: new ( text) . alignment ( Alignment :: Center ) ;
65
- f. render_widget ( help_message, second) ;
79
+ let mode = & app. mode ;
80
+ let tab = Tabs :: new ( vec ! [
81
+ "F1 Main" ,
82
+ "F2 Registers" ,
83
+ "F3 Stack" ,
84
+ "F4 Instructions" ,
85
+ "F5 Output" ,
86
+ "F6 Mapping" ,
87
+ "F7 Hexdump" ,
88
+ ] )
89
+ . block ( Block :: new ( ) . title_alignment ( Alignment :: Center ) )
90
+ . style ( Style :: default ( ) )
91
+ . highlight_style ( Style :: default ( ) . fg ( GREEN ) . add_modifier ( Modifier :: BOLD ) )
92
+ . select ( * mode as usize )
93
+ . divider ( "|" ) ;
94
+
95
+ f. render_widget ( tab, second) ;
66
96
}
0 commit comments