pub struct HexView { /* private fields */ }Expand description
Hexadecimal viewer.
This is a classic hexview which can be used to view and manipulate data which resides inside
this struct. There are severeal states in which the view can be operatered, see DisplayState.
You should consider the corresponding method docs for each state.
§Examples
extern crate cursive;
extern crate cursive_hexview;
use cursive_hexview::{DisplayState,HexView};
fn main() {
let view = HexView::new().display_state(DisplayState::Editable);
let mut cur = cursive::dummy();
cur.add_layer(cursive::views::Dialog::around(view).title("HexView"));
// cur.run();
}Implementations§
Source§impl HexView
impl HexView
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new, default HexView with an empty databuffer and disabled state.
§Examples
let view = HexView::new();Sourcepub fn new_from_iter<B: Borrow<u8>, I: IntoIterator<Item = B>>(data: I) -> Self
pub fn new_from_iter<B: Borrow<u8>, I: IntoIterator<Item = B>>(data: I) -> Self
Crates a new HexView with the given data and disabled state.
§Examples
With data from a Vec:
let view = HexView::new_from_iter(vec![3, 6, 1, 8, 250]);With data from a byte string literal:
let view = HexView::new_from_iter(b"Hello, World!");Or with a slice
let view = HexView::new_from_iter(&[5, 6, 2, 89]);Examples found in repository?
18fn main() {
19 let arg = env::args()
20 .nth(1)
21 .expect("Please provide the file to read from as first argument");
22 let path = Path::new(&arg);
23
24 let mut cur = cursive::default();
25 let explanation = TextView::new("Use the keys ↑ ↓ ← → to navigate around.\nUse q to exit.");
26 let view = HexView::new_from_iter(read_file(path).expect("Cannot read file")).display_state(DisplayState::Enabled);
27
28 cur.add_layer(
29 Dialog::around(LinearLayout::vertical().child(explanation).child(DummyView).child(view)).title("HexView"),
30 );
31 cur.add_global_callback('q', |cur| cur.quit());
32 cur.run();
33}More examples
7fn main() {
8 let mut cur = cursive::default();
9 let explanation = TextView::new("Use the keys + - ↑ ↓ ← → 0-9 a-f for the HexView.\nUse q to exit.");
10 let data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".as_bytes();
11
12 //A view with implicit default config
13 let view1 = HexView::new_from_iter(data).display_state(DisplayState::Editable);
14
15 //A view with a single config change, everything else default, chainable version
16 let config = HexViewConfig {
17 hex_ascii_separator: " - ",
18 ..Default::default()
19 };
20 let view2 = HexView::new_from_iter(data)
21 .config(config)
22 .display_state(DisplayState::Editable);
23
24 //A view with several config changes, non chainable version
25 let mut view3 = HexView::new_from_iter(data).display_state(DisplayState::Editable);
26 let config2 = HexViewConfig {
27 bytes_per_line: 8,
28 bytes_per_group: 4,
29 byte_group_separator: " ",
30 show_ascii: false,
31 ..Default::default()
32 };
33 view3.set_config(config2);
34
35 cur.add_layer(
36 Dialog::around(
37 LinearLayout::vertical()
38 .child(explanation)
39 .child(DummyView)
40 .child(view1)
41 .child(DummyView)
42 .child(view2)
43 .child(DummyView)
44 .child(view3),
45 )
46 .title("HexView"),
47 );
48 cur.add_global_callback('q', |cur| cur.quit());
49 cur.run();
50}Sourcepub fn set_config(&mut self, config: HexViewConfig)
pub fn set_config(&mut self, config: HexViewConfig)
This function allows the customization of the HexView output.
For options and explanation of every possible option, see the HexViewConfig struct.
#Examples
let mut view = HexView::new();
view.set_config(HexViewConfig {
bytes_per_line: 8,
..Default::default()
});Examples found in repository?
7fn main() {
8 let mut cur = cursive::default();
9 let explanation = TextView::new("Use the keys + - ↑ ↓ ← → 0-9 a-f for the HexView.\nUse q to exit.");
10 let data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".as_bytes();
11
12 //A view with implicit default config
13 let view1 = HexView::new_from_iter(data).display_state(DisplayState::Editable);
14
15 //A view with a single config change, everything else default, chainable version
16 let config = HexViewConfig {
17 hex_ascii_separator: " - ",
18 ..Default::default()
19 };
20 let view2 = HexView::new_from_iter(data)
21 .config(config)
22 .display_state(DisplayState::Editable);
23
24 //A view with several config changes, non chainable version
25 let mut view3 = HexView::new_from_iter(data).display_state(DisplayState::Editable);
26 let config2 = HexViewConfig {
27 bytes_per_line: 8,
28 bytes_per_group: 4,
29 byte_group_separator: " ",
30 show_ascii: false,
31 ..Default::default()
32 };
33 view3.set_config(config2);
34
35 cur.add_layer(
36 Dialog::around(
37 LinearLayout::vertical()
38 .child(explanation)
39 .child(DummyView)
40 .child(view1)
41 .child(DummyView)
42 .child(view2)
43 .child(DummyView)
44 .child(view3),
45 )
46 .title("HexView"),
47 );
48 cur.add_global_callback('q', |cur| cur.quit());
49 cur.run();
50}Sourcepub fn config(self, config: HexViewConfig) -> Self
pub fn config(self, config: HexViewConfig) -> Self
Examples found in repository?
7fn main() {
8 let mut cur = cursive::default();
9 let explanation = TextView::new("Use the keys + - ↑ ↓ ← → 0-9 a-f for the HexView.\nUse q to exit.");
10 let data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".as_bytes();
11
12 //A view with implicit default config
13 let view1 = HexView::new_from_iter(data).display_state(DisplayState::Editable);
14
15 //A view with a single config change, everything else default, chainable version
16 let config = HexViewConfig {
17 hex_ascii_separator: " - ",
18 ..Default::default()
19 };
20 let view2 = HexView::new_from_iter(data)
21 .config(config)
22 .display_state(DisplayState::Editable);
23
24 //A view with several config changes, non chainable version
25 let mut view3 = HexView::new_from_iter(data).display_state(DisplayState::Editable);
26 let config2 = HexViewConfig {
27 bytes_per_line: 8,
28 bytes_per_group: 4,
29 byte_group_separator: " ",
30 show_ascii: false,
31 ..Default::default()
32 };
33 view3.set_config(config2);
34
35 cur.add_layer(
36 Dialog::around(
37 LinearLayout::vertical()
38 .child(explanation)
39 .child(DummyView)
40 .child(view1)
41 .child(DummyView)
42 .child(view2)
43 .child(DummyView)
44 .child(view3),
45 )
46 .title("HexView"),
47 );
48 cur.add_global_callback('q', |cur| cur.quit());
49 cur.run();
50}Sourcepub fn data(&self) -> &[u8] ⓘ
pub fn data(&self) -> &[u8] ⓘ
Returns a reference to the internal data.
§Examples
let data = vec![3, 4, 9, 1];
let view = HexView::new_from_iter(&data);
assert_eq!(view.data(), &data);Sourcepub fn set_data<B: Borrow<u8>, I: IntoIterator<Item = B>>(&mut self, data: I)
pub fn set_data<B: Borrow<u8>, I: IntoIterator<Item = B>>(&mut self, data: I)
Sets the data during the lifetime of this instance.
For insance to update the data due to an external event.
let mut view = HexView::new();
view.set_data(b"Hello, World!".to_owned().iter());Sourcepub fn display_state(self, state: DisplayState) -> Self
pub fn display_state(self, state: DisplayState) -> Self
Examples found in repository?
More examples
18fn main() {
19 let arg = env::args()
20 .nth(1)
21 .expect("Please provide the file to read from as first argument");
22 let path = Path::new(&arg);
23
24 let mut cur = cursive::default();
25 let explanation = TextView::new("Use the keys ↑ ↓ ← → to navigate around.\nUse q to exit.");
26 let view = HexView::new_from_iter(read_file(path).expect("Cannot read file")).display_state(DisplayState::Enabled);
27
28 cur.add_layer(
29 Dialog::around(LinearLayout::vertical().child(explanation).child(DummyView).child(view)).title("HexView"),
30 );
31 cur.add_global_callback('q', |cur| cur.quit());
32 cur.run();
33}7fn main() {
8 let mut cur = cursive::default();
9 let explanation = TextView::new("Use the keys + - ↑ ↓ ← → 0-9 a-f for the HexView.\nUse q to exit.");
10 let data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".as_bytes();
11
12 //A view with implicit default config
13 let view1 = HexView::new_from_iter(data).display_state(DisplayState::Editable);
14
15 //A view with a single config change, everything else default, chainable version
16 let config = HexViewConfig {
17 hex_ascii_separator: " - ",
18 ..Default::default()
19 };
20 let view2 = HexView::new_from_iter(data)
21 .config(config)
22 .display_state(DisplayState::Editable);
23
24 //A view with several config changes, non chainable version
25 let mut view3 = HexView::new_from_iter(data).display_state(DisplayState::Editable);
26 let config2 = HexViewConfig {
27 bytes_per_line: 8,
28 bytes_per_group: 4,
29 byte_group_separator: " ",
30 show_ascii: false,
31 ..Default::default()
32 };
33 view3.set_config(config2);
34
35 cur.add_layer(
36 Dialog::around(
37 LinearLayout::vertical()
38 .child(explanation)
39 .child(DummyView)
40 .child(view1)
41 .child(DummyView)
42 .child(view2)
43 .child(DummyView)
44 .child(view3),
45 )
46 .title("HexView"),
47 );
48 cur.add_global_callback('q', |cur| cur.quit());
49 cur.run();
50}Sourcepub fn set_display_state(&mut self, state: DisplayState)
pub fn set_display_state(&mut self, state: DisplayState)
Sets the state of the view to one of the variants from DisplayState.
This will alter the behavior of the view accrodingly to the set state.
If the state is set to Disabled this view can neither be focused nor edited. If the state
is set to Enabled it can be focused and the cursor can be moved around, but no data can
be altered. If set to Editable this view behaves like Enabled but the data can be altered.
§Note
This has nothing to do with rusts type system, which means even when this instance is set to
Disabled you still can alter the data through set_data but you cannot
alter it with the keyboard commands (+, -, #hexvalue).
§Examples
let view = HexView::new().display_state(DisplayState::Editable);Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the length of the data.
§Examples
let view = HexView::new_from_iter(vec![0, 1, 2, 3]);
assert_eq!(4, view.len());Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Checks whether the data is empty.
§Examples
let view = HexView::new();
assert!(view.is_empty());let view = HexView::new_from_iter(b"ABC");
assert!(!view.is_empty());Sourcepub fn set_len(&mut self, length: usize)
pub fn set_len(&mut self, length: usize)
Sets the length of the data which this view displays.
If the new length is greater than the current one, 0’s will be appended to the data. If the new length is less than the current one, the data will be truncated and is lost.
§Examples
let mut view = HexView::new();
view.set_len(3);
assert_eq!(view.len(), 3);
assert_eq!(view.data(), &vec![0u8, 0u8, 0u8]);Trait Implementations§
Source§impl View for HexView
impl View for HexView
Source§fn on_event(&mut self, event: Event) -> EventResult
fn on_event(&mut self, event: Event) -> EventResult
Source§fn required_size(&mut self, _: Vec2) -> Vec2
fn required_size(&mut self, _: Vec2) -> Vec2
Source§fn draw(&self, printer: &Printer<'_, '_>)
fn draw(&self, printer: &Printer<'_, '_>)
Source§fn take_focus(&mut self, _: Direction) -> Result<EventResult, CannotFocus>
fn take_focus(&mut self, _: Direction) -> Result<EventResult, CannotFocus>
Source§fn layout(&mut self, _: XY<usize>)
fn layout(&mut self, _: XY<usize>)
Source§fn needs_relayout(&self) -> bool
fn needs_relayout(&self) -> bool
Source§fn call_on_any(
&mut self,
_: &Selector<'_>,
_: &mut dyn FnMut(&mut (dyn View + 'static)),
)
fn call_on_any( &mut self, _: &Selector<'_>, _: &mut dyn FnMut(&mut (dyn View + 'static)), )
Source§fn focus_view(&mut self, _: &Selector<'_>) -> Result<EventResult, ViewNotFound>
fn focus_view(&mut self, _: &Selector<'_>) -> Result<EventResult, ViewNotFound>
Auto Trait Implementations§
impl Freeze for HexView
impl RefUnwindSafe for HexView
impl Send for HexView
impl Sync for HexView
impl Unpin for HexView
impl UnwindSafe for HexView
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Finder for Twhere
T: View,
impl<T> Finder for Twhere
T: View,
Source§fn call_on_all<V, F>(&mut self, sel: &Selector<'_>, callback: F)
fn call_on_all<V, F>(&mut self, sel: &Selector<'_>, callback: F)
sel. Read moreSource§fn call_on<V, F, R>(&mut self, sel: &Selector<'_>, callback: F) -> Option<R>
fn call_on<V, F, R>(&mut self, sel: &Selector<'_>, callback: F) -> Option<R>
sel. Read moreSource§fn call_on_name<V, F, R>(&mut self, name: &str, callback: F) -> Option<R>
fn call_on_name<V, F, R>(&mut self, name: &str, callback: F) -> Option<R>
call_on with a view::Selector::Name.Source§impl<T> IntoBoxedView for Twhere
T: View,
impl<T> IntoBoxedView for Twhere
T: View,
Source§fn into_boxed_view(self) -> Box<dyn View>
fn into_boxed_view(self) -> Box<dyn View>
Box<View>.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Resizable for Twhere
T: View,
impl<T> Resizable for Twhere
T: View,
Source§fn resized(
self,
width: SizeConstraint,
height: SizeConstraint,
) -> ResizedView<Self>
fn resized( self, width: SizeConstraint, height: SizeConstraint, ) -> ResizedView<Self>
self in a ResizedView with the given size constraints.Source§fn fixed_size<S>(self, size: S) -> ResizedView<Self>
fn fixed_size<S>(self, size: S) -> ResizedView<Self>
self into a fixed-size ResizedView.Source§fn fixed_width(self, width: usize) -> ResizedView<Self>
fn fixed_width(self, width: usize) -> ResizedView<Self>
self into a fixed-width ResizedView.Source§fn fixed_height(self, height: usize) -> ResizedView<Self>
fn fixed_height(self, height: usize) -> ResizedView<Self>
self into a fixed-width ResizedView.Source§fn full_screen(self) -> ResizedView<Self>
fn full_screen(self) -> ResizedView<Self>
self into a full-screen ResizedView.Source§fn full_width(self) -> ResizedView<Self>
fn full_width(self) -> ResizedView<Self>
self into a full-width ResizedView.Source§fn full_height(self) -> ResizedView<Self>
fn full_height(self) -> ResizedView<Self>
self into a full-height ResizedView.Source§fn max_size<S>(self, size: S) -> ResizedView<Self>
fn max_size<S>(self, size: S) -> ResizedView<Self>
self into a limited-size ResizedView.Source§fn max_width(self, max_width: usize) -> ResizedView<Self>
fn max_width(self, max_width: usize) -> ResizedView<Self>
self into a limited-width ResizedView.Source§fn max_height(self, max_height: usize) -> ResizedView<Self>
fn max_height(self, max_height: usize) -> ResizedView<Self>
self into a limited-height ResizedView.Source§fn min_size<S>(self, size: S) -> ResizedView<Self>
fn min_size<S>(self, size: S) -> ResizedView<Self>
self into a ResizedView at least sized size.Source§fn min_width(self, min_width: usize) -> ResizedView<Self>
fn min_width(self, min_width: usize) -> ResizedView<Self>
self in a ResizedView at least min_width wide.Source§fn min_height(self, min_height: usize) -> ResizedView<Self>
fn min_height(self, min_height: usize) -> ResizedView<Self>
self in a ResizedView at least min_height tall.Source§impl<T> Scrollable for Twhere
T: View,
impl<T> Scrollable for Twhere
T: View,
Source§fn scrollable(self) -> ScrollView<Self>
fn scrollable(self) -> ScrollView<Self>
self in a ScrollView.