use crate::jab::{
context::AccessibleContext,
jab_lib::{
packages::{AccessibleContext as AC, AccessibleTableCellInfo, AccessibleTableInfo},
JabLib,
},
};
#[derive(Debug)]
pub struct AccessibleTable<'lib> {
_lib: &'lib JabLib,
_vm_id: i32,
_table: AccessibleTableInfo,
_caption: AccessibleContext<'lib>,
_summary: AccessibleContext<'lib>,
}
impl<'lib> AccessibleTable<'lib> {
pub(crate) fn new(lib: &'lib JabLib, vm_id: i32, ac: AC) -> Option<Self> {
let Some(table) = lib.get_accessible_table_info(vm_id, ac) else {
return None;
};
return Some(Self {
_lib: &lib,
_vm_id: vm_id,
_table: table.clone(),
_caption: AccessibleContext::new(&lib, vm_id, table.caption),
_summary: AccessibleContext::new(&lib, vm_id, table.summary),
});
}
pub fn get_caption(&self) -> &AccessibleContext {
&self._caption
}
pub fn get_summary(&self) -> &AccessibleContext {
&self._summary
}
pub fn get_column_description(&self, column: i32) -> Option<AccessibleContext<'lib>> {
if let Some(ac) = self._lib.get_accessible_table_column_description(
self._vm_id,
self._table.accessibleContext,
column,
) {
return Some(AccessibleContext::new(self._lib, self._vm_id, ac));
}
None
}
pub fn get_row_description(&self, row: i32) -> Option<AccessibleContext<'lib>> {
if let Some(ac) = self._lib.get_accessible_table_row_description(
self._vm_id,
self._table.accessibleContext,
row,
) {
return Some(AccessibleContext::new(self._lib, self._vm_id, ac));
}
None
}
pub fn get_row_header(&self) -> Option<AccessibleTable<'lib>> {
let Some(info) = self
._lib
.get_accessible_table_row_header(self._vm_id, self._table.accessibleContext)
else {
return None;
};
Some(Self {
_lib: self._lib,
_vm_id: self._vm_id,
_table: info.clone(),
_caption: AccessibleContext::new(self._lib, self._vm_id, info.caption),
_summary: AccessibleContext::new(self._lib, self._vm_id, info.summary),
})
}
pub fn get_column_header(&self) -> Option<AccessibleTable<'lib>> {
let Some(info) = self
._lib
.get_accessible_table_column_header(self._vm_id, self._table.accessibleContext)
else {
return None;
};
Some(Self {
_lib: self._lib,
_vm_id: self._vm_id,
_table: info.clone(),
_caption: AccessibleContext::new(self._lib, self._vm_id, info.caption),
_summary: AccessibleContext::new(self._lib, self._vm_id, info.summary),
})
}
pub fn is_row_selected(&self, row: i32) -> bool {
self._lib
.is_accessible_table_row_selected(self._vm_id, self._table.accessibleTable, row)
}
pub fn is_column_selected(&self, column: i32) -> bool {
self._lib.is_accessible_table_column_selected(
self._vm_id,
self._table.accessibleTable,
column,
)
}
pub fn get_cell(&self, row: i32, column: i32) -> Option<AccessibleTableCell> {
let Some(info) = self._lib.get_accessible_table_cell_info(
self._vm_id,
self._table.accessibleTable,
row,
column,
) else {
return None;
};
Some(AccessibleTableCell {
_lib: &self._lib,
_vm_id: self._vm_id,
_info: info,
})
}
pub fn get_column(&self, index: i32) -> i32 {
self._lib
.get_accessible_table_column(self._vm_id, self._table.accessibleTable, index)
}
pub fn get_row(&self, index: i32) -> i32 {
self._lib
.get_accessible_table_row(self._vm_id, self._table.accessibleTable, index)
}
pub fn get_column_selection_count(&self) -> i32 {
self._lib
.get_accessible_table_column_selection_count(self._vm_id, self._table.accessibleTable)
}
pub fn get_row_selection_count(&self) -> i32 {
self._lib
.get_accessible_table_row_selection_count(self._vm_id, self._table.accessibleTable)
}
pub fn get_index(&self, row: i32, column: i32) -> i32 {
self._lib
.get_accessible_table_index(self._vm_id, self._table.accessibleTable, row, column)
}
pub fn get_column_selections(&self, count: i32) -> Vec<i32> {
if let Some(v) = self._lib.get_accessible_table_column_selections(
self._vm_id,
self._table.accessibleTable,
count,
) {
return v;
}
vec![]
}
pub fn get_row_selections(&self, count: i32) -> Vec<i32> {
if let Some(v) = self._lib.get_accessible_table_row_selections(
self._vm_id,
self._table.accessibleTable,
count,
) {
return v;
}
vec![]
}
}
impl<'lib> Drop for AccessibleTable<'lib> {
fn drop(&mut self) {
self._lib
.release_java_object(self._vm_id, self._table.accessibleContext);
}
}
#[derive(Debug)]
pub struct AccessibleTableCell<'lib> {
_lib: &'lib JabLib,
_vm_id: i32,
_info: AccessibleTableCellInfo,
}
impl<'lib> AccessibleTableCell<'lib> {
pub fn get_context(&self) -> AccessibleContext<'lib> {
AccessibleContext::new(self._lib, self._vm_id, self._info.accessibleContext)
}
pub fn get_index(&self) -> i32 {
self._info.index
}
pub fn get_column(&self) -> i32 {
self._info.column
}
pub fn get_row(&self) -> i32 {
self._info.row
}
pub fn get_row_extent(&self) -> i32 {
self._info.rowExtent
}
pub fn get_column_extent(&self) -> i32 {
self._info.columnExtent
}
pub fn is_selected(&self) -> bool {
self._info.isSelected != 0
}
}
impl<'lib> Drop for AccessibleTableCell<'lib> {
fn drop(&mut self) {
self._lib
.release_java_object(self._vm_id, self._info.accessibleContext)
}
}