gtk3 2.2.4-x64-mingw32
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/Rakefile +20 -0
- data/ext/gtk3/conversions.c +34 -0
- data/ext/gtk3/depend +11 -0
- data/ext/gtk3/extconf.rb +99 -0
- data/ext/gtk3/gtk3.def +10 -0
- data/ext/gtk3/init.c +34 -0
- data/ext/gtk3/rbgtk-about-dialog.c +113 -0
- data/ext/gtk3/rbgtk-accel-group-entry.c +94 -0
- data/ext/gtk3/rbgtk-accel-group.c +199 -0
- data/ext/gtk3/rbgtk-accel-key.c +120 -0
- data/ext/gtk3/rbgtk-accel-label.c +55 -0
- data/ext/gtk3/rbgtk-accel-map.c +135 -0
- data/ext/gtk3/rbgtk-accelerator.c +78 -0
- data/ext/gtk3/rbgtk-accessible.c +40 -0
- data/ext/gtk3/rbgtk-action-bar.c +73 -0
- data/ext/gtk3/rbgtk-action-group.c +467 -0
- data/ext/gtk3/rbgtk-action.c +205 -0
- data/ext/gtk3/rbgtk-activatable.c +30 -0
- data/ext/gtk3/rbgtk-adjustment.c +98 -0
- data/ext/gtk3/rbgtk-alignment.c +75 -0
- data/ext/gtk3/rbgtk-allocation.c +166 -0
- data/ext/gtk3/rbgtk-app-chooser-button.c +70 -0
- data/ext/gtk3/rbgtk-app-chooser-dialog.c +68 -0
- data/ext/gtk3/rbgtk-app-chooser-widget.c +40 -0
- data/ext/gtk3/rbgtk-app-chooser.c +47 -0
- data/ext/gtk3/rbgtk-application.c +69 -0
- data/ext/gtk3/rbgtk-arrow.c +56 -0
- data/ext/gtk3/rbgtk-aspect-frame.c +56 -0
- data/ext/gtk3/rbgtk-assistant.c +218 -0
- data/ext/gtk3/rbgtk-bin.c +42 -0
- data/ext/gtk3/rbgtk-binding-set.c +154 -0
- data/ext/gtk3/rbgtk-border.c +119 -0
- data/ext/gtk3/rbgtk-box.c +146 -0
- data/ext/gtk3/rbgtk-buildable.c +96 -0
- data/ext/gtk3/rbgtk-builder.c +166 -0
- data/ext/gtk3/rbgtk-button-box.c +87 -0
- data/ext/gtk3/rbgtk-button.c +93 -0
- data/ext/gtk3/rbgtk-calendar.c +118 -0
- data/ext/gtk3/rbgtk-cell-editable.c +57 -0
- data/ext/gtk3/rbgtk-cell-layout.c +144 -0
- data/ext/gtk3/rbgtk-cell-renderer-accel.c +41 -0
- data/ext/gtk3/rbgtk-cell-renderer-combo.c +38 -0
- data/ext/gtk3/rbgtk-cell-renderer-pixbuf.c +41 -0
- data/ext/gtk3/rbgtk-cell-renderer-progress.c +38 -0
- data/ext/gtk3/rbgtk-cell-renderer-spin.c +39 -0
- data/ext/gtk3/rbgtk-cell-renderer-spinner.c +38 -0
- data/ext/gtk3/rbgtk-cell-renderer-text.c +48 -0
- data/ext/gtk3/rbgtk-cell-renderer-toggle.c +39 -0
- data/ext/gtk3/rbgtk-cell-renderer.c +119 -0
- data/ext/gtk3/rbgtk-cell-view.c +95 -0
- data/ext/gtk3/rbgtk-check-button.c +64 -0
- data/ext/gtk3/rbgtk-check-menu-item.c +64 -0
- data/ext/gtk3/rbgtk-clip-board.c +389 -0
- data/ext/gtk3/rbgtk-color-button.c +55 -0
- data/ext/gtk3/rbgtk-color-selection-dialog.c +56 -0
- data/ext/gtk3/rbgtk-color-selection.c +219 -0
- data/ext/gtk3/rbgtk-combo-box-text.c +138 -0
- data/ext/gtk3/rbgtk-combo-box.c +147 -0
- data/ext/gtk3/rbgtk-const.c +79 -0
- data/ext/gtk3/rbgtk-container.c +788 -0
- data/ext/gtk3/rbgtk-css-provider.c +110 -0
- data/ext/gtk3/rbgtk-dialog.c +206 -0
- data/ext/gtk3/rbgtk-drag-gdk-drag-context.c +108 -0
- data/ext/gtk3/rbgtk-drag.c +93 -0
- data/ext/gtk3/rbgtk-drawing-area.c +42 -0
- data/ext/gtk3/rbgtk-editable.c +149 -0
- data/ext/gtk3/rbgtk-entry-buffer.c +87 -0
- data/ext/gtk3/rbgtk-entry-completion.c +122 -0
- data/ext/gtk3/rbgtk-entry.c +184 -0
- data/ext/gtk3/rbgtk-event-box.c +42 -0
- data/ext/gtk3/rbgtk-expander.c +49 -0
- data/ext/gtk3/rbgtk-file-chooser-button.c +50 -0
- data/ext/gtk3/rbgtk-file-chooser-dialog.c +62 -0
- data/ext/gtk3/rbgtk-file-chooser-widget.c +40 -0
- data/ext/gtk3/rbgtk-file-chooser.c +381 -0
- data/ext/gtk3/rbgtk-file-filter.c +128 -0
- data/ext/gtk3/rbgtk-file-system-error.c +48 -0
- data/ext/gtk3/rbgtk-fixed.c +61 -0
- data/ext/gtk3/rbgtk-font-button.c +49 -0
- data/ext/gtk3/rbgtk-font-chooser-dialog.c +56 -0
- data/ext/gtk3/rbgtk-font-chooser-widget.c +45 -0
- data/ext/gtk3/rbgtk-font-chooser.c +78 -0
- data/ext/gtk3/rbgtk-frame.c +69 -0
- data/ext/gtk3/rbgtk-gdk-event.c +38 -0
- data/ext/gtk3/rbgtk-grid.c +105 -0
- data/ext/gtk3/rbgtk-handle-box.c +45 -0
- data/ext/gtk3/rbgtk-header-bar.c +58 -0
- data/ext/gtk3/rbgtk-hsv.c +102 -0
- data/ext/gtk3/rbgtk-icon-factory.c +85 -0
- data/ext/gtk3/rbgtk-icon-info.c +115 -0
- data/ext/gtk3/rbgtk-icon-set.c +84 -0
- data/ext/gtk3/rbgtk-icon-size.c +91 -0
- data/ext/gtk3/rbgtk-icon-source.c +184 -0
- data/ext/gtk3/rbgtk-icon-theme.c +268 -0
- data/ext/gtk3/rbgtk-icon-view.c +295 -0
- data/ext/gtk3/rbgtk-im-multicontext.c +48 -0
- data/ext/gtk3/rbgtk-image-menu-item.c +67 -0
- data/ext/gtk3/rbgtk-image.c +162 -0
- data/ext/gtk3/rbgtk-imcon-text-simple.c +69 -0
- data/ext/gtk3/rbgtk-imcon-text.c +133 -0
- data/ext/gtk3/rbgtk-infobar.c +121 -0
- data/ext/gtk3/rbgtk-invisible.c +49 -0
- data/ext/gtk3/rbgtk-label.c +139 -0
- data/ext/gtk3/rbgtk-layout.c +93 -0
- data/ext/gtk3/rbgtk-level-bar.c +88 -0
- data/ext/gtk3/rbgtk-link-button.c +49 -0
- data/ext/gtk3/rbgtk-list-store.c +399 -0
- data/ext/gtk3/rbgtk-lock-button.c +50 -0
- data/ext/gtk3/rbgtk-menu-button.c +41 -0
- data/ext/gtk3/rbgtk-menu-item.c +95 -0
- data/ext/gtk3/rbgtk-menu-shell.c +106 -0
- data/ext/gtk3/rbgtk-menu-tool-button.c +81 -0
- data/ext/gtk3/rbgtk-menu.c +168 -0
- data/ext/gtk3/rbgtk-menubar.c +43 -0
- data/ext/gtk3/rbgtk-message-dialog.c +74 -0
- data/ext/gtk3/rbgtk-misc.c +70 -0
- data/ext/gtk3/rbgtk-notebook.c +383 -0
- data/ext/gtk3/rbgtk-numerable-icon.c +50 -0
- data/ext/gtk3/rbgtk-orientable.c +27 -0
- data/ext/gtk3/rbgtk-overlay.c +53 -0
- data/ext/gtk3/rbgtk-page-setup-unix-dialog.c +94 -0
- data/ext/gtk3/rbgtk-page-setup.c +195 -0
- data/ext/gtk3/rbgtk-paned.c +114 -0
- data/ext/gtk3/rbgtk-paper-size.c +179 -0
- data/ext/gtk3/rbgtk-plug.c +85 -0
- data/ext/gtk3/rbgtk-print-context.c +125 -0
- data/ext/gtk3/rbgtk-print-job.c +148 -0
- data/ext/gtk3/rbgtk-print-operation-preview.c +59 -0
- data/ext/gtk3/rbgtk-print-operation.c +149 -0
- data/ext/gtk3/rbgtk-print-settings.c +807 -0
- data/ext/gtk3/rbgtk-print-unix-dialog.c +90 -0
- data/ext/gtk3/rbgtk-printer.c +155 -0
- data/ext/gtk3/rbgtk-progress-bar.c +72 -0
- data/ext/gtk3/rbgtk-radio-action.c +122 -0
- data/ext/gtk3/rbgtk-radio-button.c +89 -0
- data/ext/gtk3/rbgtk-radio-menu-item.c +147 -0
- data/ext/gtk3/rbgtk-radio-tool-button.c +131 -0
- data/ext/gtk3/rbgtk-range.c +68 -0
- data/ext/gtk3/rbgtk-recent-action.c +64 -0
- data/ext/gtk3/rbgtk-recent-chooser-dialog.c +66 -0
- data/ext/gtk3/rbgtk-recent-chooser-menu.c +50 -0
- data/ext/gtk3/rbgtk-recent-chooser-widget.c +48 -0
- data/ext/gtk3/rbgtk-recent-chooser.c +198 -0
- data/ext/gtk3/rbgtk-recent-data.c +188 -0
- data/ext/gtk3/rbgtk-recent-filter-info.c +201 -0
- data/ext/gtk3/rbgtk-recent-filter.c +169 -0
- data/ext/gtk3/rbgtk-recent-info.c +213 -0
- data/ext/gtk3/rbgtk-recent-manager.c +134 -0
- data/ext/gtk3/rbgtk-revealer.c +42 -0
- data/ext/gtk3/rbgtk-scale-button.c +84 -0
- data/ext/gtk3/rbgtk-scale.c +97 -0
- data/ext/gtk3/rbgtk-scrollable.c +31 -0
- data/ext/gtk3/rbgtk-scrollbar.c +52 -0
- data/ext/gtk3/rbgtk-scrolled-window.c +122 -0
- data/ext/gtk3/rbgtk-search-bar.c +59 -0
- data/ext/gtk3/rbgtk-search-entry.c +42 -0
- data/ext/gtk3/rbgtk-selection-data.c +281 -0
- data/ext/gtk3/rbgtk-selection.c +168 -0
- data/ext/gtk3/rbgtk-separator-menu-item.c +39 -0
- data/ext/gtk3/rbgtk-separator-tool-item.c +38 -0
- data/ext/gtk3/rbgtk-separator.c +44 -0
- data/ext/gtk3/rbgtk-settings.c +229 -0
- data/ext/gtk3/rbgtk-size-group.c +66 -0
- data/ext/gtk3/rbgtk-socket.c +82 -0
- data/ext/gtk3/rbgtk-spin-button.c +132 -0
- data/ext/gtk3/rbgtk-spinner.c +55 -0
- data/ext/gtk3/rbgtk-stack-switcher.c +41 -0
- data/ext/gtk3/rbgtk-stack.c +106 -0
- data/ext/gtk3/rbgtk-status-bar.c +77 -0
- data/ext/gtk3/rbgtk-status-icon.c +122 -0
- data/ext/gtk3/rbgtk-stock.c +213 -0
- data/ext/gtk3/rbgtk-style-context-gdk-screen.c +61 -0
- data/ext/gtk3/rbgtk-style-context.c +411 -0
- data/ext/gtk3/rbgtk-style-properties.c +118 -0
- data/ext/gtk3/rbgtk-style-provider.c +67 -0
- data/ext/gtk3/rbgtk-switch.c +40 -0
- data/ext/gtk3/rbgtk-table.c +190 -0
- data/ext/gtk3/rbgtk-target-list.c +125 -0
- data/ext/gtk3/rbgtk-tearoff-menu-item.c +41 -0
- data/ext/gtk3/rbgtk-text-appearance.c +236 -0
- data/ext/gtk3/rbgtk-text-attributes.c +326 -0
- data/ext/gtk3/rbgtk-text-buffer.c +899 -0
- data/ext/gtk3/rbgtk-text-child-anchor.c +56 -0
- data/ext/gtk3/rbgtk-text-iter.c +732 -0
- data/ext/gtk3/rbgtk-text-mark.c +71 -0
- data/ext/gtk3/rbgtk-text-tag-table.c +96 -0
- data/ext/gtk3/rbgtk-text-tag.c +68 -0
- data/ext/gtk3/rbgtk-text-view.c +336 -0
- data/ext/gtk3/rbgtk-theming-engine.c +257 -0
- data/ext/gtk3/rbgtk-toggle-action.c +61 -0
- data/ext/gtk3/rbgtk-toggle-button.c +87 -0
- data/ext/gtk3/rbgtk-toggle-tool-button.c +61 -0
- data/ext/gtk3/rbgtk-tool-button.c +66 -0
- data/ext/gtk3/rbgtk-tool-item.c +200 -0
- data/ext/gtk3/rbgtk-tool-itemgroup.c +70 -0
- data/ext/gtk3/rbgtk-tool-shell.c +96 -0
- data/ext/gtk3/rbgtk-toolbar.c +118 -0
- data/ext/gtk3/rbgtk-tooltip-gdk-display.c +39 -0
- data/ext/gtk3/rbgtk-tooltip.c +100 -0
- data/ext/gtk3/rbgtk-tree-dragdest.c +28 -0
- data/ext/gtk3/rbgtk-tree-dragsource.c +28 -0
- data/ext/gtk3/rbgtk-tree-iter.c +258 -0
- data/ext/gtk3/rbgtk-tree-model.c +246 -0
- data/ext/gtk3/rbgtk-tree-modelfilter.c +197 -0
- data/ext/gtk3/rbgtk-tree-modelsort.c +111 -0
- data/ext/gtk3/rbgtk-tree-path.c +191 -0
- data/ext/gtk3/rbgtk-tree-rowreference.c +140 -0
- data/ext/gtk3/rbgtk-tree-selection.c +190 -0
- data/ext/gtk3/rbgtk-tree-sortable.c +122 -0
- data/ext/gtk3/rbgtk-tree-store.c +330 -0
- data/ext/gtk3/rbgtk-tree-view-column.c +256 -0
- data/ext/gtk3/rbgtk-tree-view.c +716 -0
- data/ext/gtk3/rbgtk-ui-manager.c +189 -0
- data/ext/gtk3/rbgtk-viewport.c +44 -0
- data/ext/gtk3/rbgtk-volume-button.c +41 -0
- data/ext/gtk3/rbgtk-widget-path.c +229 -0
- data/ext/gtk3/rbgtk-widget.c +1554 -0
- data/ext/gtk3/rbgtk-window-group.c +80 -0
- data/ext/gtk3/rbgtk-window.c +565 -0
- data/ext/gtk3/rbgtk.c +783 -0
- data/ext/gtk3/rbgtk3.h +90 -0
- data/ext/gtk3/rbgtk3conversions.h +439 -0
- data/ext/gtk3/rbgtk3private.h +300 -0
- data/ext/gtk3/rbgtk3util.c +67 -0
- data/ext/gtk3/rbgtk3util.h +32 -0
- data/extconf.rb +49 -0
- data/lib/2.0/gtk3.so +0 -0
- data/lib/2.1/gtk3.so +0 -0
- data/lib/2.2/gtk3.so +0 -0
- data/lib/gtk3.rb +11 -0
- data/lib/gtk3/base.rb +67 -0
- data/lib/gtk3/deprecated.rb +1004 -0
- data/sample/gtk-demo/README +7 -0
- data/sample/gtk-demo/alphatest.png +0 -0
- data/sample/gtk-demo/apple-red.png +0 -0
- data/sample/gtk-demo/appwindow.rb +233 -0
- data/sample/gtk-demo/background.jpg +0 -0
- data/sample/gtk-demo/builder.rb +51 -0
- data/sample/gtk-demo/button_box.rb +83 -0
- data/sample/gtk-demo/cairo-arc-negative.rb +41 -0
- data/sample/gtk-demo/cairo-arc.rb +41 -0
- data/sample/gtk-demo/cairo-clip-image.rb +51 -0
- data/sample/gtk-demo/cairo-clip-rectangle.rb +35 -0
- data/sample/gtk-demo/cairo-clip.rb +35 -0
- data/sample/gtk-demo/cairo-curve-rectangle.rb +76 -0
- data/sample/gtk-demo/cairo-curve-to.rb +43 -0
- data/sample/gtk-demo/cairo-dash.rb +39 -0
- data/sample/gtk-demo/cairo-fill-and-stroke.rb +32 -0
- data/sample/gtk-demo/cairo-fill-and-stroke2.rb +38 -0
- data/sample/gtk-demo/cairo-gradient.rb +35 -0
- data/sample/gtk-demo/cairo-image-pattern.rb +39 -0
- data/sample/gtk-demo/cairo-image.rb +49 -0
- data/sample/gtk-demo/cairo-line-cap.rb +53 -0
- data/sample/gtk-demo/cairo-line-join.rb +41 -0
- data/sample/gtk-demo/cairo-long-lines.rb +41 -0
- data/sample/gtk-demo/cairo-operator.rb +83 -0
- data/sample/gtk-demo/cairo-path.rb +28 -0
- data/sample/gtk-demo/cairo-pattern-fill.rb +88 -0
- data/sample/gtk-demo/cairo-self-intersect.rb +32 -0
- data/sample/gtk-demo/cairo-text-align-center.rb +45 -0
- data/sample/gtk-demo/cairo-text-extents.rb +46 -0
- data/sample/gtk-demo/cairo-text.rb +43 -0
- data/sample/gtk-demo/changedisplay.rb +407 -0
- data/sample/gtk-demo/clipboard.rb +67 -0
- data/sample/gtk-demo/colorsel.rb +82 -0
- data/sample/gtk-demo/common.rb +87 -0
- data/sample/gtk-demo/css_accordion.css +53 -0
- data/sample/gtk-demo/css_accordion.rb +75 -0
- data/sample/gtk-demo/demo.ui +258 -0
- data/sample/gtk-demo/dialog.rb +137 -0
- data/sample/gtk-demo/drawingarea.rb +205 -0
- data/sample/gtk-demo/editable_cells.rb +173 -0
- data/sample/gtk-demo/entry_completion.rb +63 -0
- data/sample/gtk-demo/expander.rb +42 -0
- data/sample/gtk-demo/floppybuddy.gif +0 -0
- data/sample/gtk-demo/gnome-applets.png +0 -0
- data/sample/gtk-demo/gnome-calendar.png +0 -0
- data/sample/gtk-demo/gnome-foot.png +0 -0
- data/sample/gtk-demo/gnome-fs-directory.png +0 -0
- data/sample/gtk-demo/gnome-fs-regular.png +0 -0
- data/sample/gtk-demo/gnome-gimp.png +0 -0
- data/sample/gtk-demo/gnome-gmush.png +0 -0
- data/sample/gtk-demo/gnome-gsame.png +0 -0
- data/sample/gtk-demo/gnu-keys.png +0 -0
- data/sample/gtk-demo/gtk-logo-rgb.gif +0 -0
- data/sample/gtk-demo/hypertext.rb +211 -0
- data/sample/gtk-demo/iconview.rb +110 -0
- data/sample/gtk-demo/images.rb +197 -0
- data/sample/gtk-demo/infobar.rb +78 -0
- data/sample/gtk-demo/item_factory.rb +94 -0
- data/sample/gtk-demo/links.rb +53 -0
- data/sample/gtk-demo/list_store.rb +138 -0
- data/sample/gtk-demo/main.rb +384 -0
- data/sample/gtk-demo/menus.rb +172 -0
- data/sample/gtk-demo/panes.rb +156 -0
- data/sample/gtk-demo/pixbufs.rb +167 -0
- data/sample/gtk-demo/printing.rb +128 -0
- data/sample/gtk-demo/reset.css +69 -0
- data/sample/gtk-demo/rotated_text.rb +72 -0
- data/sample/gtk-demo/ruby-gnome2-logo.png +0 -0
- data/sample/gtk-demo/sizegroup.rb +118 -0
- data/sample/gtk-demo/spinner.rb +59 -0
- data/sample/gtk-demo/stock_browser.rb +233 -0
- data/sample/gtk-demo/textview.rb +436 -0
- data/sample/gtk-demo/theming.ui +319 -0
- data/sample/gtk-demo/theming_style_classes.rb +48 -0
- data/sample/gtk-demo/tree_store.rb +270 -0
- data/sample/misc/aboutdialog.rb +42 -0
- data/sample/misc/aboutdialog2.rb +42 -0
- data/sample/misc/alpha-demo.rb +70 -0
- data/sample/misc/assistant.rb +281 -0
- data/sample/misc/bindings.rb +97 -0
- data/sample/misc/button.rb +72 -0
- data/sample/misc/button2.rb +28 -0
- data/sample/misc/buttonbox.rb +93 -0
- data/sample/misc/cairo-pong.rb +217 -0
- data/sample/misc/calendar.rb +66 -0
- data/sample/misc/checkbutton.rb +49 -0
- data/sample/misc/colorselection.rb +22 -0
- data/sample/misc/combo_check.rb +79 -0
- data/sample/misc/combobox.rb +85 -0
- data/sample/misc/composited-windows.rb +113 -0
- data/sample/misc/cursor.rb +34 -0
- data/sample/misc/dialog.rb +44 -0
- data/sample/misc/dialog2.rb +36 -0
- data/sample/misc/dnd.rb +64 -0
- data/sample/misc/dndtreeview.rb +56 -0
- data/sample/misc/drag-move.rb +139 -0
- data/sample/misc/drawing.rb +109 -0
- data/sample/misc/entry.rb +34 -0
- data/sample/misc/entrycompletion.rb +33 -0
- data/sample/misc/expander.rb +27 -0
- data/sample/misc/filechooser.rb +41 -0
- data/sample/misc/frame.rb +69 -0
- data/sample/misc/gdkscreen.rb +32 -0
- data/sample/misc/gnome-logo-icon.png +0 -0
- data/sample/misc/helloworld.rb +35 -0
- data/sample/misc/iconview.rb +38 -0
- data/sample/misc/image.rb +42 -0
- data/sample/misc/itemfactory.rb +73 -0
- data/sample/misc/itemfactory2.rb +74 -0
- data/sample/misc/keyboard_grab.rb +29 -0
- data/sample/misc/label.rb +33 -0
- data/sample/misc/linkbutton.rb +42 -0
- data/sample/misc/listview.rb +92 -0
- data/sample/misc/menu.rb +81 -0
- data/sample/misc/misc_button.rb +49 -0
- data/sample/misc/mouse-gesture.rb +465 -0
- data/sample/misc/pangorenderer.rb +66 -0
- data/sample/misc/pointer_grab.rb +34 -0
- data/sample/misc/print.rb +247 -0
- data/sample/misc/properties.rb +86 -0
- data/sample/misc/radiobutton.rb +47 -0
- data/sample/misc/recentchooserdialog.rb +52 -0
- data/sample/misc/rgtk+cairo.rb +42 -0
- data/sample/misc/scalebutton.rb +19 -0
- data/sample/misc/settings.rb +41 -0
- data/sample/misc/statusicon.rb +106 -0
- data/sample/misc/stock.rb +36 -0
- data/sample/misc/style_property.rb +67 -0
- data/sample/misc/style_property.rc +19 -0
- data/sample/misc/t-gtkplug.rb +58 -0
- data/sample/misc/t-gtksocket.rb +65 -0
- data/sample/misc/test.xpm +92 -0
- data/sample/misc/textbuffer_serialize.rb +130 -0
- data/sample/misc/threads.rb +70 -0
- data/sample/misc/to_drawable.rb +42 -0
- data/sample/misc/togglebutton.rb +34 -0
- data/sample/misc/toolbar.rb +55 -0
- data/sample/misc/tooltips.rb +204 -0
- data/sample/misc/tree_combo.rb +79 -0
- data/sample/misc/tree_progress.rb +61 -0
- data/sample/misc/treemodelfilter.rb +49 -0
- data/sample/misc/treeview.rb +71 -0
- data/sample/misc/uimanager.rb +148 -0
- data/sample/misc/uimanager2.rb +91 -0
- data/sample/misc/uimanager2.xml +36 -0
- data/sample/misc/window.rb +24 -0
- data/sample/misc/xbm_cursor.rb +43 -0
- data/sample/testgtk/3DRings.xpm +116 -0
- data/sample/testgtk/FilesQueue.xpm +98 -0
- data/sample/testgtk/Modeller.xpm +117 -0
- data/sample/testgtk/README +14 -0
- data/sample/testgtk/button.rb +124 -0
- data/sample/testgtk/buttonbox.rb +100 -0
- data/sample/testgtk/check-n.xpm +21 -0
- data/sample/testgtk/check-y.xpm +21 -0
- data/sample/testgtk/checkbutton.rb +67 -0
- data/sample/testgtk/circles.xbm +46 -0
- data/sample/testgtk/colorselect.rb +33 -0
- data/sample/testgtk/dialog.rb +48 -0
- data/sample/testgtk/entry.rb +73 -0
- data/sample/testgtk/filesel.rb +65 -0
- data/sample/testgtk/fontselection.rb +56 -0
- data/sample/testgtk/labels.rb +74 -0
- data/sample/testgtk/layout.rb +108 -0
- data/sample/testgtk/marble.xpm +408 -0
- data/sample/testgtk/menu.rb +79 -0
- data/sample/testgtk/notebook.rb +280 -0
- data/sample/testgtk/pixmap.rb +58 -0
- data/sample/testgtk/progressbar.rb +173 -0
- data/sample/testgtk/radiobutton.rb +61 -0
- data/sample/testgtk/range.rb +65 -0
- data/sample/testgtk/reparent.rb +91 -0
- data/sample/testgtk/sample.rb +80 -0
- data/sample/testgtk/savedposition.rb +87 -0
- data/sample/testgtk/scrolledwindow.rb +67 -0
- data/sample/testgtk/shapedwindow.rb +99 -0
- data/sample/testgtk/spinbutton.rb +181 -0
- data/sample/testgtk/statusbar.rb +89 -0
- data/sample/testgtk/test.xpm +92 -0
- data/sample/testgtk/testgtk.rb +176 -0
- data/sample/testgtk/testgtkrc +146 -0
- data/sample/testgtk/testgtkrc2 +21 -0
- data/sample/testgtk/togglebutton.rb +53 -0
- data/sample/testgtk/toolbar.rb +82 -0
- data/sample/testgtk/tooltips.rb +41 -0
- data/sample/testgtk/wmhints.rb +40 -0
- data/test/gtk-test-utils.rb +15 -0
- data/test/run-test.rb +58 -0
- data/test/test_gc.rb +22 -0
- data/test/test_gtk.rb +23 -0
- data/test/test_gtk_about_dialog.rb +13 -0
- data/test/test_gtk_accel_group_entry.rb +24 -0
- data/test/test_gtk_accel_key.rb +24 -0
- data/test/test_gtk_accessible.rb +31 -0
- data/test/test_gtk_action_group.rb +46 -0
- data/test/test_gtk_allocation.rb +24 -0
- data/test/test_gtk_border.rb +24 -0
- data/test/test_gtk_buildable.rb +56 -0
- data/test/test_gtk_builder.rb +166 -0
- data/test/test_gtk_container.rb +32 -0
- data/test/test_gtk_css_provider.rb +27 -0
- data/test/test_gtk_entry.rb +52 -0
- data/test/test_gtk_header_bar.rb +66 -0
- data/test/test_gtk_icon_theme.rb +31 -0
- data/test/test_gtk_icon_view.rb +41 -0
- data/test/test_gtk_image.rb +8 -0
- data/test/test_gtk_level_bar.rb +82 -0
- data/test/test_gtk_list_store.rb +105 -0
- data/test/test_gtk_menu_button.rb +49 -0
- data/test/test_gtk_menu_item.rb +13 -0
- data/test/test_gtk_recent_data.rb +24 -0
- data/test/test_gtk_recent_filter_info.rb +26 -0
- data/test/test_gtk_revealer.rb +57 -0
- data/test/test_gtk_search_bar.rb +55 -0
- data/test/test_gtk_search_entry.rb +34 -0
- data/test/test_gtk_stack.rb +115 -0
- data/test/test_gtk_stack_switcher.rb +30 -0
- data/test/test_gtk_style_context.rb +30 -0
- data/test/test_gtk_style_properties.rb +38 -0
- data/test/test_gtk_tree_path.rb +20 -0
- data/test/test_gtk_tree_selection.rb +31 -0
- data/test/test_gtk_unix_print.rb +14 -0
- data/test/test_gtk_widget.rb +24 -0
- metadata +582 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
# Copyright (c) 2005 Ruby-GNOME2 Project Team
|
2
|
+
# This program is licenced under the same licence as Ruby-GNOME2.
|
3
|
+
#
|
4
|
+
# $Id: cairo-text.rb,v 1.1 2005/10/12 05:38:30 ktou Exp $
|
5
|
+
=begin
|
6
|
+
= cairo/Text
|
7
|
+
|
8
|
+
This demo shows how to use GDK and cairo to show text.
|
9
|
+
From http://cairographics.org/samples/text.html.
|
10
|
+
=end
|
11
|
+
require 'common'
|
12
|
+
|
13
|
+
module Demo
|
14
|
+
class CairoText < CairoWindow
|
15
|
+
def initialize
|
16
|
+
super('cairo text')
|
17
|
+
end
|
18
|
+
|
19
|
+
def draw(cr)
|
20
|
+
cr.select_font_face("Sans",
|
21
|
+
Cairo::FONT_SLANT_NORMAL,
|
22
|
+
Cairo::FONT_WEIGHT_BOLD)
|
23
|
+
cr.set_font_size(0.35)
|
24
|
+
|
25
|
+
cr.move_to(0.04, 0.53)
|
26
|
+
cr.show_text("Hello")
|
27
|
+
|
28
|
+
cr.move_to(0.27, 0.65)
|
29
|
+
cr.text_path("void")
|
30
|
+
cr.set_source_rgba(0.5, 0.5, 1)
|
31
|
+
cr.fill_preserve
|
32
|
+
cr.set_source_rgba(0, 0, 0)
|
33
|
+
cr.set_line_width(0.01)
|
34
|
+
cr.stroke
|
35
|
+
|
36
|
+
# draw helping lines
|
37
|
+
cr.set_source_rgba(1,0.2,0.2, 0.6)
|
38
|
+
cr.arc(0.04, 0.53, 0.02, 0, 2 * Math::PI)
|
39
|
+
cr.arc(0.27, 0.65, 0.02, 0, 2 * Math::PI)
|
40
|
+
cr.fill
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,407 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
|
4
|
+
# This program is licenced under the same licence as Ruby-GNOME2.
|
5
|
+
#
|
6
|
+
# $Id: changedisplay.rb,v 1.6 2005/07/30 11:22:15 mutoh Exp $
|
7
|
+
=begin
|
8
|
+
= Change Display
|
9
|
+
|
10
|
+
Demonstrates migrating a window between different displays and
|
11
|
+
screens. A display is a mouse and keyboard with some number of
|
12
|
+
associated monitors. A screen is a set of monitors grouped
|
13
|
+
into a single physical work area. The neat thing about having
|
14
|
+
multiple displays is that they can be on a completely separate
|
15
|
+
computers, as long as there is a network connection to the
|
16
|
+
computer where the application is running.
|
17
|
+
|
18
|
+
Only some of the windowing systems where GTK+ runs have the
|
19
|
+
concept of multiple displays and screens. (The X Window System
|
20
|
+
is the main example.) Other windowing systems can only
|
21
|
+
handle one keyboard and mouse, and combine all monitors into
|
22
|
+
a single screen.
|
23
|
+
|
24
|
+
This is a moderately complex example, and demonstrates:
|
25
|
+
|
26
|
+
- Tracking the currently open displays and screens
|
27
|
+
|
28
|
+
- Changing the screen for a window
|
29
|
+
|
30
|
+
- Letting the user choose a window by clicking on it
|
31
|
+
|
32
|
+
- Using Gtk::ListStore and Gtk::TreeView
|
33
|
+
|
34
|
+
- Using Gtk::Dialog
|
35
|
+
=end
|
36
|
+
|
37
|
+
require 'common'
|
38
|
+
|
39
|
+
module Demo
|
40
|
+
class ChangeDisplay < Gtk::Dialog
|
41
|
+
# These enumerations provide symbolic names for the columns
|
42
|
+
# in the two GtkListStore models.
|
43
|
+
DISPLAY_COLUMN_NAME, DISPLAY_COLUMN_DISPLAY = 0, 1
|
44
|
+
SCREEN_COLUMN_NUMBER, SCREEN_COLUMN_SCREEN = 0, 1
|
45
|
+
|
46
|
+
# Main entry point. If the dialog for this demo doesn't yet exist, creates
|
47
|
+
# it. Otherwise, destroys it.
|
48
|
+
def initialize
|
49
|
+
@size_group = nil
|
50
|
+
|
51
|
+
@display_model = nil
|
52
|
+
@screen_model = nil
|
53
|
+
|
54
|
+
@screen_selection = nil
|
55
|
+
|
56
|
+
@current_display = nil
|
57
|
+
@current_screen = nil
|
58
|
+
|
59
|
+
super(
|
60
|
+
:title => 'Change Screen or display',
|
61
|
+
:buttons => [
|
62
|
+
[:close, :close],
|
63
|
+
['Change', :ok]
|
64
|
+
]
|
65
|
+
)
|
66
|
+
|
67
|
+
set_default_size(300, 400)
|
68
|
+
signal_connect('response') do |dialog, response_id|
|
69
|
+
if response_id == Gtk::ResponseType::OK
|
70
|
+
query_change_display
|
71
|
+
else
|
72
|
+
destroy
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
vbox = Gtk::Box.new(:vertical, 5)
|
77
|
+
vbox.set_border_width(8)
|
78
|
+
|
79
|
+
self.child.pack_start(vbox, :expand => true, :fill => true)
|
80
|
+
|
81
|
+
@size_group = Gtk::SizeGroup.new(:horizontal)
|
82
|
+
|
83
|
+
frame = create_display_frame
|
84
|
+
vbox.pack_start(frame, :expand => true, :fill => true)
|
85
|
+
|
86
|
+
frame = create_screen_frame
|
87
|
+
vbox.pack_start(frame, :expand => true, :fill => true)
|
88
|
+
|
89
|
+
initialize_displays
|
90
|
+
end
|
91
|
+
|
92
|
+
# Adds all currently open displays to our list of displays,
|
93
|
+
# and set up a signal connection so that we'll be notified
|
94
|
+
# when displays are opened in the future as well.
|
95
|
+
def initialize_displays
|
96
|
+
manager = Gdk::DisplayManager.get
|
97
|
+
|
98
|
+
manager.displays.each do |display|
|
99
|
+
add_display(display)
|
100
|
+
end
|
101
|
+
|
102
|
+
handler_id = manager.signal_connect('display_opened') do |display|
|
103
|
+
add_display(display)
|
104
|
+
end
|
105
|
+
signal_connect('destroy') do
|
106
|
+
manager.signal_handler_disconnect(handler_id)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Fills in the screen list based on the current display
|
111
|
+
def fill_screens
|
112
|
+
@screen_model.clear
|
113
|
+
|
114
|
+
if @current_display
|
115
|
+
n_screens = @current_display.n_screens
|
116
|
+
|
117
|
+
n_screens.times do |i|
|
118
|
+
iter = @screen_model.append
|
119
|
+
iter.set_value(SCREEN_COLUMN_NUMBER, i)
|
120
|
+
iter.set_value(SCREEN_COLUMN_SCREEN, @current_display.get_screen(i))
|
121
|
+
|
122
|
+
if i == 0
|
123
|
+
@screen_selection.select_iter(iter)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# Creates the 'Display' frame in the main window.
|
130
|
+
def create_display_frame
|
131
|
+
frame, tree_view, button_vbox = create_frame('Display')
|
132
|
+
|
133
|
+
button = left_align_button_new('_Open…')
|
134
|
+
button.signal_connect('clicked') do
|
135
|
+
open_display_cb
|
136
|
+
end
|
137
|
+
button_vbox.pack_start(button, :expand => false, :fill => false, :padding => 0)
|
138
|
+
|
139
|
+
button = left_align_button_new('_Close')
|
140
|
+
button.signal_connect('clicked') do
|
141
|
+
if @current_display
|
142
|
+
@current_display.close
|
143
|
+
end
|
144
|
+
end
|
145
|
+
button_vbox.pack_start(button, :expand => false, :fill => false, :padding => 0)
|
146
|
+
|
147
|
+
@display_model = Gtk::ListStore.new(String, Gdk::Display)
|
148
|
+
tree_view.model = @display_model
|
149
|
+
|
150
|
+
column = Gtk::TreeViewColumn.new('Name',
|
151
|
+
Gtk::CellRendererText.new,
|
152
|
+
{'text' => DISPLAY_COLUMN_NAME})
|
153
|
+
tree_view.append_column(column)
|
154
|
+
|
155
|
+
selection = tree_view.selection
|
156
|
+
selection.signal_connect('changed') do
|
157
|
+
display_changed_cb(selection)
|
158
|
+
end
|
159
|
+
|
160
|
+
return frame
|
161
|
+
end
|
162
|
+
|
163
|
+
# Creates the 'Screen' frame in the main window.
|
164
|
+
def create_screen_frame
|
165
|
+
frame, tree_view, button_vbox = create_frame('Screen')
|
166
|
+
|
167
|
+
@screen_model = Gtk::ListStore.new(Integer, Gdk::Screen)
|
168
|
+
tree_view.model = @screen_model
|
169
|
+
|
170
|
+
column = Gtk::TreeViewColumn.new('Number',
|
171
|
+
Gtk::CellRendererText.new,
|
172
|
+
{'text' => SCREEN_COLUMN_NUMBER})
|
173
|
+
tree_view.append_column(column)
|
174
|
+
|
175
|
+
@screen_selection = tree_view.selection
|
176
|
+
@screen_selection.signal_connect('changed') do |selection|
|
177
|
+
@current_screen = if iter = selection.selected
|
178
|
+
iter.get_value(SCREEN_COLUMN_SCREEN)
|
179
|
+
else
|
180
|
+
nil
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
return frame
|
185
|
+
end
|
186
|
+
|
187
|
+
# This function is used both for creating the 'Display' and
|
188
|
+
# 'Screen' frames, since they have a similar structure. The
|
189
|
+
# caller hooks up the right context for the value returned
|
190
|
+
# in tree_view, and packs any relevant buttons into button_vbox.
|
191
|
+
def create_frame(title)
|
192
|
+
frame = Gtk::Frame.new(title)
|
193
|
+
|
194
|
+
hbox = Gtk::Box.new(:horizontal, 8)
|
195
|
+
hbox.set_border_width(8)
|
196
|
+
frame.add(hbox)
|
197
|
+
|
198
|
+
scrollwin = Gtk::ScrolledWindow.new
|
199
|
+
scrollwin.set_policy(:never, :automatic)
|
200
|
+
scrollwin.shadow_type = :in
|
201
|
+
hbox.pack_start(scrollwin, :expand => true, :fill => true)
|
202
|
+
|
203
|
+
tree_view = Gtk::TreeView.new
|
204
|
+
tree_view.headers_visible = false
|
205
|
+
scrollwin.add(tree_view)
|
206
|
+
|
207
|
+
selection = tree_view.selection
|
208
|
+
selection.mode = :browse
|
209
|
+
|
210
|
+
button_vbox = Gtk::Box.new(:vertical, 5)
|
211
|
+
hbox.pack_start(button_vbox, :expand => false, :fill => false)
|
212
|
+
|
213
|
+
@size_group.add_widget(button_vbox)
|
214
|
+
|
215
|
+
return frame, tree_view, button_vbox
|
216
|
+
end
|
217
|
+
|
218
|
+
# If we have a stack of buttons, it often looks better if their contents
|
219
|
+
# are left-aligned, rather than centered. This function creates a button
|
220
|
+
# and left-aligns it contents.
|
221
|
+
def left_align_button_new(label)
|
222
|
+
button = Gtk::Button.new(:mnemonic => label)
|
223
|
+
button.child.set_alignment(0.0, 0.5)
|
224
|
+
|
225
|
+
return button
|
226
|
+
end
|
227
|
+
|
228
|
+
|
229
|
+
# Prompts the user for a toplevel window to move, and then moves
|
230
|
+
# that window to the currently selected display
|
231
|
+
def query_change_display
|
232
|
+
screen = self.screen
|
233
|
+
|
234
|
+
toplevel = query_for_toplevel(screen,
|
235
|
+
"Please select the toplevel\n"+
|
236
|
+
"to move to the new screen")
|
237
|
+
|
238
|
+
if toplevel
|
239
|
+
toplevel.screen = @current_screen
|
240
|
+
else
|
241
|
+
screen.display.beep
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
# Asks the user to click on a window, then waits for them click
|
246
|
+
# the mouse. When the mouse is released, returns the toplevel
|
247
|
+
# window under the pointer, or nil, if there is none.
|
248
|
+
def query_for_toplevel(screen, prompt)
|
249
|
+
toplevel = nil
|
250
|
+
|
251
|
+
display = screen.display
|
252
|
+
|
253
|
+
popup = Gtk::Window.new(:popup)
|
254
|
+
popup.screen = screen
|
255
|
+
popup.modal = true
|
256
|
+
popup.window_position = :center
|
257
|
+
|
258
|
+
frame = Gtk::Frame.new
|
259
|
+
frame.set_shadow_type(:out)
|
260
|
+
popup.add(frame)
|
261
|
+
|
262
|
+
label = Gtk::Label.new(prompt)
|
263
|
+
label.set_padding(10, 10)
|
264
|
+
frame.add(label)
|
265
|
+
|
266
|
+
popup.show_all
|
267
|
+
|
268
|
+
# TODO: Gdk::Cursor.new(screen.display, Gdk::Cursor::CROSSHAIR)
|
269
|
+
cursor = Gdk::Cursor.new(:crosshair)
|
270
|
+
|
271
|
+
if Gdk::pointer_grab(
|
272
|
+
popup.window,
|
273
|
+
false,
|
274
|
+
:button_release_mask,
|
275
|
+
nil,
|
276
|
+
cursor,
|
277
|
+
Gdk::Event::CURRENT_TIME
|
278
|
+
) == Gdk::GRAB_SUCCESS
|
279
|
+
clicked = false
|
280
|
+
|
281
|
+
popup.signal_connect('button-release-event') do
|
282
|
+
clicked = true
|
283
|
+
end
|
284
|
+
|
285
|
+
# Process events until clicked is set by button_release_event_cb.
|
286
|
+
# We pass in may_block = true since we want to wait if there
|
287
|
+
# are no events currently.
|
288
|
+
until clicked
|
289
|
+
Gtk.main_iteration # TODO: GLib::main_context_iteration(nil, true)
|
290
|
+
|
291
|
+
toplevel = find_toplevel_at_pointer(screen.display)
|
292
|
+
if toplevel == popup
|
293
|
+
toplevel = nil
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
297
|
+
popup.destroy
|
298
|
+
Gdk.flush # Really release the grab
|
299
|
+
|
300
|
+
return toplevel
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
# Finds the toplevel window under the mouse pointer, if any.
|
305
|
+
def find_toplevel_at_pointer(display)
|
306
|
+
pointer_window, x, y = display.window_at_pointer
|
307
|
+
|
308
|
+
# The user data field of a GdkWindow is used to store a pointer
|
309
|
+
# to the widget that created it.
|
310
|
+
if pointer_window
|
311
|
+
widget = pointer_window.user_data
|
312
|
+
end
|
313
|
+
|
314
|
+
return (if widget
|
315
|
+
widget.toplevel
|
316
|
+
else
|
317
|
+
nil
|
318
|
+
end)
|
319
|
+
end
|
320
|
+
|
321
|
+
# Called when the user clicks on 'Open...' in the display
|
322
|
+
# frame. Prompts for a new display, and then opens a connection
|
323
|
+
# to that display.
|
324
|
+
def open_display_cb
|
325
|
+
dialog = Gtk::Dialog.new(
|
326
|
+
:title => 'Open Display',
|
327
|
+
:parent => self,
|
328
|
+
:flags => :modal,
|
329
|
+
:buttons => [
|
330
|
+
[:cancel, :cancel],
|
331
|
+
[:ok, :ok]
|
332
|
+
]
|
333
|
+
)
|
334
|
+
|
335
|
+
dialog.default_response = Gtk::ResponseType::OK
|
336
|
+
display_entry = Gtk::Entry.new
|
337
|
+
display_entry.activates_default = true
|
338
|
+
dialog_label =
|
339
|
+
Gtk::Label.new("Please enter the name of\nthe new display\n")
|
340
|
+
|
341
|
+
dialog.child.add(dialog_label)
|
342
|
+
dialog.child.add(display_entry)
|
343
|
+
|
344
|
+
display_entry.grab_focus
|
345
|
+
dialog.child.show_all
|
346
|
+
|
347
|
+
result = nil
|
348
|
+
until result
|
349
|
+
response_id = dialog.run
|
350
|
+
break if response_id != Gtk::ResponseType::OK
|
351
|
+
|
352
|
+
new_screen_name = display_entry.text
|
353
|
+
|
354
|
+
unless new_screen_name.empty?
|
355
|
+
begin
|
356
|
+
result = Gdk::Dispaly.open(new_screen_name)
|
357
|
+
rescue
|
358
|
+
dialog_label.text = "Can't open display :\n\t%s\nplease try another one\n" % [new_screen_name]
|
359
|
+
end
|
360
|
+
end
|
361
|
+
end
|
362
|
+
dialog.destroy
|
363
|
+
end
|
364
|
+
|
365
|
+
# Called when the selected row in the display list changes.
|
366
|
+
# Updates info.current_display, then refills the list of
|
367
|
+
# screens.
|
368
|
+
def display_changed_cb(selection)
|
369
|
+
@current_display =
|
370
|
+
if iter = selection.selected
|
371
|
+
iter.get_value(DISPLAY_COLUMN_DISPLAY)
|
372
|
+
else
|
373
|
+
nil
|
374
|
+
end
|
375
|
+
fill_screens
|
376
|
+
end
|
377
|
+
|
378
|
+
# Adds a new display to our list of displays, and connects
|
379
|
+
# to the 'closed' signal so that we can remove it from the
|
380
|
+
# list of displays again.
|
381
|
+
def add_display(display)
|
382
|
+
iter = @display_model.append
|
383
|
+
iter.set_value(DISPLAY_COLUMN_NAME, display.name)
|
384
|
+
iter.set_value(DISPLAY_COLUMN_DISPLAY, display)
|
385
|
+
|
386
|
+
handler_id = display.signal_connect('closed') do
|
387
|
+
display_closed_cb(display)
|
388
|
+
end
|
389
|
+
|
390
|
+
signal_connect('destroy') do
|
391
|
+
display.signal_handler_disconnect(handler_id)
|
392
|
+
end
|
393
|
+
end
|
394
|
+
|
395
|
+
# Called when one of the currently open displays is closed.
|
396
|
+
# Remove it from our list of displays.
|
397
|
+
def display_closed_cb(display)
|
398
|
+
@display_model.each do |model, path, iter|
|
399
|
+
tmp_display = iter.get_value( DISPLAY_COLUMN_DISPLAY)
|
400
|
+
if tmp_display == display
|
401
|
+
@display_model.remove(iter)
|
402
|
+
break
|
403
|
+
end
|
404
|
+
end
|
405
|
+
end
|
406
|
+
end
|
407
|
+
end
|