Newer
Older
class FXIconItem
def <=>(otherItem)
text <=> otherItem.text
end
end
class FXListItem
def <=>(otherItem)
text <=> otherItem.text
end
end
class FXTreeItem
def <=>(otherItem)
text <=> otherItem.text
end
end
class FXTreeList
def addItemFirst(*args) # :nodoc:
warn "addItemFirst() is deprecated; use prependItem() instead"
prependItem(*args)
end
def addItemLast(*args) # :nodoc:
warn "addItemLast() is deprecated; use appendItem() instead"
appendItem(*args)
end
def addItemAfter(other, *args) # :nodoc:
warn "addItemAfter() is deprecated; use insertItem() instead"
insertItem(other.next, other.parent, *args)
end
def addItemBefore(other, *args) # :nodoc:
warn "addItemBefore() is deprecated; use insertItem() instead"
insertItem(other, other.parent, *args)
end
def reparentItem(item, father) # :nodoc:
warn "reparentItem() is deprecated; use moveItem() instead"
moveItem(nil, father, item)
end
def moveItemBefore(other, item) # :nodoc:
warn "moveItemBefore() is deprecated; use moveItem() instead"
moveItem(other, other.parent, item)
end
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
def moveItemAfter(other, item) # :nodoc:
warn "moveItemAfter() is deprecated; use moveItem() instead"
moveItem(other.next, other.parent, item)
end
end
class FXTreeListBox
def addItemFirst(*args) # :nodoc:
warn "addItemFirst() is deprecated; use prependItem() instead"
prependItem(*args)
end
def addItemLast(*args) # :nodoc:
warn "addItemLast() is deprecated; use appendItem() instead"
appendItem(*args)
end
def addItemAfter(other, *args) # :nodoc:
warn "addItemAfter() is deprecated; use insertItem() instead"
insertItem(other.next, other.parent, *args)
end
def addItemBefore(other, *args) # :nodoc:
warn "addItemBefore() is deprecated; use insertItem() instead"
insertItem(other, other.parent, *args)
end
end
class FXDataTarget
#
# Returns the stringified representation of this
# data target's value.
#
def to_s
value.to_s
end
end
class FXDockBar
# Allow docking on the specified side, where _side_ is one of the +ALLOW+
# constants listed above.
def allowSide(side)
self.allowedSides = self.allowedSides | side
end
# Disallow docking on the specified side, where _side_ is one of the
# +ALLOW+ constants listed above.
def disallowSide(side)
self.allowedSides = self.allowedSides & ~side
end
# Return +true+ if docking is allowed on the specified side, where _side_
# is one of the +ALLOW+ constants listed above.
#
def allowedSide?(side)
(allowedSides & side) != 0
end
end
class FXFileDialog
# Allow navigation for this file dialog
def allowNavigation
self.navigationAllowed = true
end
# Disallow navigation for this file dialog
def disallowNavigation
self.navigationAllowed = false
end
end
class FXFileList
#
# Show parent directories.
#
def showParentDirs
self.parentDirsShown = true
end
#
# Hide parent directories
#
def hideParentDirs
self.parentDirsShown = false
end
end
class FXFileSelector
# Allow navigation for this file selector
def allowNavigation
self.navigationAllowed = true
end
# Disallow navigation for this file selector
def disallowNavigation
self.navigationAllowed = false
end
end
class FXHeader
#
# Returns true if the specified header item's arrow points
# up. Raises IndexError if _index_ is out of bounds.
#
def arrowUp?(index)
raise IndexError, "header item index out of bounds"
else
getArrowDir(index) == Fox::TRUE
end
end
#
# Returns true if the specified header item's arrow points
# down. Raises IndexError if _index_ is out of bounds.
#
def arrowDown?(index)
raise IndexError, "header item index out of bounds"
else
getArrowDir(index) == Fox::FALSE
end
end
#
# Returns true if the specified header item does not display
# any arrow. Raises IndexError if _index_ is out of bounds.
#
def arrowMaybe?(index)
raise IndexError, "header item index out of bounds"
else
getArrowDir(index) == Fox::MAYBE
end
end
end
class FXHiliteStyle
#
# Construct a new FXHiliteStyle instance, with fields initialized from
# an FXText instance.
#
def FXHiliteStyle.from_text(textw)
hs = new
hs.activeBackColor = textw.activeBackColor
hs.hiliteBackColor = textw.hiliteBackColor
hs.hiliteForeColor = textw.hiliteTextColor
hs.normalBackColor = textw.backColor
hs.normalForeColor = textw.textColor
hs.selectBackColor = textw.selBackColor
hs.selectForeColor = textw.selTextColor
hs.style = 0
hs
end
end
# Returns a reference to the scroll corner (an FXScrollCorner instance) for this window.
def scrollCorner
verticalScrollBar.next
end
end
class FXSettings
#
# Read a boolean registry entry from the specified _section_ and _key_.
# If no value is found, the _default_ value is returned.
#
def readBoolEntry(section, key, default=false)
default = default ? 1 : 0
readIntEntry(section, key, default) != 0
end
#
# Write a boolean registry _value_ to the specified _section_ and _key_.
#
def writeBoolEntry(section, key, value)
writeIntEntry(section, key, value ? 1 : 0)
end
end
class FXVec2d
# Convert to array
def to_a
[x, y]
end
# Convert to string
def to_s
to_a.to_s
end
def inspect; to_a.inspect; end
class FXVec2f
# Convert to array
def to_a; [x, y]; end
# Convert to string
def to_s; to_a.to_s; end
def inspect; to_a.inspect; end
class FXVec3d
# Convert to array
def to_a; [x, y, z]; end
# Convert to string
def to_s; to_a.to_s; end
def inspect; to_a.inspect; end
class FXVec3f
# Convert to array
def to_a; [x, y, z]; end
# Convert to string
def to_s; to_a.to_s; end
def inspect; to_a.inspect; end
class FXVec4d
# Convert to array
def to_a; [x, y, z, w]; end
# Convert to string
def to_s; to_a.to_s; end
def inspect; to_a.inspect; end
class FXVec4f
# Convert to array
def to_a; [x, y, z, w]; end
# Convert to string
def to_s; to_a.to_s; end
def inspect; to_a.inspect; end
end
class FXWindow
#
# Iterate over the child windows for this window.
# Note that this only reaches the direct child windows for this window
# and no deeper descendants. To traverse the entire widget tree,
# use #each_child_recursive.
def each_child # :yields: child
child = self.first
while child
next_child = child.next
yield child
child = next_child
end
end
#
# Traverse the widget tree starting from this window
# using depth-first traversal.
def each_child_recursive # :yields: child
each_child do |child|
yield child
child.each_child_recursive do |subchild|
yield subchild
end
# Returns an array containing all child windows of this window
def children
kids = []
each_child { |kid| kids << kid }
kids
end
# Return +true+ if this window (self) comes before sibling window _other_.
def before?(other)
FXWindow.before?(other)
end
# Return +true+ if this window (_self_) comes after sibling window _other_,
def after?(other)
FXWindow.after?(other)
end
# Relink this window before sibling window _other_, in the parent's window list.
def linkBefore(other)
reparent(self.parent, other)
end
# Relink this window after sibling window _other_, in the parent's window list.
def linkAfter(other)
reparent(self.parent, other.next)
end
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
# Setting visible to +true+ calls #show, setting it to +false+ calls #hide.
def visible=(vis)
if vis
show
else
hide
end
end
end
#
# The drag-and-drop data used for colors is a sequence of unsigned short
# integers, in native byte ordering. Here, we use the 'S' directive for
# String#unpack (which treats two successive characters as an unsigned short
# in native byte order) to decode the R, G, B and A values.
#
def Fox.fxdecodeColorData(data)
clr = data.unpack('S4')
Fox.FXRGBA((clr[0]+128)/257, (clr[1]+128)/257, (clr[2]+128)/257, (clr[3]+128)/257)
end
#
# The drag-and-drop data used for colors is a sequence of unsigned short
# integers, in native byte ordering. Here, we use the 'S' directive for
# Array#pack (which treats two successive characters as an unsigned short
# in native byte order) to encode the R, G, B and A values.
#
def Fox.fxencodeColorData(rgba)
clr = [ 257*Fox.FXREDVAL(rgba), 257*Fox.FXGREENVAL(rgba), 257*Fox.FXBLUEVAL(rgba), 257*Fox.FXALPHAVAL(rgba) ]
clr.pack('S4')
end
#
# The drag-and-drop data used for clipboard strings (i.e. when the
# drag type is FXWindow.stringType) is either a null-terminated
# string (for Microsoft Windows) or a non-null terminated string
# (for X11). Use this method to convert string data from the
# clipboard back into a Ruby string.
#
def Fox.fxdecodeStringData(data)
if /cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM
data.chop
else
data
end
end
#
# The drag-and-drop data used for clipboard strings (i.e. when the
# drag type is FXWindow.stringType) is either a null-terminated
# string (for Microsoft Windows) or a non-null terminated string
# (for X11). Use this method to convert Ruby strings into a format
# appropriate for the current platform.
#
def Fox.fxencodeStringData(str)
if /cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
str + "\0"
else
str
end
end
#
# FXStreamError is the base class for exceptions which can occur when
# working with FXStream and its subclasses.
#
class FXStreamError < StandardError
#
# This is a factory method that takes an FXStreamStatus code
# as its input and returns the appropriate exception class.
#
def FXStreamError.makeStreamError(status)
case status
when FXStreamEnd
FXStreamEndError
when FXStreamFull
FXStreamFullError
when FXStreamNoWrite
FXStreamNoWriteError
when FXStreamNoRead
FXStreamNoReadError
when FXStreamFormat
FXStreamFormatError
when FXStreamUnknown
FXStreamUnknownError
when FXStreamAlloc
FXStreamAllocError
when FXStreamFailure
FXStreamFailureError
else
FXStreamError
end
end
end
# Tried to read past the end of a stream
class FXStreamEndError < FXStreamError ; end
# Filled up a stream's internal buffer, or the disk is full
class FXStreamFullError < FXStreamError ; end
# Unable to open for write
class FXStreamNoWriteError < FXStreamError ; end
# Unable to open for read
class FXStreamNoReadError < FXStreamError ; end
# Stream format error
class FXStreamFormatError < FXStreamError ; end
# Trying to read unknown class
class FXStreamUnknownError < FXStreamError ; end
# Alloc failed
class FXStreamAllocError < FXStreamError ; end
# General failure
class FXStreamFailureError < FXStreamError ; end
class FXCheckButton
# Return +true+ if this check button is in the checked state.
def checked?
self.checkState == TRUE
end
# Return +true+ if this check button is in the unchecked state.
def unchecked?
self.checkState == FALSE
end
# Return +true+ if this check button is in the indeterminate, or "maybe", state.
def maybe?
self.checkState == MAYBE
end
end
class FXComboTableItem < FXTableItem
#
# Construct new combobox table item
#
def initialize(text, ic=nil, ptr=nil)
super(nil, ic, ptr)
self.selections = text
end
# Create input control for editing this item
def getControlFor(table)
combo = FXComboBox.new(table, 1, :opts => COMBOBOX_STATIC, :padLeft => table.marginLeft, :padRight => table.marginRight, :padTop => table.marginTop, :padBottom => table.marginBottom)
combo.create
justify = 0
justify |= JUSTIFY_LEFT if (self.justify & FXTableItem::LEFT) != 0
justify |= JUSTIFY_RIGHT if (self.justify & FXTableItem::RIGHT) != 0
justify |= JUSTIFY_TOP if (self.justify & FXTableItem::TOP) != 0
justify |= JUSTIFY_BOTTOM if (self.justify & FXTableItem::BOTTOM) != 0
combo.justify = justify
combo.font = table.font
combo.backColor = table.backColor
combo.textColor = table.textColor
combo.selBackColor = table.selBackColor
combo.selTextColor = table.selTextColor
combo.fillItems(selections)
combo.text = text
combo.numVisible = [20, combo.numItems].min
combo
end
# Set value from input control
def setFromControl(comboBox)
self.text = comboBox.text
end
# Set selections as an array of strings
def selections=(strings)
@selections = strings
if @selections.empty?
self.text = nil
else
self.text = @selections[0]
end
end
# Return selections
def selections
@selections
end
end
class FXMenuCheck
# Return +true+ if this menu check button is in the checked state.
def checked?
self.checkState == TRUE
end
# Return +true+ if this menu check button is in the unchecked state.
def unchecked?
self.checkState == FALSE
end
# Return +true+ if this menu check button is in the indeterminate, or "maybe", state.
def maybe?
self.checkState == MAYBE
end
end
class FXRadioButton
# Return +true+ if this radio button is in the checked state.
def checked?
self.checkState == TRUE
end
# Return +true+ if this radio button is in the unchecked state.
def unchecked?
self.checkState == FALSE
end
# Return +true+ if this radio button is in the indeterminate, or "maybe", state.
def maybe?
self.checkState == MAYBE
end
end
class FXMenuRadio
# Return +true+ if this menu radio button is in the checked state.
def checked?
self.checkState == TRUE
end
# Return +true+ if this menu radio button is in the unchecked state.
def unchecked?
self.checkState == FALSE
end
# Return +true+ if this menu radio button is in the indeterminate, or "maybe", state.
def maybe?
self.checkState == MAYBE
end
end
class FXObject
require 'enumerator'
def self.subclasses
ObjectSpace.enum_for(:each_object, class << self; self; end).to_a
end
end
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
class FXDC
#
# Draw a circle centered at (_x_, _y_), with specified radius.
#
# === Parameters:
#
# +x+:: x-coordinate of the circle's center [Integer]
# +y+:: y-coordinate of the circle's center [Integer]
# +r+:: radius of the circle, in pixels [Integer]
#
# See also #fillCircle.
#
def drawCircle(x, y, r)
drawArc(x-r, y-r, 2*r, 2*r, 0, 360*64)
end
#
# Draw a filled circle centered at (_x_, _y_), with specified radius.
#
# === Parameters:
#
# +x+:: x-coordinate of the circle's center [Integer]
# +y+:: y-coordinate of the circle's center [Integer]
# +r+:: radius of the circle, in pixels [Integer]
#
# See also #drawCircle.
#
def fillCircle(x, y, r)
fillArc(x-r, y-r, 2*r, 2*r, 0, 360*64)
end
end
class FXTable
#
# Append _numColumns_ columns to the right of the table..
# If _notify_ is +true+, a <tt>SEL_INSERTED</tt> message is sent to the
# table�s message target for each cell that is inserted.
#
def appendColumns(numColumns=1, notify=false)
insertColumns(self.numColumns, numColumns, notify)
end
#
# Append _numRows_ rows to the bottom of the table..
# If _notify_ is +true+, a <tt>SEL_INSERTED</tt> message is sent to the
# table�s message target for each cell that is inserted.
#
def appendRows(numRows=1, notify=false)
insertRows(self.numRows, numRows, notify)
end
# Select cell at (_row_, _col_).
# If _notify_ is +true+, a +SEL_SELECTED+ message is sent to the table's message target
# after the item is selected.
# Raises IndexError if either _row_ or _col_ is out of bounds.
#
def selectItem(row, col, notify=false)
selectRange(row, row, col, col, notify)
end
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
=begin
# Deselect cell at (_row_, _col_).
# If _notify_ is +true+, a +SEL_DESELECTED+ message is sent to the table's message target
# after the item is deselected.
# Raises IndexError if either _row_ or _col_ is out of bounds.
#
def deselectItem(row, col, notify=false)
raise IndexError, "row index out of bounds" if row < 0 || row >= numRows
raise IndexError, "column index out of bounds" if col < 0 || col >= numColumns
deselectRange(row, row, col, col, notify)
end
# Deselect range.
# If _notify_ is +true+, a +SEL_DESELECTED+ message is sent to the table's message
# target for each previously selected cell that becomes deselected as a result of
# this operation.
# Raises IndexError if _startRow_, _endRow_, _startColumn_ or _endColumn_ is out of bounds.
def deselectRange(startRow, endRow, startColumn, endColumn, notify=false)
raise IndexError, "starting row index out of bounds" if startRow < 0 || startRow >= numRows
raise IndexError, "ending row index out of bounds" if endRow < 0 || endRow >= numRows
raise IndexError, "starting column index out of bounds" if startColumn < 0 || startColumn >= numColumns
raise IndexError, "ending column index out of bounds" if endColumn < 0 || endColumn >= numColumns
changes = false
for row in startRow..endRow
for col in startColumn..endColumn
changes |= deselectItem(row, col, notify)
end
end
changes
end
Lars Kanis
committed
class FXImage
alias initialize_without_data_string initialize
def initialize(a, pix, *args)
initialize_without_data_string(a, pix, *args)
@data_string = (options & IMAGE_OWNED) != 0 ? nil : pix
end
alias setPixels_without_data_string setPixels
def setPixels(pix, *args)
setPixels_without_data_string(pix, *args)
@data_string = (options & IMAGE_OWNED) != 0 ? nil : pix
end
end