toolbar.vala 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * Copyright (c) 2012-2026 Daniele Bartolini et al.
  3. * SPDX-License-Identifier: GPL-3.0-or-later
  4. */
  5. namespace Crown
  6. {
  7. public class Toolbar : Gtk.Box
  8. {
  9. public Toolbar()
  10. {
  11. this.orientation = Gtk.Orientation.VERTICAL;
  12. this.halign = Gtk.Align.START;
  13. this.valign = Gtk.Align.START;
  14. this.margin_top = 8;
  15. this.margin_start = 8;
  16. add_tool_buttons();
  17. add_snap_buttons();
  18. add_reference_system_buttons();
  19. add_snap_to_grid_buttons();
  20. }
  21. public void add_tool_buttons()
  22. {
  23. this.pack_start(make_toggle_button("app.tool", new GLib.Variant.int32(ToolType.PLACE), "tool-place"));
  24. this.pack_start(make_toggle_button("app.tool", new GLib.Variant.int32(ToolType.MOVE), "tool-move"));
  25. this.pack_start(make_toggle_button("app.tool", new GLib.Variant.int32(ToolType.ROTATE), "tool-rotate"));
  26. var last = make_toggle_button("app.tool", new GLib.Variant.int32(ToolType.SCALE), "tool-scale");
  27. last.margin_bottom = last.margin_bottom + 8;
  28. this.pack_start(last);
  29. }
  30. public void add_snap_buttons()
  31. {
  32. this.pack_start(make_toggle_button("app.snap", new GLib.Variant.int32(SnapMode.RELATIVE), "reference-local"));
  33. var last = make_toggle_button("app.snap", new GLib.Variant.int32(SnapMode.ABSOLUTE), "reference-world");
  34. last.margin_bottom = last.margin_bottom + 8;
  35. this.pack_start(last);
  36. }
  37. public void add_reference_system_buttons()
  38. {
  39. this.pack_start(make_toggle_button("app.reference-system", new GLib.Variant.int32(ReferenceSystem.LOCAL), "axis-local"));
  40. var last = make_toggle_button("app.reference-system", new GLib.Variant.int32(ReferenceSystem.WORLD), "axis-world");
  41. last.margin_bottom = last.margin_bottom + 8;
  42. this.pack_start(last);
  43. }
  44. public void add_snap_to_grid_buttons()
  45. {
  46. var last = make_toggle_button("app.snap-to-grid", null, "snap-to-grid");
  47. last.margin_bottom = last.margin_bottom + 8;
  48. this.pack_start(last);
  49. }
  50. public Gtk.ToggleButton make_toggle_button(string action_name
  51. , GLib.Variant? action_target
  52. , string icon_name
  53. , Gtk.IconSize icon_size = Gtk.IconSize.LARGE_TOOLBAR
  54. )
  55. {
  56. var btn = new Gtk.ToggleButton();
  57. btn.action_name = action_name;
  58. if (action_target != null)
  59. btn.action_target = action_target;
  60. btn.can_focus = false;
  61. btn.get_style_context().add_class("flat");
  62. btn.get_style_context().add_class("image-button");
  63. var img = new Gtk.Image.from_icon_name(icon_name, icon_size);
  64. img.margin_bottom
  65. = img.margin_end
  66. = img.margin_start
  67. = img.margin_top
  68. = 8
  69. ;
  70. btn.add(img);
  71. return btn;
  72. }
  73. }
  74. } /* namespace Crown */