fxruby 1.2.4 → 1.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +89 -0
- data/doc/apes02.html +2 -2
- data/doc/apes03.html +1 -1
- data/doc/book.html +1 -1
- data/doc/changes.html +28 -5
- data/doc/cvs.html +2 -2
- data/doc/differences.html +3 -3
- data/doc/implementation.html +1 -1
- data/doc/library.html +5 -5
- data/doc/opengl.html +5 -5
- data/doc/pt02.html +1 -1
- data/doc/scintilla.html +4 -4
- data/ext/fox12/FXRuby.cpp +2 -2
- data/ext/fox12/frames_wrap.cpp +7 -17
- data/ext/fox12/iconlist_wrap.cpp +8 -17
- data/ext/fox12/include/FXRbBitmapView.h +8 -4
- data/ext/fox12/include/FXRbFoldingList.h +5 -1
- data/ext/fox12/include/FXRbHeader.h +5 -1
- data/ext/fox12/include/FXRbIconList.h +5 -1
- data/ext/fox12/include/FXRbImageView.h +7 -4
- data/ext/fox12/include/FXRbList.h +5 -1
- data/ext/fox12/include/FXRbScrollArea.h +6 -4
- data/ext/fox12/include/FXRbScrollWindow.h +9 -7
- data/ext/fox12/include/FXRbTable.h +17 -6
- data/ext/fox12/include/FXRbText.h +9 -4
- data/ext/fox12/include/FXRbTreeList.h +5 -1
- data/ext/fox12/list_wrap.cpp +3 -13
- data/ext/fox12/table_wrap.cpp +42 -41
- data/ext/fox12/unregisterOwnedObjects.cpp +112 -0
- data/lib/fox12/core.rb +9 -0
- data/lib/fox12/version.rb +1 -1
- data/rdoc-sources/FXTable.rb +44 -2
- data/tests/TC_FXTable.rb +36 -104
- metadata +4 -3
@@ -0,0 +1,112 @@
|
|
1
|
+
/***********************************************************************
|
2
|
+
* $Id: unregisterOwnedObjects.cpp,v 1.2 2005/03/01 03:14:59 lyle Exp $
|
3
|
+
***********************************************************************/
|
4
|
+
|
5
|
+
/**
|
6
|
+
* The purpose of an unregisterOwnedObjects() function for a particular
|
7
|
+
* class is to call FXRbUnregisterRubyObj() on any objects that this object
|
8
|
+
* created itself, and which it "owns" and will destroy in its destructor.
|
9
|
+
* This includes not only child widgets, like the horizontal and vertical
|
10
|
+
* scrollbars managed by an FXScrollArea, but other non-widget objects
|
11
|
+
* like list items.
|
12
|
+
*
|
13
|
+
* You don't need to worry about objects that the user created himself
|
14
|
+
* using Ruby code, because those should get unregistered automatically
|
15
|
+
* when they're destroyed. So, for example, if I create a button as a child
|
16
|
+
* of a frame, e.g.
|
17
|
+
*
|
18
|
+
* FXButton.new(parentFrame, ...)
|
19
|
+
*
|
20
|
+
* that Ruby object's peer is an FXRbButton instance, and the destructor for
|
21
|
+
* the FXRbButton class calls FXRbUnregisterRubyObj(this). We only need to
|
22
|
+
* worry about the C++ objects that aren't subclasses of regular FOX classes,
|
23
|
+
* but which have somehow been "exposed" to the Ruby layer.
|
24
|
+
*/
|
25
|
+
|
26
|
+
#include "FXRbCommon.h"
|
27
|
+
|
28
|
+
void FXRbHeader::unregisterOwnedObjects(FXHeader *self)
|
29
|
+
{
|
30
|
+
// FXRbFrame::unregisterOwnedObjects(self);
|
31
|
+
for (FXint i = 0; i < self->getNumItems(); i++) FXRbUnregisterRubyObj(self->getItem(i));
|
32
|
+
}
|
33
|
+
|
34
|
+
void FXRbScrollArea::unregisterOwnedObjects(FXScrollArea *self)
|
35
|
+
{
|
36
|
+
// FXRbComposite::unregisterOwnedObjects(self);
|
37
|
+
FXRbUnregisterRubyObj(self->horizontalScrollBar());
|
38
|
+
FXRbUnregisterRubyObj(self->verticalScrollBar());
|
39
|
+
}
|
40
|
+
|
41
|
+
/*
|
42
|
+
void FXRbBitmapView::unregisterOwnedObjects(FXBitmapView *self)
|
43
|
+
{
|
44
|
+
FXRbScrollArea::unregisterOwnedObjects(self);
|
45
|
+
}
|
46
|
+
*/
|
47
|
+
|
48
|
+
void FXRbFoldingList::unregisterOwnedObjects(FXFoldingList *self)
|
49
|
+
{
|
50
|
+
FXRbScrollArea::unregisterOwnedObjects(self);
|
51
|
+
FXRbUnregisterRubyObj(self->getHeader());
|
52
|
+
|
53
|
+
// Save pointer(s) to the soon-to-be-destroyed items
|
54
|
+
FXObjectListOf<FXFoldingItem> items;
|
55
|
+
FXRbFoldingList::enumerateItems(self->getFirstItem(),self->getLastItem(),items);
|
56
|
+
|
57
|
+
// Now zero-out pointers held by still-alive Ruby objects
|
58
|
+
for (FXint i = 0; i <items.no(); i++) FXRbUnregisterRubyObj(items[i]);
|
59
|
+
}
|
60
|
+
|
61
|
+
void FXRbIconList::unregisterOwnedObjects(FXIconList *self)
|
62
|
+
{
|
63
|
+
FXRbScrollArea::unregisterOwnedObjects(self);
|
64
|
+
FXRbUnregisterRubyObj(self->getHeader());
|
65
|
+
for (FXint i = 0; i <self->getNumItems(); i++) FXRbUnregisterRubyObj(self->getItem(i));
|
66
|
+
}
|
67
|
+
|
68
|
+
void FXRbImageView::unregisterOwnedObjects(FXImageView *self)
|
69
|
+
{
|
70
|
+
FXRbScrollArea::unregisterOwnedObjects(self);
|
71
|
+
}
|
72
|
+
|
73
|
+
void FXRbList::unregisterOwnedObjects(FXList *self)
|
74
|
+
{
|
75
|
+
FXRbScrollArea::unregisterOwnedObjects(self);
|
76
|
+
for (FXint i = 0; i < self->getNumItems(); i++) FXRbUnregisterRubyObj(self->getItem(i));
|
77
|
+
}
|
78
|
+
|
79
|
+
void FXRbScrollWindow::unregisterOwnedObjects(FXScrollWindow *self)
|
80
|
+
{
|
81
|
+
FXRbScrollArea::unregisterOwnedObjects(self);
|
82
|
+
}
|
83
|
+
|
84
|
+
void FXRbTable::unregisterOwnedObjects(FXTable *self)
|
85
|
+
{
|
86
|
+
FXRbScrollArea::unregisterOwnedObjects(self);
|
87
|
+
FXRbUnregisterRubyObj(self->getColumnHeader());
|
88
|
+
FXRbUnregisterRubyObj(self->getRowHeader());
|
89
|
+
for(FXint r=0; r<self->getNumRows(); r++){
|
90
|
+
for(FXint c=0; c<self->getNumColumns(); c++){
|
91
|
+
FXRbUnregisterRubyObj(self->getItem(r,c));
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
void FXRbText::unregisterOwnedObjects(FXText *self)
|
97
|
+
{
|
98
|
+
FXRbScrollArea::unregisterOwnedObjects(self);
|
99
|
+
}
|
100
|
+
|
101
|
+
void FXRbTreeList::unregisterOwnedObjects(FXTreeList *self)
|
102
|
+
{
|
103
|
+
FXRbScrollArea::unregisterOwnedObjects(self);
|
104
|
+
|
105
|
+
// Save pointer(s) to the soon-to-be-destroyed items
|
106
|
+
FXObjectListOf<FXTreeItem> items;
|
107
|
+
FXRbTreeList::enumerateItems(self->getFirstItem(), self->getLastItem(), items);
|
108
|
+
|
109
|
+
// Now zero-out pointers held by still-alive Ruby objects
|
110
|
+
for (FXint i = 0; i < items.no(); i++) FXRbUnregisterRubyObj(items[i]);
|
111
|
+
}
|
112
|
+
|
data/lib/fox12/core.rb
CHANGED
@@ -271,6 +271,15 @@ module Fox
|
|
271
271
|
def appendRows(numRows=1, notify=false)
|
272
272
|
insertRows(self.numRows, numRows, notify)
|
273
273
|
end
|
274
|
+
|
275
|
+
# Select cell at (_row_, _col_).
|
276
|
+
# If _notify_ is +true+, a +SEL_SELECTED+ message is sent to the table's message target
|
277
|
+
# after the item is selected.
|
278
|
+
# Raises IndexError if either _row_ or _col_ is out of bounds.
|
279
|
+
#
|
280
|
+
def selectItem(row, col, notify=false)
|
281
|
+
selectRange(row, row, col, col, notify)
|
282
|
+
end
|
274
283
|
end
|
275
284
|
end
|
276
285
|
|
data/lib/fox12/version.rb
CHANGED
data/rdoc-sources/FXTable.rb
CHANGED
@@ -430,6 +430,9 @@ module Fox
|
|
430
430
|
# indicating which cells (if any) were added as a result of the resize; and,
|
431
431
|
# * a +SEL_CHANGED+ message will be sent to the table's message target
|
432
432
|
# indicating the new current cell.
|
433
|
+
#
|
434
|
+
# Raises ArgError if either _numRows_ or _numCols_ is less than zero.
|
435
|
+
#
|
433
436
|
def setTableSize(numRows, numCols, notify=false) ; end
|
434
437
|
|
435
438
|
#
|
@@ -578,10 +581,49 @@ module Fox
|
|
578
581
|
# Raises IndexError if either _row_ or _column_ is out of bounds.
|
579
582
|
def getItemData(row, column) ; end
|
580
583
|
|
581
|
-
#
|
584
|
+
#
|
585
|
+
# Extract the text from all the cells in the specified range and
|
586
|
+
# return the result as a string.
|
587
|
+
# Within the result string, each column's text is delimited by
|
588
|
+
# the character specified by _cs_, and each row is delimited by
|
589
|
+
# the character specified by _rs_.
|
590
|
+
# To reverse this operation (i.e. set the table cells' text
|
591
|
+
# from a string), see #overlayText.
|
592
|
+
# Raises IndexError if any of _startrow_, _endrow_, _startcol_
|
593
|
+
# or _endcol_ is out of bounds.
|
594
|
+
#
|
595
|
+
# ==== Parameters:
|
596
|
+
#
|
597
|
+
# +startrow+:: the starting row for the range [Integer]
|
598
|
+
# +endrow+:: the ending row for the range [Integer]
|
599
|
+
# +startcol+:: the starting column for the range [Integer]
|
600
|
+
# +endcol+:: the ending column for the range [Integer]
|
601
|
+
# +cs+:: the character to insert at each column break [String]
|
602
|
+
# +rs+:: the character to insert at each row break [String]
|
603
|
+
#
|
582
604
|
def extractText(startrow, endrow, startcol, endcol, cs='\t', rs='\n'); end
|
583
605
|
|
584
|
-
#
|
606
|
+
#
|
607
|
+
# Overlay the text for the cells in the specified range with
|
608
|
+
# the fields specified in _text_.
|
609
|
+
# Within the _text_ string, each column's text should delimited by
|
610
|
+
# the character specified by _cs_, and each row should be delimited by
|
611
|
+
# the character specified by _rs_.
|
612
|
+
# To reverse this operation (i.e. extract the table cells' text
|
613
|
+
# into a string), see #extractText.
|
614
|
+
# Raises IndexError if any of _startrow_, _endrow_, _startcol_
|
615
|
+
# or _endcol_ is out of bounds.
|
616
|
+
#
|
617
|
+
# ==== Parameters:
|
618
|
+
#
|
619
|
+
# +startrow+:: the starting row for the range [Integer]
|
620
|
+
# +endrow+:: the ending row for the range [Integer]
|
621
|
+
# +startcol+:: the starting column for the range [Integer]
|
622
|
+
# +endcol+:: the ending column for the range [Integer]
|
623
|
+
# +text+:: the text containing the new cell text [String]
|
624
|
+
# +cs+:: the character to insert at each column break [String]
|
625
|
+
# +rs+:: the character to insert at each row break [String]
|
626
|
+
#
|
585
627
|
def overlayText(startrow, endrow, startcol, endcol, text, cs='\t', rs='\n'); end
|
586
628
|
|
587
629
|
# Return +true+ if the cell at position (_r_, _c_) is a spanning cell.
|
data/tests/TC_FXTable.rb
CHANGED
@@ -164,14 +164,16 @@ public
|
|
164
164
|
|
165
165
|
def setup
|
166
166
|
super(self.class.name)
|
167
|
-
@table = FXTable.new(mainWindow
|
168
|
-
@customTable = CustomTable.new(mainWindow
|
167
|
+
@table = FXTable.new(mainWindow)
|
168
|
+
@customTable = CustomTable.new(mainWindow)
|
169
169
|
populateTable
|
170
170
|
end
|
171
|
-
|
171
|
+
|
172
|
+
=begin
|
172
173
|
def test_setTableSize
|
173
174
|
100.times { loadLog } # this should be enough to do it
|
174
175
|
end
|
176
|
+
=end
|
175
177
|
|
176
178
|
def test_getCellColor
|
177
179
|
assert_nothing_raised {
|
@@ -234,19 +236,19 @@ public
|
|
234
236
|
def test_updateRange
|
235
237
|
@table.setTableSize(5, 5)
|
236
238
|
assert_nothing_raised {
|
237
|
-
@table.updateRange(0,
|
239
|
+
@table.updateRange(0, 4, 0, 4)
|
238
240
|
}
|
239
241
|
assert_raises(IndexError) {
|
240
|
-
@table.updateRange(-1,
|
242
|
+
@table.updateRange(-1, 0, 0, 0) # startRow < 0
|
241
243
|
}
|
242
244
|
assert_raises(IndexError) {
|
243
|
-
@table.updateRange(0,
|
245
|
+
@table.updateRange(0, 5, 0, 0) # endRow >= numRows
|
244
246
|
}
|
245
247
|
assert_raises(IndexError) {
|
246
|
-
@table.updateRange(0,
|
248
|
+
@table.updateRange(0, 0, -1, 0) # startCol < 0
|
247
249
|
}
|
248
250
|
assert_raises(IndexError) {
|
249
|
-
@table.updateRange(0,
|
251
|
+
@table.updateRange(0, 0, 0, 5) # endCol >= numColumns
|
250
252
|
}
|
251
253
|
end
|
252
254
|
|
@@ -313,7 +315,7 @@ public
|
|
313
315
|
@table.removeColumns(@table.numColumns)
|
314
316
|
}
|
315
317
|
end
|
316
|
-
|
318
|
+
|
317
319
|
def test_getColumnX
|
318
320
|
@table.setTableSize(5, 5)
|
319
321
|
assert_raises(IndexError) {
|
@@ -323,10 +325,10 @@ public
|
|
323
325
|
@table.getColumnX(0)
|
324
326
|
}
|
325
327
|
assert_nothing_raised {
|
326
|
-
@table.getColumnX(
|
328
|
+
@table.getColumnX(4)
|
327
329
|
}
|
328
330
|
assert_raises(IndexError) {
|
329
|
-
@table.getColumnX(
|
331
|
+
@table.getColumnX(5)
|
330
332
|
}
|
331
333
|
end
|
332
334
|
|
@@ -355,114 +357,44 @@ public
|
|
355
357
|
@table.getRowY(0)
|
356
358
|
}
|
357
359
|
assert_nothing_raised {
|
358
|
-
@table.getRowY(
|
360
|
+
@table.getRowY(4)
|
359
361
|
}
|
360
362
|
assert_raises(IndexError) {
|
361
|
-
@table.getRowY(
|
363
|
+
@table.getRowY(5)
|
362
364
|
}
|
363
365
|
end
|
364
|
-
|
366
|
+
|
365
367
|
def test_setRowY
|
366
368
|
@table.setTableSize(5, 5)
|
367
369
|
assert_raises(IndexError) {
|
368
|
-
@table.setRowY(-1, 0)
|
370
|
+
@table.setRowY(-1, 0) # out of bounds
|
369
371
|
}
|
370
372
|
assert_nothing_raised {
|
371
|
-
@table.setRowY(0, 0)
|
373
|
+
@table.setRowY(0, 0) # top edge
|
372
374
|
}
|
373
375
|
assert_nothing_raised {
|
374
|
-
@table.setRowY(5, 0)
|
375
|
-
}
|
376
|
-
assert_raises(IndexError) {
|
377
|
-
@table.setRowY(6, 0)
|
376
|
+
@table.setRowY(5, 0) # bottom edge
|
378
377
|
}
|
379
|
-
end
|
380
|
-
|
381
|
-
def test_setLeadingRows
|
382
|
-
@table.setTableSize(5, 5)
|
383
|
-
@table.trailingRows = 2
|
384
378
|
assert_raises(IndexError) {
|
385
|
-
@table.
|
379
|
+
@table.setRowY(6, 0) # out of bounds
|
386
380
|
}
|
387
|
-
|
388
|
-
@table.leadingRows = 0
|
389
|
-
}
|
390
|
-
assert_nothing_raised {
|
391
|
-
@table.leadingRows = @table.numRows - @table.trailingRows
|
392
|
-
}
|
393
|
-
assert_raises(IndexError) {
|
394
|
-
@table.leadingRows = @table.numRows - @table.trailingRows + 1
|
395
|
-
}
|
396
|
-
end
|
397
|
-
|
398
|
-
def test_setLeadingCols
|
399
|
-
@table.setTableSize(5, 5)
|
400
|
-
@table.trailingColumns = 2
|
401
|
-
assert_raises(IndexError) {
|
402
|
-
@table.leadingColumns = -1
|
403
|
-
}
|
404
|
-
assert_nothing_raised {
|
405
|
-
@table.leadingColumns = 0
|
406
|
-
}
|
407
|
-
assert_nothing_raised {
|
408
|
-
@table.leadingColumns = @table.numColumns - @table.trailingColumns
|
409
|
-
}
|
410
|
-
assert_raises(IndexError) {
|
411
|
-
@table.leadingColumns = @table.numColumns - @table.trailingColumns + 1
|
412
|
-
}
|
413
|
-
end
|
414
|
-
|
415
|
-
def test_setTrailingRows
|
416
|
-
@table.setTableSize(5, 5)
|
417
|
-
@table.leadingRows = 2
|
418
|
-
assert_raises(IndexError) {
|
419
|
-
@table.trailingRows = -1
|
420
|
-
}
|
421
|
-
assert_nothing_raised {
|
422
|
-
@table.trailingRows = 0
|
423
|
-
}
|
424
|
-
assert_nothing_raised {
|
425
|
-
@table.trailingRows = @table.numRows - @table.leadingRows
|
426
|
-
}
|
427
|
-
assert_raises(IndexError) {
|
428
|
-
@table.trailingRows = @table.numRows - @table.leadingRows + 1
|
429
|
-
}
|
430
|
-
end
|
431
|
-
|
432
|
-
def test_setTrailingCols
|
433
|
-
@table.setTableSize(5, 5)
|
434
|
-
@table.leadingColumns = 2
|
435
|
-
assert_raises(IndexError) {
|
436
|
-
@table.trailingColumns = -1
|
437
|
-
}
|
438
|
-
assert_nothing_raised {
|
439
|
-
@table.trailingColumns = 0
|
440
|
-
}
|
441
|
-
assert_nothing_raised {
|
442
|
-
@table.trailingColumns = @table.numColumns - @table.leadingColumns
|
443
|
-
}
|
444
|
-
assert_raises(IndexError) {
|
445
|
-
@table.trailingColumns = @table.numColumns - @table.leadingColumns + 1
|
446
|
-
}
|
447
|
-
end
|
448
|
-
|
449
|
-
def test_overridden_setColumnWidth
|
450
|
-
# What can we do to simulate a call to setColumnWidth?
|
451
|
-
end
|
381
|
+
end
|
452
382
|
|
453
|
-
def
|
454
|
-
|
383
|
+
def test_extractText
|
384
|
+
@table.setTableSize(2, 2)
|
385
|
+
@table.setItemText(0, 0, "(0, 0)")
|
386
|
+
@table.setItemText(0, 1, "(0, 1)")
|
387
|
+
@table.setItemText(1, 0, "(1, 0)")
|
388
|
+
@table.setItemText(1, 1, "(1, 1)")
|
389
|
+
assert_equal("(0, 0)\t(0, 1)\n(1, 0)\t(1, 1)\n", @table.extractText(0, 1, 0, 1))
|
455
390
|
end
|
456
|
-
|
457
|
-
def
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
# assert_raises(OverrideError) {
|
465
|
-
# @customTable.handle(nil, FXSEL(SEL_MOTION, 0), event)
|
466
|
-
# }
|
391
|
+
|
392
|
+
def test_overlayText
|
393
|
+
@table.setTableSize(2, 2)
|
394
|
+
@table.overlayText(0, 1, 0, 1, "(0, 0)\t(0, 1)\n(1, 0)\t(1, 1)\n")
|
395
|
+
assert_equal("(0, 0)", @table.getItemText(0, 0))
|
396
|
+
assert_equal("(0, 1)", @table.getItemText(0, 1))
|
397
|
+
assert_equal("(1, 0)", @table.getItemText(1, 0))
|
398
|
+
assert_equal("(1, 1)", @table.getItemText(1, 1))
|
467
399
|
end
|
468
400
|
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.
|
2
|
+
rubygems_version: 0.8.6
|
3
3
|
specification_version: 1
|
4
4
|
name: fxruby
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.2.
|
7
|
-
date: 2005-
|
6
|
+
version: 1.2.5
|
7
|
+
date: 2005-03-01
|
8
8
|
summary: FXRuby is the Ruby binding to the FOX GUI toolkit.
|
9
9
|
require_paths:
|
10
10
|
- ext/fox12
|
@@ -265,6 +265,7 @@ files:
|
|
265
265
|
- ext/fox12/text_wrap.cpp
|
266
266
|
- ext/fox12/treelist_wrap.cpp
|
267
267
|
- ext/fox12/ui_wrap.cpp
|
268
|
+
- ext/fox12/unregisterOwnedObjects.cpp
|
268
269
|
- ext/fox12/include/FXMemoryBuffer.h
|
269
270
|
- ext/fox12/include/FXRb4Splitter.h
|
270
271
|
- ext/fox12/include/FXRbAccelTable.h
|