Commit Graph

712 Commits

Author SHA1 Message Date
wmayer
b836712c83 Test: [skip ci] clean up documents for unit test with cross links 2022-01-15 16:34:13 +01:00
wmayer
94e2ce44b4 Test: [skip ci] add unit test with cross links
Forum thread: https://forum.freecadweb.org/viewtopic.php?f=3&t=58603
2022-01-15 14:28:08 +01:00
Yorik van Havre
e33ef084ff Merged crowdin translations 2022-01-10 11:23:59 +01:00
wmayer
26f9e7869f App: replace three boolean of CellAddress::toString() with a bitmask of enums 2022-01-09 10:39:54 +01:00
wmayer
e7c2f8b703 Spreadsheet: proper implementation of mp_subscript of Mapping protocol of PropertySheetPy 2022-01-07 19:55:21 +01:00
Mark Ganson TheMarkster
8d6ff3c07b [Spreadsheet] Use DontUseNativeColorDialog parameter when using QtCol… (#5326)
* [Spreadsheet] Use DontUseNativeColorDialog parameter when using QtColorDialog::getColor()
2022-01-05 12:23:14 +01:00
Chris Hennes
4098c88171 [Spreadsheet] Use stylesheet for alias color
When setting the text color for an invalid alias, use the Qt stylesheeet
mechanism rather than QPalette, so that it works correctly with
an applied QSS stylesheeet. Also attempt to detect a darkmode stylesheet
and use lighter shade of red so that the alias is more legible. Finally,
instead of explicitly setting the text color to black when it's valid,
reset to the original stylesheet (usually an empty string). This ensures
that in a dark stylesheet the text color is legible.

Fixes #0004803.
2021-12-29 21:49:00 -06:00
Yorik van Havre
6cb3782c03 Merged crowdin translations 2021-12-29 12:20:12 +01:00
Zheng, Lei
35d7b71466 Spreadsheet: code style change 2021-12-21 21:41:02 -07:00
Zheng, Lei
0029f3206d Spreadsheet: improve copy/cut/paste cells
Add color bound around user copy/cut ranges. Do not touch Spreadsheet
object when cutting, only do so when pasting.
2021-12-21 21:41:02 -07:00
Zheng, Lei
caa29060cf Spreadsheet: fix handling of absolute cell address 2021-12-21 21:41:02 -07:00
Zheng, Lei
bd201c82ce Spreadsheet: add menu action 'Configuration table...'
To make it easy for user to create dynamically switchable configuration
tables using spreadsheet.
2021-12-21 21:41:02 -07:00
Zheng, Lei
7d23d5b984 Spreadsheet: support mapping protocol in PropertySheetPy
Read only mapping protocol support to retrieve a range of cell values.
Expects the key to be a string of either a single cell address or a
range.
2021-12-21 21:41:02 -07:00
Chris Hennes
82759f6203 Spreadsheet: Compilation fixes for cherry-picked commits 2021-12-21 21:41:02 -07:00
Zheng, Lei
2a3951ca32 Spreadsheet: change alias handling
No longer add dynamic property for alias, simply rely on
get(Dynamic)PropertyByName() to check for aliases.

Add new API PropertyContainer::getPropertyNamedList() so that
ExpressionCompleter can discover properties with aliases.
2021-12-21 21:41:02 -07:00
Chris Hennes
79cda0a1b7 Spreadsheet: Compilation fixes for cherry-picked commits 2021-12-21 21:41:02 -07:00
Zheng, Lei
68fca40983 Spreadsheet: support cell binding
Cell binding allows one to bind a range of cells of one sheet to another
range of cells of an arbitary sheet, including any empty cells in the
range.

The binding is implemented with PropertyExpressionEngine and
PropertySheet::setPathValue(), which binds a special path of
PropertySheet, such as

    .cells.Bind.A1.D1

to an expression, such as

     tuple(.cells, <<A2>>, <<A5>>)

The A1 and D1 in the example above specifies the binding start and end
cell address. And <<A2>> and <<A5>> are the range of cells to bind to.
Note that you can use any expression that evalutes to string for the
binding destination, e.g. <<A%d>> % B1, which uses the value inside B1
to construct the binding destination. The '.cells' in the tuple shown
above is an example to bind cells of the same PropertySheet. It can be
change to to reference to any other spreadsheet, even those outside the
current document, e.g. Document#Spreadsheet001.cells
2021-12-21 21:41:02 -07:00
Zheng, Lei
3d1b9f5c90 Spreadsheet: support paste into cell range
For single range copy, the range selection when pasting determines the
start cell and the number of duplications.

For example, when copying a range A1:B2 (i.e. a 2x2 square) and pasting
into a selection of C1:C5 (i.e. a 5x1 vertical line), the square will be
duplicated once in horizontal, but twice in vertical, resulting new
cells range from C1:D4. This logic is borrowed from google sheet.

For multi-ranged copy, no multi duplication is intended. If more than
one selection range exists before pasting, only the top left cell of
the last selected range is used to determine the starting cell for
pasting. The cells will be copied with the exact cell layout keeping any
empty cells in between. This logic is different from google sheet, where
it disallows unalligned multi-ranged copy, and will condense and
eliminate any empty cells for aligned multi-range copy.
2021-12-21 21:41:02 -07:00
wmayer
e743c30f3b Add Global.h headers to modules 2021-12-18 14:06:40 +01:00
Mateusz Skowroński
a2b6f55d17 Fix Qt deprecation warning. QPrinter::setOrientation() is obsolete. 2021-12-11 18:46:29 +01:00
wmayer
67f8a4c61c Spreadsheet: fix format of table cells when used for printing, by default use landscape orientation 2021-12-05 12:16:54 +01:00
wmayer
d3a0bf018f Spreadsheet: issue 0002957: spreadsheet direct printing 2021-12-04 23:36:11 +01:00
0penBrain
d5e750d262 [Sheet][Bugfix] Reject alignment change for merged cell except top-left one 2021-11-21 20:57:33 -06:00
0penBrain
dc8f20a9e4 [Sheet] Assert non-null pointer before using it 2021-11-21 20:57:33 -06:00
0penBrain
7349eb5198 [Sheet] Prevent duplicate call to 'nonNullCellAt' 2021-11-21 20:57:33 -06:00
wmayer
9bfab4262f Mod: change error text of Python wrapper when trying to access deleted view 2021-11-21 19:57:21 +01:00
wmayer
2c701c0985 Spreadsheet: [skip ci] return Py::None() instead of Py::Object() 2021-11-20 14:40:12 +01:00
Chris Hennes
d60a0fb760 Spreadsheet: Remove unnecessary functions & files
Remove functions from they Python code for ViewProviderSpreadsheet that
are now in SheetView, and eliminate the unneded files for SheetView now
that it's being generated by hand to facilitate pseudo-inheritance.
2021-11-20 14:40:12 +01:00
Chris Hennes
79a0c6b54c Spreadsheet: Implement Python SheetView functions
Add the following functions to the Python interface of SheetView:
* selectedRanges()
* selectedCells()
* select(cell, flags)
* select(upperLeft, lowerRight, flags)
* currentIndex()
* setCurrentIndex(cell)
2021-11-20 14:40:12 +01:00
wmayer
8eb099d4e1 Gui: add MDIViewPy.cast_to_base and implement in Python wrappers for sub-classes of MDIView 2021-11-19 15:44:23 +01:00
Yorik van Havre
a26fb4db1a Merged crowdin translations 2021-11-16 17:30:39 +01:00
Zheng, Lei
14dfae0597 App: add hiddenref() expression built-in function
Any object reference inside this function is treated as hidden to
exclude it from dependency calculation. This function allows some form
of cyclic depdenency.

Merger note: renamed from "HREF" to "HIDDENREF" to avoid confusion with
the standard "hypertext reference" use of HREF.
2021-11-14 20:45:09 -06:00
wmayer
5eb97d0028 Spreadsheet: several improvements
* do not simply return with Py_None from Python handler without incrementing the ref. counter as otherwise the interpreter steals a reference and the program will crash after a while
* avoid using the plain Python C API and instead use the PyCXX API
2021-11-13 21:56:15 +01:00
wmayer
63e1f95a97 Spreadsheet: get access to the sheet view from the view provider via Python 2021-11-13 21:43:58 +01:00
wmayer
1e3b97f619 Spreadsheet: in ViewProviderSheet do not add a second member to store the Python wrapper because the base class already has it
and it invalidates the wrapper in case the it is destroyed
2021-11-13 21:34:43 +01:00
wmayer
00846945d5 SpreadSheet: fix -Wunused-parameter 2021-11-13 20:45:06 +01:00
wmayer
b308645654 SpreadSheet: fix -Winconsistent-missing-override 2021-11-13 20:41:06 +01:00
wmayer
5f7b8214e5 Spreadsheet: implement SheetViewPy that acts as sub-class of MDIViewPy 2021-11-13 20:40:32 +01:00
Chris Hennes
093f15dce5 Spreadsheet: Expose currentIndex to Python 2021-11-12 22:54:24 -06:00
Chris Hennes
37dbcf7f66 Spreadsheet: Add programmatic selection of cells
Implement modifying the current selection programmatically via the
ViewProvider object in both C++ and Python. This enables unit testing of
GUI tasks that require a selection, and improves scriptability of
Spreadsheet.
2021-11-12 17:33:39 -06:00
Chris Hennes
179c6b540e Spreadsheet: Minor code cleanup 2021-11-12 13:31:05 -06:00
Jose Luis Cercos-Pita
16bbe12336 Expose the selected cells to Python 2021-11-12 13:19:03 -06:00
Chris Hennes
bcab6b5a31 Spreadsheet: Prevent marking a cell dirty when the content didn't change 2021-11-03 19:16:31 -05:00
Chris Hennes
b8ad042986 Spreadsheet: Fix copy of empty but used cell 2021-11-03 14:31:11 -05:00
Chris Hennes
56d900c669 Spreadsheet: Display new value, or pending, when dirty
If recomputes are turned off, the old behavior was that a cell would
display its old property value in the SheetView. The new behavior is
that we check to see if the value is actually something that gets
computed: if so, show "#PENDING". If not, display the new value, but
format it specially to indicate that it's been changed and that
a recompute is (eventually) needed.
2021-11-03 09:23:43 -05:00
Chris Hennes
123b5b5da1 Spreadsheet: Remove double-set of value on enter 2021-11-02 23:12:31 -05:00
Chris Hennes
0d511a6dd2 Spreadsheet: Fix bug in content and alias lineedits
The two line edit widgets above the spreadsheet, one for exiting the
cell contents and one for editing the alias, were set to use the same
editing widget as the individual spreadsheet cells. Once that widget was
refactored to handle tab/enter behavior it was no longer the correct
widget for those elements. This commit changes them to
Gui::ExpressionLineEdit widgets instead, so that the Enter key works
correctly for them again.
2021-11-02 10:15:19 -05:00
Chris Hennes
ba2459cddc [Spreadsheet] Fix missing header context menu 2021-10-31 23:38:11 -05:00
wmayer
b60ed6140f Spreadsheet: [skip ci] update translation 2021-10-26 17:40:48 +02:00
wmayer
c2fdeae7aa Spreadsheet: [skip ci] add sub-menu text for translation 2021-10-26 17:40:21 +02:00