hashi-ruby 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/blank.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/check-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/check-mixed-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/check-mixed.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/check.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/grid-selection-blank.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/grid-selection.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-checkbox-checked-hover.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-checkbox-checked-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-checkbox-checked.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-checkbox-mixed-hover.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-checkbox-mixed-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-checkbox-mixed.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-radio-checked-hover.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-radio-checked-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-radio-checked.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/pane-separator-grip-vertical.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/pane-separator-grip.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/radio-checked.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/radio-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/radio-unchecked.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/radio.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above-insensitive-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above-insensitive-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above-insensitive@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below-insensitive-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below-insensitive-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below-insensitive@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-insensitive-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-insensitive-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-insensitive@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above-insensitive-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above-insensitive-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above-insensitive@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below-insensitive-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below-insensitive-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below-insensitive@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/gnome-applications.css +429 -0
- data/bin/assets/FlatColor/gtk-3.20/gtk-widgets.css +786 -0
- data/bin/assets/FlatColor/gtk-3.20/gtk.css +113 -0
- data/bin/assets/FlatColor/gtk-3.20/gtk.css.base +108 -0
- data/bin/assets/FlatColor/gtk-3.20/settings.ini +7 -0
- data/bin/assets/FlatColor/gtk-3.20/unity.css +68 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/button.css +58 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/calendar.css +32 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/cell-row.css +25 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/check-radio.css +164 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/chrome.css +16 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/color-chooser.css +114 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/column-header.css +52 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/combobox.css +26 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/csd.css +125 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/entry.css +40 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/header-bar.css +27 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/infobar.css +90 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/linked-buttons.css +524 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/menu.css +127 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/notebook.css +200 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/osd.css +203 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/progress-scale.css +365 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/scrollbar.css +116 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/selection-mode.css +109 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/separator.css +24 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/sidebar.css +43 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/spinbutton.css +102 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/spinner.css +120 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/switch.css +63 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/toolbar.css +39 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-selectionmode-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-selectionmode-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-selectionmode.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-selectionmode@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-selectionmode-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-selectionmode-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-selectionmode.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-selectionmode@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-header-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-header-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-header.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-header@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-header-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-header-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-header.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-header@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-header-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-header-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-header.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-header@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-header-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-header-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-header.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-header@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-header-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-header-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-header.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-header@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-header-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-header-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-header.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-header@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-active-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-active-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-active.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-active@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-backdrop-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-backdrop-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-backdrop.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-backdrop@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-hover-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-hover-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-hover.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-hover@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-active-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-active-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-active.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-active@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-backdrop-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-backdrop-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-backdrop.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-backdrop@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-hover-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-hover-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-hover.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-hover@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-active-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-active-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-active.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-active@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-backdrop-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-backdrop-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-backdrop.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-backdrop@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-hover-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-hover-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-hover.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-hover@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-active-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-active-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-active.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-active@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-backdrop-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-backdrop-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-backdrop.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-backdrop@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-hover-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-hover-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-hover.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-hover@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/gtk-dark.css +10090 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/gtk.css +10100 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/thumbnail.png +0 -0
- data/bin/assets/Matcha-dark-aliz/index.theme +12 -0
- data/bin/assets/didacticiel/1.jpg +0 -0
- data/bin/assets/didacticiel/2.jpg +0 -0
- data/bin/assets/didacticiel/3.jpg +0 -0
- data/bin/assets/didacticiel/4.jpg +0 -0
- data/bin/assets/didacticiel/5.jpg +0 -0
- data/bin/assets/didacticiel/6.jpg +0 -0
- data/bin/assets/didacticiel/7.jpg +0 -0
- data/bin/assets/didacticiel/8.jpg +0 -0
- data/bin/assets/map.png +0 -0
- data/bin/db/Difficulte.rb +9 -0
- data/bin/db/GestionBase.rb +334 -0
- data/bin/db/GrilleDb.rb +15 -0
- data/bin/db/Joue.rb +10 -0
- data/bin/db/Joueur.rb +9 -0
- data/bin/db/Migration.rb +70 -0
- data/bin/db/Mode.rb +9 -0
- data/bin/db/PhrasesAventure.rb +4 -0
- data/bin/db/TestBase.rb +144 -0
- data/bin/db/base.sqlite +0 -0
- data/bin/hashi +5 -0
- data/bin/src/Action.rb +46 -0
- data/bin/src/Aides.rb +41 -0
- data/bin/src/Case.rb +410 -0
- data/bin/src/Grille.rb +914 -0
- data/bin/src/Grilles/grilles_site.txt +30 -0
- data/bin/src/Grilles/grilles_site_difficile.txt +90 -0
- data/bin/src/Grilles/grilles_site_facile.txt +90 -0
- data/bin/src/Grilles/grilles_site_moyen.txt +90 -0
- data/bin/src/Grilles/grilles_site_ser.txt +0 -0
- data/bin/src/Grilles/grilles_site_ser_difficile.txt +90 -0
- data/bin/src/Grilles/grilles_site_ser_facile.txt +90 -0
- data/bin/src/Grilles/grilles_site_ser_moyen.txt +90 -0
- data/bin/src/Hashi.rb +214 -0
- data/bin/src/Lien.rb +57 -0
- data/bin/src/Pile.rb +41 -0
- data/bin/src/Rakefile.rb +6 -0
- data/bin/src/SerGrille.rb +430 -0
- data/bin/src/Test.rb +24 -0
- data/bin/src/Test2.rb +135 -0
- data/bin/src/Utilitaire.rb +12 -0
- data/bin/src/testSerGrille.rb +21 -0
- data/bin/src/ui/AfficheurGrille.rb +385 -0
- data/bin/src/ui/AfficheurJeu.rb +209 -0
- data/bin/src/ui/AfficheurSelection.rb +38 -0
- data/bin/src/ui/Afrique.rb +38 -0
- data/bin/src/ui/AmeriqueNord.rb +38 -0
- data/bin/src/ui/AmeriqueSud.rb +38 -0
- data/bin/src/ui/Antarctique.rb +32 -0
- data/bin/src/ui/Asie.rb +38 -0
- data/bin/src/ui/Aventure.rb +132 -0
- data/bin/src/ui/Carte.rb +282 -0
- data/bin/src/ui/ChargementAventure.rb +61 -0
- data/bin/src/ui/Classement.rb +42 -0
- data/bin/src/ui/Connexion.rb +60 -0
- data/bin/src/ui/Didacticiel.rb +169 -0
- data/bin/src/ui/Etiquette.rb +24 -0
- data/bin/src/ui/Europe.rb +38 -0
- data/bin/src/ui/ListeClassement.rb +44 -0
- data/bin/src/ui/Menu.rb +74 -0
- data/bin/src/ui/Monde.rb +167 -0
- data/bin/src/ui/Oceanie.rb +38 -0
- data/bin/src/ui/SelecteurGrille.rb +58 -0
- data/bin/src/ui/SelectionDifficulte.rb +38 -0
- data/bin/src/ui/SelectionUtilisateur.rb +46 -0
- data/bin/src/ui/Timer.rb +29 -0
- metadata +479 -0
@@ -0,0 +1,169 @@
|
|
1
|
+
require "gtk3"
|
2
|
+
|
3
|
+
# Fenetre comportant les règles du jeu, les techniques basiques
|
4
|
+
# et des explications sur l'interface
|
5
|
+
class Didacticiel < Gtk::Window
|
6
|
+
|
7
|
+
# Constructeur
|
8
|
+
def initialize()
|
9
|
+
super("Didacticiel")
|
10
|
+
self.set_default_size(700, 700)
|
11
|
+
self.signal_connect('destroy') { self.close() }
|
12
|
+
|
13
|
+
vbox = Gtk::Box.new(Gtk::Orientation.new(1), 0)
|
14
|
+
|
15
|
+
vbox.margin = 15
|
16
|
+
|
17
|
+
view = Gtk::TextView.new()
|
18
|
+
view.wrap_mode = :word
|
19
|
+
view1 = Gtk::TextView.new()
|
20
|
+
view1.wrap_mode = :word
|
21
|
+
view2 = Gtk::TextView.new()
|
22
|
+
view2.wrap_mode = :word
|
23
|
+
view3 = Gtk::TextView.new()
|
24
|
+
view3.wrap_mode = :word
|
25
|
+
view4 = Gtk::TextView.new()
|
26
|
+
view4.wrap_mode = :word
|
27
|
+
view5 = Gtk::TextView.new()
|
28
|
+
view5.wrap_mode = :word
|
29
|
+
view6 = Gtk::TextView.new()
|
30
|
+
view6.wrap_mode = :word
|
31
|
+
view7 = Gtk::TextView.new()
|
32
|
+
view7.wrap_mode = :word
|
33
|
+
view8 = Gtk::TextView.new()
|
34
|
+
view8.wrap_mode = :word
|
35
|
+
view.buffer.text =
|
36
|
+
"
|
37
|
+
Règles :
|
38
|
+
|
39
|
+
Tout pont débute et finit sur une case.
|
40
|
+
Aucun pont ne peut en croiser un autre.
|
41
|
+
Tous les ponts sont en ligne droite.
|
42
|
+
Le nombre de ponts qui passent sur une case est le nombre indiqué sur la dite case.
|
43
|
+
Toutes les cases doivent être reliées entre elles.
|
44
|
+
Le nombre de ponts en direction de chaque case ne peut pas être supérieur à 2.
|
45
|
+
|
46
|
+
Techniques :
|
47
|
+
|
48
|
+
Une case 1 ayant un seul voisin doit forcément être reliée à ce voisin avec un pont.
|
49
|
+
"
|
50
|
+
|
51
|
+
view1.buffer.text =
|
52
|
+
"
|
53
|
+
Une case 2 ayant un seul voisin doit forcément relier 2 ponts à ce voisin.
|
54
|
+
"
|
55
|
+
|
56
|
+
view2.buffer.text =
|
57
|
+
"
|
58
|
+
Une case 3 ayant exactement 2 voisins doit avoir au moins un pont relié vers chaque (car s'il y avait 2 ponts vers un des voisin, il resterait un dernier pont à faire vers le second voisin).
|
59
|
+
"
|
60
|
+
|
61
|
+
view3.buffer.text =
|
62
|
+
"
|
63
|
+
Une case 4 ayant exactement 2 voisins doit forcément relier 2 ponts à chaque voisin (car la limite de pont vers un voisin est de 2 et il y a 2 voisins, ce qui fait 4 ponts au total).
|
64
|
+
"
|
65
|
+
|
66
|
+
view4.buffer.text =
|
67
|
+
"
|
68
|
+
Une case 5 ayant exactement 3 voisins doit avoir au moins un pont relié vers chaque voisin (car s'il devait y avoir 2 ponts vers 2 voisins, il resterait un dernier pont à relier au dernier voisin).
|
69
|
+
"
|
70
|
+
|
71
|
+
view5.buffer.text =
|
72
|
+
"
|
73
|
+
Une case 6 ayant exactement 3 voisins doit forcément relier 2 ponts à chaque voisin (car la limite de pont vers un voisin est de 2 et il y a 3 voisins, ce qui fait 6 ponts au total)
|
74
|
+
"
|
75
|
+
|
76
|
+
view6.buffer.text =
|
77
|
+
"
|
78
|
+
Une case 7 ayant exactement 4 voisins doit avoir au moins un pont relié vers chaque voisin (car s'il devait y avoir 2 ponts vers 3 voisins, il resterait un dernier pont à relier au dernier voisin).
|
79
|
+
"
|
80
|
+
|
81
|
+
view7.buffer.text =
|
82
|
+
"
|
83
|
+
Une case 8 ayant exactement 4 voisins doit forcément relier 2 ponts à chaque voisin (car la limite de pont vers un voisin est de 2 et il y a 4 voisins, ce qui fait 8 ponts au total)
|
84
|
+
"
|
85
|
+
|
86
|
+
view8.buffer.text =
|
87
|
+
"
|
88
|
+
Interface :
|
89
|
+
|
90
|
+
Les boutons :
|
91
|
+
Annuler : Permet de revenir un coup en arrière.
|
92
|
+
Refaire : Permet de rétablir le dernier coup annulé.
|
93
|
+
Vérification : Permet de revenir au dernier état de jeu sans erreur. Cependant, votre score en sera pénalisé en mode Classé et Aventure.
|
94
|
+
Hypothèse : Permet d'émettre des hypothèses de liens. Ces liens seront d'une couleur différente pour vous signifier que vous entrez dans ce mode. À la fin de votre hypothèse, vous aurez
|
95
|
+
le choix de la valider, ou bien de l'annuler afin de revenir à l'état du jeu avant l'hypothèse.
|
96
|
+
Réinitialiser : Supprime tous les liens dans la grille.
|
97
|
+
Position : Met une case en surbrillance (vert) où une technique connue est applicable.
|
98
|
+
Technique : Affiche dans la zone de texte une technique applicable sur l'une des cases de la grille, sans signifier laquelle.
|
99
|
+
|
100
|
+
Les clics sur :
|
101
|
+
Triangle : Crée un lien vers la case voisine dans la direction du triangle.
|
102
|
+
Case : Met en évidence (en rouge) tous les liens de l'île à laquelle appartient cette case.
|
103
|
+
Lien : Supprime ce lien.
|
104
|
+
"
|
105
|
+
view.sensitive = false
|
106
|
+
view1.sensitive = false
|
107
|
+
view2.sensitive = false
|
108
|
+
view3.sensitive = false
|
109
|
+
view4.sensitive = false
|
110
|
+
view5.sensitive = false
|
111
|
+
view6.sensitive = false
|
112
|
+
view7.sensitive = false
|
113
|
+
view8.sensitive = false
|
114
|
+
scroll = Gtk::ScrolledWindow.new()
|
115
|
+
image1 = Gtk::Image.new(:file => "../assets/didacticiel/1.jpg")
|
116
|
+
image2 = Gtk::Image.new(:file => "../assets/didacticiel/2.jpg")
|
117
|
+
image3 = Gtk::Image.new(:file => "../assets/didacticiel/3.jpg")
|
118
|
+
image4 = Gtk::Image.new(:file => "../assets/didacticiel/4.jpg")
|
119
|
+
image5 = Gtk::Image.new(:file => "../assets/didacticiel/5.jpg")
|
120
|
+
image6 = Gtk::Image.new(:file => "../assets/didacticiel/6.jpg")
|
121
|
+
image7 = Gtk::Image.new(:file => "../assets/didacticiel/7.jpg")
|
122
|
+
image8 = Gtk::Image.new(:file => "../assets/didacticiel/8.jpg")
|
123
|
+
|
124
|
+
|
125
|
+
vbox2 = Gtk::Box.new(Gtk::Orientation.new(1), 0)
|
126
|
+
|
127
|
+
|
128
|
+
vbox2.add(view)
|
129
|
+
vbox2.add(image1)
|
130
|
+
|
131
|
+
vbox2.add(view1)
|
132
|
+
vbox2.add(image2)
|
133
|
+
|
134
|
+
vbox2.add(view2)
|
135
|
+
vbox2.add(image3)
|
136
|
+
|
137
|
+
vbox2.add(view3)
|
138
|
+
vbox2.add(image4)
|
139
|
+
|
140
|
+
vbox2.add(view4)
|
141
|
+
vbox2.add(image5)
|
142
|
+
|
143
|
+
vbox2.add(view5)
|
144
|
+
vbox2.add(image6)
|
145
|
+
|
146
|
+
vbox2.add(view6)
|
147
|
+
vbox2.add(image7)
|
148
|
+
|
149
|
+
vbox2.add(view7)
|
150
|
+
vbox2.add(image8)
|
151
|
+
|
152
|
+
vbox2.add(view8)
|
153
|
+
|
154
|
+
scroll.add(vbox2)
|
155
|
+
scroll.set_policy(:never, :automatic)
|
156
|
+
scroll.vexpand = true
|
157
|
+
|
158
|
+
bouton = Gtk::Button.new(label: "Quitter")
|
159
|
+
bouton.signal_connect("clicked") { self.close() }
|
160
|
+
bouton.margin_top = 10
|
161
|
+
|
162
|
+
vbox.add(scroll)
|
163
|
+
vbox.add(bouton)
|
164
|
+
|
165
|
+
self.add(vbox)
|
166
|
+
|
167
|
+
self.show_all()
|
168
|
+
end
|
169
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Etiquette pour les différents niveaux en mode aventure
|
2
|
+
class Etiquette
|
3
|
+
|
4
|
+
attr_reader :x, :y, :w, :h, :s, :g
|
5
|
+
|
6
|
+
# Constructeur
|
7
|
+
#
|
8
|
+
# === Paramètres
|
9
|
+
#
|
10
|
+
# * +x+ - Position en x de l'étiquette
|
11
|
+
# * +y+ - Position en y de l'étiquette
|
12
|
+
# * +w+ - Largeur du rectangle
|
13
|
+
# * +h+ - Hauteur du rectangle
|
14
|
+
# * +s+ - Nombre d'étoiles
|
15
|
+
# * +g+ - Grille à jouer
|
16
|
+
def initialize(x, y, w, h, s, g)
|
17
|
+
@x = x
|
18
|
+
@y = y
|
19
|
+
@w = w
|
20
|
+
@h = h
|
21
|
+
@s = s
|
22
|
+
@g = g
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "gtk3"
|
2
|
+
require_relative "Carte"
|
3
|
+
require_relative "Etiquette"
|
4
|
+
|
5
|
+
# Widget Gtk affichant l'europe
|
6
|
+
class Europe < Carte
|
7
|
+
|
8
|
+
# @factZoom => Facteur de zoom
|
9
|
+
# @dX => Décalage de l'affichage en x
|
10
|
+
# @dY => Décalage de l'affichage en y
|
11
|
+
|
12
|
+
# Constructeur
|
13
|
+
#
|
14
|
+
# === Paramètres
|
15
|
+
#
|
16
|
+
# * +carte+ - Carte principale
|
17
|
+
def initialize(carte)
|
18
|
+
super(carte)
|
19
|
+
@dX = -2350
|
20
|
+
@dY = -1300
|
21
|
+
@factZoom = 1.5
|
22
|
+
|
23
|
+
@g = carte.grillesM
|
24
|
+
|
25
|
+
self.dessinerEtiquettes()
|
26
|
+
end
|
27
|
+
|
28
|
+
def dessinerEtiquettes()
|
29
|
+
ajouterEtiquette(Etiquette.new(2250, 1380, 90, 30, @carte.etoiles[1][0], @g[0]))
|
30
|
+
ajouterEtiquette(Etiquette.new(2170, 1320, 90, 30, @carte.etoiles[1][1], @g[1]))
|
31
|
+
ajouterEtiquette(Etiquette.new(2180, 1490, 90, 30, @carte.etoiles[1][2], @g[2]))
|
32
|
+
ajouterEtiquette(Etiquette.new(2340, 1160, 90, 30, @carte.etoiles[1][3], @g[3]))
|
33
|
+
ajouterEtiquette(Etiquette.new(2440, 1340, 90, 30, @carte.etoiles[1][4], @g[4]))
|
34
|
+
ajouterEtiquette(Etiquette.new(2400, 1500, 90, 30, @carte.etoiles[1][5], @g[5]))
|
35
|
+
ajouterEtiquette(Etiquette.new(2620, 1250, 90, 30, @carte.etoiles[1][6], @g[6]))
|
36
|
+
super()
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require "gtk3"
|
2
|
+
|
3
|
+
class ListeClassement < Gtk::ScrolledWindow
|
4
|
+
# Constructeur
|
5
|
+
#
|
6
|
+
# === Paramètres
|
7
|
+
#
|
8
|
+
# * +difficulté+ - Niveau de difficulté (1 = facile, 2 = moyen, 3 = difficile)
|
9
|
+
def initialize(difficulté)
|
10
|
+
super()
|
11
|
+
self.set_policy(Gtk::PolicyType::NEVER, Gtk::PolicyType::AUTOMATIC)
|
12
|
+
self.expand = true
|
13
|
+
|
14
|
+
nbColonnes = 3
|
15
|
+
types = [Integer, String, Integer]
|
16
|
+
@store = Gtk::ListStore.new(*types)
|
17
|
+
|
18
|
+
joueurs = GestionBase.recupJoueurAll()
|
19
|
+
|
20
|
+
c = joueurs.map() do |x|
|
21
|
+
nb = GestionBase.recupNbGrillesJouees(x.id, difficulté)
|
22
|
+
score = nb > 0 ? GestionBase.recupScoreTotal(x.id, difficulté) / nb : 0
|
23
|
+
[x, score]
|
24
|
+
end
|
25
|
+
c = c.sort() { |a,b| b[1] <=> a[1] }
|
26
|
+
|
27
|
+
c.each_index() do |i|
|
28
|
+
iter = @store.append()
|
29
|
+
iter.set_values([i+1, c[i][0].pseudo, c[i][1]])
|
30
|
+
end
|
31
|
+
|
32
|
+
@tree = Gtk::TreeView.new(@store)
|
33
|
+
@tree.show_expanders = false
|
34
|
+
|
35
|
+
colonnes = ["Rang", "Nom d'utilisateur", "Score moyen"]
|
36
|
+
colonnes.each_index() do |i|
|
37
|
+
renderer = Gtk::CellRendererText.new()
|
38
|
+
colonne = Gtk::TreeViewColumn.new(colonnes[i], renderer, {:text => i})
|
39
|
+
colonne.expand = true
|
40
|
+
@tree.append_column(colonne)
|
41
|
+
end
|
42
|
+
self.add(@tree)
|
43
|
+
end
|
44
|
+
end
|
data/bin/src/ui/Menu.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require "gtk3"
|
2
|
+
|
3
|
+
# Menu principal
|
4
|
+
class Menu < Gtk::Box
|
5
|
+
|
6
|
+
# Constructeur
|
7
|
+
#
|
8
|
+
# === Paramètres
|
9
|
+
#
|
10
|
+
# * +fenetre+ - Fenetre principale
|
11
|
+
def initialize(fenetre)
|
12
|
+
super(Gtk::Orientation.new(1), 0)
|
13
|
+
|
14
|
+
self.spacing = 5
|
15
|
+
|
16
|
+
boxHorizontale = Gtk::Box.new(Gtk::Orientation.new(0), 0)
|
17
|
+
boxHorizontale.homogeneous = true
|
18
|
+
boxHorizontale.margin_top = 10
|
19
|
+
c = Gtk::Label.new("")
|
20
|
+
c.hexpand = true
|
21
|
+
boxHorizontale.add(c)
|
22
|
+
b = Gtk::Button.new(label: "Didacticiel")
|
23
|
+
b.signal_connect("clicked") { fenetre.finMenu("didacticiel") }
|
24
|
+
boxHorizontale.add(b)
|
25
|
+
c = Gtk::Label.new("")
|
26
|
+
c.hexpand = true
|
27
|
+
boxHorizontale.add(c)
|
28
|
+
b = Gtk::Button.new(label: "Classement")
|
29
|
+
b.signal_connect("clicked") { fenetre.finMenu("classement") }
|
30
|
+
boxHorizontale.add(b)
|
31
|
+
c = Gtk::Label.new("")
|
32
|
+
c.hexpand = true
|
33
|
+
boxHorizontale.add(c)
|
34
|
+
self.add(boxHorizontale)
|
35
|
+
|
36
|
+
l = Gtk::Label.new("")
|
37
|
+
l.expand = true
|
38
|
+
self.add(l)
|
39
|
+
|
40
|
+
b = Gtk::Button.new(label: "Entraînement")
|
41
|
+
b.signal_connect("clicked") { fenetre.finMenu("entrainement") }
|
42
|
+
self.add(b)
|
43
|
+
b = Gtk::Button.new(label: "Classé")
|
44
|
+
b.signal_connect("clicked") { fenetre.finMenu("classe") }
|
45
|
+
self.add(b)
|
46
|
+
b = Gtk::Button.new(label: "Aventure")
|
47
|
+
b.signal_connect("clicked") { fenetre.finMenu("aventure") }
|
48
|
+
self.add(b)
|
49
|
+
|
50
|
+
l = Gtk::Label.new("")
|
51
|
+
l.expand = true
|
52
|
+
self.add(l)
|
53
|
+
|
54
|
+
boxHorizontale = Gtk::Box.new(Gtk::Orientation.new(0), 0)
|
55
|
+
boxHorizontale.homogeneous = true
|
56
|
+
boxHorizontale.margin_bottom = 10
|
57
|
+
c = Gtk::Label.new("")
|
58
|
+
c.hexpand = true
|
59
|
+
boxHorizontale.add(c)
|
60
|
+
b = Gtk::Button.new(label: "Déconnexion")
|
61
|
+
b.signal_connect("clicked") { fenetre.finMenu("deconnexion") }
|
62
|
+
boxHorizontale.add(b)
|
63
|
+
c = Gtk::Label.new("")
|
64
|
+
c.hexpand = true
|
65
|
+
boxHorizontale.add(c)
|
66
|
+
b = Gtk::Button.new(label: "Quitter")
|
67
|
+
b.signal_connect("clicked") { fenetre.finMenu("quitter") }
|
68
|
+
boxHorizontale.add(b)
|
69
|
+
c = Gtk::Label.new("")
|
70
|
+
c.hexpand = true
|
71
|
+
boxHorizontale.add(c)
|
72
|
+
self.add(boxHorizontale)
|
73
|
+
end
|
74
|
+
end
|
data/bin/src/ui/Monde.rb
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
require "gtk3"
|
2
|
+
require_relative "Carte"
|
3
|
+
|
4
|
+
# Widget Gtk affichant le monde
|
5
|
+
class Monde < Carte
|
6
|
+
|
7
|
+
# @factZoom => Facteur de zoom
|
8
|
+
# @dX => Décalage de l'affichage en x
|
9
|
+
# @dY => Décalage de l'affichage en y
|
10
|
+
|
11
|
+
# Constructeur
|
12
|
+
#
|
13
|
+
# === Paramètres
|
14
|
+
#
|
15
|
+
# * +carte+ - Carte principale
|
16
|
+
def initialize(carte)
|
17
|
+
super(carte)
|
18
|
+
@dX = -2383
|
19
|
+
@dY = -1950
|
20
|
+
@factZoom = 0.5
|
21
|
+
|
22
|
+
self.dessinerEtiquettes()
|
23
|
+
end
|
24
|
+
|
25
|
+
def dessinerEtiquettes()
|
26
|
+
# Amérique du nord
|
27
|
+
self.drawRectangleVide(380, 900, 1300, 950, false)
|
28
|
+
n = @carte.etoiles[0].first(7).inject(:+)
|
29
|
+
self.drawTexte(380 + 1300/2, 900 + 950/2, "Amérique du nord : #{n}/21")
|
30
|
+
|
31
|
+
# Amérique du sud
|
32
|
+
@bAmeriqueSud = @carte.nbEtoiles >= 12
|
33
|
+
self.drawRectangleVide(1150, 1870, 700, 950, !@bAmeriqueSud)
|
34
|
+
if @bAmeriqueSud
|
35
|
+
n = @carte.etoiles[0].last(7).inject(:+)
|
36
|
+
self.drawTexte(1150 + 700/2, 1820 + 950/2, "Amérique du sud")
|
37
|
+
self.drawTexte(1150 + 700/2, 1920 + 950/2, "#{n}/21")
|
38
|
+
else
|
39
|
+
self.drawTexte(1150 + 700/2, 1870 + 950/2, "12 pour débloquer")
|
40
|
+
end
|
41
|
+
|
42
|
+
# Europe
|
43
|
+
@bEurope = @carte.nbEtoiles >= 24
|
44
|
+
self.drawRectangleVide(1980, 900, 850, 680, !@bEurope)
|
45
|
+
if @bEurope
|
46
|
+
n = @carte.etoiles[1].first(7).inject(:+)
|
47
|
+
self.drawTexte(1980 + 850/2, 900 + 680/2, "Europe : #{n}/21")
|
48
|
+
else
|
49
|
+
self.drawTexte(1980 + 850/2, 900 + 680/2, "24 pour débloquer")
|
50
|
+
end
|
51
|
+
|
52
|
+
# Asie
|
53
|
+
@bAsie = @carte.nbEtoiles >= 36
|
54
|
+
self.drawRectangleVide(2850, 750, 1200, 1350, !@bAsie)
|
55
|
+
if @bAsie
|
56
|
+
n = @carte.etoiles[1].last(7).inject(:+)
|
57
|
+
self.drawTexte(2850 + 1200/2, 750 + 1350/2, "Asie : #{n}/21")
|
58
|
+
else
|
59
|
+
self.drawTexte(2850 + 1200/2, 750 + 1350/2, "36 pour débloquer")
|
60
|
+
end
|
61
|
+
|
62
|
+
# Océanie
|
63
|
+
@bOceanie = @carte.nbEtoiles >= 48
|
64
|
+
self.drawRectangleVide(3375, 2120, 950, 550, !@bOceanie)
|
65
|
+
if @bOceanie
|
66
|
+
n = @carte.etoiles[1].first(7).inject(:+)
|
67
|
+
self.drawTexte(3375 + 950/2, 2120 + 550/2, "Océanie : #{n}/21")
|
68
|
+
else
|
69
|
+
self.drawTexte(3375 + 950/2, 2120 + 550/2, "48 pour débloquer")
|
70
|
+
end
|
71
|
+
|
72
|
+
# Afrique
|
73
|
+
@bAfrique = @carte.nbEtoiles >= 60
|
74
|
+
self.drawRectangleVide(1980, 1600, 850, 900, !@bAfrique)
|
75
|
+
if @bAfrique
|
76
|
+
n = @carte.etoiles[1].last(8).first(7).inject(:+)
|
77
|
+
self.drawTexte(1980 + 850/2, 1600 + 900/2, "Afrique : #{n}/21")
|
78
|
+
else
|
79
|
+
self.drawTexte(1980 + 850/2, 1600 + 900/2, "60 pour débloquer")
|
80
|
+
end
|
81
|
+
|
82
|
+
# Antarctique
|
83
|
+
if @bAfrique
|
84
|
+
@bAntarctique = @carte.nbEtoiles >= 120
|
85
|
+
self.drawRectangleVide(1980, 3000, 850, 200, !@bAntarctique)
|
86
|
+
if @bAntarctique
|
87
|
+
n = @carte.etoiles[1].last.inject(:+)
|
88
|
+
self.drawTexte(1980 + 850/2, 3000 + 200/2, "Antarctique : #{n}/3")
|
89
|
+
else
|
90
|
+
self.drawTexte(1980 + 850/2, 3000 + 200/2, "120 pour débloquer")
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# Dessin de la carte
|
96
|
+
#
|
97
|
+
# === Paramètres
|
98
|
+
#
|
99
|
+
# * +cr+ => Contexte sur lequel dessiner
|
100
|
+
def draw(cr)
|
101
|
+
#ic.rectangle(0, 0, 1000, 1000)
|
102
|
+
#ic.fill()
|
103
|
+
super(cr)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Clic sur la souris
|
107
|
+
#
|
108
|
+
# === Paramètres
|
109
|
+
#
|
110
|
+
# * +event+ => Evenement Gtk contenant les informations sur le clic
|
111
|
+
def mouseClick(event)
|
112
|
+
x = getVX(event.x)
|
113
|
+
y = getVY(event.y)
|
114
|
+
|
115
|
+
# Europe
|
116
|
+
if x > 1980 && y > 900 && x < 1980+850 && y < 900+680
|
117
|
+
if @bEurope == true
|
118
|
+
s = "europe"
|
119
|
+
else
|
120
|
+
s = "null"
|
121
|
+
end
|
122
|
+
# Afrique
|
123
|
+
elsif x > 1980 && y > 1600 && x < 1980+850 && y < 1600+900
|
124
|
+
if @bAfrique == true
|
125
|
+
s = "afrique"
|
126
|
+
else
|
127
|
+
s = "null"
|
128
|
+
end
|
129
|
+
# Asie
|
130
|
+
elsif x > 2850 && y > 750 && x < 2850+1200 && y < 750+1350
|
131
|
+
if @bAsie == true
|
132
|
+
s = "asie"
|
133
|
+
else
|
134
|
+
s = "null"
|
135
|
+
end
|
136
|
+
# Océanie
|
137
|
+
elsif x > 3375 && y > 2120 && x < 3375+950 && y < 2120+550
|
138
|
+
if @bOceanie == true
|
139
|
+
s = "oceanie"
|
140
|
+
else
|
141
|
+
s = "null"
|
142
|
+
end
|
143
|
+
# Amérique du nord
|
144
|
+
elsif x > 380 && y > 900 && x < 380+1300 && y < 900+950
|
145
|
+
s = "ameriqueNord"
|
146
|
+
# Amérique du sud
|
147
|
+
elsif x > 1150 && y > 1870 && x < 1150+700 && y < 1870+950
|
148
|
+
if @bAmeriqueSud == true
|
149
|
+
s = "ameriqueSud"
|
150
|
+
else
|
151
|
+
s = "null"
|
152
|
+
end
|
153
|
+
# Antarctique
|
154
|
+
elsif x > 1980 && y > 3000 && x < 1980+850 && y < 3000+200
|
155
|
+
if @bAntarctique == true
|
156
|
+
s = "antarctique"
|
157
|
+
else
|
158
|
+
s = "null"
|
159
|
+
end
|
160
|
+
end
|
161
|
+
if s
|
162
|
+
if s != "null"
|
163
|
+
@carte.choix(s)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "gtk3"
|
2
|
+
require_relative "Carte"
|
3
|
+
require_relative "Etiquette"
|
4
|
+
|
5
|
+
# Widget Gtk affichant l'oceanie
|
6
|
+
class Oceanie < Carte
|
7
|
+
|
8
|
+
# @factZoom => Facteur de zoom
|
9
|
+
# @dX => Décalage de l'affichage en x
|
10
|
+
# @dY => Décalage de l'affichage en y
|
11
|
+
|
12
|
+
# Constructeur
|
13
|
+
#
|
14
|
+
# === Paramètres
|
15
|
+
#
|
16
|
+
# * +carte+ - Carte principale
|
17
|
+
def initialize(carte)
|
18
|
+
super(carte)
|
19
|
+
@dX = -3850
|
20
|
+
@dY = -2350
|
21
|
+
@factZoom = 1.3
|
22
|
+
|
23
|
+
@g = carte.grillesD
|
24
|
+
|
25
|
+
self.dessinerEtiquettes()
|
26
|
+
end
|
27
|
+
|
28
|
+
def dessinerEtiquettes()
|
29
|
+
ajouterEtiquette(Etiquette.new(3780, 2065, 90, 30, @carte.etoiles[2][0], @g[0]))
|
30
|
+
ajouterEtiquette(Etiquette.new(4090, 2220, 90, 30, @carte.etoiles[2][1], @g[1]))
|
31
|
+
ajouterEtiquette(Etiquette.new(3850, 2550, 90, 30, @carte.etoiles[2][2], @g[2]))
|
32
|
+
ajouterEtiquette(Etiquette.new(3850, 2400, 90, 30, @carte.etoiles[2][3], @g[3]))
|
33
|
+
ajouterEtiquette(Etiquette.new(3600, 2350, 90, 30, @carte.etoiles[2][4], @g[4]))
|
34
|
+
ajouterEtiquette(Etiquette.new(4140, 2600, 90, 30, @carte.etoiles[2][5], @g[5]))
|
35
|
+
ajouterEtiquette(Etiquette.new(3700, 2222, 90, 30, @carte.etoiles[2][6], @g[6]))
|
36
|
+
super()
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require "gtk3"
|
2
|
+
|
3
|
+
require_relative "AfficheurGrille"
|
4
|
+
require_relative "../Grille"
|
5
|
+
require_relative "../Case"
|
6
|
+
require_relative "../Lien"
|
7
|
+
|
8
|
+
# Widget Gtk permettant d'afficher un selecteur pour une grille
|
9
|
+
class SelecteurGrille < Gtk::ScrolledWindow
|
10
|
+
|
11
|
+
# Constructeur
|
12
|
+
#
|
13
|
+
# === Paramètres
|
14
|
+
#
|
15
|
+
# * +fenetre+ - Fenetre principale
|
16
|
+
# * +dif+ - Difficulté à utiliser
|
17
|
+
def initialize(fenetre, dif)
|
18
|
+
super()
|
19
|
+
self.set_policy(Gtk::PolicyType::NEVER, Gtk::PolicyType::AUTOMATIC)
|
20
|
+
self.expand = true
|
21
|
+
@fenetre = fenetre
|
22
|
+
|
23
|
+
#à modifier
|
24
|
+
idMode = 1 # Entrainement
|
25
|
+
grilles = [GestionBase.recupGrilles(fenetre.joueur.id, dif, 1, 0, 5),
|
26
|
+
GestionBase.recupGrilles(fenetre.joueur.id, dif, 1, 10, 5),
|
27
|
+
GestionBase.recupGrilles(fenetre.joueur.id, dif, 1, 20, 5)].inject(:+)
|
28
|
+
#grilles = grilles.map() { |x| YAML.load(x.grilleSolution).grilleRes }
|
29
|
+
|
30
|
+
grid = Gtk::Grid.new()
|
31
|
+
grid.row_spacing = 40
|
32
|
+
grid.column_spacing = 40
|
33
|
+
grid.margin = 20
|
34
|
+
|
35
|
+
x = 0
|
36
|
+
y = 0
|
37
|
+
|
38
|
+
grilles.each() do |g|
|
39
|
+
vBox = Gtk::Box.new(Gtk::Orientation.new(1), 0)
|
40
|
+
f = Gtk::Frame.new()
|
41
|
+
a = AfficheurGrille.new(YAML.load(g.grilleSolution), false, nil)
|
42
|
+
a.set_size_request(1,300)
|
43
|
+
a.expand = true
|
44
|
+
f.add(a)
|
45
|
+
vBox.add(f)
|
46
|
+
vBox.add(Gtk::Label.new("Grille n°#{x+y*3+1}"))
|
47
|
+
vBox.signal_connect("button-press-event") { @fenetre.finSelection(g, "entrainement") }
|
48
|
+
grid.attach(vBox, x, y, 1, 1)
|
49
|
+
x += 1
|
50
|
+
if x > 2
|
51
|
+
x = 0
|
52
|
+
y += 1
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
self.add(grid)
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "gtk3"
|
2
|
+
|
3
|
+
# Widget GTK permettant de choisir une difficulté
|
4
|
+
class SelectionDifficulte < Gtk::Box
|
5
|
+
|
6
|
+
# Constructeur
|
7
|
+
#
|
8
|
+
# === Paramètres
|
9
|
+
#
|
10
|
+
# * +fenetre+ - Fenetre principale
|
11
|
+
def initialize(fenetre)
|
12
|
+
super(Gtk::Orientation.new(1), 0)
|
13
|
+
|
14
|
+
self.spacing = 5
|
15
|
+
|
16
|
+
l = Gtk::Label.new("")
|
17
|
+
l.expand = true
|
18
|
+
self.add(l)
|
19
|
+
|
20
|
+
b = Gtk::Button.new(label: "Facile")
|
21
|
+
b.signal_connect("clicked") { fenetre.finSelection(GestionBase.recupGrilleAleatoire(fenetre.joueur.id, 1, 2), "classe") }
|
22
|
+
self.add(b)
|
23
|
+
b = Gtk::Button.new(label: "Moyen")
|
24
|
+
b.signal_connect("clicked") { fenetre.finSelection(GestionBase.recupGrilleAleatoire(fenetre.joueur.id, 2, 2), "classe") }
|
25
|
+
self.add(b)
|
26
|
+
b = Gtk::Button.new(label: "Difficile")
|
27
|
+
b.signal_connect("clicked") { fenetre.finSelection(GestionBase.recupGrilleAleatoire(fenetre.joueur.id, 3, 2), "classe") }
|
28
|
+
self.add(b)
|
29
|
+
|
30
|
+
l = Gtk::Label.new("")
|
31
|
+
l.expand = true
|
32
|
+
self.add(l)
|
33
|
+
|
34
|
+
b = Gtk::Button.new(label: "Retour")
|
35
|
+
b.signal_connect("clicked") { fenetre.finSelection(nil, nil) }
|
36
|
+
self.add(b)
|
37
|
+
end
|
38
|
+
end
|