From 6fd588b7b946451cdf65b3c94e1bbb0fdcced1eb Mon Sep 17 00:00:00 2001 From: Roy Jacobs Date: Thu, 9 Jul 2020 15:16:59 +0200 Subject: [PATCH] Add support for TabItem flags --- src/widget/tab.rs | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/src/widget/tab.rs b/src/widget/tab.rs index 7b77a74..a26b853 100644 --- a/src/widget/tab.rs +++ b/src/widget/tab.rs @@ -42,6 +42,17 @@ bitflags! { } } +bitflags! { + #[repr(transparent)] + pub struct TabItemFlags: u32 { + const UNSAVED_DOCUMENT = sys::ImGuiTabItemFlags_UnsavedDocument; + const SET_SELECTED = sys::ImGuiTabItemFlags_SetSelected; + const NO_CLOSE_WITH_MIDDLE_MOUSE_BUTTON = sys::ImGuiTabItemFlags_NoCloseWithMiddleMouseButton; + const NO_PUSH_ID = sys::ImGuiTabItemFlags_NoPushId; + const NO_TOOLTIP = sys::ImGuiTabItemFlags_NoTooltip; + } +} + /// Builder for a tab bar. pub struct TabBar<'a> { id: &'a ImStr, @@ -76,10 +87,10 @@ impl<'a> TabBar<'a> { #[must_use] pub fn begin(self, ui: &Ui) -> Option { - let shoud_render = + let should_render = unsafe { sys::igBeginTabBar(self.id.as_ptr(), self.flags.bits() as i32) }; - if shoud_render { + if should_render { Some(TabBarToken { ctx: ui.ctx }) } else { unsafe { sys::igEndTabBar() }; @@ -122,11 +133,16 @@ impl Drop for TabBarToken { pub struct TabItem<'a> { name: &'a ImStr, opened: Option<&'a mut bool>, + flags: TabItemFlags, } impl<'a> TabItem<'a> { pub fn new(name: &'a ImStr) -> Self { - Self { name, opened: None } + Self { + name, + opened: None, + flags: TabItemFlags::empty(), + } } /// Will open or close the tab.\ @@ -138,19 +154,28 @@ impl<'a> TabItem<'a> { self } + /// Set the flags of the tab item. + /// + /// Flags are empty by default + #[inline] + pub fn flags(mut self, flags: TabItemFlags) -> Self { + self.flags = flags; + self + } + #[must_use] pub fn begin(self, ui: &Ui) -> Option { - let shoud_render = unsafe { + let should_render = unsafe { sys::igBeginTabItem( self.name.as_ptr(), self.opened .map(|x| x as *mut bool) .unwrap_or(ptr::null_mut()), - 0 as ::std::os::raw::c_int, + self.flags.bits() as i32, ) }; - if shoud_render { + if should_render { Some(TabItemToken { ctx: ui.ctx }) } else { None