mirror of
https://github.com/storytold/gridcraft.git
synced 2026-11-01 08:12:02 +00:00
Make the Merge & Center ribbon label part of its split button
Fixes #2920 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
981fad14e0
commit
671e194bb9
3 files changed
+55
-4
No files matched your search
@@ -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,
|
||||
|
||||
@@ -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}");
|
||||
}
|
||||
Reference in new issue
Block a user