Hello community,
here is the log from the commit of package treeline for openSUSE:Factory checked in at 2016-02-25 22:05:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/treeline (Old)
and /work/SRC/openSUSE:Factory/.treeline.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "treeline"
Changes:
--------
--- /work/SRC/openSUSE:Factory/treeline/treeline.changes 2015-04-10 10:20:36.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.treeline.new/treeline.changes 2016-02-26 00:46:22.000000000 +0100
@@ -1,0 +2,31 @@
+Tue Feb 16 12:07:09 UTC 2016 - mkravec@suse.com
+
+- Update to version 2.0.2
+ * Bug Fixes:
+ - Fixed a major regression in 2.0.1 that broke data editors for
+ most specialized field types (number, math, boolean, choice, etc.)
+ - Reduce the amount of work that a single undo command removes
+ from editors in the data edit view.
+ - Fixed a bug that prevented setting the unique ID reference
+ field on a newly created data type.
+ - Preserve hard newlines in text fields when converting TreeLine
+ 1.4.x files to this version.
+ - Fix problems preserving expand/collapse node states when
+ indenting and unindenting nodes.
+ * Updates:
+ - Added methods to the plugin interface that allow general
+ program options to be queried and changed.
+ - Improve text table import error messages by including the line
+ number where the problem is found.
+ - Modified the Treepad file import to use SpacedText fields to more
+ closely match Treepad formatting.
+ - An optional plugin was written that can export files to the
+ Treepad text file format.
+ - The TreeLine icon was replaced with a new one. Thanks to
+ David Reimer for contributing the artwork.
+ - The German and Portuguese GUI translations were updated.
+ - Updated the long text sample file to include the SpacedText field
+ type, and added a conditional equation to the math sample file.
+ - Updated the Math Field section of the documentation.
+
+-------------------------------------------------------------------
Old:
----
treeline-1.9.7.tar.gz
New:
----
treeline-2.0.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ treeline.spec ++++++
--- /var/tmp/diff_new_pack.diyO4p/_old 2016-02-26 00:46:23.000000000 +0100
+++ /var/tmp/diff_new_pack.diyO4p/_new 2016-02-26 00:46:23.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package treeline
#
-# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,24 +17,24 @@
Name: treeline
+Version: 2.0.2
+Release: 0
Summary: Versatile Tree-Style Outliner for Defining Custom Data Schemas
License: GPL-2.0+
Group: Productivity/Office/Other
-Version: 1.9.7
-Release: 0
Url: http://treeline.bellz.org
-BuildRequires: perl
-BuildRequires: python3-devel
-BuildRequires: update-desktop-files
-BuildRequires: fdupes
-Requires: python3-qt4
Source0: http://sourceforge.net/projects/treeline/files/%{version}/treeline-%{version}.tar.gz
-Source1: %name.desktop
-Source2: x-%name.desktop
-Source3: x-%name-gz.desktop
+Source1: %{name}.desktop
+Source2: x-%{name}.desktop
+Source3: x-%{name}-gz.desktop
Source4: x-treepad.desktop
Source5: treeline.png
Source99: treeline-rpmlintrc
+BuildRequires: fdupes
+BuildRequires: perl
+BuildRequires: python3-devel
+BuildRequires: update-desktop-files
+Requires: python3-qt4
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildArch: noarch
@@ -58,16 +58,16 @@
toolkit, which makes it very portable.
%prep
-%setup -n TreeLine
+%setup -q -n TreeLine
for i in source/*.py; do
- sed -i "s|#!/usr/bin/env python|#!/usr/bin/python|g" "$i"
+ sed -i "s|#!%{_bindir}/env python|#!%{_bindir}/python|g" "$i"
done
find source/ -type f -name '*.py' | while read f; do
case $f in
*/treeline.py) continue;;
esac
- %__perl -i -n -e 'print unless m,^#!, and 1..1' "$f"
+ perl -i -n -e 'print unless m,^#!, and 1..1' "$f"
done
%build
@@ -76,18 +76,20 @@
python3 install.py -x \
-p "%{_prefix}" \
-d "%{_docdir}/%{name}" \
- -b "%{buildroot}"
+ -b %{buildroot}
-python3 -c "import compileall; compileall.compile_dir('%{buildroot}%{_prefix}/lib/treeline',2,ddir='%{_prefix}/lib/treeline')"
+pushd %{buildroot}%{python_sitearch}
+python3 -c "import compileall; compileall.compile_dir('%{buildroot}%{_libexecdir}/treeline',2,ddir='%{_libexecdir}/treeline')"
+popd
-%__install -d "%{buildroot}%{_datadir}/mimelnk/application"
-%__install -m0644 \
+install -d "%{buildroot}%{_datadir}/mimelnk/application"
+install -m0644 \
"%{SOURCE2}" \
"%{SOURCE3}" \
"%{SOURCE4}" \
"%{buildroot}%{_datadir}/mimelnk/application/"
-%__install -D -m0644 "%{SOURCE5}" "%{buildroot}%{_datadir}/pixmaps/treeline.png"
+install -D -m0644 "%{SOURCE5}" "%{buildroot}%{_datadir}/pixmaps/treeline.png"
%suse_update_desktop_file -i treeline Office ProjectManagement
++++++ treeline-1.9.7.tar.gz -> treeline-2.0.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/doc/documentation.trl new/TreeLine/doc/documentation.trl
--- old/TreeLine/doc/documentation.trl 2015-03-28 00:09:23.000000000 +0100
+++ new/TreeLine/doc/documentation.trl 2015-10-03 20:20:31.000000000 +0200
@@ -1,11 +1,11 @@
<?xml version='1.0' encoding='utf-8'?>
-<HEADINGS formathtml="y" item="y" line0="{*Name*}" line1="<b>{*Name*}</b>" tlversion="1.9.7" uniqueid="treeline_documentation">
+<HEADINGS formathtml="y" item="y" line0="{*Name*}" line1="<b>{*Name*}</b>" tlversion="2.0.2" uniqueid="treeline_documentation">
<Name idref="y" type="Text">TreeLine Documentation</Name>
<HEADINGS item="y" uniqueid="introduction_1">
<Name>Introduction</Name>
<PARAGRAPH icon="bullet_2" item="y" line0="{*Name*}" line1="{*Text*}" uniqueid="version">
<Name idref="y" type="Text">Version</Name>
-<Text lines="8" type="Text">This document covers TreeLine, Version 1.9.7, released March 29, 2015 by Doug Bell.</Text>
+<Text lines="8" type="Text">This document covers TreeLine, Version 2.0.2, released October 3, 2015 by Doug Bell.</Text>
</PARAGRAPH>
<PARAGRAPH item="y" uniqueid="why_treeline">
<Name>Why TreeLine?</Name>
@@ -192,6 +192,14 @@
<Name>Fonts</Name>
<Text>Fonts used for editing and output can be customized.</Text>
</BULLETS>
+<BULLETS item="y" uniqueid="languages">
+<Name>Languages</Name>
+<Text>The user interface is available in English, German and Portuguese.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="plugins">
+<Name>Plugins</Name>
+<Text>Plugin extension modules can be loaded to further customize TreeLine.</Text>
+</BULLETS>
</HEADINGS>
<HEADINGS item="y" uniqueid="system_requirements">
@@ -477,9 +485,9 @@
<br />
In equations, date fields are represented by the number of days since January 1, 1970, and time fields are the number of seconds since midnight. So date fields can be subtracted to give the number of days elapsed, and numbers of days can be added to or subtracted from dates to result in new dates. Time fields can be subtracted to give the number of seconds elapsed, and numbers of seconds can be added to or subtracted from times to result in new times.<br />
<br />
-The "if" comparison operator can be used to make the result depend on the value of another field. The expression is written as "<true value> if <condition> else <false value>".<br />
+The "if" comparison operator can be used to make the result depend on the value of another field. The expression is written as "true_value if condition else false_value". Of course, the "true_value", "condition" and "false_value" strings must be replaced with valid fields or expressions. If this operator is inserted from the operator list (under comparisons), it will include parenthesis as placeholders. These parenthesis are optional in the equations.<br />
<br />
-The "join" text function is used to combine text from several other fields (or from child nodes). The first argument to the function is a separator string that is placed between each piece of text. The remaining argument(s) are the text to be joined.<br />
+The "join" text function is used to combine text from several other fields (or from child nodes). The first argument to the function is a separator string that is placed between each piece of text. The remaining argument(s) are the text to be joined.<br />
<br />
By default, math fields are shown in the data edit view, but they are read-only. To hide them, uncheck the "Show math fields in the Data Edit View" box under "Tools > General Options > Features Available".<br />
<br />
@@ -750,6 +758,109 @@
</HEADINGS>
<HEADINGS item="y" uniqueid="revision_history">
<Name>Revision History</Name>
+<HEADINGS item="y" uniqueid="october_3_2015_-_release_202_new_stable">
+<Name>October 3, 2015 - Release 2.0.2 (new stable release)</Name>
+
+<Name>Bug Fixes</Name>
+<BULLETS item="y" uniqueid="data_edit_regression">
+<Name>Data edit regression</Name>
+<Text>Fixed a major regression in 2.0.1 that broke data editors for most specialized field types (number, math, boolean, choice, etc.)</Text>
+</BULLETS>
+
+
+<Name>Compatibility Notes</Name>
+<BULLETS item="y" uniqueid="file_format_2">
+<Name>File format</Name>
+<Text>There are some file format changes between TreeLine 1.4.x and this version of TreeLine.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="file_conversion_2">
+<Name>File conversion</Name>
+<Text>Older files opened in this version are automatically converted when saved.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="file_compatibility_2">
+<Name>File compatibility</Name>
+<Text>Files saved in this version may not be fully compatible with TreeLine 1.4.x.</Text>
+</BULLETS>
+
+</HEADINGS>
+<HEADINGS item="y" uniqueid="september_26_2015_-_release_201_new_stable">
+<Name>September 26, 2015 - Release 2.0.1 (new stable release)</Name>
+
+<Name>Updates</Name>
+<BULLETS item="y" uniqueid="plugin_options">
+<Name>Plugin options</Name>
+<Text>Added methods to the plugin interface that allow general program options to be queried and changed.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="table_import_errors">
+<Name>Table import errors</Name>
+<Text>Improve text table import error messages by including the line number where the problem is found.</Text>
+</BULLETS>
+
+
+<Name>Bug Fixes</Name>
+<BULLETS item="y" uniqueid="data_edit_undo">
+<Name>Data edit undo</Name>
+<Text>Reduce the amount of work that a single undo command removes from editors in the data edit view.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="configuration_changes">
+<Name>Configuration changes</Name>
+<Text>Fixed a bug that prevented setting the unique ID reference field on a newly created data type.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="legacy_newline_convert">
+<Name>Legacy newline convert</Name>
+<Text>Preserve hard newlines in text fields when converting TreeLine 1.4.x files to this version.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="indent_expand_status">
+<Name>Indent expand status</Name>
+<Text>Fix problems preserving expand/collapse node states when indenting and unindenting nodes.</Text>
+</BULLETS>
+
+</HEADINGS>
+<HEADINGS item="y" uniqueid="may_17_2015_-_release_200_new_stable_release">
+<Name>May 17, 2015 - Release 2.0.0 (new stable release)</Name>
+
+<Name>Updates</Name>
+<BULLETS item="y" uniqueid="treepad_import_update">
+<Name>Treepad import update</Name>
+<Text>Modified the Treepad file import to use SpacedText fields to more closely match Treepad formatting.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="treepad_export">
+<Name>Treepad export</Name>
+<Text>An optional plugin was written that can export files to the Treepad text file format.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="new_icon">
+<Name>New icon</Name>
+<Text>The TreeLine icon was replaced with a new one. Thanks to David Reimer for contributing the artwork.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="translation_updates">
+<Name>Translation updates</Name>
+<Text>The German and Portuguese GUI translations were updated.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="sample_file_updates">
+<Name>Sample file updates</Name>
+<Text>Updated the long text sample file to include the SpacedText field type, and added a conditional equation to the math sample file.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="documentation_update">
+<Name>Documentation update</Name>
+<Text>Updated the Math Field section of the documentation.</Text>
+</BULLETS>
+
+
+<Name>Compatibility Notes</Name>
+<BULLETS item="y" uniqueid="file_format">
+<Name>File format</Name>
+<Text>There are some file format changes between TreeLine 1.4.x and this version of TreeLine.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="file_conversion">
+<Name>File conversion</Name>
+<Text>Older files opened in this version are automatically converted when saved.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="file_compatibility_1">
+<Name>File compatibility</Name>
+<Text>Files saved in this version may not be fully compatible with TreeLine 1.4.x.</Text>
+</BULLETS>
+
+</HEADINGS>
<HEADINGS item="y" uniqueid="march_29_2015_-_release_197_unstable">
<Name>March 29, 2015 - Release 1.9.7 (unstable development snapshot)</Name>
@@ -789,21 +900,6 @@
<Text>Fixed a focus problem that made the pull-downs in choice and boolean field editors unusable on Linux.</Text>
</BULLETS>
-
-<Name>Compatibility Notes</Name>
-<BULLETS item="y" uniqueid="file_format_1">
-<Name>File format</Name>
-<Text>There are some file format changes between TreeLine 1.4.x and this version of TreeLine.</Text>
-</BULLETS>
-<BULLETS item="y" uniqueid="file_conversion_1">
-<Name>File conversion</Name>
-<Text>Older files opened in this version are automatically converted when saved.</Text>
-</BULLETS>
-<BULLETS item="y" uniqueid="file_compatibility">
-<Name>File compatibility</Name>
-<Text>Files saved in this version may not be fully compatible with TreeLine 1.4.x.</Text>
-</BULLETS>
-
</HEADINGS>
<HEADINGS item="y" uniqueid="march_10_2015_-_release_196_unstable">
<Name>March 10, 2015 - Release 1.9.6 (unstable development snapshot)</Name>
Files old/TreeLine/icons/toolbar/32x32/helpabout.png and new/TreeLine/icons/toolbar/32x32/helpabout.png differ
Files old/TreeLine/icons/toolbar/32x32/treeline.png and new/TreeLine/icons/toolbar/32x32/treeline.png differ
Files old/TreeLine/icons/toolbar/32x32/treelogo.png and new/TreeLine/icons/toolbar/32x32/treelogo.png differ
Files old/TreeLine/icons/tree/treelogo.png and new/TreeLine/icons/tree/treelogo.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/samples/110en_sample_basic_longtext.trl new/TreeLine/samples/110en_sample_basic_longtext.trl
--- old/TreeLine/samples/110en_sample_basic_longtext.trl 2015-02-01 21:14:57.000000000 +0100
+++ new/TreeLine/samples/110en_sample_basic_longtext.trl 2015-05-10 20:31:10.000000000 +0200
@@ -1,21 +1,28 @@
<?xml version='1.0' encoding='utf-8'?>
-<ROOT childtype="PLAIN_TEXT" item="y" line0="{*Name*}" line1="{*Name*}" tlversion="1.9.0" uniqueid="Text_Fields">
+<ROOT item="y" line0="{*Name*}" line1="{*Name*}" tlversion="1.9.7" uniqueid="Text_Fields">
<Name idref="y" type="Text">Text Fields</Name>
<Name idref="y" type="Text">Similar to Treepad</Name>
-<Text lines="12" type="Text">This file provides a single long text field for each node.
-This is similar to how the Treepad program on windows is usually used.</Text>
+<Text lines="12" type="Text">This file provides a single long text field for each node. This is similar to how the Treepad program on windows is usually used.</Text>
<Name>Regular text field</Name>
-<Text>The most commonly used field type is regular text. Formatting such as <b>bold</b>, <i>itallics</i>, <span style="font-size:x-large">font </span><span style="font-size:large">sizes</span> and <span style="color:#aa0000">font colors</span> can be used from the Edit menu.</Text>
+<Text>The most commonly used field type is regular text. Formatting such as <b>bold</b>, <i>italics</i>, font sizes and <span style="color:#aa0000">font colors</span> can be used from the Edit menu.<br />
+<br />
+It preserves carriage return spaces, but not multiple spaces within a line.</Text>
-
+
<Name idref="y" type="Text">HTML text field</Name>
-<Text lines="12" type="HtmlText">An HTML field allows tags such as <i>itallics</i> to be added manually.
+<Text lines="12" type="HtmlText">An HTML field allows tags such as <i>italics</i> to be added manually.
It does not preserve white space.
Characters like <, >, and & must be escaped.</Text>
+
+<Name idref="y" type="Text">Spaced text field</Name>
+<Text lines="12" type="SpacedText">A spaced text field preserves all white space.
+
+It does not allow character formatting.</Text>
+
</ROOT>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/samples/330en_sample_math_fields.trl new/TreeLine/samples/330en_sample_math_fields.trl
--- old/TreeLine/samples/330en_sample_math_fields.trl 2015-02-01 21:14:57.000000000 +0100
+++ new/TreeLine/samples/330en_sample_math_fields.trl 2015-05-10 20:32:44.000000000 +0200
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
-
+
<PartNumber type="Text">123456</PartNumber>
<Name idref="y" type="Text">Widget Top Assembly</Name>
<Level format="#" type="Number">1</Level>
@@ -13,12 +13,13 @@
<Cost eqn="sum({*&Cost*}) + {*LaborCost*}" format="0.00" prefix="$" type="Math">10.040000000000001</Cost>
<TotalCost eqn="{**TotalCost*}" format="0.00" prefix="$" type="Math">23.89</TotalCost>
<PercentCost eqn="{*Cost*} / {*TotalCost*} * 100" format="0" suffix="%" type="Math">42.02595228128925</PercentCost>
-<PART item="y" line0="{*PartNumber*} {*Name*}" line1="Part {*PartNumber*}" line2="{*Name*}" line3="Assembly Level: {*Level*}" line4="Cost: {*Cost*}" line5="Percent Cost: {*PercentCost*}" uniqueid="lever">
+<PART item="y" line0="{*PartNumber*} {*Name*}" line1="Part {*PartNumber*}" line2="{*Name*}" line3="Assembly Level: {*Level*}" line4="Cost: {*Cost*}" line5="Percent Cost: {*PercentCost*}" line6="Cost Level: {*CostLevel*}" uniqueid="lever">
<PartNumber type="Text">987654</PartNumber>
<Name idref="y" type="Text">Lever</Name>
<Level eqn="{**Level*} + 1" format="#" type="Math">3</Level>
<Cost format="0.00" prefix="$" type="Number">5.4</Cost>
<PercentCost eqn="{*Cost*} / {**TotalCost*} * 100" format="0" suffix="%" type="Math">22.60359983256593</PercentCost>
+<CostLevel eqn="('Low') if ({*PercentCost*} < 20) else ('High')" resulttype="text" type="Math">High</CostLevel>
</PART>
<PART item="y" uniqueid="lever_bolt">
<PartNumber>998877</PartNumber>
@@ -26,6 +27,7 @@
<Level>3</Level>
<Cost>2.89</Cost>
<PercentCost>12.097111762243616</PercentCost>
+<CostLevel>Low</CostLevel>
</PART>
</ASSEMBLY>
<ASSEMBLY item="y" uniqueid="bracket_assembly">
@@ -42,6 +44,7 @@
<Level>3</Level>
<Cost>6.2</Cost>
<PercentCost>25.952281289242364</PercentCost>
+<CostLevel>High</CostLevel>
</PART>
<PART item="y" uniqueid="bracket_pin">
<PartNumber>665544</PartNumber>
@@ -49,6 +52,7 @@
<Level>3</Level>
<Cost>1.9</Cost>
<PercentCost>7.95311845960653</PercentCost>
+<CostLevel>Low</CostLevel>
</PART>
</ASSEMBLY>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/dataeditview.py new/TreeLine/source/dataeditview.py
--- old/TreeLine/source/dataeditview.py 2015-03-21 19:07:20.000000000 +0100
+++ new/TreeLine/source/dataeditview.py 2015-10-03 20:20:31.000000000 +0200
@@ -80,6 +80,7 @@
super().__init__(parent)
self.editorClickPos = None
self.lastEditor = None
+ self.prevNumLines = -1
def paint(self, painter, styleOption, modelIndex):
"""Paint the Data Edit Cells with support for rich text.
@@ -166,6 +167,14 @@
if hasattr(editor, 'setLinkFromNode'):
self.parent().internalLinkSelected.connect(editor.
setLinkFromNode)
+ # viewport filter required to catch mouse events for undo limits
+ try:
+ editor.viewport().installEventFilter(self)
+ except AttributeError:
+ try:
+ editor.lineEdit().installEventFilter(self)
+ except AttributeError:
+ pass
self.lastEditor = editor
return editor
return super().createEditor(parent, styleOption, modelIndex)
@@ -208,10 +217,14 @@
cell = self.parent().item(modelIndex.row(), modelIndex.column())
if isinstance(cell, DataEditCell):
if editor.modified:
- undo.DataUndo(cell.node.modelRef.undoList, cell.node, True,
- cell.field.name)
+ newText = editor.contents()
+ numLines = newText.count('\n')
+ skipUndoAvail = numLines == self.prevNumLines
+ self.prevNumLines = numLines
+ undo.DataUndo(cell.node.modelRef.undoList, cell.node,
+ skipUndoAvail, cell.field.name)
try:
- cell.node.setData(cell.field, editor.contents())
+ cell.node.setData(cell.field, newText)
except ValueError:
editor.setErrorFlag()
self.parent().nodeModified.emit(cell.node)
@@ -281,17 +294,20 @@
key = QtGui.QKeySequence(event.modifiers() | event.key())
view.shortcutEntered.emit(key)
return True
- if (event.type() == QtCore.QEvent.FocusOut and
- event.reason() in (QtCore.Qt.MouseFocusReason,
- QtCore.Qt.TabFocusReason,
- QtCore.Qt.BacktabFocusReason) and
- (not hasattr(editor, 'calendar') or
- not editor.calendar or not editor.calendar.isVisible()) and
- (not hasattr(editor, 'intLinkDialog') or
- not editor.intLinkDialog or
- not editor.intLinkDialog.isVisible())):
- self.parent().setCurrentCell(-1, -1)
- return True
+ if event.type() == QtCore.QEvent.MouseButtonPress:
+ self.prevNumLines = -1 # reset undo avail for mose cursor changes
+ if event.type() == QtCore.QEvent.FocusOut:
+ self.prevNumLines = -1 # reset undo avail for any focus loss
+ if (event.reason() in (QtCore.Qt.MouseFocusReason,
+ QtCore.Qt.TabFocusReason,
+ QtCore.Qt.BacktabFocusReason) and
+ (not hasattr(editor, 'calendar') or
+ not editor.calendar or not editor.calendar.isVisible()) and
+ (not hasattr(editor, 'intLinkDialog') or
+ not editor.intLinkDialog or
+ not editor.intLinkDialog.isVisible())):
+ self.parent().setCurrentCell(-1, -1)
+ return True
return super().eventFilter(editor, event)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/imports.py new/TreeLine/source/imports.py
--- old/TreeLine/source/imports.py 2015-03-09 00:31:57.000000000 +0100
+++ new/TreeLine/source/imports.py 2015-09-23 03:39:06.000000000 +0200
@@ -67,6 +67,7 @@
filePath -- the file to import from if give, otherwise prompt user
"""
self.filePath = filePath
+ self.errorMessage = ''
def interactiveImport(self, addWarning=False):
"""Prompt the user for import type & proceed with import.
@@ -98,6 +99,7 @@
defaultFilePath, filters)
if not self.filePath:
return None
+ self.errorMessage = ''
try:
QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
model = getattr(self, method)()
@@ -110,10 +112,12 @@
format(self.filePath))
return None
if not model:
+ message = _('Error - improper format in {0}').format(self.filePath)
+ if self.errorMessage:
+ message = '{0}\n{1}'.format(message, self.errorMessage)
+ self.errorMessage = ''
QtGui.QMessageBox.warning(QtGui.QApplication.activeWindow(),
- 'TreeLine',
- _('Error - improper format in {0}').
- format(self.filePath))
+ 'TreeLine', message)
return model
def importTabbedText(self):
@@ -156,7 +160,9 @@
headings = [self.correctFieldName(name) for name in
f.readline().split('\t')]
tableFormat.addFieldList(headings, True, True)
+ lineNum = 1
for line in f:
+ lineNum += 1
if line.strip():
entries = line.split('\t')
node = treenode.TreeNode(model.root, typeName, model)
@@ -167,6 +173,8 @@
except IndexError:
pass # fewer entries than headings is OK
if entries:
+ self.errorMessage = (_('Too many entries on Line {0}').
+ format(lineNum))
return None # abort if too few headings
node.setUniqueId(True)
return model
@@ -232,6 +240,7 @@
model = treemodel.TreeModel(True)
tpFormat = model.formats[treeformats.defaultTypeName]
tpFormat.addFieldList([textFieldName], False, True)
+ tpFormat.fieldDict[textFieldName].changeType('SpacedText')
with open(self.filePath, 'r',
encoding=globalref.localTextEncoding) as f:
textList = f.read().split('<end node> 5P9i0s8y19Z')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/plugininterface.py new/TreeLine/source/plugininterface.py
--- old/TreeLine/source/plugininterface.py 2015-03-09 00:31:57.000000000 +0100
+++ new/TreeLine/source/plugininterface.py 2015-09-18 02:45:24.000000000 +0200
@@ -1196,6 +1196,35 @@
#**************************************************************************
+ # General Options:
+ #**************************************************************************
+
+ def getOptionValue(self, name):
+ """Return the value of a general option item.
+
+ See the setGenOptionDefaults function in the optiondefaults.py file
+ for available name values.
+ Raises a KeyError if the name is incorrect.
+ Arguments:
+ name -- the key name for the option
+ """
+ return globalref.genOptions.getValue(name)
+
+ def changeOptionValue(self, name, value):
+ """Set the name of an existing option to the given value.
+
+ Returns True if changed, False if value is the same or not permitted.
+ See the setGenOptionDefaults function in the optiondefaults.py file
+ for available name values.
+ Raises a KeyError if the name is incorrect.
+ Arguments:
+ name -- the key name for the option
+ value -- a value or a string defining the value
+ """
+ return globalref.genOptions.changeValue(name, value)
+
+
+ #**************************************************************************
# Internal methods (not for plugin use):
#**************************************************************************
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/setup.py new/TreeLine/source/setup.py
--- old/TreeLine/source/setup.py 2015-03-09 00:31:57.000000000 +0100
+++ new/TreeLine/source/setup.py 2015-05-17 21:54:20.000000000 +0200
@@ -38,5 +38,5 @@
'excludes': ['*.pyc'],
'icon': '../win/treeline.ico',
'include_msvcr': True,
- 'build_exe': '../../TreeLine-1.9'}},
+ 'build_exe': '../../TreeLine-2.0'}},
executables = [Executable('treeline.py', base=base)])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/treeline.py new/TreeLine/source/treeline.py
--- old/TreeLine/source/treeline.py 2015-03-21 17:31:08.000000000 +0100
+++ new/TreeLine/source/treeline.py 2015-10-03 20:20:31.000000000 +0200
@@ -13,7 +13,7 @@
#******************************************************************************
__progname__ = 'TreeLine'
-__version__ = '1.9.7'
+__version__ = '2.0.2'
__author__ = 'Doug Bell'
docPath = None # modified by install script if required
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/treemaincontrol.py new/TreeLine/source/treemaincontrol.py
--- old/TreeLine/source/treemaincontrol.py 2015-03-09 00:31:57.000000000 +0100
+++ new/TreeLine/source/treemaincontrol.py 2015-05-15 03:59:30.000000000 +0200
@@ -124,7 +124,7 @@
for path in iconPathList],
['', '32x32', '16x16'])
globalref.toolIcons.loadAllIcons()
- windowIcon = globalref.toolIcons.getIcon('treeline')
+ windowIcon = globalref.toolIcons.getIcon('treelogo')
if windowIcon:
QtGui.QApplication.setWindowIcon(windowIcon)
globalref.treeIcons = icondict.IconDict(iconPathList, ['', 'tree'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/treenode.py new/TreeLine/source/treenode.py
--- old/TreeLine/source/treenode.py 2015-02-01 21:14:57.000000000 +0100
+++ new/TreeLine/source/treenode.py 2015-09-20 03:11:26.000000000 +0200
@@ -224,6 +224,38 @@
"""
globalref.mainControl.currentTreeView().collapse(self.index())
+ def saveExpandViewStatus(self, statusDict=None):
+ """Recursively save the expand/collapse status of nodes in the branch.
+
+ Saves by unique ID, returns dictionary.
+ Arguments:
+ statusDict -- a dictionary to save in
+ """
+ if not statusDict:
+ statusDict = {}
+ statusDict[self.uniqueId] = self.isExpanded()
+ for node in self.childList:
+ statusDict = node.saveExpandViewStatus(statusDict)
+ return statusDict
+
+ def restoreExpandViewStatus(self, statusDict):
+ """Recursively restore expand/collapse status of nodes in the branch.
+
+ Arguments:
+ statusDict -- a dictionary with status by unique ID
+ """
+ try:
+ expanded = statusDict[self.uniqueId]
+ if expanded:
+ self.expandInView()
+ else:
+ self.collapseInView()
+ return
+ except KeyError:
+ pass
+ for node in self.childList:
+ node.restoreExpandViewStatus(statusDict)
+
def setUniqueId(self, validate=False):
"""Add this node's unique ID to the ref dict.
@@ -571,9 +603,12 @@
newParent = self.prevSibling()
if not newParent:
return
+ oldParent = self.parent
+ expandDict = oldParent.saveExpandViewStatus()
self.parent.childList.remove(self)
newParent.childList.append(self)
self.parent = newParent
+ oldParent.restoreExpandViewStatus(expandDict)
def unindent(self):
"""Make this node its parent's next sibling.
@@ -581,10 +616,12 @@
sibling = self.parent
if not sibling or not sibling.parent:
return
+ expandDict = sibling.parent.saveExpandViewStatus()
self.parent.childList.remove(self)
pos = sibling.parent.childList.index(sibling) + 1
sibling.parent.childList.insert(pos, self)
self.parent = sibling.parent
+ sibling.parent.restoreExpandViewStatus(expandDict)
def wordSearch(self, wordList, titleOnly=False):
"""Return True if all words in wordlist are found in this node's data.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/treeopener.py new/TreeLine/source/treeopener.py
--- old/TreeLine/source/treeopener.py 2015-02-01 21:14:57.000000000 +0100
+++ new/TreeLine/source/treeopener.py 2015-09-12 23:30:35.000000000 +0200
@@ -146,7 +146,10 @@
text = node.data.get(field.name, '')
if text:
if field.typeName == 'Text' and not field.oldHasHtml:
- node.data[field.name] = xml.sax.saxutils.escape(text)
+ text = text.strip()
+ text = xml.sax.saxutils.escape(text)
+ text = text.replace('\n', '<br />\n')
+ node.data[field.name] = text
elif (field.typeName == 'ExternalLink' and
field.oldTypeName):
dispName = node.data.get(field.oldLinkAltField, '')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/undo.py new/TreeLine/source/undo.py
--- old/TreeLine/source/undo.py 2015-03-09 00:31:57.000000000 +0100
+++ new/TreeLine/source/undo.py 2015-09-12 23:30:35.000000000 +0200
@@ -244,8 +244,12 @@
del self.treeFormats.fieldRenameDict[newName]
self.treeFormats.changedIdFieldTypes = set()
for typeObj in newTreeFormats.changedIdFieldTypes:
- self.treeFormats.changedIdFieldTypes.add(self.treeFormats[typeObj.
- name])
+ try:
+ self.treeFormats.changedIdFieldTypes.add(self.
+ treeFormats[typeObj.
+ name])
+ except KeyError: # not needed for new tree formats
+ pass
listRef.addUndoObj(self, clearRedo)
def undo(self, redoRef):
Files old/TreeLine/translations/treeline_de.qm and new/TreeLine/translations/treeline_de.qm differ
Files old/TreeLine/translations/treeline_pt.qm and new/TreeLine/translations/treeline_pt.qm differ