This commit is contained in:
Brandon Thomas
2026-10-31 10:00:34 -04:00
3 changed files with 55 additions and 4 deletions
+3 -4
View File
@@ -5,7 +5,7 @@ use super::controls::{
use super::galleries::{cell_style_gallery, table_gallery};
use super::{
HAlign, Icon, Key, Modifiers, Rect, SheetApp, Style, Tokens, Ui, VAlign, big_button, color_palette, icon_button, json, keytip_table,
small_button, split_button, theme, toggle_button, vec2,
small_button, small_split_button, split_button, theme, toggle_button, vec2,
};
/// The Accounting Number Format dropdown: label and the code Excel applies for that symbol.
@@ -292,12 +292,11 @@ pub(super) fn home(app: &mut SheetApp, ui: &mut Ui) {
if __k.clicked() {
act(app, "home.increaseIndent", json!({}));
}
let (m, ma) = split_button(ui, Icon::Merge, None, "Merge & Center");
let (m, ma) = small_split_button(ui, Icon::Merge, "Merge & Center", "Merge & Center");
control_keytip(app, ui, &ma, "home.mergeCenter");
if m {
if m.clicked() {
act(app, "home.mergeCenter", json!({}));
}
ui.label(egui::RichText::new(app.ui.language.tr("Merge & Center")).font(theme::ui_font(12.5)));
egui::Popup::menu(&ma).show(|ui| {
menu_items(
app,
+1
View File
@@ -63,6 +63,7 @@ mod keytips_generated;
mod macro_editor;
mod macros_ui;
mod menu_hover;
mod merge_center_label;
mod merged_cells;
mod more_colors;
mod native_print;
@@ -0,0 +1,51 @@
//! Home › Merge & Center is a split button: clicking its text label runs `home.mergeCenter`, like
//! its icon does.
use egui::{Event, Shape, vec2};
use gridcraft_engine::Session;
use gridcraft_ui_egui::SheetApp;
use gridcraft_ui_egui::i18n::Language;
use serde_json::json;
#[test]
fn clicking_the_label_merges_and_centers() {
for language in [Language::En, Language::De] {
click_label(language);
}
}
fn click_label(language: Language) {
let label = language.tr("Merge & Center");
let mut s = Session::new();
s.new_workbook();
s.execute("selection.set", json!({"range": "A1:B1"})).unwrap();
let mut h = crate::common::builder().with_size(vec2(1400.0, 800.0)).build_ui_state(
|ui, app: &mut SheetApp| {
app.logic(ui.ctx());
app.ui(ui);
},
{
let mut app = crate::common::app(s);
app.ui.language = language;
app
},
);
h.run_steps(4);
let at = h
.output()
.shapes
.iter()
.find_map(|s| match &s.shape {
Shape::Text(t) if t.galley.job.text == label => Some(t.pos + t.galley.size() / 2.0),
_ => None,
})
.unwrap_or_else(|| panic!("the Home tab shows {label}"));
h.input_mut().events.push(Event::PointerMoved(at));
h.run_steps(2);
for pressed in [true, false] {
h.input_mut().events.push(Event::PointerButton { pos: at, button: egui::PointerButton::Primary, pressed, modifiers: egui::Modifiers::NONE });
h.run_steps(2);
}
h.run_steps(2);
assert!(h.state().session.journal.iter().any(|(id, _)| id == "home.mergeCenter"), "{label}");
}