1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 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 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 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 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 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 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 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 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006
|
Network Editor Release Notes
=============================
-----------------------------
Release 1.5.4 (November 2008)
-----------------------------
itemBase.py
- fixed some problems in UserPanel related to the No GUI execution of networks
- added NoGuiNetworkBuilder, NoGuiVPE and NoGuiExec classes to have an
editor object even when we run withjout the gui. This enables the execution
of network with macros as standalone programs
- added class Communicator to support socket-based communication with network
running as independent process
- named the network process-`pid` during remote execution
- added debug=False to to node.run() method
- added select() to read from stdin and execute commands gotten from there
when the network runs in a detached process
- introduced button "run saved network without gui"
- running network can be stopped with user panel
items.py
- now for macro network we are looking for the main network name
- introduce typeManager for network when running without gui
- run network withoout gui with separate stop button
- saves raw values (r"") for types.StringType
- introduced splitratio for connections
- repaired blocking feature to enable data loop
- corrected small bug when saving nodes inheriting original node
- got rid of the reference to global 'Vision.ed' in OpalUtil
net.py
-now run pause and stop buttons correspond to the current network
-corrected saving categories for webservices
- added the clientSocket variable in the main scope of the server when command is executed.
This variable point to the socket from which the command came from and can be used
to specify where results should be sent back.
-added test for empty connection list when calling select (necessary on windows)
-added class Communicator to support socket-based communication with network
running as independent process
- named the network process-`pid` during remote execution
- added GANTT diagram for time profile and debug capability
- added node.nameInlastSavedNetwork to save name of node in network executed
in a remote process
- introduce typeManager for network when running without gui
- added help to run network without gui
- default network are in imediate mode
- repaired blocking feature to enable data loop
- now Network.freeze simply set runOnNewData to False
- added arg -w on command line of stand alone network to run with or without vision
ports.py
-repaired special ports icon position
simpleNE.py
-added resourceFolder argument which defaults to 'mgltools'
-solved rare problem when node name already exists
-changed "continuous run" into "immediate run"
-quit open in the correct window when several instance of vision are running
widgets.py
-repaired griding of widget when it moves between node and param panel
-now for macro network we are looking for the main network name
-added bindToRemoteProcessNode(), def _procTrigger() and
def unbindFromRemoteProcess() to support binding GUI to remote process
execution
-----------------------------
Releases 1.4.6 - 1.5.2 (July 2008)
-----------------------------
--Moved from Numeric to numpy
Glyph.py
- new file
LICENSE
- -added TSRI to the copyright part.
customizedWidgets.py
- mousewheel in scrollabled canvas
- now widgetsOnBackWindowsCanGrabFocus is in mglutil.gui
datatypes.py
- added type 'object' as synonym for 'None'
- repaired casting to list
itemBase.py
- better updateGuiCycle and solved re-run of stopped node
- when the network stops, the last node hasn't run properly,
so it is marked with forceExecution 1
- corrected error on postedmenu when delete connection
- introduced "soft run" in vision
- now parameter panel otion is immediate by default
- first commit of NOGUI execution of networks
- set runOnNewData to True while implementing, got rid of autorun
- now parameter panel otion is not immediate by default
- now networks runs in saved directory
items.py
- network don't freeze anymore, just the nodes in it
- repaired networkDefaultDirectory
- now network reloads the opal web categories
- set runOnNewData to True while implementing, got rid of autorun
- renamed runOnConnect into runOnNewData and generalized it to new data and set it to false
- stop network from running when we rebind widget at loading time
- in function node pos args can have widgets too
- correct rebind widget
- now pmv command can be cut and pasted
- repaired saving of RunFunction node
- added filebrowser for input files in function node
- added combobox for selection in function node
- now parameter panel option is not immediate by default
- now widget's labels can have ballons
- repaired saving of pmvviewernode
- now FunctionNode can be saved with importString
- readded construct parameter
- FunctionNode takes function or string
- introduced node Split
- now FuntionNode has dynamic output ports
- started dynamic output ports
- selfGeneratingNode is now FunctionNode and eval is applied on the commandString
- now selfgeneratingnode is not self-subclassed but use args on addNode()
- corrected menu label
- corrected bug in adding input port to doit function
- made sure adt and pmv run without vision
- introduced networkDefaultDirectory
- automated reload of modified libraries
- correct reload of overwritten nodes in libraries
- user library can be reloaded
macros.py
- solves issue with saving macro nodes introduced buy noGuiRun
- now runOnNewData is using reference_value
- set runOnNewData to True while implementing, got rid of autorun
net.py
- better updateGuiCycle and solved re-run of stopped node
- when the network stops, the last node hasn't run properly,
- so it is marked with forceExecution 1
- introduced "soft run" in vision
- now runOnNewData is using reference_value
- now the nodes are not ran anymore when we load the network
- corrected save for FunctionNode
- adjusted menu shortcuts
- removed adding of local path to sys.path
- corrected filename for self running network
ports.py
- objects can retain their current position when reparenting in vision
- stop network from running when we rebind widget at loading time
- corrected save for FunctionNode
- corrected getdescr, originalDatatype is returned only for inputport
simpleNE.py
- better filter for open and save dialogs
- repaired networkDefaultDirectory
- runOnNewData has an icon
- now we can loadNetwork without taking the focus
- now fonts are automatically saved in vision
- repaired vision shell
- now vision can re-run
- argument "ins" can be pass to runVision()
- added keyboard shortcuts
- better font size on mac osx
widgets.py
- repaired networkDefaultDirectory
- now runOnNewData is using reference_value
- renamed runOnConnect into runOnNewData and generalized it to new data and set it to false
- added combobox for selection in function node
- corrected default value for labelBalloon
- corrected save for FunctionNode
- now widget's labels can have ballons
- removed useless NERadioButton
- made sure adt and pmv run without vision
- corrected widget filename path on win32
- repaired configure of initialValue
-----------------------------
Release 1.4.5 (May 2007)
-----------------------------
New features, bug fixes:
customizedWidgets.py
- introduced widgetsOnBackWindowsCanGrabFocus
now, on windows, the widget grab the focus only if the window is already activated.
items.py
- corrected bug when copying node with deleted port
- corrected widget delete when port has been deleted and recreated
macros.py
- changed contextual menu 'Delete' network into 'Close' to solve bug
net.py
- now we run the nodes before the connection (in the saved network)
ports.py
- now, default port data is 'no data yet'
simpleNE.py
- added "Open Recent" menu
widgets.py
- introduced node ScrolledList
- fixed to set _modified =True in NEEntry Button widget.
Now entry widgets in saved networks remember values
-----------------------------
Release 1.4.4 (December 2006)
-----------------------------
New features, bug fixes:
- moved user panels to the network and added delete user panel handling
- added datatype 'coord2'
- introduced self launchable network depending on the existence of a user panel
- moved user panels to the network and added delete user panel handling
- removed menubar in user panel, made buttons instead
- introduced placer in user panels
- repaired bug when deleting connections, the callback can destroy some connections in the list
- we don't restore the pmvViewer states on first run (only for regular viewer)
- moved n.beforeRemovingFromNetwork() after deleteConnections()
- introduced node StickImageNE
- we don't run automaticaly the saved network anymore
- corrected the writing of launchVisionToRunNetworkAsApplication()
- moved user panels to the network and added delete user panel handling
- introduced self launchable network depending on the existence of a user panel
- introduced placer in user panels
- revised saving network as application
- a safer saveNetwork()
------------------------------
Release 1.4.3 (September 2006)
------------------------------
New features, changes:
- Network connections are highlighted in pink when mouse is over it.
- node 'show/hide GUI' is deprecated;
- reparenting menu is only for geometry nodes;
- modified 'Next parenting' to affect any parenting;
- introduced new SelectMultipleGeometry;
- improved casting and validation;
- suppressed unused ObjectType;
- now loading of network in pmv shows both regular and pmv networks at the same time;
- introduced pmv vision network as _pmvnet.py;
- now when you delete a macro, the currentNetwork doesn't change anymore;
Bug fixes:
- corrected glflabels when several labels are given;
- corrected name proposal when saving new node;
- corrected saving of nodes for userlib;
-----------------------------
Release 1.4.2 (May 2006)
------------------------------
Changes and bug fixes:
Editor.py
-corrected small bug to allow node saving when we delete a port
-now macroNode only permits single connection ports.
-corrected bug when deleting output ports
-corrected bug when renaming ports
datatypes.py
-corrected validate in ArrayType
-introduced StringType and ObjectType based on anyarraytype
-now node save source code generates necessary lines to load synonyms
-introduced Types files per library
-corrected getTypeFromClass to return the instance of AnyArrayType for None
-add indice2 type
itemBase.py
-corrected bug related to "show legend" and apply.
-corrected bug when closing colormap settings
-corrected bug when closing colormap settings
items.py
-cascade menu for FastLibs in vision toobar, smaller icon for diamond ports,
smaller and toggable port's icons in the library GUI
-now the nodes are drawn with their ports in the GUI as in the networks
-better comments and menu lines on "save source code"
-mRequiredTypes and mRequiredSynonyms are class variables in the class node
-we prepare the save node to load types and widgets when instanciated
(we still need to find a solution to load synonyms).
Commented code that displays port in library vision gui
-corrected bug when saving colormap node source code,
-reduced default colormap node to 16 values
-corrected bug on saving doit function when saving macros,
-corrected bug on automatic loading of nodes in mydefaultlib
-object's states are now saved at the end of the networks,
- fixed NetworkNode.outputData to allow outputing None
-added try: arround connections in saved networks
-dependent code for nodes doesn't save doit if not necessary,
when the port name changes, it changes in the code as well
-corrected bug when saving colormap node source code
net.py
-corrected bug on saving doit function when saving macros,
-corrected bug on automatic loading of nodes in mydefaultlib
-now parenting geometry nodes can be done througth macros
-added try except around masternet run() in saved network
ports.py
-corrected getDataStr to accept single values as Numeric array
-changed gray to make not required ports more differentiable
-adjusted port's display, now not required ports have a gray outline
-input ports outline in vision library gui are black, gray or red.
-modifications to prepare drawing the port icons in the vision gui
simpleNE.py
-added self.pyshell.begin() and self.pyshell.close()
Release 1.4.1 (March 2006)
-------------------------------
What's New since 1.3alpha2:
--------------------------
-In datatypes.py:
* moved colorRGB and colorsRGB types to NetworkEditor.datatypes;
* moved the type InstanceMatricesType from NetworkEditor to DejaVuNodes;
* added support of moving widget to macroParamPanel
-In itemBase.py:
* replaced 2 calls to c.tk.call by a single one in NetworkItems.run
* modified port.getData to always print message if editor.verbose is true
and data is bad or missing
* modified NetworkNodeBase.computeFunction to turn node outline orange if data is missing
* made NetworkItem.run check for 'Stop' status to avoid overwriting orange
outline with execution failed outline color
-In items.py:
* added a check for the existance of initialValue in widgetDescr of unbound
widgets when generating source code.
* added node.ischild(node) method to find out if a given node is a child of another
one. This is used in net.runNodes to remove children nodes of nodes who
return 'STOP'
* added safeName() method to NetworkNodeBase to remove all bad symbols from
node name so we can use node name in saving network.
* added NetworkNodeBase.getUniqueNodeName() to return a unique name usable
as a variable in a saved network. Changed all definitions of nodeName
to call this method instead
* modified getNodeSourceCodeForWidgetValue to Set widget with run=1. That way
Root nodes will present the data on their output port when restored.
* modified net.getNetworkCreationSourceCode to freeze network before
connecting nodes and unfreeze after the conections are created. This avoids
running the network when it is restored.
* replaced inputPorts[] by getInputPortByName() and outputPorts[] by getOutputPortByName()
-In net.py:
* modified scheduling to propagate node return value. Returning 'stop'
prevents children nodes from running again
* added new accelerator <CTRL-f> to freeze/unfreeze the current network.
* added self.runOnConnect attribute to network to be able to prevent
execution of the hold node upon connection. This was causing macros such
as rotateScene to execute when restored from a file
* made node2 runn upon deletion of a connection only if port2 is not required.
* modified net.deleteConnections to set _newdata to True in input port of
child node and schedule the child node's execution
* check if the mouse moved only a few pixels upon releasing left mouse button.
If we are below a threshold we assume we did not move. This is usefull for
deselecting selected nodes for people who don't have a steady hand (who move
the mouse when releasing the mouse button, or when the mouse pad is very soft
and the mouse moves because it is pressed in the pad...)
* added self.runOnConnect attribute to network to be able to prevent
execution fo the chold node upon connection. This was causing macros such
as rotateScene to execute when restored from a file
* modified special connection to use stipple gray75 and with 4 by default
* added comment in net.runNodes about status==0 .. I am not sure when this
happens if at all .. and if we shoudl do the same as for stop or not
* modified runNodes method to no longer break out of the loop running nodes
when a node returns 'Stop', but rather remove all the children of this node
from the list of nodes to be run.
* modified getNodeSourceCodeForWidgetValue to Set widget with run=1. That way
Root nodes will present the data on their output port when restored.
* modified net.getNetworkCreationSourceCode to freeze network before
connecting nodes and unfreeze after the conections are created. This avoids
running the network when it is restored.
-In ports.py:
* changed PortsDescr.append to accept eiter a single dict or a list of kwy=values
-In widgets.py:
* added newValueCallback method to set _newdata when widget is modified so that portHasNewData
works properly. This function is now the command bound to the widgets instead of scheduleNode
which is called by newValueCallback.
* added lockedOnPort key word for widgets allowing a programmer to disable
widget unbinding. This facilitates writting the doit() method of the node
as it can be expected that the widget is always there
-In Editor.py:
* added CodeEditorIdle_python24 class for editing files with python2.5 idlelib.EditorWindow
-In macros.py:
* made InputPortNode the last root in the list to be run by InputPortNode and
removed OutputPortNode from this list as it is not a root !
* modified MacroNetwork.getNodeDefinitionSourceCode to also freeze before
creating connections and unfreexing after
* modified getHeaderBlock, getInitBlock, getBeforeBlock, getAfterBlock in
MacroNode to ignore self.library because when we get source code we want
to subclass MacroNode and not the original Macro
*
BugFixes:
---------
-In Editor.py:
* older versions of idlelib which may be distributed with Python cause problems with the source code
editor. Modified the test in Editor.py so that it will fail when an older idlelib is detected and
use the Pmw code editor instead.
-In itemBase.py:
* fixed frozen color when selecting/unselecting and when coloring
by Node Library. Even if the node is colored by library, it is colored blue when frozen.
-In items.py:
* refresh network did not color the node icons correctly. Frozen color or node library color
was lost. This was fixed in buildNodeIcon().
* fixed Node's updateCode() method which as assuming there is no space
between doit() and the following self.
* fixed safeName to avoid names starting with a number
-In macros.py:
* saving a macro with no connections would raise an exception. The problem was that we defined
"macroNetworkName" inside the test if we have len(connections). Moved the definition outside
of the test
* autoRun=False was not saved for macro nodes. Fixed this.
* added macNet._originalNodes = [] and macNet._originalConnections = [] in
MacroNode.buildOriginalList to make sure that we build the list starting from
an empty list. This caused a bug in the CoarseMolSurf macro which was
written to subclass the UT_IsoDecim macro. Its beforeAddingToNetwork method
called the on of UT_IsoDecim which put its nodes into the list. then the
call to buildOriginalList at the end of beforeAddingToNetwork of the macro
appended to the lsit of nodes from UT_IsoDecim
-In widgets.py:
* fixed ScrolledText widget to save its value, and 'right-click' to pop up menu.
* fixed a bug in TkPortWidget: in the configure method we need to test if tkOptions is not None,
since this might be None and then we cannot iterate over it
Release September 1, 2004
-------------------------
What's New (compared to release Sep 18, 2003)
- added a widget editor to modify the appearance of a widget
- added a widget grid editor to modify the grid position of a widget and
to modify the label of a widget
- invisible ports are no longer taken into account when computing the position
of ports. Hiding a port (by binding a widget), or deleting a port will cause
all ports to the right to be shifted to the left.
- displaying a previously hidden port (by unbinding a widget) triggers moving
all ports right of it to the right.
- added new method updateIconPosition() to ports.py which moves the port icon
and its connections
- added new port attribute port.visible which is needed for the new
setPortPosX()
- made widget background colored
- addInputPort() and addOutputPort() methods in items.py now generate unique
port names and correctly update node.inputPortsDescr/outputPortsDescr
- update ports.py buildIcons() method to be more clever when resize the node
icon, added support for SpecialPorts, and most importantly using the
correct tags for Tkinter
- added new method destroyIcon() to ports.py that destroys port menu and
port icons
- moved startConnectRubberBand, drawRubberBand, createConnection from
class OutputPort to Port so that SpecialPorts (who now inherit from Port
and not from InputPort or OutputPort still work)
- cleaned up SpecialPorts:
- they no longer implement their own buildIcon() and createIcon() method
- but they implement a computePortPosX() method now
- added a new TreeView widget to introspect a node or data and replaced the
idlelib introspect GUI with this new widget, which allows us more flexibility
- added autoRun attribute to itemBase; moved frozen attribute from NetworkNode
to NetworkItems; added frozenTk and autoRunTk variable to NetworkItems;
added toggleAutoRun_cb method to NetworkItems; moved toggleFrozen_cb,
freeze and unfreeze methods from NetworkNode to NetworkItems; added check to
run method to not run nodes with autoRun==False or frozen==True;
added autoRun constructor option to NetworkItems
- added new method _setModified() to access the attribute _modified
- changed all direct access to _modified to go through this new method
- completely rewrote the saving of networks: all methods called by
getNodeDefinitionSourceCode() were rewritten. Note: older networks can still
be loaded!
- no code modification, but an organisatory change:
moved code blocks that belong together (code for saving a network,
code for generating source code)
- added a new attribute _id to NetworkNode which is a unique number and used
when saving networks
- added configure() and getDescr() to NetworkNode which is now used by
save/restore, copy/paste; changed getNodeSourceCodeForModifications() to
use the new framework with configure() a node
- added new attribute hasMoved which is set to True if the node changes its
position in a network
- show/hide special ports is now handled by the node's configure() method
- showSpecialPorts() and hideSpecialPorts() set node._modified=True
- changed attribute value self.specialPortsVisible from 0/1 to True/False
- added new method resetTags() to node which resets both _modified and
_original
- changed all getNodeSourceCodeFor<NetworkItem>() methods to use _original
- reworked the getNodeSourceCodeForPorts() method to make it more
human-readable
- adding or deleting a port does no longer set the node's _modified to True
- deleting or unbinding a widget now sets port._modified=True
We use this information now when we create code to save a network in
getNodeSourceCodeForWidgets()
- saving networks no longer sets widget values by default, but only if the
widget value is different from the class defined initialValue
- setting widget value now sets widget._modified=True
This allows to save/restore macro nodes from node libraries with much less
code to be saved (no more setting all widget values again)
- updated connection.getSourceCode: we now test if the connection goes to a
MacroInput/OutputNode, and whether we have to connect to 'new' or to an
existing port (to avoid creating new ports)
- macros now use again the getNodeDefinitionSourceCode() method to generate
a string to save data
- when saving, if we hit a macro node, we first recursively loop over all
macro networks and add all the macro nodes, then we start filling the
leaf macro networks with nodes, and connect them, then move down the tree
towards the root macro(s)
- added some "smartness" to saving macros: if the macro comes from a node
library and we just change a widget value, we might not have a handle to the
node. Thus, if we reach such a case we now check if the node has already
be declared, if not, we add a line.
- deleted all methods in MacroNetwork since we no longer need them (the editLog
is gone)
- changed signature of method getNodeSourceCode(): we no longer pass a
keyword nodeNumber and forLib
- added a new base class NetworkItemBase from which all network items inherit
- changed attribute .editor to be a weakref and added mechanism to remain
backwards compatible (even though this is a weakref, we can still access
it as it would be a normal attribute, we do not need to call it ->
not object.editor()
- changed access to .editor to use the new method getEditor()
- moved the method updateCode() from ports.py to items.py, subclassed this in
macros, changed code wherever this was accessed
- the paramPanel immediate flag can now be set through the node's configure()
method with the new keyword paramPanelImmediate. Also, the node's getDescr()
method returns this new keyword. This is used to save the status fo the
immediate flag of the param Panel.
- added new class UserPanel
- added support to UserPanel for moving widgets and labels using arrow keys
(after middle clicking to select widget to move)
- added try/except statments to saved networks allowing to restore partial
networks
- made connectNodes accept either port numbers or port names
- added 2 metods to node class getInputPortByName and
getOutputPortByName
- double-clicking on nodes with displayed paramPanel now hides the panel
(double-clicking again displays panel, etc.)
- added new method getSize() that returns a tuple with (width, height) of this
node, in pixels
- added blocking attribute to connections to allow for cycles
- added a new class CodeEditor that inherits from either idlelib if avialable
or from Pmw. SourceCodeEditor and CallbackEditor use this new base class
- deleted classes SourceCodeEditorIdle and SourceCodeEditorPmw in Editor.py,
fixed methods there to work with the new additions and changes
- removed show/hide Param. Panel from node menu, replaced this with a new
checkbutton entry named "Parameter Panel", added new variable paramPanelTk,
double-clicking on node to show Param. Panel also sets this variable
correctly
- added a checkbutton under Edit menu to togle splined connections on and off
- added toggleSplineConnections call back to betwork for handling checkbutton
- added setSplineConnections methos to network to set smooth option on and off
- added support to move selected nodes with arrow keys. Pressing arrow ke
moves selected subgraph 1 pixel. Pressing SHIFT+Arrow key moves 10 pixels
- made dynamic inputports of macrooutput nodes not required
- added new accelerators for some operations (such as load/save network),
create macro, etc. One can now hit CTRL+l to load a network, etc
- moved the code to force node execution upon instanciation from
Vision.VPE.endDD to NetworkEditor.net.AddNode so that nodes restored from a
file behave the same way as when they are created from a library
interactively
- clarified definition of 'waiting' for execStatus
- set execstatus to running and reset to waiting in run method
- removed attempt the acquire and release runlock in toggle pause method as
this method calls pause and resume which each do that
- added runAgain attribute to handle rerunning the network in case a run
was requested while te network is already running
- added new method deleteConnection() which accepts "node1, port1, node2, port"
(versus deleteConnections() which accepts a list of connections)
- added new method nodeIdToNumber(): network nodes now have a unique ID. This
method allows to get for a given node the current index in network.nodes
- modified connectNodes to test singleConnection is True to support 'auto' as
a valid value for this attribute
- adding a node to a network tags the network modified
- added source code to saved networks to restore user panels
Bug Fixes
- Fixed ParamPanel applyFun (was node.schedule) which would not trigger node
to run, new applyFun is node.schedule_cb, which first sets
node.forceExecution=True, then calls node.schedule()
- deletePort() method now accepts and properly propagates keyword resize
used to resize the node icon
- rewrote large parts of itemBase.deletePort() method:
- special ports are now correctly treated
- proper deletion of port icons
- proper handling of node.inputPortsDescr and node.outputPortsDescr
- proper computing portposx for remaining ports
- proper renumbering etc for remaining ports
- fixed a bug in items.py when network is refreshed and special ports are shown
the node menu correctly displays now 'hide special ports'
- fixed items.py buildIcons() method:
specialPorts buildIcons() method is now called here instead in
addSpecialPorts() method (before, we would build the icons twice)
- deleted the Port attribute "tags", which was the source of many strange
problems, for example, after refreshing a network and then moving a node
would also move port icons of other nodes, SpecialPorts would not move at
all, and others... this is now fixed
- fixed a bug when exiting with a expanded macro network: Pmw wants to set
the current network after a network was deleted which would fail here
since the macro's main network was already deleted from editor.networks.
- fixed bug that caused node to run when asked to by the used if autoRun was
False
- commented out checking for new data in run since this will be done anyways
in computeFunction called by run
- fixed a bug when exiting with a expanded macro network: Pmw wants to set
the current network after a network was deleted which would fail here
since the macro's main network was already deleted from editor.networks.
- compeletly rewrote the node.move() command, which is now using the
network.moveSubGraph method, that also updates connections.
- fixed moveSubGraph() method to update connections when nodes move, added
new keyword absolute=False, that allows to move the subgraph BY dx,dy or
TO dx,dy, when absolute=True
- added new method updatePosXPosY() that sets the node's posx and posy
this method is used in quite a few instances in net.py
- bugfix: node.posx and node.posy were not set correctly. Now, when a node
is moved, we call node.updatePosXPosY() to set these two attributes
correctly. We use the upper left coordinate of node.outerBox as posx, posy
- fixed finally the problem we had that nodes move after adding to a network
when they have widgets bound. There was some very old code in buildNodeIcon
that moved a node after instanciation, but with wrong values. Fixed this,
also set initial posx, posy to 0, moved the 'move' statement from
buildIcons to buildNodeIcon where it belongs
- fixed a bug in determining the needed nodesize: if the last port was
invisible, this would not work properly
- set port attribute width, height to default None, updated this in all files
- changed behaviour of ports so that they now use the new width, height
defined in datatypes to build port icon; also updated datatypes; we no
longer need port shapes 'rect1', 'rect2', etc, but just 'rect' since
now the user can specify width, height and define the shape. Note:
currently we continue to support keywords such as 'rect1', but we ask users
to update their datatypes to use the new scheme
- refreshing a network would add duplicate menu entries to connections pulldown
menu. Fixed this by implementing a destroyIcon() method in
NetworkConnection, and in net.py deleteNodes() now calls this method
properly (instead of just looping over self.connections and set c.id=None)
as was done previously
- updated special ports to use proper icon size (8x8, not 4x4)
- saving and restoring a node with displayed special ports would fail because
we did not update the pulldown entry. Fixed this in items.py:
we now call directly the two methods show/hide special ports, rather than
calling a callback function. The two methods do implement the proper
setting of the pulldownmenu; restoring a network with nodes with special
ports connected would fail because in net.py the connectSpecialNodes()
method was not updated to find ports by names (instead of numbers)
- fixed yet another bug with special ports: if there was a connection,
refresh network would not properly restore the connection
- fixed saving nodes with unbound widgets (we now save "nodeX.unbindWidget(.."
instead of "nodeX.deleteWidget(..."
- fixed identation bug in saving networks which could cause endless loop
- fixed a bug in getNodeSourceCodeForPorts where ports where not properly
deleted if more than 1 port in a row were deleted
- bugfix in saving widget values: if the value is not of type string, we should
not put the value in quotes.
- made checking for 'stop' pause' and 'frozen' case insentitive
(scheduling nodes)
- fixed a bug in node.computeFunction that caused string arguments passed
to dynamic function to be lower-cased
- changing the data on a port now also updates the Introspect GUI
- fixed a bug in setting the source code: if we use " instead of ' the code
is no longer loadable. Using string.replace in setFunction()
- fixed a bug in saving source code: since port.getDescr() adds a key
_previousWidgetDescr if the widget of this port is unbound, this gets passed
to addInputPort(). Updated this method to accept _previousWidgetDescr and
add this as an attribute to the port. This allows the port to rebind the
widget.
- saving a node with a deleted widget now saves a lines to delete the widget,
not unbind it
- saving a node with an unbound widget now first saves a line to set the
widget value to the current value, THEN adds a line to unbind the widget.
Therefore, after rebinding the widget, one gets the previous value, not the
default value
- fixed cut/copy/paste problems with nodes inside macro networks that came
from a node library: these nodes are set _original=True and therefore
did not generate source code upon cut/copy
Fixed this problem by adding a new keyword ignoreOriginal=False to the
signature of getNodeDefinitionSourceCode() which overrides the tests in there
- saving source code of nodes that came from a node libary (like most nodes)
we now inherit from the original node. This fixes a bug where we would
loose methods that were defined in the original node.
- Moved updating the source code editor GUI into the setFunction() method
where it actually should be done. Now, configuring the node with new code
automatically updates the GUI.
- fixed a bug in copy/paste nodes inside a macro network that came from a
node library: we copied the nodes but not the connections because we did
not pass ignoreOriginal=True to the connection.getSourceCode()
Needed to update methods in macros.py, items.py and net.py
- bugfix: if only the compute function inside a macro node from a node libary
was modified, we forgot to call the checkIfNodeIsDefined() method to add
a line to get a handle to this node. This is now fixed.
- the temporary editor attribute _tmpListOfSavedNodes is now an attribute
of NetworkBuilder. This change was needed to address the issue above.
Needed to update items.py, macros.py, net.py and simpleNE.py to use this
new attribute properly
- made list of children nodes unique in scheduleChildren()
- modified node's rename method to avoid quotes in name, which could cause
problems for saving/restoring and copy/paste
- bugfix: deleting a node with an open widget editor now deletes this editor
- fixed method moveSubGraph which did not move connections properly
- fixed a bug in refreshing a network with nodes with widgets bound to node,
and the node was expanded. Prior, this would cause the node icon to be
redrawn compeletly wrong. Fixed this by hiding the widgets in node before
destroying the node.
- when we delete nodes, we do not want to update the node code signature.
Fixed this in deleteNodes()
- fixed a bug in deleteNodes() method: We were looping over the ports and
inside the loop we would delete ports from the list we were looping over.
This caused all kinds of unpredictable results:
for example, deleting a node with open editor windows (such as port editor)
would not always delete these windows.
- net.py: connectNodes now calls port's afterConnect callback BEFORE the node
is scheduled if data is present on the port
- before and after connection callbacks can now return a new connection.
This allows these callbacks to replace the connection that has been made
- check for valid callback name when editing port callback
- fixed a bug in deleteConnection(): we could reach a condition where 'conn'
was undefined. Set conn=None by default.
- prevented macro nodes and MacroInput nodes from executing when they are
added to a network (they would execute because they have no inpout ports
before connections are created).
- made input ports of MacroOutputNode singleConnection='auto' to prevent
creating a list of objects when there is a single parent
- made stop, run set the execStatus in all macro networks in addition to the
current network. This fixes the bug in which stoping a network with an
iterate in a Macro node would not stop the iteration
Backwards incompatibilities
1) Implemented much better handling of connect and disconnect events. This is
incompatible with nodes that implement a beforeConnect(), etc method:
Deleted the methods beforeConnect(), afterConnect(), beforeDisconnect() and
afterDisconnect(). Added four new keywords to Port constructor:
beforeConnect, afterConnect, beforeDisconnect, afterDisconnect. The value
for these keywords is a textstring describing the source code for the method
to be carried out (similar to the node source code). Updated configure()
method of ports to handle these new keywords. Also, fixed configure()
methods of ports: the class OutputPort did not use the configure method of
the base class. Updated connectNodes() and disconnectNodes() methods in
net.py to work with these new changes. Exposed these new features in the
port editor: one can now use idlelib or a Pmw text editor to edit the
function.
Nodes which implement a beforeConnect() etc. method need to be rewritten.
For an example, please have a look at Vision/StandardNodes.py class ListOf
Release Dezember 17, 2003
-------------------------
What's New (compared to release Sep 18, 2003)
- added try except statments around node instanciation code in saved networks
This allows restoring networks with problems.
- made connectNodes accept either port numbers or port names. The network
source code generation now uses the port's naem by default
- added 2 metods to node class getInputPortfromPortFromName and
getOutputPortfromPortFromName
- added a new getDescr() method for port description
- added a getSourceCode() method in class NetworkConnection
- commented out main menu entries to add/delete categories, to create
libraries, to add nodes to libraries. This will be re-activated in a later
release (once these things work properly)
- added optional argument updateSignature to deletePort method. Was needed for
runPmvCommand node
- added capability to delete a node proxy icon in a category frame:
added deleteNodeFromCategoryFrame() method to class NodeLibrary
This method deletes the icon and calls a new rebuildNodesInCategoryFrame()
method that first deletes all icons and rebuilds the icons
- added new method deleteSmallIcon() to items.py which deletes the node proxy
icon in a node library
- added capability to change font of various GUI components:
- changing the font for node proxies (node icons in node library windows)
- changing network node fonts now works (using refresh to rebuild icons)
Note: I do not change balloon font for ports. Don't know if I should or not
- exposed this functionality in a Form accesible through the Edit menu
- added a ChangeFont form to Forms.py
- editor.font is now a dictionary that contains the fonts descriptions of the
various gui components, also removed attribute editor.libraryFont because
this is now stored in editor.font
- added kw 'net=None' to refreshNet_cb() method in items.py
- added new method getLeafNode() to find leaf node in a nested macro
- added a couple more regression tests for load/save macros, delete networks
with macros
- made network canvas grey75 so white arrows for None type can be seen
- added methods isModified() and resetModifiedTag() to items.py
- users can no longer save a network if it is an instance of a MacroNetwork
to prevent problems (i.e. saving the macro network but not the main net)
- changed 'Color Node By Library' so that it will also color/uncolor all nodes
already present in all networks
- changing the datatype of a port now sets the flag self._modifed=True
- changed balloon help in ViPEr so that every GUI element has its own attribute
'balloons'. This fixes some problems where we have to re-create
Pmw.Balloon in order to move the yoffset, also this allows us to change
the font individually
- toolbarbutton.py needed to be updated after this change
- turned multi threading off by default
- enabled changing widget master in Editor
- fixed ParamsForm (widget editor) to only return modified values
- fixed ParamsForm to handle boolean properly
- allow None as a valid entry for int and float type (need for dial and
thumbwheel min and max)
- added 'Cancel', 'Apply' buttons to widget editor
- made widget editor destroy widget when new widget is built
- added dict of currentValues to widget editor so we only add options that
are no default values
- added a file browser button to the right of the Entry in the WithFileBrowser
widgets. This was done because on some Linux machines double-click event are
somehow lost on the Entry !
- added menu entry 'Unbind Widget' to port menu. Unbinding a widget will
add menu entry 'Rebind Widget' to port icon. This makes un- & rebinding
widgets so much easier!
- added type boolean to TypeManager
- modified validation function of data type to return True instead of 1
- made widget background colored
- made widget's label background colored
- added beforeConnect(port1, port2) and afterConnect(conn) methods to node
- changed frozen color to light cyan which helps reading text in nodes
- modified loadNetwork to replace underscores by minus
- added borderwidth=3, relief='sunken' , bg='#c3d0a6' to node.iconMaster
Bug Fixes
- fixed missing applyCmd method in PMW-based code editor
- many fixes in saving macro networks. Fixed indentation of nested macros
- many fixes for saving widgets
- fixed some issues with _previousWidgetDescr
- deleting a port now updates the node source code properly
- fixed problem in saving code for nodes that come from different files
such as done in the regression tests
- fixed a bug in setting fonts on Windows machines
- fixed deletion of nested macros
- fixed a bug in getLibraryImportCode that would fail if a node has no library
- fixed a bug in the exit_cb that would fail if a macro network is present
(i.e. red ink when exiting ViPEr)
- fixed a bug in macros where a macro could not be saved/restored if the
macro name had a space in the name
- fixed import net from NetworkEditor rather than simpleNE in macros.py
- deleting a network with a macro would not delete the macro-subnetwork
- fixed creating user libraries and adding nodes to these libraries (Note: this
functionality is currently not exposed to users, wait for next release)
- fixed a bug in deleting networks where sometimes a macro would not delete
its macro network. The problem was that in the Network.delete() method
we looped over self.nodes, but subsequently would delete an item from
self.nodes, which would result in unpredictable results. Simple fix was
to loop over a copy of this list
- fixed a bug in copy/paste nodes which occured after changes in the
getLibraryImportCode() method (the signature of this method changed)
- fixed some bugs in scaling nodes:
- we are now using the current node font rather than a system font when
scaling (which looked really ugly on some operating systems)
- show/hide widgets in node works again (sort of, this needs more work, at
least now it does show and hide the widget rather than raise an exception)
- resolved many conflicts with tags mixed up: we assigned node.iconMaster
to ports (port.iconMaster = node.iconMaster). This caused almost
unreproducible problems after 'refresh' was hit: port icons of nodes would
move when other nodes were moved, etc
- 'refresh' is supposed to reset scaling. However, we would use a wrong
relposx so port icons would end up in wrong places after refresh. This
was solved by calling setPortPosX() in createIcon() in ports.py
- 'refresh' would not reset the scaled port icons. This was because the
node's attribute scaleSum was not reset to 1.0
- creating a macro while the option 'Color Node by Library' was turned on
would fail. This is now fixed
- fixed unbind / rebind widget in class InputPort. Fixed bugs and made methods
more clever (show/hide node widgets if specified previously, etc)
- fixed default values for NEDial and NEThumbwheel in widgets.py
- fixed many things in ParamsForm (the widget editor)
- fixed bug which caused specified configuration options to be lost when
widget was rebuilt. For instance (size=60, type='int') would loose type
- fixed a bug in copy/paste nodes inside a macro network: in the method
pasteNetwork_cb() where we execute the code object, we have to pass 'net' for
self, rather than 'self'
- fixed a bug in cutting selected nodes, where the Cut and Copy buttons would
remain active and thus give the user the ability to overwrite the current
paste_buffer with an empty list. Cutting now disables the Cut and Copy
buttons
- fixed a bug in pasting nodes when all networks were deleted. The Paste button
still remains active if there is data in the paste buffer, but no exception
will be raised if the button is pressed and no network is present.
- fixed a bug in cut© nodes to prevent these operations on Macro Input-
and Output Nodes of Macro Networks. One can now safely "Select All" nodes
in a macro network and cut/copy them without copying these two nodes (which
will get automatically deselected now upon cut/copy)
Cut/Copy/Paste of Macro nodes of course still works as before
- fixed bug that caused new nodes added to a frozen network not to be frozen
- fixed a bug in widthFirstChildren
- fixed bug in connectNodes. Port descr was assumed to have datatype key.
Backwards compatible Changes (renaming of methods, attributes)
- renamed method setPortPos() to setPortPosX()
- renamed attribute modified to _modified, changed value to Boolean
- changed in macro networks how macroinput and macrooutput node are saved
- changed method getNodeDefinitionSourceCode() in MacroNode, split this in
two halfes, main work is now done in MacroNode.getNodeSourceCode()
- major overhaul of saving networks: changed the signature of all methods
involved in producing source code for saving networks
- changed again how networks are saved. Everything is much easier now, because
we add the code to import all necessary libraries at the very beginning.
Macro Nodes need no longer to save a beforeAddingToNetwork() method, they
no longer have to loop over all ports to import libraries that are needed
for port data types, and they don't have to import the libraries again in
their afterAddingToNetwork() methods since this is now done at the beginning
etc, etc, etc. Removed getLibraryImportCodeHeader method, removed
self.libraryImportCache
- moved deletePort() method from items to itemBase. Subclass this method in
items and in macros
Backwards INCOMPATIBLE Changes
- split addLibrary method of Network into addLibraryFromName and
addLibraryInstance. Addind an instance now requires to provide the module
where the instance is defined and the name (both as strings). This was needed
to generate the network descdription source code with the correct imports of
libraries.
- getLibraryImportCode was fixed in net.py and added to MacroNetwork
(macros.py)
- updated node libraries to reflect these changes
Suggested Fix for users:
Search and replace 'addLibrary' in existing saved networks with either
'addLibraryFromName' or addLibraryInstance'
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Release November 25, 2002
-------------------------
What's New
- every node now has its own param. panel. The param. panel has now an
'immediate' checkbutton (on by default: this triggers node execution upon
value changes of widgets in the param. panel), an apply button, which forces
node execution, and a dismiss button to hide the param. panel
- added multi-threaded execution model and added a lock and condition to the
network object such that iterate nodes can schedule the excution of
sub-networks for each value in their list
- added support for cut, copy and paste nodes and connections
- added selectAll (nodes) functionality
- added mechanism to dynamically load libaries
- StandardNodes are now part of the NetworkEditor
- added new nodes to StandardNodes: ScrolledText, Multi-Checkbuttons,
ChangeBackground (to change the background color of the ViPEr canvas,
call method, getattr, setattr, len, iterate
- added more documentation to many nodes
- added support for moving nodes by clicking and dragging with middle button.
When middle button is pressed on top of a node, this node becomes
temporarly selected and can be moved until the button is released.
When the button is released, the selection is restored.
- added the ability to show/hide widgets in nodes by double clicking on the
node.
- added ability to reshape connections using left mouse button
- runNodes checks whether new data is provided on at least 1 input port
before executing node. This can be overruled by setting the new
forceExecution flag. Inputports now know whether they have new data.
- scaling nodes scales the label and hides widgets when node is too small
- added eventHandler
- added new menus to simpleNE, changed old ones
- regression tests were added
Bug Fixes
- data viewer windows are now destroyed when the corresponding node is deleted
- loading and saving networks was completely reworked
- many issues in Editor.py were adressed and fixed
- nodes now resize according to the ports, the label and the widgets
- picking on node has now priority over picking on connections
- refresh now restores the highlighting of the selected nodes
- fixed bug that was not putting widgets in node to the proper location
- moved ballons help down 30 pixels, to avoid flashing when balloon appeared
over node
- fixed bug that caused widget value to disappear after show/hide/show.
Compatibility Information
- multi-threaded execution on Silicon Graphics platforms can lead to core
dump. Therefore, the user can choose to run single-threaded execution
which works fine on SGI.
Known Issues
- saving networks with macro nodes does not work currently. This will be fixed
as soon as possible
- Undo is disabled since it is currently broken
- Hyperbolic Scaling was removed from the menu since this was never working
properly
- removed show special ports entry from menu nodes as it is broken
|