mirror of
https://github.com/zaphar/sheetsui.git
synced 2025-07-23 05:19:48 -04:00
wip: system clipboard support
This commit is contained in:
parent
fbbdcb983f
commit
25a782bfed
@ -135,13 +135,13 @@ impl Book {
|
|||||||
/// Construct a payload of (html, csv_text) for a sheet.
|
/// Construct a payload of (html, csv_text) for a sheet.
|
||||||
pub fn sheeet_to_clipboard_content(&self, sheet: u32) -> Result<(String, String), anyhow::Error> {
|
pub fn sheeet_to_clipboard_content(&self, sheet: u32) -> Result<(String, String), anyhow::Error> {
|
||||||
let rows = self.get_export_rows_for_sheet(sheet)?;
|
let rows = self.get_export_rows_for_sheet(sheet)?;
|
||||||
rows_to_clipboard_content(rows)
|
rows_to_clipboard_content(&rows)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Construct a payload of (html, csv_text) for the address range.
|
/// Construct a payload of (html, csv_text) for the address range.
|
||||||
pub fn range_to_clipboard_content(&self, range: AddressRange) -> Result<(String, String), anyhow::Error> {
|
pub fn range_to_clipboard_content(&self, range: AddressRange) -> Result<(String, String), anyhow::Error> {
|
||||||
let rows = self.get_rows_for_range(&range).unwrap_or_default();
|
let rows = self.get_rows_for_range(&range).unwrap_or_default();
|
||||||
rows_to_clipboard_content(rows)
|
rows_to_clipboard_content(&rows)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get rows for current sheet to export.
|
/// Get rows for current sheet to export.
|
||||||
@ -722,14 +722,14 @@ impl Book {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rows_to_clipboard_content(rows: Vec<Vec<String>>) -> std::result::Result<(String, String), anyhow::Error> {
|
pub fn rows_to_clipboard_content(rows: &Vec<Vec<String>>) -> std::result::Result<(String, String), anyhow::Error> {
|
||||||
use htmf::prelude::*;
|
use htmf::prelude::*;
|
||||||
let table = table([]);
|
let table = table([]);
|
||||||
let mut writer = csv::Writer::from_writer(vec![]);
|
let mut writer = csv::Writer::from_writer(vec![]);
|
||||||
let mut table_rows = vec![];
|
let mut table_rows = vec![];
|
||||||
for row in rows {
|
for row in rows {
|
||||||
let table_row = tr([]);
|
let table_row = tr([]);
|
||||||
writer.write_record(&row)?;
|
writer.write_record(row)?;
|
||||||
let mut row_cells = vec![];
|
let mut row_cells = vec![];
|
||||||
for cell in row {
|
for cell in row {
|
||||||
row_cells.push(td([]).with(text(cell)));
|
row_cells.push(td([]).with(text(cell)));
|
||||||
|
@ -644,6 +644,7 @@ impl<'ws> Workspace<'ws> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn copy_range(&mut self, formatted: bool) -> Result<(), anyhow::Error> {
|
fn copy_range(&mut self, formatted: bool) -> Result<(), anyhow::Error> {
|
||||||
|
use arboard::Clipboard;
|
||||||
self.update_range_selection()?;
|
self.update_range_selection()?;
|
||||||
match &self.state.range_select.get_range() {
|
match &self.state.range_select.get_range() {
|
||||||
Some((start, end)) => {
|
Some((start, end)) => {
|
||||||
@ -659,6 +660,9 @@ impl<'ws> Workspace<'ws> {
|
|||||||
}
|
}
|
||||||
rows.push(cols);
|
rows.push(cols);
|
||||||
}
|
}
|
||||||
|
let mut cb = Clipboard::new()?;
|
||||||
|
let (html, csv) = crate::book::rows_to_clipboard_content(&rows)?;
|
||||||
|
cb.set_html(html, Some(csv))?;
|
||||||
self.state.clipboard = Some(ClipboardContents::Range(rows));
|
self.state.clipboard = Some(ClipboardContents::Range(rows));
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user