Bug 470591

Summary: Kcalc shows 'nan' when pasting anything
Product: [Applications] kcalc Reporter: Ravindra Gullapalli <sharewithravig>
Component: generalAssignee: Gabriel Barrantes <gabriel.barrantes.dev>
Status: RESOLVED FIXED    
Severity: normal CC: gabriel.barrantes.dev, justin.zobel, rdkracz
Priority: NOR    
Version: 22.04.3   
Target Milestone: ---   
Platform: Kubuntu   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Ravindra Gullapalli 2023-06-03 15:04:44 UTC
SUMMARY
***
NOTE: If you are reporting a crash, please try to attach a backtrace with debug symbols.
See https://community.kde.org/Guidelines_and_HOWTOs/Debugging/How_to_create_useful_crash_reports
***
When we paste an expression like "1+2+3+4" (without quotes)

STEPS TO REPRODUCE
1. Open KCalc
2. Copy an expression (example: "1+2+3+4" without quotes) from the system may be from Kate
3. Paste in Kcalc

OBSERVED RESULT
In the expression box, it shows nan.

EXPECTED RESULT
It should actually paste the expression

SOFTWARE/OS VERSIONS
Windows: 
macOS: 
Linux/KDE Plasma: 22.04
(available in About System)
KDE Plasma Version: 5.24.7
KDE Frameworks Version: 5.95.0
Qt Version: 5.15.3

ADDITIONAL INFORMATION
Comment 1 Justin Zobel 2023-06-05 02:40:42 UTC
Can confirm on git master 23.07.70 (Qt6).
Comment 2 Justin Zobel 2023-09-27 00:36:32 UTC
Generally, bugs are only assigned when a Merge Request is started to fix the issue. Gabriel, can you please link it here if you have indeed started one.
Comment 3 Gabriel Barrantes 2023-09-27 01:10:21 UTC
(In reply to Justin Zobel from comment #2)
> Generally, bugs are only assigned when a Merge Request is started to fix the
> issue. Gabriel, can you please link it here if you have indeed started one.

is still WIP, did know that one, sorry.
Comment 4 K0RR 2023-10-20 15:37:08 UTC
It doesn't need to be an expression. Even pasting a digit causes this error. The title should be "Kcalc shows 'nan' when pasting anything"
Comment 5 Bug Janitor Service 2023-11-03 02:25:32 UTC
A possibly relevant merge request was started @ https://invent.kde.org/utilities/kcalc/-/merge_requests/67
Comment 6 Carl Schwan 2024-01-25 17:27:47 UTC
Git commit c7864e9547b2ef2e9e318a88c78ba51f10fbc5e3 by Carl Schwan, on behalf of Gabriel Barrantes.
Committed on 25/01/2024 at 18:27.
Pushed by carlschwan into branch 'master'.

Add display for user's input

Add display to keep the user's entries visible during the whole calculation process, this allows editing the expression at any point to make any correction the user considers opportune. This display allows coping/pasting an expression to be calculated, that can also be edited as required.

All currently implemented functions are supported and also was added support for 0x, 0b and 0 as prefixes for hex, binary and octal numbers.

Before:![image.png](/uploads/bfd53d4ddb462c995181547c24f3ecbc/image.png){width="225" height="211"}

After:

![image.png](/uploads/0b1e83cff41409c5d925e8014cf6f988/image.png){width="258" height="258"}![image.png](/uploads/e6cb88f4492ca0b98f9ebb08e669bc9f/image.png){width=262 height=262}

New classes added:

* KCalcToken: contains a given valid token such as an operation (+, -, ...), a function (cos, ln, ...), a parenthesis or a number.
* KCalcParser: provides an API to convert a given string (for example "1+cos(4.5)") to a Queue of KCalcToken objects.
* KCalcInputDisplay: this is a customized QLineEdit widget, it holds the user's input.
* KCalcDisplayFrame: holds the input display, result display and some labels.
* CalcEngine_p: encapsulates the functionality that used to be available in CalcEngine class, to be only visible for KCalcToken objects.

Modified classes:

* CalcEngine: added the main algorithm to process the calculation, based on common Operator-precedence parsers.

@teams/qa @teams/vdg @teams/usability
Related: bug 461010, bug 470371, bug 142728, bug 459999, bug 443276, bug 447347, bug 454835

M  +17   -1    CMakeLists.txt
A  +20   -0    autotests/CMakeLists.txt
A  +239  -0    autotests/kcalc_parser_core_test.cpp     [License: GPL(v2.0+)]
M  +352  -363  kcalc.cpp
M  +39   -19   kcalc.h
M  +600  -300  kcalc.ui
M  +1    -19   kcalc_const_menu.cpp
M  +2    -1    kcalc_const_menu.h
M  +411  -828  kcalc_core.cpp
M  +24   -107  kcalc_core.h
A  +713  -0    kcalc_core_p.cpp     [License: GPL(v2.0+)]
A  +92   -0    kcalc_core_p.h     [License: GPL(v2.0+)]
A  +57   -0    kcalc_display_frame.cpp     [License: GPL(v2.0+)]
A  +24   -0    kcalc_display_frame.h     [License: GPL(v2.0+)]
A  +101  -0    kcalc_input_display.cpp     [License: GPL(v2.0+)]
A  +36   -0    kcalc_input_display.h     [License: GPL(v2.0+)]
A  +776  -0    kcalc_parser.cpp     [License: GPL(v2.0+)]
A  +155  -0    kcalc_parser.h     [License: GPL(v2.0+)]
A  +64   -0    kcalc_priority_levels_p.h     [License: GPL(v2.0+)]
A  +412  -0    kcalc_token.cpp     [License: GPL(v2.0+)]
A  +175  -0    kcalc_token.h     [License: GPL(v2.0+)]
M  +3    -72   kcalcdisplay.cpp
M  +0    -1    kcalcdisplay.h
M  +1    -42   kcalchistory.cpp
M  +0    -3    kcalchistory.h
M  +9    -1    knumber/knumber.cpp
M  +2    -0    knumber/knumber.h
M  +4    -4    scienceconstants.xml

https://invent.kde.org/utilities/kcalc/-/commit/c7864e9547b2ef2e9e318a88c78ba51f10fbc5e3