Module: Tk
- Defined in:
- lib/ffi-tk/widget/tile.rb,
lib/ffi-tk.rb,
lib/ffi-tk.rb,
lib/ffi-tk/tk.rb,
lib/ffi-tk/widget.rb,
lib/ffi-tk/command.rb,
lib/ffi-tk/geometry.rb,
lib/ffi-tk/variable.rb,
lib/ffi-tk/command/wm.rb,
lib/ffi-tk/event/data.rb,
lib/ffi-tk/widget/menu.rb,
lib/ffi-tk/widget/root.rb,
lib/ffi-tk/widget/text.rb,
lib/ffi-tk/command/bell.rb,
lib/ffi-tk/command/bind.rb,
lib/ffi-tk/command/cget.rb,
lib/ffi-tk/command/font.rb,
lib/ffi-tk/command/grab.rb,
lib/ffi-tk/command/grid.rb,
lib/ffi-tk/command/pack.rb,
lib/ffi-tk/command/vars.rb,
lib/ffi-tk/command/wait.rb,
lib/ffi-tk/widget/entry.rb,
lib/ffi-tk/widget/frame.rb,
lib/ffi-tk/widget/label.rb,
lib/ffi-tk/widget/scale.rb,
lib/ffi-tk/command/after.rb,
lib/ffi-tk/command/event.rb,
lib/ffi-tk/command/focus.rb,
lib/ffi-tk/command/image.rb,
lib/ffi-tk/command/lower.rb,
lib/ffi-tk/command/place.rb,
lib/ffi-tk/command/popup.rb,
lib/ffi-tk/command/raise.rb,
lib/ffi-tk/command/winfo.rb,
lib/ffi-tk/event/handler.rb,
lib/ffi-tk/widget/button.rb,
lib/ffi-tk/widget/canvas.rb,
lib/ffi-tk/command/dialog.rb,
lib/ffi-tk/command/tk_cmd.rb,
lib/ffi-tk/widget/listbox.rb,
lib/ffi-tk/widget/message.rb,
lib/ffi-tk/widget/spinbox.rb,
lib/ffi-tk/command/destroy.rb,
lib/ffi-tk/core_extensions.rb,
lib/ffi-tk/widget/toplevel.rb,
lib/ffi-tk/command/bindtags.rb,
lib/ffi-tk/widget/scrollbar.rb,
lib/ffi-tk/widget/text/peer.rb,
lib/ffi-tk/command/clipboard.rb,
lib/ffi-tk/command/configure.rb,
lib/ffi-tk/command/selection.rb,
lib/ffi-tk/widget/canvas/arc.rb,
lib/ffi-tk/widget/labelframe.rb,
lib/ffi-tk/widget/menubutton.rb,
lib/ffi-tk/widget/tile/entry.rb,
lib/ffi-tk/widget/tile/frame.rb,
lib/ffi-tk/widget/tile/label.rb,
lib/ffi-tk/widget/tile/scale.rb,
lib/ffi-tk/widget/tile/style.rb,
lib/ffi-tk/command/scrollable.rb,
lib/ffi-tk/widget/canvas/item.rb,
lib/ffi-tk/widget/canvas/line.rb,
lib/ffi-tk/widget/canvas/oval.rb,
lib/ffi-tk/widget/canvas/text.rb,
lib/ffi-tk/widget/checkbutton.rb,
lib/ffi-tk/widget/panedwindow.rb,
lib/ffi-tk/widget/radiobutton.rb,
lib/ffi-tk/widget/tile/button.rb,
lib/ffi-tk/command/message_box.rb,
lib/ffi-tk/command/option_menu.rb,
lib/ffi-tk/command/set_palette.rb,
lib/ffi-tk/widget/canvas/image.rb,
lib/ffi-tk/command/choose_color.rb,
lib/ffi-tk/widget/canvas/bitmap.rb,
lib/ffi-tk/widget/canvas/window.rb,
lib/ffi-tk/widget/tile/combobox.rb,
lib/ffi-tk/widget/tile/notebook.rb,
lib/ffi-tk/widget/tile/sizegrip.rb,
lib/ffi-tk/widget/tile/treeview.rb,
lib/ffi-tk/command/get_open_file.rb,
lib/ffi-tk/command/get_save_file.rb,
lib/ffi-tk/widget/canvas/polygon.rb,
lib/ffi-tk/widget/tile/scrollbar.rb,
lib/ffi-tk/widget/tile/separator.rb,
lib/ffi-tk/widget/tile/labelframe.rb,
lib/ffi-tk/widget/tile/menubutton.rb,
lib/ffi-tk/widget/canvas/rectangle.rb,
lib/ffi-tk/widget/tile/checkbutton.rb,
lib/ffi-tk/widget/tile/panedwindow.rb,
lib/ffi-tk/widget/tile/progressbar.rb,
lib/ffi-tk/widget/tile/radiobutton.rb,
lib/ffi-tk/command/choose_directory.rb
Overview
Manipulate Tk internal state
Defined Under Namespace
Modules: After, Bell, Bind, Bindtags, Cget, Clipboard, Configure, CoreExtensions, Destroy, Event, Focus, Grab, Grid, Image, Lower, Pack, Place, Raise, Scrollable, Selection, Tile, TkCmd, WM, Wait, Winfo Classes: BindTag, Button, Canvas, CheckButton, Entry, Font, Frame, Label, LabelFrame, Listbox, Menu, MenuButton, Message, PanedWindow, RadioButton, Root, Scale, Scrollbar, Spinbox, TclString, Text, TkGeometry, Toplevel, Variable, Widget
Constant Summary collapse
- TCL_LIBPATH =
ENV['TCL_LIBPATH'].to_s.split(':')
- TK_LIBPATH =
ENV[ 'TK_LIBPATH'].to_s.split(':')
- RUN_EVENTLOOP_ON_MAIN_THREAD =
In some cases Tk has trouble running, this seems to happen on windows and OSX/TkAqua mostly. In these cases please use:
module Tk; RUN_EVENTLOOP_ON_MAIN_THREAD = true; end
before you require ‘tk’
false
- DONT_WAIT =
1 << 1
- WINDOW_EVENTS =
1 << 2
- FILE_EVENTS =
1 << 3
- TIMER_EVENTS =
1 << 4
- IDLE_EVENTS =
1 << 5
- ALL_EVENTS =
~DONT_WAIT
- OK =
0
- ERROR =
1
- RETURN =
2
- BREAK =
3
- CONTINUE =
4
- Error =
Class.new(RuntimeError)
- None =
Object.new
- TCL_DELETE =
method(:tcl_delete)
- TCL_CALLBACK =
method(:tcl_callback)
- TCL_EVENT =
method(:tcl_event)
Class Attribute Summary collapse
-
.callbacks ⇒ Object
readonly
Returns the value of attribute callbacks.
-
.widgets ⇒ Object
readonly
Returns the value of attribute widgets.
Class Method Summary collapse
- .boolean(obj) ⇒ Object
- .callback_break ⇒ Object
- .callback_continue ⇒ Object
-
.choose_color(options = None) ⇒ Object
Pops up a dialog box for the user to select a color.
-
.choose_directory(options = None) ⇒ Object
Pops up a dialog box for the user to select a directory.
- .convert_arguments(*args) ⇒ Object
-
.dialog(window, title, text, bitmap, default, *answers) ⇒ Object
Create modal dialog and wait for response.
- .eval(string) ⇒ Object
- .execute(*args) ⇒ Object
- .execute_only(*args) ⇒ Object
- .exit ⇒ Object
-
.get_open_file(options = None) ⇒ Object
Pop up a dialog box for the user to select a file to open.
-
.get_save_file(options = None) ⇒ Object
Pop up a dialog box for the user to select a file to save.
- .handle_callback(id, *args) ⇒ Object
- .init ⇒ Object
-
.interp ⇒ Object
A little something so people don’t have to call Tk.init.
-
.library ⇒ Object
This variable holds the file name for a directory containing a library of Tcl scripts related to Tk.
- .library=(new_library) ⇒ Object
- .mainloop ⇒ Object
-
.message_box(options = None) ⇒ Object
Pops up a message window and waits for user response.
- .option_menu(pathname, *values) ⇒ Object
-
.patchlevel ⇒ Object
Contains a decimal integer giving the current patch level for Tk.
- .pathname_to_widget(pathname) ⇒ Object
-
.popup(menu, x, y, entry = None) ⇒ Object
This procedure posts a menu at a given position on the screen and configures Tk so that the menu and its cascaded children can be traversed with the mouse or the keyboard.
- .register_object(parent, object) ⇒ Object
- .register_proc(proc, argument_string = '') ⇒ Object
- .result ⇒ Object
-
.root ⇒ Object
A little something so people don’t have to call Tk.init.
- .set_palette(background, *rest) ⇒ Object
- .stop ⇒ Object
-
.strict_motif ⇒ Object
This variable is set to zero by default.
- .strict_motif=(new_value) ⇒ Object
-
.tcl_callback(client_data, interp, objc, objv) ⇒ Object
TODO: support for break and continue return status (by catch/throw) 1 means true, 0 means false.
- .tcl_cmd_args(interp, objc, objv) ⇒ Object
-
.tcl_delete(client_data) ⇒ Object
without our callbacks, nothing goes anymore, abort mission.
-
.tcl_event(client_data, interp, objc, objv) ⇒ Object
TODO: support for break and continue return status (by catch/throw).
-
.text_redraw ⇒ Object
These variables are set by text widgets when they have debugging turned on.
- .text_relayout ⇒ Object
- .unregister_object(object) ⇒ Object
- .unregister_objects(*objects) ⇒ Object
- .unregister_proc(id) ⇒ Object
- .update(idletasks = None) ⇒ Object
- .uuid(name) ⇒ Object
-
.version ⇒ Object
Tk sets this variable in the interpreter for each application.
Class Attribute Details
.callbacks ⇒ Object (readonly)
Returns the value of attribute callbacks.
12 13 14 |
# File 'lib/ffi-tk/tk.rb', line 12 def callbacks @callbacks end |
.widgets ⇒ Object (readonly)
Returns the value of attribute widgets.
12 13 14 |
# File 'lib/ffi-tk/tk.rb', line 12 def @widgets end |
Class Method Details
.boolean(obj) ⇒ Object
205 206 207 208 209 |
# File 'lib/ffi-tk/tk.rb', line 205 def boolean(obj) boolean_pointer = FFI::MemoryPointer.new(:int) FFI::Tcl.get_boolean(interp, obj.to_s, boolean_pointer) boolean_pointer.get_int(0) == 1 end |
.callback_break ⇒ Object
90 91 92 |
# File 'lib/ffi-tk/tk.rb', line 90 def callback_break throw :callback_break end |
.callback_continue ⇒ Object
94 95 96 |
# File 'lib/ffi-tk/tk.rb', line 94 def callback_continue throw :callback_continue end |
.choose_color(options = None) ⇒ Object
Pops up a dialog box for the user to select a color.
If the user selects a color, this method will return the name of the color. If the user cancels the dialog, nil will be returned.
The following options are possible:
initialcolor: color
Specifies the color to display in the dialog.
parent: window
Makes window the logical parent of the color dialog.
The dialog is displayed on top of its parent window.
title: string
Specifies a string to display as the title of the dialog box.
If this option is not specified, then a default title will be displayed.
26 27 28 |
# File 'lib/ffi-tk/command/choose_color.rb', line 26 def choose_color( = None) Tk.execute(:tk_chooseColor, .).to_s? end |
.choose_directory(options = None) ⇒ Object
Pops up a dialog box for the user to select a directory.
The following options are possible:
initialdir: dirname
Specifies that the directories in directory should be displayed when the
dialog pops up.
If this parameter is not specified, then the directories in the current
working directory are displayed.
If the parameter specifies a relative path, the return value will
convert the relative path to an absolute path.
mustexist: boolean
Specifies whether the user may specify non-existent directories.
If this parameter is true, then the user may only select directories
that already exist.
The default value is false.
parent: window
Makes window the logical parent of the dialog.
The dialog is displayed on top of its parent window.
On Mac OS X, this turns the file dialog into a sheet attached to the
parent window.
title: string
Specifies a string to display as the title of the
dialog box.
If this option is not specified, then a default title will be displayed.
42 43 44 |
# File 'lib/ffi-tk/command/choose_directory.rb', line 42 def choose_directory( = None) Tk.execute(:tk_chooseDirectory, .).to_s? end |
.convert_arguments(*args) ⇒ Object
211 212 213 |
# File 'lib/ffi-tk/tk.rb', line 211 def convert_arguments(*args) args.map(&:to_tcl).compact.join(' ') end |
.dialog(window, title, text, bitmap, default, *answers) ⇒ Object
Create modal dialog and wait for response
After creating a dialog box, [dialog] waits for the user to select one of the buttons either by clicking on the button with the mouse or by typing return to invoke the default button (if any).
Then it returns the index of the selected button: 0 for the leftmost button, 1 for the button next to it, and so on. If the dialog’s window is destroyed before the user selects one of the buttons, then nil is returned.
While waiting for the user to respond, [dialog] sets a local grab. This prevents the user from interacting with the application in any way except to invoke the dialog box.
49 50 51 52 53 |
# File 'lib/ffi-tk/command/dialog.rb', line 49 def dialog(window, title, text, bitmap, default, *answers) answer = Tk.execute(:tk_dialog, window, title, text, bitmap, default, *answers).to_i return answer unless answer == -1 end |
.eval(string) ⇒ Object
65 66 67 |
# File 'lib/ffi-tk/tk.rb', line 65 def eval(string) interp.eval(string) end |
.execute(*args) ⇒ Object
73 74 75 76 |
# File 'lib/ffi-tk/tk.rb', line 73 def execute(*args) interp.eval(convert_arguments(*args)) result end |
.execute_only(*args) ⇒ Object
69 70 71 |
# File 'lib/ffi-tk/tk.rb', line 69 def execute_only(*args) interp.eval(convert_arguments(*args)) end |
.exit ⇒ Object
82 83 84 |
# File 'lib/ffi-tk/tk.rb', line 82 def exit execute('exit') end |
.get_open_file(options = None) ⇒ Object
Pop up a dialog box for the user to select a file to open.
This method is usually associated with the “Open” command in the “File” menu. Its purpose is for the user to select an existing file only. If the user enters a non-existing file, the dialog box gives the user an error prompt and requires the user to give an alternative selection. If an application allows the user to create new files, it should do so by providing a separate “New” command in the “File” menu.
If a user selects a file, the full pathname of the file is returned. If the user cancels the dialog, nil is returned.
The following options may be given:
defaultextension: extension
Specifies a string that will be appended to the filename if the user
enters a filename without an extension.
The default value is the empty string, which means no extension will be
appended to the filename in any case.
This option is ignored on Mac OS X, which does not require extensions to
filenames, and the UNIX implementation guesses reasonable values for
this from the :filetypes option when this is not supplied.
filetypes: file_pattern_list
If a File types listbox exists in the file dialog on the particular
platform, this option gives the filetypes in this listbox.
When the user choose a filetype in the listbox, only the files of that
type are listed.
If this option is unspecified, or if it is set to the empty list, or if
the File types listbox is not supported by the particular platform then
all files are listed regardless of their types.
initialdir: directory
Specifies that the files in directory should be displayed when the
dialog pops up.
If this parameter is not specified, then the files in the current
working directory are displayed.
If the parameter specifies a relative path, the return value will
convert the relative path to an absolute path.
initialfile: filename
Specifies a filename to be displayed in the dialog when it pops up.
message: string
Specifies a message to include in the client area of the dialog.
This is only available on Mac OS X.
multiple: boolean
Allows the user to choose multiple files from the dialog.
parent: window
Makes window the logical parent of the file dialog.
The file dialog is displayed on top of its parent window.
On Mac OS X, this turns the file dialog into a sheet attached to the
parent window.
title: string
Specifies a string to display as the title of the dialog box.
If this option is not specified, then a default title is displayed.
On the Unix and Macintosh platforms, extensions are matched using glob-style pattern matching. On the Windows platform, extensions are matched by the underlying operating system.
The types of possible extensions are:
* the special extension "*" matches any file
* the special extension "" matches any files that do not have an extension
(i.e., the filename contains no full stop character)
* any character string that does not contain any wild card characters ("*"
and "?").
Due to the different pattern matching rules on the various platforms, to ensure portability, wild card characters are not allowed in the extensions, except as in the special extension “*”. Extensions without a full stop character (e.g. “~”) are allowed but may not work on all platforms.
82 83 84 85 86 |
# File 'lib/ffi-tk/command/get_open_file.rb', line 82 def get_open_file( = None) result = Tk.execute(:tk_getOpenFile, .) path = result.respond_to?(:to_str) ? result.to_str : result.to_s? path unless path.empty? end |
.get_save_file(options = None) ⇒ Object
Pop up a dialog box for the user to select a file to save.
This method is usually associated with the “Save as” command in the “File” menu. If the user enters a file that already exists, the dialog box prompts the user for confirmation whether the existing file should be overwritten or not.
If a user selects a file, the full pathname of the file is returned. If the user cancels the dialog, nil is returned.
The following options may be given:
defaultextension: extension
Specifies a string that will be appended to the filename if the user
enters a filename without an extension.
The default value is the empty string, which means no extension will be
appended to the filename in any case.
This option is ignored on Mac OS X, which does not require extensions to
filenames, and the UNIX implementation guesses reasonable values for
this from the :filetypes option when this is not supplied.
filetypes: file_pattern_list
If a File types listbox exists in the file dialog on the particular
platform, this option gives the filetypes in this listbox.
When the user choose a filetype in the listbox, only the files of that
type are listed.
If this option is unspecified, or if it is set to the empty list, or if
the File types listbox is not supported by the particular platform then
all files are listed regardless of their types.
initialdir: directory
Specifies that the files in directory should be displayed when the
dialog pops up.
If this parameter is not specified, then the files in the current
working directory are displayed.
If the parameter specifies a relative path, the return value will
convert the relative path to an absolute path.
initialfile: filename
Specifies a filename to be displayed in the dialog when it pops up.
message: string
Specifies a message to include in the client area of the dialog.
This is only available on Mac OS X.
multiple: boolean
Allows the user to choose multiple files from the dialog.
parent: window
Makes window the logical parent of the file dialog.
The file dialog is displayed on top of its parent window.
On Mac OS X, this turns the file dialog into a sheet attached to the
parent window.
title: string
Specifies a string to display as the title of the dialog box.
If this option is not specified, then a default title is displayed.
On the Unix and Macintosh platforms, extensions are matched using glob-style pattern matching. On the Windows platform, extensions are matched by the underlying operating system.
The types of possible extensions are:
* the special extension "*" matches any file
* the special extension "" matches any files that do not have an extension
(i.e., the filename contains no full stop character)
* any character string that does not contain any wild card characters ("*"
and "?").
Due to the different pattern matching rules on the various platforms, to ensure portability, wild card characters are not allowed in the extensions, except as in the special extension “*”. Extensions without a full stop character (e.g. “~”) are allowed but may not work on all platforms.
80 81 82 83 84 |
# File 'lib/ffi-tk/command/get_save_file.rb', line 80 def get_save_file( = None) result = Tk.execute(:tk_getSaveFile, .) path = result.respond_to?(:to_str) ? result.to_str : result.to_s? path unless path.empty? end |
.handle_callback(id, *args) ⇒ Object
163 164 165 166 |
# File 'lib/ffi-tk/tk.rb', line 163 def handle_callback(id, *args) callback = @callbacks.fetch(id.to_i) callback.call(*args) end |
.init ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/ffi-tk/tk.rb', line 18 def init if RUN_EVENTLOOP_ON_MAIN_THREAD @interp = FFI::Tcl.setup_eventloop_on_main_thread else @interp = FFI::Tcl.setup_eventloop_on_new_thread end FFI::Tcl.init(@interp) FFI::Tcl::EvalResult.reset_types(@interp) FFI::Tk.init(@interp) @root = Root.new @interp.eval('namespace eval RubyFFI {}') FFI::Tcl.create_obj_command(@interp, 'RubyFFI::callback', TCL_CALLBACK, 0, TCL_DELETE) FFI::Tcl.create_obj_command(@interp, 'RubyFFI::event', TCL_EVENT, 0, TCL_DELETE) module_eval('class << Tk; attr_reader :interp, :root; end') return @interp end |
.interp ⇒ Object
A little something so people don’t have to call Tk.init
42 43 44 45 |
# File 'lib/ffi-tk/tk.rb', line 42 def interp Tk.init @interp end |
.library ⇒ Object
This variable holds the file name for a directory containing a library of Tcl scripts related to Tk. These scripts include an initialization file that is normally processed whenever a Tk application starts up, plus other files containing procedures that implement default behaviors for widgets. The initial value of tcl_library is set when Tk is added to an interpreter; this is done by searching several different directories until one is found that contains an appropriate Tk startup script. If the TK_LIBRARY environment variable exists, then the directory it names is checked first. If TK_LIBRARY is not set or does not refer to an appropriate directory, then Tk checks several other directories based on a compiled-in default location, the location of the Tcl library directory, the location of the binary containing the application, and the current working directory. The variable can be modified by an application to switch to a different library.
30 31 32 |
# File 'lib/ffi-tk/command/vars.rb', line 30 def library @library.to_s end |
.library=(new_library) ⇒ Object
34 35 36 |
# File 'lib/ffi-tk/command/vars.rb', line 34 def library=(new_library) @library.set(new_library.to_s) end |
.mainloop ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/ffi-tk/tk.rb', line 53 def mainloop @running = true while @running && interp.wait_for_event(0.1) interp.do_one_event(0) end end |
.message_box(options = None) ⇒ Object
Pops up a message window and waits for user response. This procedure creates and displays a message window with an application-specified message, an icon and a set of buttons. Each of the buttons in the message window is identified by a unique symbolic name (see the :type options).
After the message window is popped up, [message_box] waits for the user to select one of the buttons. Then it returns the symbolic name of the selected button.
The following options pairs are supported:
default: name
Name gives the symbolic name of the default button for this message
window (:ok, :cancel, and so on).
See :type for a list of the symbolic names.
If this option is not specified, the first button in the dialog will be
made the default.
detail: string
Specifies an auxiliary message to the main message given by the :message
option. Where supported by the underlying OS, the message detail will be
presented in a less emphasized font than the main message.
icon: icon_image
Specifies an icon to display.
icon_image must be one of the following: :error, :info, :question or
:warning. If this option is not specified, then the info icon will be
displayed.
message: string
Specifies the message to display in this message box.
parent: window
Makes window the logical parent of the message box.
The message box is displayed on top of its parent window.
title: string
Specifies a string to display as the title of the message box.
The default value is an empty string.
type: predefined_type
Arranges for a predefined set of buttons to be displayed.
The following values are possible for predefined_type:
:abortretryignore
Displays three buttons whose symbolic names are :abort, :retry and :ignore.
:ok
Displays one button whose symbolic name is :ok.
:okcancel
Displays two buttons whose symbolic names are :ok and :cancel.
:retrycancel
Displays two buttons whose symbolic names are :retry and :cancel.
:yesno
Displays two buttons whose symbolic names are :yes and :no.
:yesnocancel
Displays three buttons whose symbolic names are :yes, :no and :cancel.
62 63 64 |
# File 'lib/ffi-tk/command/message_box.rb', line 62 def ( = None) Tk.execute(:tk_messageBox, .).to_sym end |
.option_menu(pathname, *values) ⇒ Object
2 3 4 5 6 7 |
# File 'lib/ffi-tk/command/option_menu.rb', line 2 def self.(pathname, *values) variable = Variable.new('the_option_menu') Tk.execute_only(:tk_optionMenu, pathname, variable, *values) return variable end |
.patchlevel ⇒ Object
Contains a decimal integer giving the current patch level for Tk. The patch level is incremented for each new release or patch, and it uniquely identifies an official version of Tk.
41 42 43 |
# File 'lib/ffi-tk/command/vars.rb', line 41 def patchlevel @patchlevel.to_s end |
.pathname_to_widget(pathname) ⇒ Object
215 216 217 |
# File 'lib/ffi-tk/tk.rb', line 215 def (pathname) @widgets[pathname] end |
.popup(menu, x, y, entry = None) ⇒ Object
This procedure posts a menu at a given position on the screen and configures Tk so that the menu and its cascaded children can be traversed with the mouse or the keyboard. menu
is the name of a menu widget and x
and y
are the root coordinates at which to display the menu. If entry
is omitted, the menu’s upper left corner is positioned at the given point. Otherwise +entry gives the index of an entry in menu
and the menu will be positioned so that the entry
is positioned over the given point.
11 12 13 |
# File 'lib/ffi-tk/command/popup.rb', line 11 def self.popup(, x, y, entry = None) Tk.execute_only(:tk_popup, , x, y, entry) end |
.register_object(parent, object) ⇒ Object
168 169 170 171 172 173 174 175 176 177 |
# File 'lib/ffi-tk/tk.rb', line 168 def register_object(parent, object) parent_name = parent.respond_to?(:tk_pathname) ? parent.tk_pathname : parent cmd = object.class.tk_command id = "#{cmd}#{uuid(cmd)}".gsub('::', '__') # :: is namespace convention. pathname = [parent_name, id].join('.').squeeze('.') @widgets[pathname] = object return pathname end |
.register_proc(proc, argument_string = '') ⇒ Object
187 188 189 190 |
# File 'lib/ffi-tk/tk.rb', line 187 def register_proc(proc, argument_string = '') id = uuid(:proc){|uuid| @callbacks[uuid] = proc } return id, %(RubyFFI::callback #{id} #{argument_string}) end |
.result ⇒ Object
78 79 80 |
# File 'lib/ffi-tk/tk.rb', line 78 def result interp.guess_result end |
.root ⇒ Object
A little something so people don’t have to call Tk.init
48 49 50 51 |
# File 'lib/ffi-tk/tk.rb', line 48 def root Tk.init @root end |
.set_palette(background, *rest) ⇒ Object
2 3 4 5 6 7 8 |
# File 'lib/ffi-tk/command/set_palette.rb', line 2 def self.set_palette(background, *rest) if rest.empty? Tk.execute(:tk_setPalette, background) else Tk.execute(:tk_setPalette, background, *rest) end end |
.stop ⇒ Object
61 62 63 |
# File 'lib/ffi-tk/tk.rb', line 61 def stop @running = false end |
.strict_motif ⇒ Object
This variable is set to zero by default. If an application sets it to one, then Tk attempts to adhere as closely as possible to Motif look-and-feel standards. For example, active elements such as buttons and scrollbar sliders will not change color when the pointer passes over them.
50 51 52 |
# File 'lib/ffi-tk/command/vars.rb', line 50 def strict_motif @strict_motif.to_boolean end |
.strict_motif=(new_value) ⇒ Object
54 55 56 |
# File 'lib/ffi-tk/command/vars.rb', line 54 def strict_motif=(new_value) @strict_motif.set(new_value ? true : false) end |
.tcl_callback(client_data, interp, objc, objv) ⇒ Object
TODO: support for break and continue return status (by catch/throw) 1 means true, 0 means false.
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/ffi-tk/tk.rb', line 106 def tcl_callback(client_data, interp, objc, objv) cmd, id, *args = tcl_cmd_args(interp, objc, objv) id = id.first if id.is_a?(Array) catch :callback_break do catch :callback_continue do result = handle_callback(id, *args) FFI::Tcl::Interp.new(interp).obj_result = result return OK end return CONTINUE end return BREAK rescue => ex FFI::Tcl::Interp.new(interp).obj_result = ex return ERROR end |
.tcl_cmd_args(interp, objc, objv) ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/ffi-tk/tk.rb', line 149 def tcl_cmd_args(interp, objc, objv) length = FFI::MemoryPointer.new(0) array = objv.read_array_of_pointer(objc) array.map{|e| obj = FFI::Tcl::EvalResult.guess(interp, e) case obj when Fixnum, Float obj else obj.respond_to?(:dup) ? obj.dup : obj end } end |
.tcl_delete(client_data) ⇒ Object
without our callbacks, nothing goes anymore, abort mission
99 100 101 |
# File 'lib/ffi-tk/tk.rb', line 99 def tcl_delete(client_data) raise RuntimeError, "tcl function is going to be removed" end |
.tcl_event(client_data, interp, objc, objv) ⇒ Object
TODO: support for break and continue return status (by catch/throw)
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/ffi-tk/tk.rb', line 129 def tcl_event(client_data, interp, objc, objv) cmd, id, sequence, *args = tcl_cmd_args(interp, objc, objv) catch :callback_break do catch :callback_continue do Event::Data.new(id.to_i, sequence.to_s, *args).call return OK end return CONTINUE end return BREAK rescue => ex FFI::Tcl::Interp.new(interp).obj_result = ex return ERROR end |
.text_redraw ⇒ Object
These variables are set by text widgets when they have debugging turned on. The values written to these variables can be used to test or debug text widget operations. These variables are mostly used by Tk’s test suite.
62 63 64 |
# File 'lib/ffi-tk/command/vars.rb', line 62 def text_redraw @text_redraw.get end |
.text_relayout ⇒ Object
66 67 68 |
# File 'lib/ffi-tk/command/vars.rb', line 66 def text_relayout @text_relayout.get end |
.unregister_object(object) ⇒ Object
179 180 181 |
# File 'lib/ffi-tk/tk.rb', line 179 def unregister_object(object) @widgets.delete_if{|path, obj| obj == object } end |
.unregister_objects(*objects) ⇒ Object
183 184 185 |
# File 'lib/ffi-tk/tk.rb', line 183 def unregister_objects(*objects) @widgets.delete_if{|path, obj| objects.include?(obj) } end |
.unregister_proc(id) ⇒ Object
192 193 194 |
# File 'lib/ffi-tk/tk.rb', line 192 def unregister_proc(id) @callbacks.delete(id) end |
.update(idletasks = None) ⇒ Object
86 87 88 |
# File 'lib/ffi-tk/tk.rb', line 86 def update(idletasks = None) execute('update', idletasks) end |
.uuid(name) ⇒ Object
196 197 198 199 200 201 202 203 |
# File 'lib/ffi-tk/tk.rb', line 196 def uuid(name) @mutex.synchronize do id = @register[name] @register[name] += 1 yield id if block_given? id end end |
.version ⇒ Object
Tk sets this variable in the interpreter for each application. The variable holds the current version number of the Tk library in the form major.minor. Major and minor are integers. The major version number increases in any Tk release that includes changes that are not backward compatible (i.e. whenever existing Tk applications and scripts may have to change to work with the new release). The minor version number increases with each new release of Tk, except that it resets to zero whenever the major version number changes.
79 80 81 |
# File 'lib/ffi-tk/command/vars.rb', line 79 def version @version.to_s end |