Changeset 10221:33ba08489c0a in orange


Ignore:
Timestamp:
02/15/12 01:11:23 (2 years ago)
Author:
Janez Demšar <janez.demsar@…>
Branch:
default
Message:

merge

Files:
8 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeWidgets/OWWidget.py

    r9671 r10209  
    5353            self.widgetStateInfo.setFixedHeight(self.widgetStateInfo.height()) 
    5454            self.widgetStateInfoBox.hide() 
    55             def updateWidgetStateInfo(stateType, id, text): 
    56                 html = self.widgetStateToHtml(self._owInfo, self._owWarning, self._owError) 
    57                 if html: 
    58                     self.widgetStateInfoBox.show() 
    59                     self.widgetStateInfo.setText(html) 
    60                     self.widgetStateInfo.setToolTip(html) 
    61                 else: 
    62                     if not self.widgetStateInfoBox.isVisible(): 
    63                         dHeight = - self.widgetStateInfoBox.height() 
    64                     else: 
    65                         dHeight = 0 
    66                     self.widgetStateInfoBox.hide() 
    67                     self.widgetStateInfo.setText("") 
    68                     self.widgetStateInfo.setToolTip("") 
    69                     width, height = self.width(), self.height() + dHeight 
    70                     QTimer.singleShot(50, lambda :self.resize(width, height)) 
    7155                     
    72             self.connect(self, SIGNAL("widgetStateChanged(QString, int, QString)"), updateWidgetStateInfo) 
     56            self.connect(self, SIGNAL("widgetStateChanged(QString, int, QString)"), self.updateWidgetStateInfo) 
    7357         
    7458 
     
    151135        self.updateStatusBarState() 
    152136        #qApp.processEvents() 
     137         
     138    def updateWidgetStateInfo(self, stateType, id, text): 
     139        html = self.widgetStateToHtml(self._owInfo, self._owWarning, self._owError) 
     140        if html: 
     141            self.widgetStateInfoBox.show() 
     142            self.widgetStateInfo.setText(html) 
     143            self.widgetStateInfo.setToolTip(html) 
     144        else: 
     145            if not self.widgetStateInfoBox.isVisible(): 
     146                dHeight = - self.widgetStateInfoBox.height() 
     147            else: 
     148                dHeight = 0 
     149            self.widgetStateInfoBox.hide() 
     150            self.widgetStateInfo.setText("") 
     151            self.widgetStateInfo.setToolTip("") 
     152            width, height = self.width(), self.height() + dHeight 
     153            self.resize(width, height) 
     154#            QTimer.singleShot(1, lambda :self.resize(width, height)) 
    153155 
    154156    def updateStatusBarState(self): 
  • Orange/classification/tree.py

    r10075 r10208  
    108108This example works with the lenses data set: 
    109109 
    110 .. 
    111     .. literalinclude:: code/treestructure.py 
    112        :lines: 7-10 
    113  
    114 >>> import Orange 
    115 >>> lenses = Orange.data.Table("lenses") 
    116 >>> tree_classifier = Orange.classification.tree.TreeLearner(lenses) 
     110    >>> import Orange 
     111    >>> lenses = Orange.data.Table("lenses") 
     112    >>> tree_classifier = Orange.classification.tree.TreeLearner(lenses) 
    117113 
    118114The following function counts the number of nodes in a tree: 
    119115 
    120 .. 
    121     .. literalinclude:: code/treestructure.py 
    122        :lines: 12-21 
    123  
    124 >>> def tree_size(node): 
    125 ...    if not node: 
    126 ...        return 0 
    127 ... 
    128 ...    size = 1 
    129 ...    if node.branch_selector: 
    130 ...        for branch in node.branches: 
    131 ...            size += tree_size(branch) 
    132 ... 
    133 ...    return size 
     116    >>> def tree_size(node): 
     117    ...    if not node: 
     118    ...        return 0 
     119    ...    size = 1 
     120    ...    if node.branch_selector: 
     121    ...        for branch in node.branches: 
     122    ...            size += tree_size(branch) 
     123    ...    return size 
    134124 
    135125If node is None, the function above return 0. Otherwise, the size is 1 
     
    146136Trees can be printed with a simple recursive function: 
    147137 
    148 .. literalinclude:: code/treestructure.py 
    149    :lines: 26-41 
     138    >>> def print_tree0(node, level): 
     139    ...     if not node: 
     140    ...         print " "*level + "<null node>" 
     141    ...         return 
     142    ...     if node.branch_selector: 
     143    ...         node_desc = node.branch_selector.class_var.name 
     144    ...         node_cont = node.distribution 
     145    ...         print "\\n" + "   "*level + "%s (%s)" % (node_desc, node_cont), 
     146    ...         for i in range(len(node.branches)): 
     147    ...             print "\\n" + "   "*level + ": %s" % node.branch_descriptions[i], 
     148    ...             print_tree0(node.branches[i], level+1) 
     149    ...     else: 
     150    ...         node_cont = node.distribution 
     151    ...         major_class = node.node_classifier.default_value 
     152    ...         print "--> %s (%s) " % (major_class, node_cont), 
    150153 
    151154The crux of the example is not in the formatting (\\n's etc.); 
     
    160163  and its ``class_var`` is the feature whose name is printed.  Class 
    161164  distributions are printed as well (they are assumed to be stored). 
    162   The :obj:`printTree0` with a level increased by 1 to increase the 
     165  The :obj:`print_tree0` with a level increased by 1 to increase the 
    163166  indent is recursively called for each branch. 
    164167* If the node is a leaf, it prints the distribution of learning instances 
     
    171174:obj:`TreeClassifier` or a :obj:`Node` can be written as follows: 
    172175 
    173     .. literalinclude:: code/treestructure.py 
    174        :lines: 43-49 
     176    >>> def print_tree(x): 
     177    ...     if isinstance(x, Orange.classification.tree.TreeClassifier): 
     178    ...         print_tree0(x.tree, 0) 
     179    ...     elif isinstance(x, Orange.classification.tree.Node): 
     180    ...         print_tree0(x, 0) 
     181    ...     else: 
     182    ...         raise TypeError, "invalid parameter" 
    175183 
    176184It's straightforward: if ``x`` is a 
    177185:obj:`TreeClassifier`, it prints ``x.tree``; if it's :obj:`Node` it 
    178186print ``x``. If it's of some other type, 
    179 an exception is raised. The output:: 
     187an exception is raised. The output: 
    180188 
    181189    >>> print_tree(tree_classifier) 
    182     tear_rate (<15.000, 5.000, 4.000>) 
    183     : reduced --> none (<12.000, 0.000, 0.000>) 
    184     : normal 
    185        astigmatic (<3.000, 5.000, 4.000>) 
    186        : no 
    187           age (<1.000, 5.000, 0.000>) 
    188           : young --> soft (<0.000, 2.000, 0.000>) 
    189           : pre-presbyopic --> soft (<0.000, 2.000, 0.000>) 
    190           : presbyopic --> none (<1.000, 1.000, 0.000>) 
    191        : yes 
    192           prescription (<2.000, 0.000, 4.000>) 
    193           : myope --> hard (<0.000, 0.000, 3.000>) 
    194           : hypermetrope --> none (<2.000, 0.000, 1.000>) 
     190    <BLANKLINE> 
     191    tear_rate (<15.000, 4.000, 5.000>)  
     192    : normal  
     193       astigmatic (<3.000, 4.000, 5.000>)  
     194       : no  
     195          age (<1.000, 0.000, 5.000>)  
     196          : pre-presbyopic --> soft (<0.000, 0.000, 2.000>)   
     197          : presbyopic  
     198             prescription (<1.000, 0.000, 1.000>)  
     199             : hypermetrope --> soft (<0.000, 0.000, 1.000>)   
     200             : myope --> none (<1.000, 0.000, 0.000>)   
     201          : young --> soft (<0.000, 0.000, 2.000>)   
     202       : yes  
     203          prescription (<2.000, 4.000, 0.000>)  
     204          : hypermetrope  
     205             age (<2.000, 1.000, 0.000>)  
     206             : pre-presbyopic --> none (<1.000, 0.000, 0.000>)   
     207             : presbyopic --> none (<1.000, 0.000, 0.000>)   
     208             : young --> hard (<0.000, 1.000, 0.000>)   
     209          : myope --> hard (<0.000, 3.000, 0.000>)   
     210    : reduced --> none (<12.000, 0.000, 0.000>)  
    195211 
    196212The tree structure examples conclude with a simple pruning function, 
     
    201217when zero, the current node will be made a leaf: 
    202218 
    203 .. literalinclude:: code/treestructure.py 
    204    :lines: 54-62 
     219    >>> def cut_tree(node, level): 
     220    ...     if node and node.branch_selector: 
     221    ...         if level: 
     222    ...             for branch in node.branches: 
     223    ...                 cut_tree(branch, level-1) 
     224    ...         else: 
     225    ...             node.branch_selector = None 
     226    ...             node.branches = None 
     227    ...             node.branch_descriptions = None 
    205228 
    206229The function acts only when :obj:`node` and :obj:`node.branch_selector` 
     
    209232descriptions. 
    210233 
    211     >>> cutTree(tree.tree, 2) 
    212     >>> printTree(tree) 
    213     tear_rate (<15.000, 5.000, 4.000>) 
    214     : reduced --> none (<12.000, 0.000, 0.000>) 
    215     : normal 
    216        astigmatic (<3.000, 5.000, 4.000>) 
    217        : no --> soft (<1.000, 5.000, 0.000>) 
    218        : yes --> hard (<2.000, 0.000, 4.000>) 
     234    >>> cut_tree(tree_classifier.tree, 2) 
     235    >>> print_tree(tree_classifier) 
     236    <BLANKLINE> 
     237    tear_rate (<15.000, 4.000, 5.000>)  
     238    : normal  
     239       astigmatic (<3.000, 4.000, 5.000>)  
     240       : no --> soft (<1.000, 0.000, 5.000>)   
     241       : yes --> hard (<2.000, 4.000, 0.000>)   
     242    : reduced --> none (<12.000, 0.000, 0.000>)  
    219243 
    220244Setting learning parameters 
     
    223247Let us construct a :obj:`TreeLearner` to play with: 
    224248 
    225 .. literalinclude:: code/treelearner.py 
    226    :lines: 7-10 
     249    >>> import Orange 
     250    >>> lenses = Orange.data.Table("lenses") 
     251    >>> learner = Orange.classification.tree.TreeLearner() 
    227252 
    228253There are three crucial components in learning: the 
     
    234259The default stopping parameters are: 
    235260 
    236     >>> print learner.stop.max_majority, learner.stop.min_instances 
     261    >>> print learner.stop.max_majority, learner.stop.min_examples 
    237262    1.0 0.0 
    238263 
     
    243268instances, the resulting tree is smaller. 
    244269 
    245     >>> learner.stop.min_instances = 5.0 
    246     >>> tree = learner(data) 
     270    >>> learner.stop.min_examples = 5.0 
     271    >>> tree = learner(lenses) 
    247272    >>> print tree 
    248273    tear_rate=reduced: none (100.00%) 
     
    255280    |    |    prescription=hypermetrope: none (66.67%) 
    256281    |    |    prescription=myope: hard (100.00%) 
     282    <BLANKLINE> 
    257283 
    258284We can also limit the maximal proportion of majority class. 
    259285 
    260286    >>> learner.stop.max_majority = 0.5 
    261     >>> tree = learner(data) 
     287    >>> tree = learner(lenses) 
    262288    >>> print tree 
    263289    none (62.50%) 
     
    13261352:obj:`C45Node` does not know to which attribute it belongs, we need to 
    13271353convert it to a string through ``classvar``, which is passed as an extra 
    1328 argument to the recursive part of printTree. 
     1354argument to the recursive part of print_tree. 
    13291355 
    13301356For discrete splits without subsetting, we print out all attribute values 
  • Orange/clustering/hierarchical.py

    r10160 r10216  
    237237on it. 
    238238 
    239 .. literalinclude:: code/hierarchical-example.py 
    240     :lines: 1-16 
    241      
     239    >>> import Orange 
     240    >>> m = [[], 
     241    ...      [ 3], 
     242    ...      [ 2, 4], 
     243    ...      [17, 5, 4], 
     244    ...      [ 2, 8, 3, 8], 
     245    ...      [ 7, 5, 10, 11, 2], 
     246    ...      [ 8, 4, 1, 5, 11, 13], 
     247    ...      [ 4, 7, 12, 8, 10, 1, 5], 
     248    ...      [13, 9, 14, 15, 7, 8, 4, 6], 
     249    ...      [12, 10, 11, 15, 2, 5, 7, 3, 1]] 
     250    >>> matrix = Orange.misc.SymMatrix(m) 
     251    >>> root = Orange.clustering.hierarchical.HierarchicalClustering(matrix, 
     252    ...     linkage=Orange.clustering.hierarchical.AVERAGE) 
     253         
    242254``root`` is the root of the cluster hierarchy. We can print it with a 
    243255simple recursive function. 
    244256 
    245  
    246 .. literalinclude:: code/hierarchical-example.py 
    247     :lines: 18-22 
     257    >>> def print_clustering(cluster): 
     258    ...     if cluster.branches: 
     259    ...         return "(%s %s)" % (print_clustering(cluster.left), print_clustering(cluster.right)) 
     260    ...     else: 
     261    ...         return str(cluster[0]) 
    248262             
    249263The clustering looks like 
    250 :: 
    251  
    252     >>> print print_clustering(root) 
    253     (((0 4) ((5 7) (8 9))) ((1 (2 6)) 3)) 
     264 
     265    >>> print_clustering(root) 
     266    '(((0 4) ((5 7) (8 9))) ((1 (2 6)) 3))' 
    254267     
    255268The elements form two groups, the first with elements 0, 4, 5, 7, 8, 9, 
     
    263276 
    264277The following code prints the left subcluster of root. 
    265 :: 
    266278 
    267279    >>> for el in root.left: 
    268         ... print el, 
    269     0 4 5 7 8 9  
     280    ...    print el, 
     281    0 4 5 7 8 9 
    270282     
    271283Instead of printing out the first (and supposedly the only) element of 
     
    277289Object descriptions can be added with 
    278290 
    279 .. literalinclude:: code/hierarchical-example.py 
    280     :lines: 28-29 
    281      
    282 As before, let us print out the elements of the first left cluster:: 
     291    >>> root.mapping.objects = ["Ann", "Bob", "Curt", "Danny", "Eve",  
     292    ...    "Fred", "Greg", "Hue", "Ivy", "Jon"] 
     293     
     294As before, let us print out the elements of the first left cluster 
    283295 
    284296    >>> for el in root.left: 
    285         ... print el, 
     297    ...    print el, 
    286298    Ann Eve Fred Hue Ivy Jon 
    287299 
    288300Calling ``root.left.swap`` reverses the order of subclusters of 
    289 ``root.left``:: 
     301``root.left`` 
    290302 
    291303    >>> print_clustering(root) 
    292     (((Ann Eve) ((Fred Hue) (Ivy Jon))) ((Bob (Curt Greg)) Danny)) 
     304    '(((Ann Eve) ((Fred Hue) (Ivy Jon))) ((Bob (Curt Greg)) Danny))' 
    293305    >>> root.left.swap() 
    294306    >>> print_clustering(root) 
    295     ((((Fred Hue) (Ivy Jon)) (Ann Eve)) ((Bob (Curt Greg)) Danny)) 
     307    '((((Fred Hue) (Ivy Jon)) (Ann Eve)) ((Bob (Curt Greg)) Danny))' 
    296308     
    297309Let us write function for cluster pruning. 
    298310 
    299 .. literalinclude:: code/hierarchical-example.py 
    300     :lines: 42-48 
     311    >>> def prune(cluster, h): 
     312    ...     if cluster.branches: 
     313    ...         if cluster.height < h: 
     314    ...             cluster.branches = None 
     315    ...         else: 
     316    ...             for branch in cluster.branches: 
     317    ...                 prune(branch, h) 
    301318 
    302319Here we need a function that can plot leafs with multiple elements. 
    303320 
    304 .. literalinclude:: code/hierarchical-example.py 
    305     :lines: 50-54 
     321    >>> def print_clustering2(cluster): 
     322    ...     if cluster.branches: 
     323    ...         return "(%s %s)" % (print_clustering2(cluster.left), print_clustering2(cluster.right)) 
     324    ...     else: 
     325    ...         return str(tuple(cluster)) 
    306326 
    307327Four clusters remain. 
     
    309329    >>> prune(root, 5) 
    310330    >>> print print_clustering2(root) 
    311     (('Bob', 'Curt', 'Greg', 'Danny') ((('Fred', 'Hue') ('Ivy', 'Jon')) ('Ann', 'Eve'))) 
     331    (((('Fred', 'Hue') ('Ivy', 'Jon')) ('Ann', 'Eve')) ('Bob', 'Curt', 'Greg', 'Danny')) 
    312332     
    313333The following function returns a list of lists. 
    314334 
    315 .. literalinclude:: code/hierarchical-example.py 
    316     :lines: 59-69 
     335    >>> def list_of_clusters0(cluster, alist): 
     336    ...     if not cluster.branches: 
     337    ...         alist.append(list(cluster)) 
     338    ...     else: 
     339    ...         for branch in cluster.branches: 
     340    ...             list_of_clusters0(branch, alist) 
     341    ...  
     342    >>> def list_of_clusters(root): 
     343    ...     l = [] 
     344    ...     list_of_clusters0(root, l) 
     345    ...     return l 
    317346         
    318347The function returns a list of lists, in our case 
    319 :: 
    320348 
    321349    >>> list_of_clusters(root) 
    322     [['Bob', 'Curt', 'Greg'], ['Danny'], ['Fred', 'Hue', 'Ivy', 'Jon'], ['Ann', 'Eve']] 
     350    [['Fred', 'Hue'], ['Ivy', 'Jon'], ['Ann', 'Eve'], ['Bob', 'Curt', 'Greg', 'Danny']] 
    323351 
    324352If :obj:`~HierarchicalCluster.mapping.objects` were not defined the list 
    325353would contains indices instead of names. 
    326 :: 
    327354 
    328355    >>> root.mapping.objects = None 
    329356    >>> print list_of_clusters(root) 
    330     [[1, 2, 6], [3], [5, 7, 8, 9], [0, 4]] 
     357    [[5, 7], [8, 9], [0, 4], [1, 2, 6, 3]] 
    331358 
    332359Utility Functions 
  • docs/reference/rst/Orange.feature.continuization.rst

    r9372 r10205  
    11.. automodule:: Orange.feature.continuization 
     2 
     3Orange currently provides no easy-to-use methods for continuization of 
     4individual features. Documentation for 
     5:doc:`Continuization of data <Orange.data.continuization>` describes how 
     6to continuize entire data tables. 
  • install-scripts/createCommon__.btm

    r8826 r10214  
    7878    REM # pack 
    7979    cdd %SCRIPTDIR 
    80     set COMMON_NSI_OPTIONS=/DORANGEDIR=%TMPDIR\orange /DPYVER=%pyver /DNPYVER=%npver /DPARTY=%PARTY /DQTVER=%@SUBSTR[%THIRD_PARTY_DIR,2,2] install3.nsi 
     80    set COMMON_NSI_OPTIONS=/DORANGEDIR=%TMPDIR\Orange /DPYVER=%pyver /DNPYVER=%npver /DPARTY=%PARTY /DQTVER=%@SUBSTR[%THIRD_PARTY_DIR,2,2] install3.nsi 
    8181    nsis /O%TMPDIR\win-%PKG_TYPE-core-packWithNSIS-%THIRD_PARTY_DIR-py%npver.log /DOUTFILENAME="%TMPDIR\%PURE_ORANGE-py%npver.exe" %COMMON_NSI_OPTIONS %+ 
    8282    break_on_error 
  • install-scripts/createSnapshot.btm

    r9909 r10221  
    11rem # input arguments 
    22rem # %1 - folder with 3rd party software 
    3 rem # - SVN is updated to head 
     3rem # - HG repository is updated to head 
    44 
    55call updateSetVariables__.btm snapshot 
    66set WIN_SNAPSHOT=orange-win-snapshot-hg-%daystr 
    77set WIN_PYTHON_SNAPSHOT=orange-win-w-python-snapshot-hg-%daystr 
    8 set ADDON_BIOINFORMATICS_SNAPSHOT=orangeAddOn-bioinformatics-snapshot-%daystr 
    9 set ADDON_TEXT_SNAPSHOT=orangeAddOn-text-snapshot-%daystr 
    10 set SOURCE_SNAPSHOT=orange-source-snapshot-%daystr.zip 
     8set ADDON_BIOINFORMATICS_SNAPSHOT=orangeAddOn-bioinformatics-snapshot-hg-%daystr 
     9set ADDON_TEXT_SNAPSHOT=orangeAddOn-text-snapshot-hg-%daystr 
     10set SOURCE_SNAPSHOT=orange-source-snapshot-hg-%daystr.zip 
    1111 
    1212rem # update source(s) to revision HEAD 
     
    2323break_on_error 
    2424 
    25 rem # if no errors then publish on web (everything at the same time) 
    26 rem # remove any old files 
    27 REM except (%DOWNLOADDIR\orange*-snapshot-%daystr-*.exe) del %DOWNLOADDIR\orange*-snapshot-????-??-??-*.exe 
    28  
    2925rem # pack sources 
    3026cdd %TMPDIR 
     
    3935rem # build msi file 
    4036e:\Python27\python.exe setup.py bdist_msi 
     37 
    4138rem del %DOWNLOADDIR\orange-source-snapshot-????-??-??.zip 
    4239move /z dist\Orange-?.*.zip %DOWNLOADDIR\%SOURCE_SNAPSHOT 
    4340move /z dist\Orange-?.*.msi %DOWNLOADDIR\%WIN_SNAPSHOT.msi 
    4441 
     42 
     43rem # if no errors then publish on web (everything at the same time) 
     44rem # remove any old files  
     45rem # For now don't delete old versions until packaging using mercurial is better tested.    
     46REM except (%DOWNLOADDIR\orange*-snapshot-%daystr-*.exe) del %DOWNLOADDIR\orange*-snapshot-????-??-??-*.exe 
     47 
    4548rem # publish 
    4649cdd %TMPDIR 
    4750move /z *.exe %DOWNLOADDIR 
    48 if not direxist %DOWNLOADDIR\binaries mkdir %DOWNLOADDIR\binaries 
    49 move /sdz binaries %DOWNLOADDIR\binaries 
     51rem if not direxist %DOWNLOADDIR\binaries mkdir %DOWNLOADDIR\binaries 
     52rem move /sdz binaries %DOWNLOADDIR\binaries 
    5053 
    5154rem # remember new filenames 
  • install-scripts/install3.nsi

    r9425 r10221  
    3838Var PythonDir 
    3939Var AdminInstall 
     40Var SITEDIR 
    4041 
    4142Page license 
     
    174175    not_installed_before: 
    175176 
    176     StrCpy $INSTDIR  "$PythonDir\lib\site-packages\orange" 
    177     SetOutPath $INSTDIR 
    178     File /r /x .svn ${ORANGEDIR}\* 
     177    StrCpy $SITEDIR "$PythonDir\lib\site-packages" 
     178     
     179    IfFileExists "$SITEDIR\orange\orngEnviron.py" 0 no_old_orange_conflict 
     180        Rename "$SITEDIR\orange" "$SITEDIR\orange-old-backup" 
     181         
     182    no_old_orange_conflict: 
     183     
     184    StrCpy $INSTDIR  "$PythonDir\lib\site-packages\Orange" 
     185    SetOutPath "$INSTDIR" 
     186    File /r /x .hg ${ORANGEDIR}\* 
    179187 
    180188    CreateDirectory "$SMPROGRAMS\Orange" 
     
    183191    CreateShortCut "$SMPROGRAMS\Orange\Orange Reference Guide.lnk" "$INSTDIR\doc\reference\default.htm" 
    184192 
    185     CreateShortCut "$SMPROGRAMS\Orange\Orange.lnk" "$INSTDIR\" 
     193    CreateShortCut "$SMPROGRAMS\Orange\Orange.lnk" "$INSTDIR" 
    186194    CreateShortCut "$SMPROGRAMS\Orange\Uninstall Orange.lnk" "$INSTDIR\uninst.exe" 
    187195 
     
    190198    CreateShortCut "$SMPROGRAMS\Orange\Orange Canvas.lnk" "$PythonDir\pythonw.exe" "$INSTDIR\OrangeCanvas\orngCanvas.pyw" $INSTDIR\OrangeCanvas\icons\orange.ico 0 
    191199 
    192     WriteRegStr SHELL_CONTEXT "SOFTWARE\Python\PythonCore\${NPYVER}\PythonPath\Orange" "" "$INSTDIR;$INSTDIR\OrangeWidgets;$INSTDIR\OrangeCanvas" 
     200    WriteRegStr SHELL_CONTEXT "SOFTWARE\Python\PythonCore\${NPYVER}\PythonPath\Orange" "" "$INSTDIR\orng" 
    193201    WriteRegStr SHELL_CONTEXT "Software\Microsoft\Windows\CurrentVersion\Uninstall\Orange" "DisplayName" "Orange (remove only)" 
    194202    WriteRegStr SHELL_CONTEXT "Software\Microsoft\Windows\CurrentVersion\Uninstall\Orange" "UninstallString" '"$INSTDIR\uninst.exe"' 
     
    196204    WriteRegStr HKEY_CLASSES_ROOT ".ows" "" "OrangeCanvas" 
    197205    WriteRegStr HKEY_CLASSES_ROOT "OrangeCanvas\DefaultIcon" "" "$INSTDIR\OrangeCanvas\icons\OrangeOWS.ico" 
    198     WriteRegStr HKEY_CLASSES_ROOT "OrangeCanvas\Shell\Open\Command\" "" '$PythonDir\python.exe $INSTDIR\orangeCanvas\orngCanvas.pyw "%1"' 
     206    WriteRegStr HKEY_CLASSES_ROOT "OrangeCanvas\Shell\Open\Command\" "" '$PythonDir\python.exe $INSTDIR\OrangeCanvas\orngCanvas.pyw "%1"' 
    199207 
    200208    WriteUninstaller "$INSTDIR\uninst.exe" 
  • install-scripts/updateAndCall.btm

    r9909 r10211  
    2727cdd e:\orange\scripts 
    2828 
     29copy /q snapshot\Orange\doc\LICENSES license.txt 
     30 
    2931copy /q snapshot\install-scripts\* . 
     32 
     33REM # 3rd party packages should already be in qt44-3rdparty\%PYVER\ directories 
     34 
     35copy /q /s snapshot\install-scripts\qt44-3dparty qt44-3dparty 
    3036 
    3137call callCreateSnapshot.btm 
Note: See TracChangeset for help on using the changeset viewer.