use crate::co;
use crate::comctl::decl::TCITEM;
use crate::gui::native_controls::tab::Tab;
use crate::kernel::decl::WString;
use crate::msg::tcm;
use crate::prelude::{GuiWindow, user_Hwnd};
#[derive(Clone, Copy)]
pub struct TabItem<'a> {
owner: &'a Tab,
index: u32,
}
impl<'a> TabItem<'a> {
pub(in crate::gui) const fn new(owner: &'a Tab, index: u32) -> Self {
Self { owner, index }
}
#[must_use]
pub const fn index(&self) -> u32 {
self.index
}
pub unsafe fn delete(&self) {
self.owner.hwnd()
.SendMessage(tcm::DeleteItem { index: self.index })
.unwrap();
}
#[must_use]
pub fn lparam(&self) -> isize {
let mut tci = TCITEM::default();
tci.mask = co::TCIF::PARAM;
self.owner.hwnd()
.SendMessage(tcm::GetItem {
index: self.index,
item: &mut tci,
})
.unwrap();
tci.lParam
}
pub fn set_lparam(&self, lparam: isize) {
let mut tci = TCITEM::default();
tci.mask = co::TCIF::PARAM;
tci.lParam = lparam;
self.owner.hwnd()
.SendMessage(tcm::SetItem {
index: self.index,
item: &mut tci,
})
.unwrap();
}
pub fn set_text(&self, text: &str) {
let mut wtext = WString::from_str(text);
let mut tci = TCITEM::default();
tci.mask = co::TCIF::TEXT;
tci.set_pszText(Some(&mut wtext));
self.owner.hwnd()
.SendMessage(tcm::SetItem {
index: self.index,
item: &mut tci,
})
.unwrap();
}
#[must_use]
pub fn text(&self) -> String {
let mut buf = WString::new_alloc_buf(64); let mut tci = TCITEM::default();
tci.mask = co::TCIF::TEXT;
tci.set_pszText(Some(&mut buf));
self.owner.hwnd()
.SendMessage(tcm::GetItem {
index: self.index,
item: &mut tci,
})
.unwrap();
buf.to_string()
}
}